diff --git a/app/routes/meetings.js b/app/routes/meetings.js index 9a2b134e..0716a890 100644 --- a/app/routes/meetings.js +++ b/app/routes/meetings.js @@ -273,36 +273,53 @@ module.exports = router => { // Mark this recipient as accounted for. data['recordnoresponse' + idx] = 'yes' + // Returning from a "Change" link edits a single response then goes back to check answers. + if (data['changeMode'] === 'true'){ + data['changeMode'] = '' + return response.redirect("/bfs/meetings-2/cps-offer/check-response") + } + if (person < recipients.length){ response.redirect("/bfs/meetings-2/cps-offer/when-no-response?person=" + (person + 1)) return } - // Snapshot the selected recipients as a "no response" round so they are - // retained and can be redisplayed on the meeting page. + response.redirect("/bfs/meetings-2/cps-offer/check-response") + }) + + // Confirm the offer responses (accepted, declined, or no response). This finalises + // the batch: it snapshots any "no response" round, updates how many recipients are + // still to respond, and records the response type for the confirmation banner. + router.post('/bfs/meetings-2/cps-offer/check-response-answer', function(request, response) { + var data = request.session.data var offered = [].concat(data['offerRecipients'] || []) - var round = [] - recipients.forEach(function(sel){ - var i = Number.parseInt(sel, 10) - round.push({ - offeredTo: offered[i - 1], - howOffered: data['howoffered' + i], - offerDate: data['offerDate' + i], - loggedDate: data['noResponseDate' + i] + var type = data['offerResponse'] + + if (type === 'no-response'){ + var recipients = [].concat(data['noResponseRecipients'] || []) + var round = [] + recipients.forEach(function(sel){ + var i = Number.parseInt(sel, 10) + round.push({ + offeredTo: offered[i - 1], + howOffered: data['howoffered' + i], + offerDate: data['offerDate' + i], + loggedDate: data['noResponseDate' + i] + }) }) - }) - var rounds = data['noResponseOffers'] || [] - rounds.push(round) - data['noResponseOffers'] = rounds + var rounds = data['noResponseOffers'] || [] + rounds.push(round) + data['noResponseOffers'] = rounds + data['lastResponseType'] = 'no-response' + } else { + data['lastResponseType'] = type + } - // Track how many offered recipients are still to be accounted for - // (accepted, declined, or logged as no response). var accountedCount = 0 offered.forEach(function(recipient, i){ if (data['recordaccepted' + (i + 1)] || data['recorddeclined' + (i + 1)] || data['recordnoresponse' + (i + 1)]) accountedCount++ }) data['responsesRemaining'] = offered.length - accountedCount - data['lastResponseType'] = 'no-response' response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=responses&meetingSuccess=yes#communications") }) @@ -366,19 +383,22 @@ module.exports = router => { data['offerHowError'] = '' data['offerWhenError'] = '' + // Returning from a "Change" link edits a single offer then goes back to check answers. + if (data['changeMode'] === 'true'){ + data['changeMode'] = '' + return response.redirect("/bfs/meetings-2/cps-offer/check-offer") + } + if (person < recipients.length){ response.redirect("/bfs/meetings-2/cps-offer/how-when-offered?person=" + (person + 1)) return } - // All offers recorded: route to the confirmation page for the first matching - // method by priority, aggregating every recipient's selected method. - var howoffered = [] - Object.keys(data).forEach(function(key){ - if (key.indexOf('howoffered') === 0){ - howoffered = howoffered.concat(data[key]) - } - }) + // All offers recorded: review them on the check answers page before confirming. + response.redirect("/bfs/meetings-2/cps-offer/check-offer") + }) + + router.post('/bfs/meetings-2/cps-offer/check-offer-answer', function(request, response) { response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=offered&meetingSuccess=yes#communications") }) @@ -465,22 +485,18 @@ module.exports = router => { data['acceptHowError'] = '' data['acceptWhenError'] = '' + // Returning from a "Change" link edits a single response then goes back to check answers. + if (data['changeMode'] === 'true'){ + data['changeMode'] = '' + return response.redirect("/bfs/meetings-2/cps-offer/check-response") + } + if (person < accepters.length){ response.redirect("/bfs/meetings-2/cps-offer/how-when-accepted?person=" + (person + 1)) return } - // Track how many offered recipients are still to be accounted for - // (either accepted or declined). - var offered = [].concat(data['offerRecipients'] || []) - var accountedCount = 0 - offered.forEach(function(recipient, i){ - if (data['recordaccepted' + (i + 1)] || data['recorddeclined' + (i + 1)] || data['recordnoresponse' + (i + 1)]) accountedCount++ - }) - data['responsesRemaining'] = offered.length - accountedCount - data['lastResponseType'] = 'accepted' - - response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=responses&meetingSuccess=yes#communications") + response.redirect("/bfs/meetings-2/cps-offer/check-response") }) @@ -527,22 +543,18 @@ module.exports = router => { data['declineHowError'] = '' data['declineWhenError'] = '' + // Returning from a "Change" link edits a single response then goes back to check answers. + if (data['changeMode'] === 'true'){ + data['changeMode'] = '' + return response.redirect("/bfs/meetings-2/cps-offer/check-response") + } + if (person < decliners.length){ response.redirect("/bfs/meetings-2/cps-offer/how-when-declined?person=" + (person + 1)) return } - // Track how many offered recipients are still to be accounted for - // (either accepted or declined). - var offered = [].concat(data['offerRecipients'] || []) - var accountedCount = 0 - offered.forEach(function(recipient, i){ - if (data['recordaccepted' + (i + 1)] || data['recorddeclined' + (i + 1)] || data['recordnoresponse' + (i + 1)]) accountedCount++ - }) - data['responsesRemaining'] = offered.length - accountedCount - data['lastResponseType'] = 'declined' - - response.redirect("/bfs/victim/index?secondaryNav=ptm&meetingState=responses&meetingSuccess=yes#communications") + response.redirect("/bfs/meetings-2/cps-offer/check-response") }) @@ -804,12 +816,24 @@ module.exports = router => { // Cancel flow: capture when the meeting was cancelled, then ask for a reason. router.post('/bfs/meetings-2/cancelled/meeting-date-answer', function(request, response) { + // Returning from a "Change" link goes straight back to check answers. + if (request.session.data['changeMode'] === 'true') { + request.session.data['changeMode'] = '' + return response.redirect('/bfs/meetings-2/cancelled/check-answers') + } response.redirect('/bfs/meetings-2/cancelled/reason-why') }) - // Cancel flow: after capturing the reason, return to the Meetings sub-tab in - // the cancelled state. + // Cancel flow: the reason is the final question, so both the normal flow and + // a "Change" edit end on the check answers page. router.post('/bfs/meetings-2/cancelled/reason-why-answer', function(request, response) { + request.session.data['changeMode'] = '' + response.redirect('/bfs/meetings-2/cancelled/check-answers') + }) + + // Cancel flow: confirm the details and return to the Meetings sub-tab in the + // cancelled state. + router.post('/bfs/meetings-2/cancelled/check-answers-answer', function(request, response) { response.redirect('/bfs/victim/index?secondaryNav=ptm&meetingState=cancelled&meetingSuccess=yes#communications') }) diff --git a/app/views/bfs/meetings-2/cancelled/check-answers.html b/app/views/bfs/meetings-2/cancelled/check-answers.html new file mode 100644 index 00000000..24e4626d --- /dev/null +++ b/app/views/bfs/meetings-2/cancelled/check-answers.html @@ -0,0 +1,54 @@ +{% extends "layouts/main.html" %} + +{% set pageName="Check your answers" %} + +{% block header %} +{% include "/bfs/partials/header/none-selected-bfs.html" %} +{% endblock %} + +{% block beforeContent %} +{% include "/bfs/partials/identity-bar/bfs-question.html" %} +{% endblock %} + +{% block content %} +
+
+ + {% set reasonText = data['cancelReasonOther'] if data['cancelReason'] == "Other" else data['cancelReason'] %} + +

Check your answers before cancelling the meeting

+ +
+
+
+ Date and time cancelled +
+
+ {{ data['cancelDate'] | formatDate }}{% if data['cancelHour'] %} at {{ data['cancelHour'] }}:{{ data['cancelMinutes'] }}{% endif %} +
+
+ Change date and time the meeting was cancelled +
+
+
+
+ Reason for cancelling +
+
+ {{ reasonText }} +
+
+ Change reason for cancelling the meeting +
+
+
+ +
+ {{ govukButton({ + text: "Confirm details" + }) }} +
+ +
+
+{% endblock %} diff --git a/app/views/bfs/meetings-2/cancelled/meeting-date.html b/app/views/bfs/meetings-2/cancelled/meeting-date.html index dd742bd3..10e2089b 100644 --- a/app/views/bfs/meetings-2/cancelled/meeting-date.html +++ b/app/views/bfs/meetings-2/cancelled/meeting-date.html @@ -29,7 +29,7 @@

When was the meeting cancelled?

- +
@@ -50,7 +50,7 @@

When was the meeting cancelled?

- +
@@ -62,7 +62,7 @@

When was the meeting cancelled?

- +
diff --git a/app/views/bfs/meetings-2/cancelled/reason-why.html b/app/views/bfs/meetings-2/cancelled/reason-why.html index 78e03911..1b5c22d2 100644 --- a/app/views/bfs/meetings-2/cancelled/reason-why.html +++ b/app/views/bfs/meetings-2/cancelled/reason-why.html @@ -18,6 +18,7 @@ {{ govukTextarea({ id: "cancel-reason-other", name: "cancelReasonOther", + value: data['cancelReasonOther'] if data['changeMode'] == 'true', label: { text: "Provide details" } }) }} {% endset -%} @@ -26,6 +27,7 @@ {{ govukRadios({ name: "cancelReason", + value: data['cancelReason'] if data['changeMode'] == 'true', fieldset: { legend: { text: "What is the reason for cancelling the meeting?", diff --git a/app/views/bfs/meetings-2/confirm-arrangements/attendees.html b/app/views/bfs/meetings-2/confirm-arrangements/attendees.html index b39ebf21..da6b2cdd 100644 --- a/app/views/bfs/meetings-2/confirm-arrangements/attendees.html +++ b/app/views/bfs/meetings-2/confirm-arrangements/attendees.html @@ -45,24 +45,36 @@

{% endif %}
-
- - -
-
- - -
-
- - -
+ {% if data['familyMembers'] and data['familyMembers'].length > 0 %} + {% for member in data['familyMembers'] %} + {% set attendeeValue = (member.lastName | upper) + ", " + member.firstName + (" (" + member.relationship + ")" if member.relationship else "") %} +
+ + +
+ {% endfor %} + {% else %} +
+ + +
+
+ + +
+
+ + +
+ {% endif %}
diff --git a/app/views/bfs/victim/pre-trial/states/arranged.html b/app/views/bfs/victim/pre-trial/states/arranged.html index c2c8d1d9..a220bbf5 100644 --- a/app/views/bfs/victim/pre-trial/states/arranged.html +++ b/app/views/bfs/victim/pre-trial/states/arranged.html @@ -139,9 +139,13 @@

+ {% if data['offerRecipients'] %} {% set hideResponseActions = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-responses.html" %} {% set hideResponseActions = false %} + {% else %} +

No details were entered for meeting offer response.

+ {% endif %}
@@ -152,9 +156,13 @@

+ {% if data['offerRecipients'] %} {% set hideNoResponseOffers = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-offers.html" %} {% set hideNoResponseOffers = false %} + {% else %} +

No details were entered for meeting offer.

+ {% endif %}
diff --git a/app/views/bfs/victim/pre-trial/states/cancelled.html b/app/views/bfs/victim/pre-trial/states/cancelled.html index bc71f31d..4b1ae370 100644 --- a/app/views/bfs/victim/pre-trial/states/cancelled.html +++ b/app/views/bfs/victim/pre-trial/states/cancelled.html @@ -252,9 +252,13 @@

+ {% if data['offerRecipients'] %} {% set hideResponseActions = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-responses.html" %} {% set hideResponseActions = false %} + {% else %} +

No details were entered for meeting offer response.

+ {% endif %}
@@ -265,9 +269,13 @@

+ {% if data['offerRecipients'] %} {% set hideNoResponseOffers = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-offers.html" %} {% set hideNoResponseOffers = false %} + {% else %} +

No details were entered for meeting offer.

+ {% endif %}
diff --git a/app/views/bfs/victim/pre-trial/states/outcome.html b/app/views/bfs/victim/pre-trial/states/outcome.html index 2ea128ec..dd1d1950 100644 --- a/app/views/bfs/victim/pre-trial/states/outcome.html +++ b/app/views/bfs/victim/pre-trial/states/outcome.html @@ -127,9 +127,13 @@

+ {% if data['offerRecipients'] %} {% set hideResponseActions = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-responses.html" %} {% set hideResponseActions = false %} + {% else %} +

No details were entered for meeting offer response.

+ {% endif %}
@@ -140,9 +144,13 @@

+ {% if data['offerRecipients'] %} {% set hideNoResponseOffers = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-offers.html" %} {% set hideNoResponseOffers = false %} + {% else %} +

No details were entered for meeting offer.

+ {% endif %}

diff --git a/app/views/bfs/victim/pre-trial/states/pending.html b/app/views/bfs/victim/pre-trial/states/pending.html index 78f2d461..129e758e 100644 --- a/app/views/bfs/victim/pre-trial/states/pending.html +++ b/app/views/bfs/victim/pre-trial/states/pending.html @@ -28,8 +28,22 @@


- - Log meeting details for {{ meetingPurpose or "CPS pre-trial meeting" }} - + {% if data['nextTask'] == "meeting-offer" %} + + Log offer for {{ meetingPurpose or "CPS pre-trial meeting" }} + + {% elif data['nextTask'] == "meeting-arranged" %} + + Confirm arranged meeting for {{ meetingPurpose or "CPS pre-trial meeting" }} + + {% elif data['nextTask'] == "meeting-outcome" %} + + Log outcome for {{ meetingPurpose or "CPS pre-trial meeting" }} + + {% else %} + + Log meeting details for {{ meetingPurpose or "CPS pre-trial meeting" }} + + {% endif %} diff --git a/app/views/bfs/victim/pre-trial/states/rescheduled.html b/app/views/bfs/victim/pre-trial/states/rescheduled.html index cd3bdeb6..3a5c00dd 100644 --- a/app/views/bfs/victim/pre-trial/states/rescheduled.html +++ b/app/views/bfs/victim/pre-trial/states/rescheduled.html @@ -247,9 +247,13 @@

+ {% if data['offerRecipients'] %} {% set hideResponseActions = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-responses.html" %} {% set hideResponseActions = false %} + {% else %} +

No details were entered for meeting offer response.

+ {% endif %}
@@ -260,9 +264,13 @@

+ {% if data['offerRecipients'] %} {% set hideNoResponseOffers = true %} {% include "/bfs/meetings-2/cps-offer/partials/logged-offers.html" %} {% set hideNoResponseOffers = false %} + {% else %} +

No details were entered for meeting offer.

+ {% endif %}