@@ -30,7 +30,10 @@ import {
3030 today
3131} from '../utils/date.js'
3232import { getResults , getPagination } from '../utils/pagination.js'
33- import { getSessionYearGroups } from '../utils/session.js'
33+ import {
34+ getSessionYearGroups ,
35+ getVaccinationPeriodsSummary
36+ } from '../utils/session.js'
3437import { formatYearGroup } from '../utils/string.js'
3538
3639export const sessionController = {
@@ -490,14 +493,49 @@ export const sessionController = {
490493 const { session_id } = request . params
491494 const { data } = request . session
492495
493- // Setup wizard if not already setup
496+ // Copy the saved session to the wizard context, if not already there
494497 let session = Session . findOne ( session_id , data . wizard )
495498 if ( ! session ) {
499+ // NB: response.locals.session was set in read()
496500 session = Session . create ( response . locals . session , data . wizard )
501+ response . locals . session . vaccinationPeriods . forEach (
502+ ( vaccinationPeriod ) => {
503+ ClinicVaccinationPeriod . create ( vaccinationPeriod , data . wizard )
504+ }
505+ )
506+ }
507+
508+ // Set up the transaction metadata that controls how some clinic values are entered
509+ if ( session . type === SessionType . Clinic ) {
510+ const vaccinatorCounts = new Set (
511+ session . vaccination_period_ids . map (
512+ ( period_id ) =>
513+ ClinicVaccinationPeriod . findOne ( period_id , data . wizard )
514+ ?. vaccinatorCount
515+ )
516+ )
517+ const variableVaccinatorCounts = vaccinatorCounts . size > 1
518+ data . transaction = {
519+ hasVariableVaccinatorCounts : variableVaccinatorCounts ? 'true' : 'false'
520+ }
521+ if ( ! variableVaccinatorCounts ) {
522+ data . transaction . consistentVaccinatorCount = vaccinatorCounts
523+ . values ( )
524+ . next ( )
525+ . value . toString ( )
526+ }
497527 }
498528
499529 response . locals . session = new Session ( session , data )
500530
531+ // Generate summary info for the edit page
532+ response . locals . vaccinationPeriodsSummary = getVaccinationPeriodsSummary (
533+ session . vaccination_period_ids . map ( ( period_id ) =>
534+ ClinicVaccinationPeriod . findOne ( period_id , data . wizard )
535+ ) ,
536+ session . appointmentLength
537+ )
538+
501539 // Show back link to session page
502540 response . locals . back = session . uri
503541
@@ -517,7 +555,20 @@ export const sessionController = {
517555 data
518556 )
519557
558+ // Update any clinic vaccination periods
559+ if ( session . type === SessionType . Clinic ) {
560+ session . vaccination_period_ids . forEach ( ( period_id ) => {
561+ const vaccinationPeriod = ClinicVaccinationPeriod . findOne (
562+ period_id ,
563+ data . wizard
564+ )
565+ ClinicVaccinationPeriod . update ( period_id , vaccinationPeriod , data )
566+ } )
567+ }
568+
520569 // Clean up session data
570+ delete data . vaccinationPeriods
571+ delete data . transaction
521572 delete data . session
522573 delete data . wizard
523574
@@ -613,6 +664,15 @@ export const sessionController = {
613664 } else {
614665 response . locals . clinics = Clinic . findAll ( data )
615666 }
667+
668+ // Generate summary info for the check-answers page
669+ if ( vaccinationPeriods ) {
670+ response . locals . vaccinationPeriodsSummary =
671+ getVaccinationPeriodsSummary (
672+ vaccinationPeriods ,
673+ session . appointmentLength
674+ )
675+ }
616676 }
617677
618678 if ( session . type === SessionType . School ) {
0 commit comments