Ejemplo n.º 1
0
 def init(self, request, **kwargs):
     if "good_pk" in kwargs:
         # coming from the application
         self.object_pk = str(kwargs["good_pk"])
         self.application_id = str(kwargs["pk"])
     else:
         self.object_pk = str(kwargs["pk"])
     self.draft_pk = str(kwargs.get("draft_pk", ""))
     self.data = get_good_details(request, self.object_pk)[0]["firearm_details"]
     is_rfd = has_valid_rfd_certificate(self.application)
     self.form = firearms_act_confirmation_form(is_rfd)
     self.action = edit_good_firearm_details
Ejemplo n.º 2
0
def good_on_application_form_group(
    request,
    is_preexisting,
    good,
    sub_case_type,
    draft_pk,
    application,
    show_attach_rfd,
    relevant_firearm_act_section,
    is_firearm,
    is_firearm_ammunition_or_component,
    is_firearms_accessory,
    is_firearms_software_or_tech,
    back_url,
    show_serial_numbers_form,
    is_rfd,
):
    # is_preexisting are only asked if user is adding a preexisting good from their product list
    # but not if the good being added to the application is a new good created as part of this same flow
    firearm_type = None
    number_of_items = None

    if good.get("firearm_details"):
        firearm_type = good["firearm_details"]["type"]["key"]
        if "number_of_items" in good["firearm_details"]:
            number_of_items = good["firearm_details"]["number_of_items"]

    show_rfd_question = is_firearm_ammunition_or_component and not has_valid_rfd_certificate(application)

    show_firearm_act_confirmation = is_preexisting and is_firearm_ammunition_or_component
    return components.FormGroup(
        [
            conditional(is_preexisting and is_firearm_ammunition_or_component, firearms_number_of_items(firearm_type)),
            conditional(is_preexisting and is_firearm_ammunition_or_component, identification_markings_form(draft_pk)),
            conditional(
                is_preexisting and is_firearm_ammunition_or_component and show_serial_numbers_form,
                firearms_capture_serial_numbers(number_of_items),
            ),
            conditional(is_preexisting and is_firearm, firearm_year_of_manufacture_details_form()),
            unit_quantity_value(
                request=request, good=good, sub_case_type=sub_case_type, application_id=draft_pk, back_url=back_url
            ),
            conditional(is_preexisting and show_rfd_question, is_registered_firearm_dealer_field(back_url)),
            conditional(is_preexisting and show_attach_rfd, attach_firearm_dealer_certificate_form(back_url)),
            conditional(show_firearm_act_confirmation, firearms_act_confirmation_form(is_rfd)),
        ]
    )
Ejemplo n.º 3
0
    def init(self, request, **kwargs):
        self.object_pk = kwargs["pk"]
        self.good_pk = kwargs["good_pk"]
        self.application = get_application(self.request, self.object_pk)

        self.sub_case_type = self.application["case_type"]["sub_type"]
        is_preexisting = str_to_bool(request.GET.get("preexisting", True))
        show_attach_rfd = str_to_bool(
            request.POST.get("is_registered_firearm_dealer"))
        is_rfd = show_attach_rfd or has_valid_rfd_certificate(self.application)
        firearm_product_type = self.good["firearm_details"]["type"]["key"]
        (
            is_firearm,
            is_firearm_ammunition_or_component,
            is_firearms_accessory,
            is_firearms_software_or_tech,
        ) = get_firearms_subcategory(firearm_product_type)

        self.forms = good_on_application_form_group(
            request=request,
            is_preexisting=is_preexisting,
            good=self.good,
            sub_case_type=self.sub_case_type,
            draft_pk=self.object_pk,
            application=self.application,
            show_attach_rfd=show_attach_rfd,
            relevant_firearm_act_section=request.POST.get(
                "firearm_act_product_is_coverd_by"),
            is_firearm=is_firearm,
            is_firearm_ammunition_or_component=
            is_firearm_ammunition_or_component,
            is_firearms_accessory=is_firearms_accessory,
            is_firearms_software_or_tech=is_firearms_software_or_tech,
            back_url=reverse("applications:preexisting_good",
                             kwargs={"pk": self.object_pk}),
            show_serial_numbers_form=True,
            is_rfd=is_rfd,
        )
        self._action = validate_good_on_application
        self.success_url = reverse_lazy(
            "applications:attach-firearms-certificate-existing-good",
            kwargs={
                "pk": self.object_pk,
                "good_pk": self.good_pk
            },
        )
Ejemplo n.º 4
0
    def get_context_data(self, **kwargs):
        application_id = str(self.kwargs["pk"])
        good_id = str(self.kwargs["good_pk"])
        application = get_application(self.request, application_id)
        is_rfd = has_valid_rfd_certificate(application)

        good_application_documents, _ = get_application_documents(
            self.request, application_id, good_id)

        return super().get_context_data(
            good=self.good,
            application_id=application_id,
            good_id=good_id,
            is_rfd=is_rfd,
            good_application_documents=good_application_documents["documents"],
            section_document=self.get_section_document(),
            **kwargs,
        )
