Skip to content

Commit 37a7cb1

Browse files
authored
Merge pull request #817 from NHSDigital/11724-render-app-notes
Show notes on appointment details tab
2 parents 640ce42 + 0cd023f commit 37a7cb1

File tree

5 files changed

+67
-2
lines changed

5 files changed

+67
-2
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{% from 'nhsuk/components/warning-callout/macro.jinja' import warningCallout %}
2+
{% macro appointment_note_banner(appointment_note, change_url=None, show_change_link=True) %}
3+
{% if appointment_note %}
4+
{% set appointment_note_html %}
5+
<div class="nhsuk-u-margin-bottom-3">
6+
{{ appointment_note.content | nl2br }}
7+
</div>
8+
{% if show_change_link and change_url %}
9+
<p class="nhsuk-u-margin-bottom-0">
10+
<a href="{{ change_url }}">
11+
Change<span class="nhsuk-u-visually-hidden"> appointment note</span>
12+
</a>
13+
</p>
14+
{% endif %}
15+
{% endset %}
16+
{{ warningCallout({
17+
"heading": "Appointment note",
18+
"html": appointment_note_html
19+
}) }}
20+
{% endif %}
21+
{% endmacro %}

manage_breast_screening/mammograms/jinja2/mammograms/show/appointment_details.jinja

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{% extends 'layout-app.jinja' %}
22
{% from 'nhsuk/components/card/macro.jinja' import card %}
3-
{% from 'nhsuk/components/warning-callout/macro.jinja' import warningCallout %}
43
{% from 'nhsuk/components/back-link/macro.jinja' import backLink %}
54
{% from 'nhsuk/components/summary-list/macro.jinja' import summaryList %}
65
{% from 'components/appointment-status/macro.jinja' import appointment_status %}
76
{% from 'components/appointment-header/macro.jinja' import appointment_header %}
87
{% from 'components/check-in/macro.jinja' import check_in %}
98
{% from 'components/secondary-navigation/macro.jinja' import app_secondary_navigation %}
109
{% from 'mammograms/special_appointments/special_appointment_banner.jinja' import special_appointment_banner %}
10+
{% from 'mammograms/appointment_notes/appointment_note_banner.jinja' import appointment_note_banner %}
1111

1212
{% block beforeContent %}
1313
{{ backLink({
@@ -55,6 +55,11 @@
5555
"items": secondary_nav_items
5656
}) }}
5757

58+
{{ appointment_note_banner(
59+
appointment_note,
60+
change_url=url('mammograms:appointment_note', kwargs={'pk': presented_appointment.pk})
61+
) }}
62+
5863
{% set appointment_details_html %}
5964
{{ summaryList({
6065
"rows": [

manage_breast_screening/mammograms/presenters/appointment_presenters.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
)
99

1010
from ...core.utils.date_formatting import format_date, format_relative_date, format_time
11-
from ...participants.models import AppointmentStatus, SupportReasons
11+
from ...participants.models import AppointmentNote, AppointmentStatus, SupportReasons
1212
from ...participants.presenters import ParticipantPresenter, status_colour
1313

1414

@@ -113,6 +113,13 @@ def status_attribution(self):
113113
else:
114114
return None
115115

116+
@cached_property
117+
def note(self):
118+
try:
119+
return self._appointment.note
120+
except AppointmentNote.DoesNotExist:
121+
return None
122+
116123

117124
class ClinicSlotPresenter:
118125
def __init__(self, clinic_slot):

manage_breast_screening/mammograms/views/appointment_views.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22

3+
from django.contrib import messages
34
from django.http import Http404
45
from django.shortcuts import redirect, render
56
from django.urls import reverse, reverse_lazy
@@ -68,6 +69,7 @@ def get(self, request, *args, **kwargs):
6869
"presented_appointment": appointment_presenter,
6970
"presented_participant": appointment_presenter.participant,
7071
"presented_mammograms": last_known_mammogram_presenter,
72+
"appointment_note": appointment_presenter.note,
7173
"secondary_nav_items": present_secondary_nav(
7274
appointment.pk, current_tab="appointment"
7375
),
@@ -155,6 +157,11 @@ def form_valid(self, form):
155157
auditor.audit_create(note)
156158
else:
157159
auditor.audit_update(note)
160+
messages.add_message(
161+
self.request,
162+
messages.SUCCESS,
163+
"Appointment note saved",
164+
)
158165
return redirect("mammograms:appointment_note", pk=self.appointment.pk)
159166

160167

manage_breast_screening/tests/system/clinical/test_appointment_note.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,15 @@ def test_clinical_user_adds_and_updates_an_appointment_note(self):
2020

2121
self.when_i_enter_a_note()
2222
self.and_i_save_the_note()
23+
self.then_i_see_a_message_confirming_the_save()
2324
self.then_the_note_field_contains(self.initial_note_text)
25+
self.and_the_appointment_details_tab_shows_the_note(self.initial_note_text)
2426

2527
self.when_i_update_the_note()
2628
self.and_i_save_the_note()
29+
self.then_i_see_a_message_confirming_the_save()
2730
self.then_the_note_field_contains(self.updated_note_text)
31+
self.and_the_appointment_details_tab_shows_the_note(self.updated_note_text)
2832

2933
def and_there_is_an_appointment_for_my_provider(self):
3034
self.appointment = AppointmentFactory(
@@ -48,6 +52,10 @@ def when_i_enter_a_note(self):
4852
self.page.get_by_label("Note").fill(self.initial_note_text)
4953

5054
def when_i_update_the_note(self):
55+
secondary_nav = self.page.locator(".app-secondary-navigation")
56+
expect(secondary_nav).to_be_visible()
57+
note_tab = secondary_nav.get_by_text("Note")
58+
note_tab.click()
5159
field = self.page.get_by_label("Note")
5260
expect(field).to_have_value(self.initial_note_text)
5361
field.fill(self.updated_note_text)
@@ -61,3 +69,20 @@ def when_i_save_the_note(self):
6169

6270
def then_the_note_field_contains(self, text):
6371
expect(self.page.get_by_label("Note")).to_have_value(text)
72+
73+
def then_i_see_a_message_confirming_the_save(self):
74+
banner = self.page.locator(".nhsuk-notification-banner--success")
75+
expect(banner).to_be_visible()
76+
expect(banner).to_contain_text("Appointment note saved")
77+
78+
def and_the_appointment_details_tab_shows_the_note(self, text):
79+
secondary_nav = self.page.locator(".app-secondary-navigation")
80+
expect(secondary_nav).to_be_visible()
81+
appointment_details_tab = secondary_nav.get_by_text("Appointment details")
82+
appointment_details_tab.click()
83+
84+
note_container = self.page.locator(
85+
".nhsuk-warning-callout", has_text="Appointment note"
86+
)
87+
expect(note_container).to_be_visible()
88+
expect(note_container).to_contain_text(text)

0 commit comments

Comments
 (0)