def get(self, request, **kwargs): letter_template = get_letter_template(request, str(kwargs["pk"]))[0]["template"] letter_template_case_types = letter_template.pop("case_types") or [] letter_template_decisions = letter_template.pop("decisions") or [] letter_template_case_types = [ case_type["reference"]["key"] for case_type in letter_template_case_types ] letter_template.update(case_types=letter_template_case_types) letter_template_decisions = [ decision["name"]["key"] for decision in letter_template_decisions ] letter_template.update(decisions=letter_template_decisions) case_type_options = [ Option(option["key"], option["value"]) for option in get_case_types(request) ] decision_options = [ Option(decision["key"], decision["value"]) for decision in get_decisions(request)[0] ] return form_page( request, edit_letter_template(request, letter_template, case_type_options, decision_options), data=letter_template, )
def select_case_type(request): return Form( title=Forms.CASE_TYPES, questions=[ Checkboxes( name="case_types[]", options=[ Option(option["id"], option["reference"]["value"]) for option in get_case_types(request, False) ], ) ], )
def post(request, **kwargs): letter_template_id = str(kwargs["pk"]) letter_template = get_letter_template( request, letter_template_id)[0]["template"] # Override case restrictions to use getlist edited_letter_template_data = request.POST.copy() edited_letter_template_data[ "case_types"] = edited_letter_template_data.getlist("case_types[]") edited_letter_template_data[ "decisions"] = edited_letter_template_data.getlist("decisions[]") case_type_options = [ Option(option["key"], option["value"]) for option in get_case_types(request) ] decision_options = [ Option(decision["key"], decision["value"]) for decision in get_decisions(request)[0] ] next_form, _ = submit_single_form( request, edit_letter_template(request, letter_template, case_type_options, decision_options), put_letter_template, object_pk=letter_template_id, override_data=edited_letter_template_data, ) if next_form: return next_form return redirect( reverse("letter_templates:letter_template", kwargs={"pk": letter_template_id}))
def select_condition_and_flag(request, type: str): flags = [] is_for_verified_goods_only = None if type == "Good": flags = get_goods_flags(request=request) is_for_verified_goods_only = RadioButtons( name="is_for_verified_goods_only", options=[ Option(key=True, value=FlaggingRules.Create.Condition_and_flag.YES_OPTION), Option(key=False, value=FlaggingRules.Create.Condition_and_flag.NO_OPTION), ], title=FlaggingRules.Create.Condition_and_flag.GOODS_QUESTION, ) entries = get_control_list_entries(request) clc_groups, clc_nodes = get_clc_entry_groups_and_nodes(entries) # if the child node has children of its own then that needs to selectable as # both individual entry as well as group entry because of this duplicates are # possible in the combined list hence remove them. We need groups at the top # because autocomplete only shows first 10 entries which makes it difficult to # select certain groups otherwise. eg ML10b1 comes before ML1 combined_entries = list(clc_groups) rating_seen = set([item["rating"] for item in combined_entries]) for item in clc_nodes: if item["rating"] not in rating_seen: rating_seen.add(item["rating"]) combined_entries.append(item) clc_nodes_options = [ Option(key=item["rating"], value=item["rating"], description=item["text"],) for item in clc_nodes ] clc_groups_options = [ Option(key=item["rating"], value=item["rating"], description=item["text"],) for item in clc_groups ] clc_combined_options = [ Option(key=item["rating"], value=item["rating"], description=item["text"],) for item in combined_entries ] return Form( title="Set flagging rules", questions=[ Heading("Add a condition", HeadingStyle.S), TokenBar( title="Select individual control list entries", name="matching_values", description="Type to get suggestions. For example, ML1a.", options=clc_nodes_options, ), TokenBar( title="Select a control list entry group", name="matching_groups", description="Type to get suggestions. For example, ML8.\nThis will add every control list entry under ML8.", options=clc_groups_options, ), TokenBar( title="Excluded control list entries", name="excluded_values", description="Type to get suggestions. For example, ML1a, ML8.\nThis will exclude ML1a and every control list entry under ML8.", options=clc_combined_options, ), Heading("Set an action", HeadingStyle.S), Select(title=strings.FlaggingRules.Create.Condition_and_flag.FLAG, name="flag", options=flags), is_for_verified_goods_only, ], default_button_name="Create flagging rule", ) elif type == "Destination": flags = get_destination_flags(request=request) return Form( title="Set flagging rules", questions=[ Heading("Add a condition", HeadingStyle.S), TokenBar( title="Select destinations", name="matching_values", description="Type to get suggestions. For example, Australia", options=get_countries(request, convert_to_options=True), ), Heading("Add an action", HeadingStyle.S), Select(title=strings.FlaggingRules.Create.Condition_and_flag.FLAG, name="flag", options=flags), ], default_button_name="Create flagging rule", ) elif type == "Case": case_type_options = [Option(option["key"], option["value"]) for option in get_case_types(request)] flags = get_cases_flags(request=request) return Form( title="Set flagging rules", questions=[ Heading("Add a condition", HeadingStyle.S), TokenBar( title="Select application type", name="matching_values", description="Type to get suggestions.\nFor example, Standard Individual Export Licence", options=case_type_options, ), Heading("Add an action", HeadingStyle.S), Select(title=strings.FlaggingRules.Create.Condition_and_flag.FLAG, name="flag", options=flags), ], default_button_name="Create flagging rule", )
def add_letter_template(request): possible_case_types = get_case_types(request, type_only=False) chosen_case_types = request.POST.getlist("case_types[]") is_application_case_types_only = CaseType.HMRC_REFERENCE.value not in chosen_case_types if is_application_case_types_only: # iterate through all case-types and determine if the ones we have chosen are of type "application" for possible_case_type in possible_case_types: if (possible_case_type["reference"]["key"] in chosen_case_types and not possible_case_type["type"]["key"] == CaseType.APPLICATION.value): is_application_case_types_only = False break return FormGroup(forms=[ Form( title=strings.LetterTemplates.AddLetterTemplate.Name.TITLE, description=strings.LetterTemplates.AddLetterTemplate.Name.HINT, questions=[TextInput(name="name")], back_link=BackLink( strings.LetterTemplates.AddLetterTemplate.Name.BACK_LINK, reverse_lazy("letter_templates:letter_templates"), ), default_button_name=strings.LetterTemplates.AddLetterTemplate.Name. CONTINUE_BUTTON, ), Form( title=strings.LetterTemplates.AddLetterTemplate.CaseTypes.TITLE, questions=[ Checkboxes( name="case_types[]", options=[ Option(case_type["reference"]["key"], case_type["reference"]["value"]) for case_type in possible_case_types ], classes=["govuk-checkboxes--small"], ) ], default_button_name=strings.LetterTemplates.AddLetterTemplate. CaseTypes.CONTINUE_BUTTON, ), conditional( is_application_case_types_only, Form( title=strings.LetterTemplates.EditLetterTemplate.Decisions. TITLE, description=strings.LetterTemplates.EditLetterTemplate. Decisions.DESCRIPTION, questions=[ Checkboxes( name="decisions[]", options=[ Option(decision["key"], decision["value"]) for decision in get_decisions(request)[0] ], classes=["govuk-checkboxes--small"], ) ], default_button_name=strings.LetterTemplates.AddLetterTemplate. CaseTypes.CONTINUE_BUTTON, ), ), Form( title=strings.LetterTemplates.AddLetterTemplate.VisibleToExporter. TITLE, description=strings.LetterTemplates.AddLetterTemplate. VisibleToExporter.DESCRIPTION, questions=[ RadioButtons( name="visible_to_exporter", options=[ Option(key=True, value=strings.LetterTemplates.AddLetterTemplate. VisibleToExporter.YES_OPTION), Option(key=False, value=strings.LetterTemplates.AddLetterTemplate. VisibleToExporter.NO_OPTION), ], ), ], default_button_name=strings.LetterTemplates.AddLetterTemplate. VisibleToExporter.BUTTON, ), Form( title=strings.LetterTemplates.AddLetterTemplate.IncludeSignature. TITLE, description=strings.LetterTemplates.AddLetterTemplate. IncludeSignature.DESCRIPTION, questions=[ RadioButtons( name="include_digital_signature", options=[ Option(key=True, value=strings.LetterTemplates.AddLetterTemplate. IncludeSignature.YES_OPTION), Option(key=False, value=strings.LetterTemplates.AddLetterTemplate. IncludeSignature.NO_OPTION), ], ), ], default_button_name=strings.LetterTemplates.AddLetterTemplate. IncludeSignature.BUTTON, ), Form( title=strings.LetterTemplates.AddLetterTemplate.Layout.TITLE, questions=[ RadioButtonsImage(name="layout", options=_letter_layout_options(request)) ], default_button_name=strings.LetterTemplates.AddLetterTemplate. Layout.CONTINUE_BUTTON, ), ])