This commit is contained in:
zandercymatics 2023-12-08 11:53:48 -07:00
parent 6e2bba5dc9
commit b85f1e9d1b
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
5 changed files with 33 additions and 9 deletions

View file

@ -214,7 +214,9 @@ class DomainFixture(DomainApplicationFixture):
for user in users:
# approve one of each users in review status domains
application = DomainApplication.objects.filter(creator=user, status=DomainApplication.ApplicationStatus.IN_REVIEW).last()
application = DomainApplication.objects.filter(
creator=user, status=DomainApplication.ApplicationStatus.IN_REVIEW
).last()
logger.debug(f"Approving {application} for {user}")
application.approve()
application.save()

View file

@ -18,7 +18,7 @@ logger = logging.getLogger(__name__)
class DomainApplication(TimeStampedModel):
"""A registrant's application for a new domain."""
# Constants for choice fields
class ApplicationStatus(models.TextChoices):
STARTED = "started", "Started"
@ -583,7 +583,11 @@ class DomainApplication(TimeStampedModel):
except EmailSendingError:
logger.warning("Failed to send confirmation email", exc_info=True)
@transition(field="status", source=[ApplicationStatus.STARTED, ApplicationStatus.ACTION_NEEDED, ApplicationStatus.WITHDRAWN], target=ApplicationStatus.SUBMITTED)
@transition(
field="status",
source=[ApplicationStatus.STARTED, ApplicationStatus.ACTION_NEEDED, ApplicationStatus.WITHDRAWN],
target=ApplicationStatus.SUBMITTED,
)
def submit(self):
"""Submit an application that is started.
@ -621,7 +625,11 @@ class DomainApplication(TimeStampedModel):
"emails/status_change_in_review_subject.txt",
)
@transition(field="status", source=[ApplicationStatus.IN_REVIEW, ApplicationStatus.REJECTED], target=ApplicationStatus.ACTION_NEEDED)
@transition(
field="status",
source=[ApplicationStatus.IN_REVIEW, ApplicationStatus.REJECTED],
target=ApplicationStatus.ACTION_NEEDED,
)
def action_needed(self):
"""Send back an application that is under investigation or rejected.
@ -635,7 +643,12 @@ class DomainApplication(TimeStampedModel):
@transition(
field="status",
source=[ApplicationStatus.SUBMITTED, ApplicationStatus.IN_REVIEW, ApplicationStatus.REJECTED, ApplicationStatus.INELIGIBLE],
source=[
ApplicationStatus.SUBMITTED,
ApplicationStatus.IN_REVIEW,
ApplicationStatus.REJECTED,
ApplicationStatus.INELIGIBLE,
],
target=ApplicationStatus.APPROVED,
)
def approve(self):
@ -669,7 +682,11 @@ class DomainApplication(TimeStampedModel):
"emails/status_change_approved_subject.txt",
)
@transition(field="status", source=[ApplicationStatus.SUBMITTED, ApplicationStatus.IN_REVIEW], target=ApplicationStatus.WITHDRAWN)
@transition(
field="status",
source=[ApplicationStatus.SUBMITTED, ApplicationStatus.IN_REVIEW],
target=ApplicationStatus.WITHDRAWN,
)
def withdraw(self):
"""Withdraw an application that has been submitted."""
self._send_status_update_email(

View file

@ -15,7 +15,6 @@ logger = logging.getLogger(__name__)
class DomainInvitation(TimeStampedModel):
# Constants for status field
class DomainInvitationStatus(models.TextChoices):
INVITED = "invited", "Invited"

View file

@ -67,7 +67,9 @@ class User(AbstractUser):
def check_domain_invitations_on_login(self):
"""When a user first arrives on the site, we need to retrieve any domain
invitations that match their email address."""
for invitation in DomainInvitation.objects.filter(email=self.email, status=DomainInvitation.DomainInvitationStatus.INVITED):
for invitation in DomainInvitation.objects.filter(
email=self.email, status=DomainInvitation.DomainInvitationStatus.INVITED
):
try:
invitation.retrieve()
invitation.save()

View file

@ -312,7 +312,11 @@ class ApplicationWizard(ApplicationWizardPermissionView, TemplateView):
# if the current application has ApplicationStatus.ACTION_NEEDED status, this check should not be performed
if self.application.status == DomainApplication.ApplicationStatus.ACTION_NEEDED:
return []
check_statuses = [DomainApplication.ApplicationStatus.SUBMITTED, DomainApplication.ApplicationStatus.IN_REVIEW, DomainApplication.ApplicationStatus.ACTION_NEEDED]
check_statuses = [
DomainApplication.ApplicationStatus.SUBMITTED,
DomainApplication.ApplicationStatus.IN_REVIEW,
DomainApplication.ApplicationStatus.ACTION_NEEDED,
]
return DomainApplication.objects.filter(creator=self.request.user, status__in=check_statuses)
def get_context_data(self):