@defra/wls-eps-web-service
Version:
The web service for wildlife licencing of European Protected Species
95 lines (84 loc) • 3.73 kB
JavaScript
import { contactURIs, TASKLIST } from '../../../uris.js'
import { yesNoPage } from '../../common/yes-no.js'
import { APIRequests } from '../../../services/api-requests.js'
import { ContactRoles } from '../common/contact-roles.js'
import { SECTION_TASKS } from '../../tasklist/general-sections.js'
import { addressLine } from '../../service/address.js'
import { checkApplication } from '../../common/check-application.js'
import { Backlink } from '../../../handlers/backlink.js'
import { tagStatus } from '../../../services/status-tags.js'
import { boolFromYesNo } from '../../common/common.js'
const { ADD, NAME, POSTCODE, EMAIL, REMOVE } = contactURIs.AUTHORISED_PEOPLE
export const checkData = async (request, h) => {
const journeyData = await request.cache().getData()
const contacts = await APIRequests.CONTACT.role(ContactRoles.AUTHORISED_PERSON)
.getByApplicationId(journeyData.applicationId)
// Check any that are incomplete because of back-button actions
for (const contact of contacts) {
if (!contact.fullName) {
Object.assign(journeyData, { authorisedPeople: { contactId: contact.id } })
await request.cache().setData(journeyData)
return h.redirect(NAME.uri)
}
if (!contact?.contactDetails?.email) {
Object.assign(journeyData, { authorisedPeople: { contactId: contact.id } })
await request.cache().setData(journeyData)
return h.redirect(EMAIL.uri)
}
if (!contact?.address) {
Object.assign(journeyData, { authorisedPeople: { contactId: contact.id } })
await request.cache().setData(journeyData)
return h.redirect(POSTCODE.uri)
}
}
return null
}
export const getData = async request => {
const { applicationId } = await request.cache().getData()
const contacts = await APIRequests.CONTACT.role(ContactRoles.AUTHORISED_PERSON).getByApplicationId(applicationId)
const state = await APIRequests.APPLICATION.tags(applicationId).get(SECTION_TASKS.AUTHORISED_PEOPLE)
if (state === tagStatus.NOT_STARTED) {
await APIRequests.APPLICATION.tags(applicationId).set({ tag: SECTION_TASKS.AUTHORISED_PEOPLE, tagState: tagStatus.IN_PROGRESS })
} else if (state === tagStatus.COMPLETE) {
await APIRequests.APPLICATION.tags(applicationId).set({ tag: SECTION_TASKS.AUTHORISED_PEOPLE, tagState: tagStatus.COMPLETE_NOT_CONFIRMED })
}
return {
contacts: contacts.map(c => ({
uri: {
remove: `${REMOVE.uri}?id=${c.id}`,
name: `${NAME.uri}?id=${c.id}`,
address: `${POSTCODE.uri}?id=${c.id}`,
email: `${EMAIL.uri}?id=${c.id}`
},
details: [
{ key: 'name', value: c.fullName },
{ key: 'email', value: c.contactDetails.email },
{ key: 'address', value: addressLine(c) }
]
}))
}
}
export const setData = async request => {
const journeyData = await request.cache().getData()
const { applicationId } = journeyData
if (boolFromYesNo(request.payload['yes-no'])) {
await APIRequests.APPLICATION.tags(applicationId).set({ tag: SECTION_TASKS.AUTHORISED_PEOPLE, tagState: tagStatus.IN_PROGRESS })
} else {
await APIRequests.APPLICATION.tags(applicationId).set({ tag: SECTION_TASKS.AUTHORISED_PEOPLE, tagState: tagStatus.COMPLETE })
}
delete journeyData.authorisedPeople
await request.cache().setData(journeyData)
}
export const completion = async request => {
const { payload: { 'yes-no': yesNo } } = await request.cache().getPageData()
return boolFromYesNo(yesNo) ? NAME.uri : TASKLIST.uri
}
export const addAuthorisedPerson = yesNoPage({
page: ADD.page,
uri: ADD.uri,
checkData: [checkApplication, checkData],
getData: getData,
setData: setData,
completion: completion,
backlink: Backlink.NO_BACKLINK
})