@defra/wls-eps-web-service
Version:
The web service for wildlife licencing of European Protected Species
69 lines (61 loc) • 3.14 kB
JavaScript
import { contactURIs, TASKLIST } from '../../../uris.js'
import { checkAnswersPage } from '../../common/check-answers.js'
import { AccountRoles, ContactRoles } from '../common/contact-roles.js'
import { SECTION_TASKS } from '../../tasklist/general-sections.js'
import { APIRequests } from '../../../services/api-requests.js'
import { yesNoFromBool } from '../../common/common.js'
import { addressLine } from '../../service/address.js'
import { canBeUser, checkAccountComplete, checkHasContact } from '../common/common-handler.js'
import { checkApplication } from '../../common/check-application.js'
import { tagStatus } from '../../../services/status-tags.js'
import { generateOutput } from './common.js'
const { CHECK_ANSWERS, RESPONSIBLE, PURCHASE_ORDER } = contactURIs.INVOICE_PAYER
export const checkHasPurchaseOrderNumber = async (request, h) => {
const { applicationId } = await request.cache().getData()
const applicationData = await APIRequests.APPLICATION.getById(applicationId)
if (!applicationData.referenceOrPurchaseOrderNumber) {
return h.redirect(PURCHASE_ORDER.uri)
}
return null
}
export const getData = async request => {
const { applicationId } = await request.cache().getData()
const applicationData = await APIRequests.APPLICATION.getById(applicationId)
const responsibility = await generateOutput(request)
await APIRequests.APPLICATION.tags(applicationId).set({ tag: SECTION_TASKS.INVOICE_PAYER, tagState: tagStatus.COMPLETE_NOT_CONFIRMED })
return {
responsibility,
checkYourAnswers: [
(responsibility.responsible === 'other' &&
{ key: 'someoneElse', value: 'Somebody else' }
),
{ key: 'whoIsResponsible', value: responsibility.name },
{ key: 'email', value: responsibility.account?.contactDetails?.email || responsibility.contact?.contactDetails?.email },
(responsibility.responsible === 'other' &&
await canBeUser(request, [ContactRoles.APPLICANT, ContactRoles.ECOLOGIST]) &&
{ key: 'contactIsUser', value: yesNoFromBool(!!responsibility.contact.userId) }),
(responsibility.responsible === 'other' &&
{ key: 'contactIsOrganisation', value: yesNoFromBool(!!responsibility.account) }),
(responsibility.account && { key: 'contactOrganisations', value: responsibility.account.name }),
{ key: 'address', value: addressLine(responsibility.account || responsibility.contact) },
{ key: 'purchaseOrderRef', value: applicationData.referenceOrPurchaseOrderNumber }
].filter(a => a)
}
}
export const completion = async request => {
const journeyData = await request.cache().getData()
await APIRequests.APPLICATION.tags(journeyData.applicationId).set({ tag: SECTION_TASKS.INVOICE_PAYER, tagState: tagStatus.COMPLETE })
return TASKLIST.uri
}
export const invoiceCheckAnswers = checkAnswersPage({
checkData: [
checkApplication,
checkHasContact(ContactRoles.PAYER, RESPONSIBLE),
checkAccountComplete(AccountRoles.PAYER_ORGANISATION, contactURIs.INVOICE_PAYER),
checkHasPurchaseOrderNumber
],
page: CHECK_ANSWERS.page,
uri: CHECK_ANSWERS.uri,
getData,
completion
})