From 133155fb0bd63b82f14c2bc23e77270701634b09 Mon Sep 17 00:00:00 2001 From: zandercymatics <141044360+zandercymatics@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:45:02 -0600 Subject: [PATCH] Custom additional details page --- src/registrar/config/urls.py | 1 + .../portfolio_request_review_steps.html | 28 +-------- ...lio_domain_request_additional_details.html | 22 +++++++ src/registrar/utility/enums.py | 9 +-- src/registrar/views/domain_request.py | 60 +++++++++---------- 5 files changed, 58 insertions(+), 62 deletions(-) create mode 100644 src/registrar/templates/portfolio_domain_request_additional_details.html diff --git a/src/registrar/config/urls.py b/src/registrar/config/urls.py index e7f1883cd..57b84e2d5 100644 --- a/src/registrar/config/urls.py +++ b/src/registrar/config/urls.py @@ -62,6 +62,7 @@ for step, view in [ (Step.REVIEW, views.Review), # Portfolio steps (PortfolioDomainRequestStep.REQUESTING_ENTITY, views.RequestingEntity), + (PortfolioDomainRequestStep.ADDITIONAL_DETAILS, views.PortfolioAdditionalDetails) ]: domain_request_urls.append(path(f"{step}/", view.as_view(), name=step)) diff --git a/src/registrar/templates/includes/portfolio_request_review_steps.html b/src/registrar/templates/includes/portfolio_request_review_steps.html index 1c4286baa..9d3c5bdeb 100644 --- a/src/registrar/templates/includes/portfolio_request_review_steps.html +++ b/src/registrar/templates/includes/portfolio_request_review_steps.html @@ -53,32 +53,8 @@ {% endif %} {% if step == Step.ADDITIONAL_DETAILS %} - {% with title=form_titles|get_item:step %} - {% if domain_request.has_additional_details %} - {% include "includes/summary_item.html" with title="Additional Details" value=" " heading_level=heading_level editable=is_editable edit_link=domain_request_url %} -

CISA Regional Representative

- - -

Anything else

- - {% else %} - {% include "includes/summary_item.html" with title="Additional Details" value="Incomplete"|safe heading_level=heading_level editable=is_editable edit_link=domain_request_url %} - {% endif %} + {% with title=form_titles|get_item:step value=domain_request.anything_else|default:"Incomplete"|safe %} + {% include "includes/summary_item.html" with title=title value=value heading_level=heading_level editable=is_editable edit_link=domain_request_url %} {% endwith %} {% endif %} diff --git a/src/registrar/templates/portfolio_domain_request_additional_details.html b/src/registrar/templates/portfolio_domain_request_additional_details.html new file mode 100644 index 000000000..3b004354f --- /dev/null +++ b/src/registrar/templates/portfolio_domain_request_additional_details.html @@ -0,0 +1,22 @@ +{% extends 'domain_request_form.html' %} +{% load static field_helpers %} + +{% block form_required_fields_help_text %} +{% include "includes/required_fields.html" %} +{% endblock %} + +{% block form_fields %} + +
+ +

Is there anything else you’d like us to know about your domain request?

+
+
+ +
+

Provide details below. *

+ {% with attr_maxlength=2000 add_label_class="usa-sr-only" %} + {% input_with_errors forms.0.anything_else %} + {% endwith %} +
+{% endblock %} diff --git a/src/registrar/utility/enums.py b/src/registrar/utility/enums.py index f67fd3f61..41fffce72 100644 --- a/src/registrar/utility/enums.py +++ b/src/registrar/utility/enums.py @@ -73,12 +73,13 @@ class PortfolioDomainRequestStep(StrEnum): As with Django's own `TextChoices` class, steps will appear in the order they are defined. (Order matters.) """ - - # Portfolio - REQUESTING_ENTITY = "requesting_entity" + # NOTE: Append portfolio_ when customizing a view for portfolio. + # By default, these will redirect to the normal request flow views. + # After creating a new view, you will need to add this to urls.py. + REQUESTING_ENTITY = "portfolio_requesting_entity" CURRENT_SITES = "current_sites" DOTGOV_DOMAIN = "dotgov_domain" PURPOSE = "purpose" - ADDITIONAL_DETAILS = "additional_details" + ADDITIONAL_DETAILS = "portfolio_additional_details" REQUIREMENTS = "requirements" REVIEW = "review" diff --git a/src/registrar/views/domain_request.py b/src/registrar/views/domain_request.py index 1a5cf48cb..6d0146c6d 100644 --- a/src/registrar/views/domain_request.py +++ b/src/registrar/views/domain_request.py @@ -366,33 +366,23 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView): # from the list of "unlocked" steps. if self.is_portfolio: history_dict = { - "requesting_entity": self.domain_request.organization_name is not None, - "current_sites": ( + self.StepEnum.REQUESTING_ENTITY: self.domain_request.organization_name is not None, + self.StepEnum.CURRENT_SITES: ( self.domain_request.current_websites.exists() or self.domain_request.requested_domain is not None ), - "dotgov_domain": self.domain_request.requested_domain is not None, - "purpose": self.domain_request.purpose is not None, - "other_contacts": ( - self.domain_request.other_contacts.exists() - or self.domain_request.no_other_contacts_rationale is not None - ), - "additional_details": ( - # Additional details is complete as long as "has anything else" and "has cisa rep" are not None - ( - self.domain_request.has_anything_else_text is not None - and self.domain_request.has_cisa_representative is not None - ) - ), - "requirements": self.domain_request.is_policy_acknowledged is not None, - "review": self.domain_request.is_policy_acknowledged is not None, + self.StepEnum.DOTGOV_DOMAIN: self.domain_request.requested_domain is not None, + self.StepEnum.PURPOSE: self.domain_request.purpose is not None, + self.StepEnum.ADDITIONAL_DETAILS: self.domain_request.anything_else is not None, + self.StepEnum.REQUIREMENTS: self.domain_request.is_policy_acknowledged is not None, + self.StepEnum.REVIEW: self.domain_request.is_policy_acknowledged is not None, } else: history_dict = { - "generic_org_type": self.domain_request.generic_org_type is not None, - "tribal_government": self.domain_request.tribe_name is not None, - "organization_federal": self.domain_request.federal_type is not None, - "organization_election": self.domain_request.is_election_board is not None, - "organization_contact": ( + self.StepEnum.ORGANIZATION_TYPE: self.domain_request.generic_org_type is not None, + self.StepEnum.TRIBAL_GOVERNMENT: self.domain_request.tribe_name is not None, + self.StepEnum.ORGANIZATION_FEDERAL: self.domain_request.federal_type is not None, + self.StepEnum.ORGANIZATION_ELECTION: self.domain_request.is_election_board is not None, + self.StepEnum.ORGANIZATION_CONTACT: ( self.domain_request.federal_agency is not None or self.domain_request.organization_name is not None or self.domain_request.address_line1 is not None @@ -401,26 +391,26 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView): or self.domain_request.zipcode is not None or self.domain_request.urbanization is not None ), - "about_your_organization": self.domain_request.about_your_organization is not None, - "senior_official": self.domain_request.senior_official is not None, - "current_sites": ( + self.StepEnum.ABOUT_YOUR_ORGANIZATION: self.domain_request.about_your_organization is not None, + self.StepEnum.SENIOR_OFFICIAL: self.domain_request.senior_official is not None, + self.StepEnum.CURRENT_SITES: ( self.domain_request.current_websites.exists() or self.domain_request.requested_domain is not None ), - "dotgov_domain": self.domain_request.requested_domain is not None, - "purpose": self.domain_request.purpose is not None, - "other_contacts": ( + self.StepEnum.DOTGOV_DOMAIN: self.domain_request.requested_domain is not None, + self.StepEnum.PURPOSE: self.domain_request.purpose is not None, + self.StepEnum.OTHER_CONTACTS: ( self.domain_request.other_contacts.exists() or self.domain_request.no_other_contacts_rationale is not None ), - "additional_details": ( + self.StepEnum.ADDITIONAL_DETAILS: ( # Additional details is complete as long as "has anything else" and "has cisa rep" are not None ( self.domain_request.has_anything_else_text is not None and self.domain_request.has_cisa_representative is not None ) ), - "requirements": self.domain_request.is_policy_acknowledged is not None, - "review": self.domain_request.is_policy_acknowledged is not None, + self.StepEnum.REQUIREMENTS: self.domain_request.is_policy_acknowledged is not None, + self.StepEnum.REVIEW: self.domain_request.is_policy_acknowledged is not None, } return [key for key, value in history_dict.items() if value] @@ -477,7 +467,7 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView): return request_step_list(self) def goto(self, step): - if step == "generic_org_type" or step == "requesting_entity": + if step == "generic_org_type" or step == "portfolio_requesting_entity": # We need to avoid creating a new domain request if the user # clicks the back button self.request.session["new_request"] = False @@ -588,6 +578,12 @@ class RequestingEntity(DomainRequestWizard): forms = [forms.RequestingEntityForm] +class PortfolioAdditionalDetails(DomainRequestWizard): + template_name = "portfolio_domain_request_additional_details.html" + + forms = [forms.AnythingElseForm] + + # Non-portfolio pages class OrganizationType(DomainRequestWizard): template_name = "domain_request_org_type.html"