From 115785a28b86749d3d283ba9e41b85ee145e2ef3 Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Tue, 3 Nov 2026 16:31:39 +0000 Subject: [PATCH 1/8] Remove hints --- app/views/create-capacity-from-zero/create-clinic.html | 6 +++--- app/views/sessions/01-template-name.html | 4 ++-- app/views/sessions/02-session-times.html | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/create-capacity-from-zero/create-clinic.html b/app/views/create-capacity-from-zero/create-clinic.html index a54461b..c332b6d 100644 --- a/app/views/create-capacity-from-zero/create-clinic.html +++ b/app/views/create-capacity-from-zero/create-clinic.html @@ -39,7 +39,7 @@

Clinic details

-
+
@@ -51,12 +51,12 @@

Clinic details

-
+
diff --git a/app/views/sessions/01-template-name.html b/app/views/sessions/01-template-name.html index 797a165..1aa5248 100644 --- a/app/views/sessions/01-template-name.html +++ b/app/views/sessions/01-template-name.html @@ -93,9 +93,9 @@

-
+
diff --git a/app/views/sessions/02-session-times.html b/app/views/sessions/02-session-times.html index 109c16a..c80071c 100644 --- a/app/views/sessions/02-session-times.html +++ b/app/views/sessions/02-session-times.html @@ -162,9 +162,9 @@

Session times

-
+ {% if errors and errors.duration %} Error: {{ errors.duration }} From c69a8d1d7e8fa5a5ec1b00cbec22c6b9c5d9f05e Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Tue, 3 Nov 2026 16:33:43 +0000 Subject: [PATCH 2/8] Remove 'one off session' link --- app/views/create-capacity-from-zero/clinic-summary.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/create-capacity-from-zero/clinic-summary.html b/app/views/create-capacity-from-zero/clinic-summary.html index eebe484..8057f70 100644 --- a/app/views/create-capacity-from-zero/clinic-summary.html +++ b/app/views/create-capacity-from-zero/clinic-summary.html @@ -115,8 +115,8 @@

-
- +

