Skip to content

Commit

Permalink
Make security approval section driven by exporter answer API
Browse files Browse the repository at this point in the history
  • Loading branch information
currycoder committed Jan 24, 2025
1 parent f78967a commit 6b8a19a
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 19 deletions.
6 changes: 6 additions & 0 deletions exporter/applications/views/goods/common/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from exporter.applications.services import get_application
from exporter.goods.services import get_good, get_good_on_application
from exporter.exporter_answers.services import get_exporter_answer_set


class GoodOnApplicationMixin:
Expand Down Expand Up @@ -40,4 +41,9 @@ def dispatch(self, request, *args, **kwargs):
except requests.exceptions.HTTPError:
raise Http404(f"Couldn't get application {kwargs['pk']}")

exporter_answers, _ = get_exporter_answer_set(request, kwargs["pk"])
self.exporter_answers = {}
for answer_set in exporter_answers["results"]:
self.exporter_answers[answer_set["section"]] = answer_set["answers"]

return super().dispatch(request, *args, **kwargs)
18 changes: 11 additions & 7 deletions exporter/applications/views/security_approvals/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from core.constants import SecurityClassifiedApprovalsType

from core.wizard.views import BaseSessionWizardView
from exporter.applications.services import put_application
from exporter.exporter_answers.services import post_exporter_answer_set
from exporter.applications.views.goods.common.mixins import ApplicationMixin

from .forms import (
Expand Down Expand Up @@ -76,20 +76,23 @@ def get_success_url(self):
)

@expect_status(
HTTPStatus.OK,
HTTPStatus.CREATED,
"Error updating export details",
"Unexpected error updating export details",
)
def update_application(self, form_dict):
payload = self.get_payload(form_dict)
return put_application(
def submit_answers(self, form_dict):
answers_payload = self.get_payload(form_dict)
return post_exporter_answer_set(
self.request,
"application",
"security_approvals",
"standardapplication",
self.application["id"],
payload,
answers_payload,
)

def done(self, form_list, form_dict, **kwargs):
self.update_application(form_dict)
self.submit_answers(form_dict)
return redirect(self.get_success_url())


Expand All @@ -98,6 +101,7 @@ class SecurityApprovalsSummaryView(LoginRequiredMixin, ApplicationMixin, Templat

def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context["security_approval_answers"] = self.exporter_answers.get("security_approvals")
context["application"] = self.application
context["back_link_url"] = reverse("applications:task_list", kwargs={"pk": self.kwargs["pk"]})
context["security_classified_approvals_types"] = SecurityClassifiedApprovalsType
Expand Down
Empty file.
24 changes: 24 additions & 0 deletions exporter/exporter_answers/services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from django.conf import settings


from core import client


def post_exporter_answer_set(request, flow, section, target_content_type, target_object_id, answers):
data = {
"flow": flow,
"section": section,
"answers": answers,
"frontend_commit_sha": settings.GIT_COMMIT,
"target_content_type": target_content_type,
"target_object_id": target_object_id,
}
response = client.post(request, f"/exporter/exporter-answers/exporter-answer-set/", data)
return response.json(), response.status_code


def get_exporter_answer_set(request, target_object_id):
response = client.get(
request, f"/exporter/exporter-answers/exporter-answer-set/?target_object_id={target_object_id}&status=draft"
)
return response.json(), response.status_code
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,27 @@ <h1 class="govuk-heading-l">
<dl class="govuk-summary-list">
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">Do you have an MOD security approval, such as F680 or F1686?</dt>
<dd class="govuk-summary-list__value">{{ application.is_mod_security_approved|yesno|capfirst }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.is_mod_security_approved|yesno|capfirst }}</dd>
<dd class="govuk-summary-list__actions">
<a id="mod-approval-status" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_details' application.id %}">Change</a>
</dd>
</div>
{% if application.is_mod_security_approved %}
{% if security_approval_answers.security_approvals %}
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">What type of approval do you have?</dt>
<dd class="govuk-summary-list__value">{{ application.security_approvals|list_to_choice_labels:security_classified_approvals_types }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.security_approvals|list_to_choice_labels:security_classified_approvals_types }}</dd>
<dd class="govuk-summary-list__actions">
<a id="security-approvals" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_details' application.id %}">Change
</a>
</dd>
</div>
{% endif %}
{% if "F680" in application.security_approvals %}
{% if "F680" in security_approval_answers.security_approvals %}
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">Are any products on this application subject to ITAR controls?</dt>
<dd class="govuk-summary-list__value">{{ application.subject_to_itar_controls|yesno|capfirst }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.subject_to_itar_controls|yesno|capfirst }}</dd>
<dd class="govuk-summary-list__actions">
<a id="itar-controls-status" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_subject_to_itar_controls' application.id %}">Change
Expand All @@ -50,7 +50,7 @@ <h1 class="govuk-heading-l">

<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">What is the F680 reference number?</dt>
<dd class="govuk-summary-list__value">{{ application.f680_reference_number }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.f680_reference_number }}</dd>
<dd class="govuk-summary-list__actions">
<a id="f680-reference-number" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_f680_reference_number' application.id %}">Change
Expand All @@ -59,37 +59,37 @@ <h1 class="govuk-heading-l">
</div>
{% endif %}

{% if "F1686" in application.security_approvals %}
{% if "F1686" in security_approval_answers.security_approvals %}
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">Who is the contracting authority (or signatory and job role) for your F1686 approval?</dt>
<dd class="govuk-summary-list__value">{{ application.f1686_contracting_authority }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.f1686_contracting_authority }}</dd>
<dd class="govuk-summary-list__actions">
<a id="f1686-authority" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_f1686_details' application.id %}">Change</a>
</dd>
</div>
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">What is the F1686 reference number?</dt>
<dd class="govuk-summary-list__value">{{ application.f1686_reference_number }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.f1686_reference_number }}</dd>
<dd class="govuk-summary-list__actions">
<a id="f1686-reference-number" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_f1686_details' application.id %}">Change</a>
</dd>
</div>
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">When was the F1686 approved?</dt>
<dd class="govuk-summary-list__value">{{ application.f1686_approval_date|str_date_only }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.f1686_approval_date|str_date_only }}</dd>
<dd class="govuk-summary-list__actions">
<a id="f1686-approval-date" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_f1686_details' application.id %}">Change
</a>
</dd>
</div>
{% endif %}
{% if "Other" in application.security_approvals %}
{% if "Other" in security_approval_answers.security_approvals %}
<div class="govuk-summary-list__row">
<dt class="govuk-summary-list__key">Provide details of your written approval</dt>
<dd class="govuk-summary-list__value">{{ application.other_security_approval_details }}</dd>
<dd class="govuk-summary-list__value">{{ security_approval_answers.other_security_approval_details }}</dd>
<dd class="govuk-summary-list__actions">
<a id="other-security-approvals" class="govuk-link govuk-link--no-visited-state"
href="{% url 'applications:edit_security_approvals_security_other_details' application.id %}">Change
Expand Down

0 comments on commit 6b8a19a

Please sign in to comment.