From 2ff12282a6905dbd063a5ae14d8515c8cdfc4543 Mon Sep 17 00:00:00 2001 From: Brendan Smith Date: Thu, 19 Dec 2024 10:29:55 +0000 Subject: [PATCH] Ensure checkbox licence conditions collapse to single textbox when there are no picklist conditions --- caseworker/advice/constants.py | 2 -- caseworker/advice/forms/approval.py | 32 ++++++++++++++--------------- caseworker/advice/views/approval.py | 17 +++++++++++++-- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/caseworker/advice/constants.py b/caseworker/advice/constants.py index 2a6cc02596..dc13a41352 100644 --- a/caseworker/advice/constants.py +++ b/caseworker/advice/constants.py @@ -30,7 +30,5 @@ class AdviceType: class AdviceSteps: RECOMMEND_APPROVAL = "recommend_approval" - DESNZ_APPROVAL = "desnz_approval" - FCDO_APPROVAL = "fcdo_approval" LICENCE_CONDITIONS = "licence_conditions" LICENCE_FOOTNOTES = "licence_footnotes" diff --git a/caseworker/advice/forms/approval.py b/caseworker/advice/forms/approval.py index 95a5fed19b..26b846355a 100644 --- a/caseworker/advice/forms/approval.py +++ b/caseworker/advice/forms/approval.py @@ -71,22 +71,10 @@ def get_layout_fields(self): ) -class LicenceConditionsForm(PicklistAdviceForm, BaseForm): +class PicklistLicenceConditionsForm(PicklistAdviceForm, BaseForm): class Layout: TITLE = "Add licence conditions (optional)" - proviso = forms.CharField( - widget=forms.Textarea(attrs={"rows": 7, "class": "govuk-!-margin-top-4"}), - label="", - required=False, - ) - - approval_radios = forms.ChoiceField( - label="What is your reason for approving?", - required=False, - widget=forms.RadioSelect, - choices=(), - ) proviso_checkboxes = forms.MultipleChoiceField( label="", required=False, @@ -96,14 +84,13 @@ class Layout: def clean(self): cleaned_data = super().clean() - # only return proviso (text) for selected radios, nothing else matters, join by 2 newlines + # only return proviso (text) for selected checkboxes, nothing else matters, join by 2 newlines return {"proviso": "\r\n\r\n".join([cleaned_data[selected] for selected in cleaned_data["proviso_checkboxes"]])} def __init__(self, *args, **kwargs): proviso = kwargs.pop("proviso") proviso_choices, proviso_text = self._picklist_to_choices(proviso) - self.proviso_text = proviso_text self.conditional_checkbox_choices = ( ConditionalCheckboxesQuestion(choices.label, choices.value) for choices in proviso_choices @@ -121,10 +108,23 @@ def __init__(self, *args, **kwargs): ) def get_layout_fields(self): - return (ConditionalCheckboxes("proviso_checkboxes", *self.conditional_checkbox_choices),) +class SimpleLicenceConditionsForm(BaseForm): + class Layout: + TITLE = "Add licence conditions (optional)" + + proviso = forms.CharField( + widget=forms.Textarea(attrs={"rows": 7, "class": "govuk-!-margin-top-4"}), + label="Licence condition", + required=False, + ) + + def get_layout_fields(self): + return ("proviso",) + + class FootnotesApprovalAdviceForm(PicklistAdviceForm, BaseForm): class Layout: TITLE = "Add instructions to the exporter, or a reporting footnote (optional)" diff --git a/caseworker/advice/views/approval.py b/caseworker/advice/views/approval.py index b27d3e7fc9..e29abaa9e8 100644 --- a/caseworker/advice/views/approval.py +++ b/caseworker/advice/views/approval.py @@ -2,7 +2,8 @@ from caseworker.advice.conditionals import form_add_licence_conditions, is_desnz_team from caseworker.advice.forms.approval import ( FootnotesApprovalAdviceForm, - LicenceConditionsForm, + PicklistLicenceConditionsForm, + SimpleLicenceConditionsForm, RecommendAnApprovalForm, ) from caseworker.advice.payloads import GiveApprovalAdvicePayloadBuilder @@ -23,7 +24,7 @@ class GiveApprovalAdviceView(LoginRequiredMixin, CaseContextMixin, BaseSessionWi form_list = [ (AdviceSteps.RECOMMEND_APPROVAL, RecommendAnApprovalForm), - (AdviceSteps.LICENCE_CONDITIONS, LicenceConditionsForm), + (AdviceSteps.LICENCE_CONDITIONS, PicklistLicenceConditionsForm), (AdviceSteps.LICENCE_FOOTNOTES, FootnotesApprovalAdviceForm), ] @@ -39,6 +40,18 @@ class GiveApprovalAdviceView(LoginRequiredMixin, CaseContextMixin, BaseSessionWi AdviceSteps.LICENCE_FOOTNOTES: footnote_picklist, } + def get_form(self, step=None, data=None, files=None): + + if step == AdviceSteps.LICENCE_CONDITIONS: + picklist_form_kwargs = self.step_kwargs[AdviceSteps.LICENCE_CONDITIONS](self) + picklist_options_exist = len(picklist_form_kwargs["proviso"]["results"]) > 0 + if picklist_options_exist: + return PicklistLicenceConditionsForm(data=data, **picklist_form_kwargs) + else: + return SimpleLicenceConditionsForm(data=data) + + return super().get_form(step, data, files) + def get_success_url(self): return reverse("cases:view_my_advice", kwargs=self.kwargs)