From 2689cd2eee2301186413b4ab50ab7edd7f0efd46 Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Tue, 3 Nov 2026 16:43:00 +0000 Subject: [PATCH 3/8] caps no caps --- app/views/sessions/03-slot-structure.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/sessions/03-slot-structure.html b/app/views/sessions/03-slot-structure.html index 1064bf7..3a9758a 100644 --- a/app/views/sessions/03-slot-structure.html +++ b/app/views/sessions/03-slot-structure.html @@ -185,7 +185,7 @@

  • - +
  • From e660e9cfd7f0ac68af8ccc690854efc09d703aba Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Fri, 6 Nov 2026 13:42:07 +0000 Subject: [PATCH 4/8] Lots of tweaks and tidyups --- .../sass/components/_calendar-table.scss | 1 + app/data/session-data-defaults.js | 10 +- app/routes/clinic-sessions.js | 18 ++- app/routes/slot-structure-handlers.js | 15 +- .../clinic-summary.html | 11 +- .../create-schedule.html | 18 +-- .../select-session-template.html | 130 +++++++++------- app/views/sessions/00-template-listing.html | 142 ++++++++++-------- app/views/sessions/01-template-name.html | 2 +- app/views/sessions/03-slot-structure.html | 84 +++-------- app/views/sessions/04-check-template.html | 94 ++++++------ 11 files changed, 280 insertions(+), 245 deletions(-) diff --git a/app/assets/sass/components/_calendar-table.scss b/app/assets/sass/components/_calendar-table.scss index eae3d13..d27448c 100644 --- a/app/assets/sass/components/_calendar-table.scss +++ b/app/assets/sass/components/_calendar-table.scss @@ -57,6 +57,7 @@ .--date-selected .calendar-table-date { background-color: $nhsuk-focus-colour; + outline: 2px solid $nhsuk-input-border-colour; } .--schedule-start { diff --git a/app/data/session-data-defaults.js b/app/data/session-data-defaults.js index 40b2268..b7be8bb 100644 --- a/app/data/session-data-defaults.js +++ b/app/data/session-data-defaults.js @@ -77,6 +77,8 @@ module.exports = { duration: '10', bookableSlotCount: 36, nonBookableSlotCount: 6, + standardSlotCount: 0, + heldSlotCount: 36, bookableBreakdown: [ { label: 'Special appointment', @@ -175,18 +177,16 @@ module.exports = { duration: '10', bookableSlotCount: 36, nonBookableSlotCount: 6, + standardSlotCount: 28, + heldSlotCount: 8, bookableBreakdown: [ { - label: 'Held for rebooking', + label: 'Rebooking', count: 4 }, { label: 'Special appointment', count: 4 - }, - { - label: 'Standard', - count: 28 } ], nonBookableBreakdown: [ diff --git a/app/routes/clinic-sessions.js b/app/routes/clinic-sessions.js index a0111f8..f8725d9 100644 --- a/app/routes/clinic-sessions.js +++ b/app/routes/clinic-sessions.js @@ -11,7 +11,7 @@ const { combineSlotsHandler, divideSlotsHandler } = require('./slot-structure-handlers') -const { deleteSessionMapImage, saveSessionMapImage, sessionMapImageExists } = require('../lib/session-map-svg') +const { buildSessionMapSvg, deleteSessionMapImage, saveSessionMapImage, sessionMapImageExists } = require('../lib/session-map-svg') /* /app/views/sessions/ @@ -83,6 +83,20 @@ router.post('/sessions/03-slot-structure', function (req, res) { res.redirect('/sessions/04-check-template') }) +router.get('/sessions/04-check-template', function (req, res) { + if (!req.session.data.createSessionTemplate) { + req.session.data.createSessionTemplate = {} + } + + const { svg, description } = buildSessionMapSvg(buildSessionSlots(req.session.data.createSessionTemplate)) + + // A data URI keeps the preview out of the image directory, so nothing is left to clean up + res.render('sessions/04-check-template', { + mapImageSrc: `data:image/svg+xml;base64,${Buffer.from(svg).toString('base64')}`, + mapImageAlt: description + }) +}) + // Saves the draft as a template, overwriting the template being edited if there is one router.post('/sessions/save-template', function (req, res) { const template = req.session.data.createSessionTemplate || {} @@ -184,6 +198,8 @@ router.post('/sessions/mark-hold-web-rebooking', holdHandler({ reason: 'online b router.post('/sessions/mark-hold-technical-recall', holdHandler({ reason: 'technical recall', ...sessionsSlotStructure })) router.post('/sessions/mark-hold-generic', holdHandler(sessionsSlotStructure)) router.post('/sessions/mark-special-appointment', specialAppointmentHandler(sessionsSlotStructure)) +router.post('/sessions/mark-admin', nonBookableHandler({ reason: 'admin', ...sessionsSlotStructure })) +router.post('/sessions/mark-downtime', nonBookableHandler({ reason: 'downtime', ...sessionsSlotStructure })) router.post('/sessions/mark-non-bookable-generic', nonBookableHandler(sessionsSlotStructure)) router.post('/sessions/combine-slots', combineSlotsHandler(sessionsSlotStructure)) router.post('/sessions/divide-slots', divideSlotsHandler(sessionsSlotStructure)) diff --git a/app/routes/slot-structure-handlers.js b/app/routes/slot-structure-handlers.js index ee468be..49ff93a 100644 --- a/app/routes/slot-structure-handlers.js +++ b/app/routes/slot-structure-handlers.js @@ -56,11 +56,12 @@ const buildSessionSlots = (sessionData) => { const nonBookableSlotCount = sumSpans(slots.filter((slot) => slot.isNonBookable)) sessionData.bookableSlotCount = bookableSlotCount sessionData.nonBookableSlotCount = nonBookableSlotCount + sessionData.heldSlotCount = sumSpans(slots.filter((slot) => (slot.isHold || slot.isSpecialAppointment) && !slot.isNonBookable)) const capitalise = (text) => text.charAt(0).toUpperCase() + text.slice(1) const slotTypeLabel = (slot) => { - if (slot.isNonBookable) return slot.nonBookableReason ? capitalise(slot.nonBookableReason) : 'Non-bookable' - if (slot.isHold) return slot.holdReason ? `Held for ${slot.holdReason}` : 'Held' + if (slot.isNonBookable) return slot.nonBookableReason ? capitalise(slot.nonBookableReason) : 'Other non-bookable' + if (slot.isHold) return slot.holdReason ? `${slot.holdReason}` : 'Other hold' if (slot.isSpecialAppointment) return 'Special appointment' return 'Standard' } @@ -78,12 +79,14 @@ const buildSessionSlots = (sessionData) => { const secondIndex = order.indexOf(second.label) return (firstIndex === -1 ? order.length : firstIndex) - (secondIndex === -1 ? order.length : secondIndex) }) - sessionData.bookableBreakdown = breakdown(slots.filter((slot) => !slot.isNonBookable), [ - 'Held for rebooking', 'Held for online booking', 'Held for technical recall', - 'Special appointment', 'Held', 'Standard' + const bookableItems = breakdown(slots.filter((slot) => !slot.isNonBookable), [ + 'Standard', 'Special appointment', 'Rebooking', 'Online booking', 'Technical recall', 'Held' ]) + const standardItem = bookableItems.find((item) => item.label === 'Standard') + sessionData.standardSlotCount = standardItem ? standardItem.count : 0 + sessionData.bookableBreakdown = bookableItems.filter((item) => item.label !== 'Standard') sessionData.nonBookableBreakdown = breakdown(slots.filter((slot) => slot.isNonBookable), [ - 'Staff break', 'Staff meeting', 'Non-bookable' + 'Staff break', 'Staff meeting', 'Admin', 'Downtime', 'Non-bookable' ]) return { diff --git a/app/views/create-capacity-from-zero/clinic-summary.html b/app/views/create-capacity-from-zero/clinic-summary.html index 8057f70..3583774 100644 --- a/app/views/create-capacity-from-zero/clinic-summary.html +++ b/app/views/create-capacity-from-zero/clinic-summary.html @@ -84,17 +84,18 @@
    -
    +

    With selected:

    +

    Availability

    • - +
    • - +
    diff --git a/app/views/create-capacity-from-zero/create-schedule.html b/app/views/create-capacity-from-zero/create-schedule.html index 036e4b9..dcc5745 100644 --- a/app/views/create-capacity-from-zero/create-schedule.html +++ b/app/views/create-capacity-from-zero/create-schedule.html @@ -11,7 +11,7 @@ {% block beforeContent %} - Back to clinic: {{ data.createCapacityFromZero.clinicName }} + Back to clinic {% endblock %} @@ -37,16 +37,15 @@ }) }} {% endif %} -

    Create schedule

    - - +

    + {{ data.createCapacityFromZero.clinicName }} + Create schedule +

    -
    +
    Start date @@ -130,8 +129,9 @@

    Create schedule

    - - +
    + +
    diff --git a/app/views/create-capacity-from-zero/select-session-template.html b/app/views/create-capacity-from-zero/select-session-template.html index 703ef8a..9e04c40 100644 --- a/app/views/create-capacity-from-zero/select-session-template.html +++ b/app/views/create-capacity-from-zero/select-session-template.html @@ -32,73 +32,95 @@

    -

    Choose session template

    +

    Select session template

    {# Session templates first (newest first), then the examples; a new grid row wraps every two cards #} {% set allTemplates = (data.sessionTemplates | reverse) %} +{% set realTemplates = [] %} {% for template in allTemplates %} -{% if loop.index0 % 2 == 0 %}
    {% endif %} -
    -
    -
    -
    -

    - {{ template.name }} - {% if templateSaved and loop.first and not template.example %}{{ "Updated" if templateSaved == "updated" else "New" }}{% endif %} -

    - {% if template.note %} -

    {{ template.note }}

    - {% endif %} -
    + {% if not template.example %} + {% set realTemplates = (realTemplates.push(template), realTemplates) %} + {% endif %} +{% endfor %} + +{% if realTemplates | length == 0 %} +
    +
    +

    + + Important: No session templates + +

    +

    + A session represents one “clinic day” of slots. Common slot patterns can be captured in session templates for easy reuse. +

    +
    +
    +{% else %} + {% for template in realTemplates %} + {% if loop.index0 % 2 == 0 %}
    {% endif %} +
    +
    +
    +
    +

    + {{ template.name }} + {% if templateSaved and loop.first and not template.example %}{{ "Updated" if templateSaved == "updated" else "New" }}{% endif %} +

    + {% if template.note %} +

    {{ template.note }}

    + {% endif %} +
    {% if template.slug or template.id %} Select template - {% endif %} -
    -
    -
    - {% if template.imagePath %} - {{ template.imageAlt }} - {% else %} - - {% endif %} -
    -
    -
    -
    -
    - Session times -
    -
    - {{ template.sessionStartLabel }} to {{ template.sessionEndLabel }} -
    -
    -
    -
    - Base slot length -
    -
    - {{ template.duration }} minutes -
    + {% endif %} +
    +
    +
    + {% if template.imagePath %} + {{ template.imageAlt }} + {% else %} + + {% endif %}
    -
    -
    - {{ template.totalLabel or "Total slots" }} -
    -
    - {{ template.totalSlotCount }} -
    -
    -
    +
    +
    +
    +
    + Session times +
    +
    + {{ template.sessionStartLabel }} to {{ template.sessionEndLabel }} +
    +
    +
    +
    + Base slot length +
    +
    + {{ template.duration }} minutes +
    +
    +
    +
    + Total slots +
    +
    + {{ template.totalSlotCount }} +
    +
    +
    +
    +
    -
    -
    -{% if loop.index0 % 2 == 1 or loop.last %}
    {% endif %} -{% endfor %} + {% if loop.index0 % 2 == 1 or loop.last %}
    {% endif %} + {% endfor %} +{% endif %}
    diff --git a/app/views/sessions/00-template-listing.html b/app/views/sessions/00-template-listing.html index c8f3c9b..4070c11 100644 --- a/app/views/sessions/00-template-listing.html +++ b/app/views/sessions/00-template-listing.html @@ -52,72 +52,94 @@

    Session templates

    {# Session templates first (newest first), then the examples; a new grid row wraps every two cards #} {% set allTemplates = (data.sessionTemplates | reverse) %} +{% set realTemplates = [] %} {% for template in allTemplates %} -{% if loop.index0 % 2 == 0 %}
    {% endif %} -
    -
    -
    -
    -

    - {{ template.name }} - {% if templateSaved and loop.first and not template.example %}{{ "Updated" if templateSaved == "updated" else "New" }}{% endif %} -

    - {% if template.note %} -

    {{ template.note }}

    - {% endif %} -
    - {% if template.example %} - - {% elif template.id and template.source %} - - Edit template - - {% endif %} -
    -
    -
    - {% if template.imagePath %} - {{ template.imageAlt }} - {% else %} - - {% endif %} -
    -
    -
    -
    -
    - Session times -
    -
    - {{ template.sessionStartLabel }} to {{ template.sessionEndLabel }} -
    + {% if not template.example %} + {% set realTemplates = (realTemplates.push(template), realTemplates) %} + {% endif %} +{% endfor %} + +{% if realTemplates | length == 0 %} +
    +
    +

    + + Important: No session templates + +

    +

    + A session represents one “clinic day” of slots. Common slot patterns can be captured in session templates for easy reuse. +

    +
    +
    +{% else %} + {% for template in realTemplates %} + {% if loop.index0 % 2 == 0 %}
    {% endif %} +
    +
    +
    +
    +

    + {{ template.name }} + {% if templateSaved and loop.first and not template.example %}{{ "Updated" if templateSaved == "updated" else "New" }}{% endif %} +

    + {% if template.note %} +

    {{ template.note }}

    + {% endif %}
    -
    -
    - Base slot length -
    -
    - {{ template.duration }} minutes -
    + {% if template.example %} + + {% elif template.id and template.source %} + + Edit template + + {% endif %} +
    +
    +
    + {% if template.imagePath %} + {{ template.imageAlt }} + {% else %} + + {% endif %}
    -
    -
    - Total slots -
    -
    - {{ template.totalSlotCount }} -
    +
    +
    +
    +
    + Session times +
    +
    + {{ template.sessionStartLabel }} to {{ template.sessionEndLabel }} +
    +
    +
    +
    + Base slot length +
    +
    + {{ template.duration }} minutes +
    +
    +
    +
    + Total slots +
    +
    + {{ template.totalSlotCount }} +
    +
    +
    +
    -
    - +
    -
    -
    -{% if loop.index0 % 2 == 1 or loop.last %}
    {% endif %} -{% endfor %} + {% if loop.index0 % 2 == 1 or loop.last %}
    {% endif %} + {% endfor %} +{% endif %} {% for template in data.sessionTemplates %} diff --git a/app/views/sessions/01-template-name.html b/app/views/sessions/01-template-name.html index 1aa5248..9b27f07 100644 --- a/app/views/sessions/01-template-name.html +++ b/app/views/sessions/01-template-name.html @@ -91,7 +91,7 @@


    - +

    @@ -190,54 +196,6 @@

    -

    {{ bookableSlotCount }} bookable slots

    @@ -260,6 +218,8 @@

    var enhancedActions = [ 'mark-staff-break', 'mark-staff-meeting', + 'mark-admin', + 'mark-downtime', 'mark-non-bookable-generic', 'clear-slot-type', 'mark-hold-rebooking', diff --git a/app/views/sessions/04-check-template.html b/app/views/sessions/04-check-template.html index 5227aa2..a2ec5d1 100644 --- a/app/views/sessions/04-check-template.html +++ b/app/views/sessions/04-check-template.html @@ -92,48 +92,58 @@

    Check and confirm

    Slot structure
    - {% if data.createSessionTemplate.bookableBreakdown | length %} -
    - - - {{ data.createSessionTemplate.bookableSlotCount }} bookable slots - - -
    -
    - {% for item in data.createSessionTemplate.bookableBreakdown %} -
    -
    {{ item.label }}
    -
    {{ item.count }}
    -
    - {% endfor %} -
    -
    -
    - {% else %} -

    {{ data.createSessionTemplate.bookableSlotCount }} bookable slots

    - {% endif %} - {% if data.createSessionTemplate.nonBookableBreakdown | length %} -
    - - - {{ data.createSessionTemplate.nonBookableSlotCount }} non-bookable slots - - -
    -
    - {% for item in data.createSessionTemplate.nonBookableBreakdown %} -
    -
    {{ item.label }}
    -
    {{ item.count }}
    -
    - {% endfor %} -
    -
    -
    - {% else %} -

    {{ data.createSessionTemplate.nonBookableSlotCount }} non-bookable slots

    - {% endif %} + +
    +
    + {{ mapImageAlt }} +
    +
    + +

    {{ data.createSessionTemplate.standardSlotCount }} standard slots

    + + {% if data.createSessionTemplate.bookableBreakdown | length %} +
    + + + {{ data.createSessionTemplate.heldSlotCount }} held slots + + +
    +
    + {% for item in data.createSessionTemplate.bookableBreakdown %} +
    +
    {{ item.label | capitalize }}
    +
    {{ item.count }}
    +
    + {% endfor %} +
    +
    +
    + {% else %} + + {% endif %} + {% if data.createSessionTemplate.nonBookableBreakdown | length %} +
    + + + {{ data.createSessionTemplate.nonBookableSlotCount }} non-bookable slots + + +
    +
    + {% for item in data.createSessionTemplate.nonBookableBreakdown %} +
    +
    {{ item.label | capitalize }}
    +
    {{ item.count }}
    +
    + {% endfor %} +
    +
    +
    + {% else %} + + {% endif %} +
    Change slot structure From 67205383af08488ec12dd21e412a5031c635d30c Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Fri, 6 Nov 2026 14:15:56 +0000 Subject: [PATCH 5/8] Iterate active clinics listing --- .../create-capacity-from-zero/index.html | 150 +++--------------- 1 file changed, 23 insertions(+), 127 deletions(-) diff --git a/app/views/create-capacity-from-zero/index.html b/app/views/create-capacity-from-zero/index.html index f7595e2..ba8a79c 100644 --- a/app/views/create-capacity-from-zero/index.html +++ b/app/views/create-capacity-from-zero/index.html @@ -119,33 +119,32 @@
    -
    + +

    Active clinics

    - {{ button({ - text: "Create a new clinic", - href: "/create-capacity-from-zero/create-clinic", - classes: "nhsuk-button--secondary" - }) }} +
    + {{ button({ + text: "Create a new clinic", + href: "/create-capacity-from-zero/create-clinic", + classes: "nhsuk-button--secondary-solid" + }) }} + Manage templates +
    -
    -
    - -
    -
    - - - - @@ -153,32 +152,29 @@

    Active clinics

    -
    + Clinic + Unit and location - Scheduled timespan + + Current end date + Capacity
    - Mereford central ongoing
    - NNN-NNN-systemid-20260501 + Mereford central ongoing
    Mereford and Wensley Screening Centre
    Mereford and Wensley District Hospital
    - 7 Sep 2026 to 27 Nov 2026 + 15 Dec 2026 - 1500 slots available
    - of which 150 held + 1500 slots available
    - Drummond van visits
    - NNN-NNN-systemid-20260501 + Drummond van visits
    Drummond
    East Mereford Community Hub
    - 17 Nov 2026 to 24 Dec 2026 + 24 Dec 2026 No sessions assigned @@ -186,123 +182,23 @@

    Active clinics

    - Pankhurst van visits
    - NNN-NNN-systemid-20261028 + Pankhurst van visits
    Pankhurst
    Riverside Sports Centre
    - 17 Sep 2026 to 27 Oct 2026 + 27 Dec 2026 - {{ padlockSvg | safe }} - 1500 slots
    - + 1500 slots available
    - - - - {% endblock %} From 298449cbc929664248e7b54602a5858a82984251 Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Mon, 9 Nov 2026 12:59:27 +0000 Subject: [PATCH 6/8] UCD runthrough edits --- .../sass/components/_session-slots.scss | 1 + .../clinic-summary.html | 18 +++- .../select-session-template.html | 46 ++++++----- app/views/sessions/00-template-listing.html | 82 ++++++++++--------- app/views/sessions/01-template-name.html | 6 +- app/views/sessions/03-slot-structure.html | 6 +- 6 files changed, 92 insertions(+), 67 deletions(-) diff --git a/app/assets/sass/components/_session-slots.scss b/app/assets/sass/components/_session-slots.scss index f38879f..1ca0a53 100644 --- a/app/assets/sass/components/_session-slots.scss +++ b/app/assets/sass/components/_session-slots.scss @@ -42,6 +42,7 @@ display: flex; align-items: first baseline; padding-top: nhsuk-px-to-rem(8px); + padding-bottom: nhsuk-px-to-rem(8px); } .slot.is-hold {} diff --git a/app/views/create-capacity-from-zero/clinic-summary.html b/app/views/create-capacity-from-zero/clinic-summary.html index 3583774..167e6ba 100644 --- a/app/views/create-capacity-from-zero/clinic-summary.html +++ b/app/views/create-capacity-from-zero/clinic-summary.html @@ -149,13 +149,23 @@

    Important: No current schedule

    -

    - A schedule is a block of confirmed time and capacity (usually agreed as a rota). Each schedule has a start date and an end date, for example a 6 week block. -

    +
    +

    + There are no schedules in this clinic at the moment. Schedules will appear here when you have created them. +

    + + + + Create a schedule + + +
    {% endif %} - Add a new schedule + Create a new schedule diff --git a/app/views/create-capacity-from-zero/select-session-template.html b/app/views/create-capacity-from-zero/select-session-template.html index 9e04c40..e93ecec 100644 --- a/app/views/create-capacity-from-zero/select-session-template.html +++ b/app/views/create-capacity-from-zero/select-session-template.html @@ -158,25 +158,33 @@

    {% for slot in template.slots %} -
    - {{ slot.startLabel }} - to {{ slot.endLabel }} - - {% if slot.isNonBookable %} - Non-bookable{% if slot.nonBookableReason %}{{ slot.nonBookableReason }}{% endif %} - {% elseif slot.isSpecialAppointment %} - Special appointment - {% elseif slot.isHold %} - Held{% if slot.holdReason %}{{ slot.holdReason }}{% endif %} - {% endif %} - {% if slot.isCombined %} - {{ slot.span }} slots - {% endif %} - -
    - {% for position in slot.mergedChildren %} - - {% endfor %} +
    + + + + {{ slot.startLabel }} to {{ slot.endLabel }} + {% if slot.isCombined %} +
    {{ slot.span }} slots +
    {{ data.createSessionTemplate.duration * slot.span }} minutes + {% else %} +
    {{ data.createSessionTemplate.duration }} minutes + {% endif %} +
    + + +
    +
    + {% for position in slot.mergedChildren %} + + {% endfor %} {% endfor %}
    diff --git a/app/views/sessions/00-template-listing.html b/app/views/sessions/00-template-listing.html index 4070c11..aedeb9f 100644 --- a/app/views/sessions/00-template-listing.html +++ b/app/views/sessions/00-template-listing.html @@ -8,23 +8,9 @@ {% endblock %} {% block beforeContent %} - {% endblock %} {% block content %} @@ -45,8 +31,8 @@

    {% endif %}
    -

    Session templates

    - Create a new session template +

    Clinic session templates

    + Create a new session template
    {# Session templates first (newest first), then the examples; a new grid row wraps every two cards #} @@ -67,9 +53,19 @@

    Important: No session templates

    -

    - A session represents one “clinic day” of slots. Common slot patterns can be captured in session templates for easy reuse. -

    +
    +

    + There are no session templates at the moment. Templates will appear here when you have created them. +

    + + + + Create a session template + + +
    {% else %} @@ -161,25 +157,33 @@

    {% for slot in template.slots %} -
    - {{ slot.startLabel }} - to {{ slot.endLabel }} - - {% if slot.isNonBookable %} - Non-bookable{% if slot.nonBookableReason %}{{ slot.nonBookableReason }}{% endif %} - {% elseif slot.isSpecialAppointment %} - Special appointment - {% elseif slot.isHold %} - Held{% if slot.holdReason %}{{ slot.holdReason }}{% endif %} - {% endif %} - {% if slot.isCombined %} - {{ slot.span }} slots - {% endif %} - -
    - {% for position in slot.mergedChildren %} - - {% endfor %} +
    + + + + {{ slot.startLabel }} to {{ slot.endLabel }} + {% if slot.isCombined %} +
    {{ slot.span }} slots +
    {{ data.createSessionTemplate.duration * slot.span }} minutes + {% else %} +
    {{ data.createSessionTemplate.duration }} minutes + {% endif %} +
    + + +
    +
    + {% for position in slot.mergedChildren %} + + {% endfor %} {% endfor %}
    diff --git a/app/views/sessions/01-template-name.html b/app/views/sessions/01-template-name.html index 9b27f07..2a8a858 100644 --- a/app/views/sessions/01-template-name.html +++ b/app/views/sessions/01-template-name.html @@ -8,7 +8,11 @@ {{ primaryNavigation("Clinics", serviceName, bsoName) }} {% endblock %} -{% block beforeContent %}{% endblock %} +{% block beforeContent %} + + Back to clinic session templates + +{% endblock %} {% block content %} diff --git a/app/views/sessions/03-slot-structure.html b/app/views/sessions/03-slot-structure.html index 5a2888a..778294b 100644 --- a/app/views/sessions/03-slot-structure.html +++ b/app/views/sessions/03-slot-structure.html @@ -107,14 +107,12 @@

    From e3cac1ca9b59514a5423d86fd7079b28a9dafbbc Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Mon, 9 Nov 2026 13:46:29 +0000 Subject: [PATCH 7/8] More tweaks --- app/views/create-capacity-from-zero/clinic-summary.html | 2 +- app/views/create-capacity-from-zero/index.html | 2 +- app/views/sessions/00-template-listing.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/create-capacity-from-zero/clinic-summary.html b/app/views/create-capacity-from-zero/clinic-summary.html index 167e6ba..c431d0f 100644 --- a/app/views/create-capacity-from-zero/clinic-summary.html +++ b/app/views/create-capacity-from-zero/clinic-summary.html @@ -165,7 +165,7 @@

    {% endif %} - Create a new schedule + Create a schedule diff --git a/app/views/create-capacity-from-zero/index.html b/app/views/create-capacity-from-zero/index.html index ba8a79c..5a7be96 100644 --- a/app/views/create-capacity-from-zero/index.html +++ b/app/views/create-capacity-from-zero/index.html @@ -124,7 +124,7 @@

    Active clinics

    {{ button({ - text: "Create a new clinic", + text: "Create new clinic", href: "/create-capacity-from-zero/create-clinic", classes: "nhsuk-button--secondary-solid" }) }} diff --git a/app/views/sessions/00-template-listing.html b/app/views/sessions/00-template-listing.html index aedeb9f..9242bd9 100644 --- a/app/views/sessions/00-template-listing.html +++ b/app/views/sessions/00-template-listing.html @@ -32,7 +32,7 @@

    {# Session templates first (newest first), then the examples; a new grid row wraps every two cards #} From f7026eb19fb52be1ed1944c6aa9ad54747cf76dd Mon Sep 17 00:00:00 2001 From: Mat Johnson Date: Mon, 9 Nov 2026 16:05:56 +0000 Subject: [PATCH 8/8] codespace --- app/views/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/index.html b/app/views/index.html index 5ec79b1..63e3c90 100755 --- a/app/views/index.html +++ b/app/views/index.html @@ -8,7 +8,7 @@ {% block content %} {{ serviceName }}

    - Cohort to clinic prototypes + Cohort to clinic prototypes HELLO