UNPKG

@defra/wls-eps-web-service

Version:

The web service for wildlife licencing of European Protected Species

126 lines (105 loc) 4.94 kB
import { APIRequests } from '../../services/api-requests.js' import { PowerPlatformKeys } from '@defra/wls-powerapps-keys' import { conservationConsiderationURIs } from '../../uris.js' const { DESIGNATED_SITE_CHECK_ANSWERS } = conservationConsiderationURIs const options = Object.values(PowerPlatformKeys.SITE_TYPE).map(v => v.option) const abv = Object.values(PowerPlatformKeys.SITE_TYPE).reduce((a, c) => ({ ...a, [c.option]: c.abbr }), {}) export const getFilteredDesignatedSites = async () => { const designatedSites = await APIRequests.DESIGNATED_SITES.getDesignatedSites() return designatedSites.filter(ds => options.includes(ds.siteType)) .map(s => ({ id: s.id, siteName: `${s.siteName} ${abv[s.siteType]}` })) .sort((a, b) => (a.siteName).localeCompare(b.siteName)) } /** * Check for any unfinished and redirect back to the appropriate question * @param request * @param h * @returns {Promise<null>} */ export const checkAll = async (request, h) => { const journeyData = await request.cache().getData() const { applicationId } = journeyData const applicationDesignatedSites = await APIRequests.DESIGNATED_SITES.get(applicationId) if (!applicationDesignatedSites.length) { return null } const setCache = async (jd, ads) => { jd.designatedSite = { id: ads.id, designatedSiteId: ads.designatedSiteId } await request.cache().setData(jd) } for (const ads of applicationDesignatedSites) { if (ads.permissionFromOwner === undefined) { await setCache(journeyData, ads) return h.redirect(conservationConsiderationURIs.OWNER_PERMISSION.uri) } else if (ads.permissionFromOwner && !ads.detailsOfPermission) { await setCache(journeyData, ads) return h.redirect(conservationConsiderationURIs.OWNER_PERMISSION_DETAILS.uri) } else if (ads.adviceFromNaturalEngland === undefined) { await setCache(journeyData, ads) return h.redirect(conservationConsiderationURIs.NE_ADVICE.uri) } else if (ads.adviceFromNaturalEngland && !ads.adviceFromWho) { await setCache(journeyData, ads) return h.redirect(conservationConsiderationURIs.ACTIVITY_ADVICE.uri) } else if (ads.onSiteOrCloseToSite === undefined) { await setCache(journeyData, ads) return h.redirect(conservationConsiderationURIs.DESIGNATED_SITE_PROXIMITY.uri) } } return null } export const getCurrentSite = async request => { const journeyData = await request.cache().getData() const { applicationId, designatedSite } = journeyData const applicationDesignatedSites = await APIRequests.DESIGNATED_SITES.get(applicationId) const params = new URLSearchParams(request.query) const id = params.get('id') if (id) { // Reseat the cache on the site specified const applicationDesignatedSite = applicationDesignatedSites.find(ads => ads.id === id) if (applicationDesignatedSite) { journeyData.designatedSite = { id: applicationDesignatedSite.id, designatedSiteId: applicationDesignatedSite.designatedSiteId } await request.cache().setData(journeyData) return applicationDesignatedSite } } else if (designatedSite) { // Return the currently selected application-designated-site return applicationDesignatedSites.find(ads => ads.id === designatedSite?.id) } return null } export const allCompletion = async request => { const journeyData = await request.cache().getData() const { applicationId, designatedSite } = journeyData const applicationDesignatedSites = await APIRequests.DESIGNATED_SITES.get(applicationId) const applicationDesignatedSite = applicationDesignatedSites.find(ads => ads.id === designatedSite?.id) if (applicationDesignatedSite.permissionFromOwner === undefined) { return conservationConsiderationURIs.OWNER_PERMISSION.uri } if (applicationDesignatedSite.permissionFromOwner && !applicationDesignatedSite.detailsOfPermission) { return conservationConsiderationURIs.OWNER_PERMISSION_DETAILS.uri } if (applicationDesignatedSite.adviceFromNaturalEngland === undefined) { return conservationConsiderationURIs.NE_ADVICE.uri } if (applicationDesignatedSite.adviceFromNaturalEngland && !applicationDesignatedSite.adviceFromWho) { return conservationConsiderationURIs.ACTIVITY_ADVICE.uri } if (applicationDesignatedSite.onSiteOrCloseToSite === undefined) { return conservationConsiderationURIs.DESIGNATED_SITE_PROXIMITY.uri } return conservationConsiderationURIs.DESIGNATED_SITE_CHECK_ANSWERS.uri } /** * If we hit a page and don't have a designated site (which can happen if we've removed a site at the end of the flow * then gone back to a prior page using back) we redirect to the Check Your Answers page. */ export const checkDesignatedSite = async (request, h) => { const ads = await getCurrentSite(request) if (!ads) { return h.redirect(DESIGNATED_SITE_CHECK_ANSWERS.uri) } return null }