Ejemplo n.º 5
0
    def on_submission(self, request, **kwargs):
        is_preexisting = str_to_bool(request.GET.get("preexisting", True))
        copied_request = request.POST.copy()
        show_attach_rfd = str_to_bool(
            copied_request.get("is_registered_firearm_dealer"))
        relevant_firearm_act_section = copied_request.get(
            "firearm_act_product_is_coverd_by")
        back_url = reverse("applications:preexisting_good",
                           kwargs={"pk": self.good_pk})

        number_of_items = copied_request.get("number_of_items")
        if self.good.get("firearm_details"):
            self.good["firearm_details"]["number_of_items"] = number_of_items

        is_rfd = show_attach_rfd or has_valid_rfd_certificate(self.application)
        selected_section = copied_request.get("firearms_act_section")
        if is_rfd and copied_request.get(
                "is_covered_by_firearm_act_section_one_two_or_five") == "Yes":
            selected_section = "firearms_act_section5"

        show_section_upload_form = False
        if copied_request.get(
                "is_covered_by_firearm_act_section_one_two_or_five") == "Yes":
            show_section_upload_form = is_firearm_certificate_needed(
                application=self.application,
                selected_section=selected_section)

        show_serial_numbers_form = True
        if copied_request.get("has_identification_markings") == "False":
            show_serial_numbers_form = False

        (
            is_firearm,
            is_firearm_ammunition_or_component,
            is_firearms_accessory,
            is_firearms_software_or_tech,
        ) = get_firearms_subcategory(copied_request.get("type"))

        self.forms = good_on_application_form_group(
            request,
            is_preexisting,
            self.good,
            self.sub_case_type,
            self.object_pk,
            self.application,
            show_attach_rfd,
            relevant_firearm_act_section,
            is_firearm=is_firearm,
            is_firearm_ammunition_or_component=
            is_firearm_ammunition_or_component,
            is_firearms_accessory=is_firearms_accessory,
            is_firearms_software_or_tech=is_firearms_software_or_tech,
            back_url=back_url,
            show_serial_numbers_form=show_serial_numbers_form,
            is_rfd=is_rfd,
        )

        # we require the form index of the last form in the group, not the total number
        if self.form_pk == self.number_of_forms:
            if show_section_upload_form:
                firearms_data_id = f"post_{request.session['lite_api_user_id']}_{self.object_pk}_{self.good_pk}"

                session_data = self.request.POST.copy().dict()
                if "firearms_act_section" not in session_data:
                    session_data["firearms_act_section"] = selected_section

                request.session[firearms_data_id] = session_data
            else:
                self._action = post_good_on_application
                self.success_url = reverse("applications:goods",
                                           kwargs={"pk": self.object_pk})

            # if firearm section 5 is selected and the organization already has a valid section 5 then use saved details
            details = self.good["firearm_details"]
            section = None
            if details:
                section = self.request.POST.get(
                    "firearms_act_section") or details["firearms_act_section"]

            if not is_firearm_certificate_needed(application=self.application,
                                                 selected_section=section):
                if section == "firearms_act_section5":
                    document = self.get_section_document()
                    expiry_date = datetime.strptime(document["expiry_date"],
                                                    "%d %B %Y")
                    self.request.POST = self.request.POST.copy()
                    self.request.POST.update({
                        "section_certificate_missing":
                        details["section_certificate_missing"],
                        "section_certificate_missing_reason":
                        details["section_certificate_missing_reason"],
                        "section_certificate_number":
                        document["reference_code"],
                        "section_certificate_date_of_expiryday":
                        expiry_date.strftime("%d"),
                        "section_certificate_date_of_expirymonth":
                        expiry_date.strftime("%m"),
                        "section_certificate_date_of_expiryyear":
                        expiry_date.strftime("%Y"),
                        "firearms_certificate_uploaded":
                        bool(
                            details.get("section_certificate_missing_reason")),
                    })
Ejemplo n.º 6
0
    def on_submission(self, request, **kwargs):
        copied_request = request.POST.copy()
        is_pv_graded = copied_request.get("is_pv_graded", "") == "yes"
        is_software_technology = copied_request.get("item_category") in [
            "group3_software", "group3_technology"
        ]

        (
            is_firearm,
            is_firearm_ammunition_or_component,
            is_firearms_accessory,
            is_firearms_software_or_tech,
        ) = get_firearms_subcategory(copied_request.get("type"))

        is_rfd = copied_request.get("is_registered_firearm_dealer"
                                    ) == "True" or has_valid_rfd_certificate(
                                        self.application)

        firearm_act_status = copied_request.get(
            "is_covered_by_firearm_act_section_one_two_or_five", "")
        selected_section = copied_request.get("firearms_act_section", "")

        self.covered_by_firearms_act = firearm_act_status == "Yes"
        self.certificate_not_required = firearm_act_status == "No" or firearm_act_status == "Unsure"
        if is_rfd and self.covered_by_firearms_act:
            selected_section = "firearms_act_section5"

        show_serial_numbers_form = True
        if copied_request.get("has_identification_markings") == "False":
            show_serial_numbers_form = False

        if firearm_act_status == "Yes":
            self.show_section_upload_form = is_firearm_certificate_needed(
                application=self.application,
                selected_section=selected_section)

        self.forms = add_good_form_group(
            request=request,
            is_pv_graded=is_pv_graded,
            is_software_technology=is_software_technology,
            is_firearm=is_firearm,
            is_firearm_ammunition_or_component=
            is_firearm_ammunition_or_component,
            is_firearms_accessory=is_firearms_accessory,
            is_firearms_software_or_tech=is_firearms_software_or_tech,
            draft_pk=self.draft_pk,
            base_form_back_link=reverse("applications:goods",
                                        kwargs={"pk": self.kwargs["pk"]}),
            application=self.application,
            show_serial_numbers_form=show_serial_numbers_form,
            is_rfd=is_rfd,
        )

        if self.form_pk == self.number_of_forms:
            if self.show_section_upload_form:
                firearms_data_id = f"post_{request.session['lite_api_user_id']}_{self.draft_pk}"
                session_data = copied_request.dict()
                if "control_list_entries[]" in copied_request:
                    session_data[
                        "control_list_entries"] = copied_request.getlist(
                            "control_list_entries[]")
                    del session_data["control_list_entries[]"]

                if "firearms_act_section" not in session_data:
                    session_data["firearms_act_section"] = selected_section

                request.session[firearms_data_id] = session_data