diff --git a/atst/domain/requests.py b/atst/domain/requests.py index cc577d09..d44be200 100644 --- a/atst/domain/requests.py +++ b/atst/domain/requests.py @@ -87,6 +87,8 @@ class Requests(object): @classmethod def submit(cls, request): + request = Requests.set_status(request, RequestStatus.SUBMITTED) + new_status = None if Requests.should_auto_approve(request): new_status = RequestStatus.PENDING_FINANCIAL_VERIFICATION diff --git a/atst/models/request.py b/atst/models/request.py index e653edf8..419e8156 100644 --- a/atst/models/request.py +++ b/atst/models/request.py @@ -5,6 +5,10 @@ from sqlalchemy.orm import relationship from atst.models import Base from atst.models.types import Id +from atst.models.request_status_event import RequestStatus + +def first_or_none(predicate, lst): + return next((x for x in lst if predicate(x)), None,) class Request(Base): @@ -47,3 +51,12 @@ class Request(Base): if self.task_order: return self.task_order.verified return False + + @property + def last_submission_date(self): + def _is_submission(status_event): + return status_event.new_status == RequestStatus.SUBMITTED + + last_submission = first_or_none(_is_submission, reversed(self.status_events)) + if last_submission: + return last_submission.time_created diff --git a/atst/models/request_status_event.py b/atst/models/request_status_event.py index 810a4427..bf95f5ce 100644 --- a/atst/models/request_status_event.py +++ b/atst/models/request_status_event.py @@ -10,6 +10,7 @@ from atst.models.types import Id class RequestStatus(Enum): STARTED = "Started" + SUBMITTED = "Submitted" PENDING_FINANCIAL_VERIFICATION = "Pending Financial Verification" PENDING_CCPO_APPROVAL = "Pending CCPO Approval" CHANGES_REQUESTED = "Changes Requested" diff --git a/tests/domain/test_requests.py b/tests/domain/test_requests.py index 38a76e93..6e9e2d5d 100644 --- a/tests/domain/test_requests.py +++ b/tests/domain/test_requests.py @@ -70,6 +70,15 @@ def test_should_allow_submission(new_request): assert not Requests.should_allow_submission(new_request) +def test_request_knows_its_last_submission_date(new_request): + submitted_request = Requests.submit(new_request) + assert submitted_request.last_submission_date + + +def test_request_knows_if_it_has_no_last_submission_date(new_request): + assert new_request.last_submission_date is None + + def test_exists(session): user_allowed = UserFactory.create() user_denied = UserFactory.create()