Skip to content

Commit

Permalink
1671: Use templatetag to build Case note history in form template
Browse files Browse the repository at this point in the history
  • Loading branch information
ahernp committed Dec 24, 2024
1 parent 3c334e6 commit 6e3a679
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 84 deletions.
10 changes: 3 additions & 7 deletions accessibility_monitoring_platform/apps/audits/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@

from django import forms

from ..cases.case_note_history import (
AMPNoteTextField,
CaseNoteHistory,
CaseNoteHistoryForm,
)
from ..cases.case_note_history import AMPNoteTextField, CaseNoteHistory
from ..cases.models import Boolean, Case, CaseCompliance
from ..common.forms import (
AMPCharFieldWide,
Expand Down Expand Up @@ -54,7 +50,7 @@
)


class AuditMetadataUpdateForm(VersionForm, CaseNoteHistoryForm):
class AuditMetadataUpdateForm(VersionForm):
"""
Form for editing check metadata
"""
Expand Down Expand Up @@ -921,7 +917,7 @@ class Meta:
]


class AuditRetestMetadataUpdateForm(VersionForm, CaseNoteHistoryForm):
class AuditRetestMetadataUpdateForm(VersionForm):
"""
Form for editing audit retest metadata
"""
Expand Down
40 changes: 5 additions & 35 deletions accessibility_monitoring_platform/apps/cases/case_note_history.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,8 @@
from .models import Case, CaseNoteHistory


class AMPNoteWidget(forms.TextInput):
"""Widget for Case notes input field with history"""

template_name = "cases/case_note_history_field.html"


class AMPNoteTextField(forms.CharField):
"""
Textarea input field in the style of GDS design system.
Widget shows history of Case notes added using this field.
"""
"""Textarea input field for case notes"""

note_type: CaseNoteHistory.NoteType = CaseNoteHistory.NoteType.GENERIC

Expand All @@ -29,34 +20,13 @@ def __init__(self, *args, **kwargs) -> None:
kwargs.setdefault("required", False)
kwargs.setdefault(
"widget",
AMPNoteWidget(attrs={"class": "govuk-textarea", "rows": "4"}),
forms.Textarea(attrs={"class": "govuk-textarea", "rows": "4"}),
)
super().__init__(*args, **kwargs)


class CaseNoteHistoryForm(forms.ModelForm):
"""
Form which includes Case notes field(s).
Adds history of notes entered to widgets.
"""

version = forms.IntegerField(widget=forms.HiddenInput)

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
if isinstance(field, AMPNoteTextField):
if self.instance is not None:
case: Case | None = None
if isinstance(self.instance, Case):
case = self.instance
elif hasattr(self.instance, "case"):
case = self.instance.case
if case is not None and case.id:
field.widget.attrs["field_label"] = field.label
field.widget.attrs["case_note_history"] = (
case.case_note_history.filter(note_type=field.note_type)
)
@property
def case_note_history(self, case: Case):
return case.case_note_history.filter(note_type=self.note_type)


def add_to_case_note_history(
Expand Down
30 changes: 15 additions & 15 deletions accessibility_monitoring_platform/apps/cases/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
EqualityBodyCSVColumn,
populate_equality_body_columns,
)
from .case_note_history import AMPNoteTextField, CaseNoteHistoryForm
from .case_note_history import AMPNoteTextField
from .models import (
Boolean,
Case,
Expand Down Expand Up @@ -166,7 +166,7 @@ def clean_enforcement_body(self):
return enforcement_body


class CaseMetadataUpdateForm(CaseCreateForm, VersionForm, CaseNoteHistoryForm):
class CaseMetadataUpdateForm(CaseCreateForm, VersionForm):
"""
Form for updating case metadata fields
"""
Expand Down Expand Up @@ -387,7 +387,7 @@ def __init__(self, *args, **kwargs):
self.fields["publish_report_complete_date"].widget = forms.HiddenInput()


class ManageContactDetailsUpdateForm(VersionForm, CaseNoteHistoryForm):
class ManageContactDetailsUpdateForm(VersionForm):
"""
Form for updating test results
"""
Expand Down Expand Up @@ -440,7 +440,7 @@ class Meta:
fields = ["version", "name", "job_title", "email", "preferred"]


class CaseRequestContactDetailsUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseRequestContactDetailsUpdateForm(VersionForm):
"""
Form to update Find contact details
"""
Expand Down Expand Up @@ -468,7 +468,7 @@ class Meta:
]


class CaseOneWeekContactDetailsUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseOneWeekContactDetailsUpdateForm(VersionForm):
"""
Form to update One week contact details
"""
Expand Down Expand Up @@ -498,7 +498,7 @@ class Meta:
]


class CaseFourWeekContactDetailsUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseFourWeekContactDetailsUpdateForm(VersionForm):
"""
Form to update Four week contact details
"""
Expand Down Expand Up @@ -530,7 +530,7 @@ class Meta:
]


class CaseReportSentOnUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseReportSentOnUpdateForm(VersionForm):
"""
Form to update Report sent on
"""
Expand All @@ -557,7 +557,7 @@ class Meta:
]


class CaseReportOneWeekFollowupUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseReportOneWeekFollowupUpdateForm(VersionForm):
"""
Form to update One week followup
"""
Expand Down Expand Up @@ -597,7 +597,7 @@ def __init__(self, *args, **kwargs):
self.fields["one_week_followup_sent_to_email"].widget = forms.HiddenInput()


class CaseReportFourWeekFollowupUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseReportFourWeekFollowupUpdateForm(VersionForm):
"""
Form to update Four week followup
"""
Expand Down Expand Up @@ -637,7 +637,7 @@ def __init__(self, *args, **kwargs):
self.fields["four_week_followup_sent_to_email"].widget = forms.HiddenInput()


class CaseReportAcknowledgedUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseReportAcknowledgedUpdateForm(VersionForm):
"""
Form to update Report acknowledged
"""
Expand Down Expand Up @@ -666,7 +666,7 @@ class Meta:
]


class CaseTwelveWeekUpdateRequestedUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseTwelveWeekUpdateRequestedUpdateForm(VersionForm):
"""
Form to update 12-week update requested
"""
Expand Down Expand Up @@ -699,7 +699,7 @@ class Meta:
]


class CaseOneWeekFollowupFinalUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseOneWeekFollowupFinalUpdateForm(VersionForm):
"""
Form to update One week followup for final update
"""
Expand Down Expand Up @@ -745,7 +745,7 @@ def __init__(self, *args, **kwargs):
)


class CaseTwelveWeekUpdateAcknowledgedUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseTwelveWeekUpdateAcknowledgedUpdateForm(VersionForm):
"""
Form to update 12-week update request acknowledged
"""
Expand Down Expand Up @@ -962,7 +962,7 @@ class Meta:
]


class CaseStatementEnforcementUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseStatementEnforcementUpdateForm(VersionForm):
"""
Form to update statement enforcement
"""
Expand All @@ -985,7 +985,7 @@ class Meta:
]


class CaseEqualityBodyMetadataUpdateForm(VersionForm, CaseNoteHistoryForm):
class CaseEqualityBodyMetadataUpdateForm(VersionForm):
"""
Form to update equality body metadata
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ <h2 id="{{ note_type }}" class="govuk-heading-m">
{{ case_note_history.0.get_note_type_display }} ({{ case_note_history|length }})
</h2>
{% for case_note in case_note_history %}
<p class="govuk-body">{{ case_note.note }}</p>
<div class="amp-report-wrapper">{{ case_note.note|markdown_to_html }}</div>
<p class="govuk-body">
<i>
{% if case_note.user %}
By {{ case_note.user.get_full_name }} on {{ case_note.created }}
By {{ case_note.user.get_full_name }} on {{ case_note.created|amp_datetime }}
{% else %}
Note entered before history implemented
{% endif %}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,31 @@
{% include 'common/field_errors.html' with errors=field.errors %}
{{ field }}
{% endif %}
{% if field.field.note_type %}
{% with case|filtered_case_note_history:field.field.note_type as filtered_case_note_history %}
<details class="govuk-details amp-margin-bottom-5" data-module="govuk-details"{% if filtered_case_note_history %} open{% endif %}>
<summary class="govuk-details__summary">
<span class="govuk-details__summary-text">{{ field.field.label }} history ({{ filtered_case_note_history|length}})</span>
</summary>
<div class="govuk-details__text">
{% if filtered_case_note_history %}
{% for note in filtered_case_note_history %}
<p>{{ note.note|markdown_to_html }}</p>
<p>
<i>
{% if note.user %}
By {{ note.user.get_full_name }} on {{ note.created|amp_datetime }}
{% else %}
Note entered before history implemented
{% endif %}
</i>
</p>
{% endfor %}
{% else %}
None
{% endif %}
</div>
</details>
{% endwith %}
{% endif %}
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
import markdown
from django import template
from django.conf import settings
from django.db.models.query import QuerySet
from django.utils import timezone
from django.utils.safestring import mark_safe

from ...cases.models import Case, CaseNoteHistory
from ..utils import ( # pylint: disable=relative-beyond-top-level
amp_format_date,
amp_format_datetime,
Expand Down Expand Up @@ -54,3 +56,11 @@ def amp_datetime(datetime_to_format: datetime) -> str:
return amp_format_datetime(timezone.localtime(datetime_to_format))
else:
return ""


@register.filter
def filtered_case_note_history(
case: Case, note_type: CaseNoteHistory.NoteType
) -> QuerySet[CaseNoteHistory]:
"""Filter case note history by note type"""
return case.case_note_history.filter(note_type=note_type)

0 comments on commit 6e3a679

Please sign in to comment.