Merge branch 'main' into sspj/domain-model

This commit is contained in:
Seamus Johnston 2022-11-28 11:53:22 -06:00
commit 758c645943
No known key found for this signature in database
GPG key ID: 2F21225985069105
37 changed files with 1339 additions and 232 deletions

View file

@ -1,3 +1,5 @@
from __future__ import annotations
from django.db import models
from django_fsm import FSMField, transition # type: ignore
@ -6,6 +8,11 @@ from .contact import Contact
from .user import User
from .website import Website
from typing import TYPE_CHECKING, Union
if TYPE_CHECKING:
from ..forms.application_wizard import ApplicationWizard
class DomainApplication(TimeStampedModel):
@ -225,3 +232,36 @@ class DomainApplication(TimeStampedModel):
# if no exception was raised, then we don't need to do anything
# inside this method, keep the `pass` here to remind us of that
pass
# ## Form policies ###
#
# These methods control what questions need to be answered by applicants
# during the application flow. They are policies about the application so
# they appear here.
@staticmethod
def _get_organization_type(wizard: ApplicationWizard) -> Union[str, None]:
"""Extract the answer to the organization type question from the wizard."""
# using the step data from the storage is a workaround for this
# bug in django-formtools version 2.4
# https://github.com/jazzband/django-formtools/issues/220
type_data = wizard.storage.get_step_data("organization_type")
if type_data:
return type_data.get("organization_type-organization_type")
return None
@staticmethod
def show_organization_federal(wizard: ApplicationWizard) -> bool:
"""Show this step if the answer to the first question was "federal"."""
return DomainApplication._get_organization_type(wizard) == "Federal"
@staticmethod
def show_organization_election(wizard: ApplicationWizard) -> bool:
"""Show this step if the answer to the first question implies it.
This shows for answers that aren't "Federal" or "Interstate".
"""
type_answer = DomainApplication._get_organization_type(wizard)
if type_answer and type_answer not in ("Federal", "Interstate"):
return True
return False