Merge pull request #139 from dod-ccpo/request-status-names
Update request status names to reflect document
This commit is contained in:
@@ -2,7 +2,8 @@ from sqlalchemy import exists, and_
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
from sqlalchemy.orm.attributes import flag_modified
|
||||
|
||||
from atst.models import Request, RequestStatusEvent
|
||||
from atst.models.request import Request
|
||||
from atst.models.request_status_event import RequestStatusEvent, RequestStatus
|
||||
from atst.database import db
|
||||
|
||||
from .exceptions import NotFoundError
|
||||
@@ -32,9 +33,7 @@ class Requests(object):
|
||||
@classmethod
|
||||
def create(cls, creator_id, body):
|
||||
request = Request(creator=creator_id, body=body)
|
||||
|
||||
status_event = RequestStatusEvent(new_status="incomplete")
|
||||
request.status_events.append(status_event)
|
||||
request = Requests.set_status(request, RequestStatus.STARTED)
|
||||
|
||||
db.session.add(request)
|
||||
db.session.commit()
|
||||
@@ -74,10 +73,13 @@ class Requests(object):
|
||||
|
||||
@classmethod
|
||||
def submit(cls, request):
|
||||
request.status_events.append(RequestStatusEvent(new_status="submitted"))
|
||||
|
||||
new_status = None
|
||||
if Requests.should_auto_approve(request):
|
||||
request.status_events.append(RequestStatusEvent(new_status="approved"))
|
||||
new_status = RequestStatus.PENDING_FINANCIAL_VERIFICATION
|
||||
else:
|
||||
new_status = RequestStatus.PENDING_CCPO_APPROVAL
|
||||
|
||||
request = Requests.set_status(request, new_status)
|
||||
|
||||
db.session.add(request)
|
||||
db.session.commit()
|
||||
@@ -100,11 +102,6 @@ class Requests(object):
|
||||
|
||||
request.body = deep_merge(request_delta, request.body)
|
||||
|
||||
if Requests.should_allow_submission(request):
|
||||
request.status_events.append(
|
||||
RequestStatusEvent(new_status="pending_submission")
|
||||
)
|
||||
|
||||
# Without this, sqlalchemy won't notice the change to request.body,
|
||||
# since it doesn't track dictionary mutations by default.
|
||||
flag_modified(request, "body")
|
||||
@@ -112,6 +109,20 @@ class Requests(object):
|
||||
db.session.add(request)
|
||||
db.session.commit()
|
||||
|
||||
@classmethod
|
||||
def set_status(cls, request: Request, status: RequestStatus):
|
||||
status_event = RequestStatusEvent(new_status=status)
|
||||
request.status_events.append(status_event)
|
||||
return request
|
||||
|
||||
@classmethod
|
||||
def action_required_by(cls, request):
|
||||
return {
|
||||
RequestStatus.STARTED: "mission_owner",
|
||||
RequestStatus.PENDING_FINANCIAL_VERIFICATION: "mission_owner",
|
||||
RequestStatus.PENDING_CCPO_APPROVAL: "ccpo"
|
||||
}.get(request.status)
|
||||
|
||||
@classmethod
|
||||
def should_auto_approve(cls, request):
|
||||
try:
|
||||
|
@@ -21,12 +21,3 @@ class Request(Base):
|
||||
@property
|
||||
def status(self):
|
||||
return self.status_events[-1].new_status
|
||||
|
||||
@property
|
||||
def action_required_by(self):
|
||||
return {
|
||||
"incomplete": "mission_owner",
|
||||
"pending_submission": "mission_owner",
|
||||
"submitted": "ccpo",
|
||||
"approved": "mission_owner",
|
||||
}.get(self.status)
|
||||
|
@@ -1,5 +1,6 @@
|
||||
from sqlalchemy import Column, func, ForeignKey
|
||||
from sqlalchemy.types import DateTime, String, BigInteger
|
||||
from enum import Enum
|
||||
from sqlalchemy import Column, func, ForeignKey, Enum as SQLAEnum
|
||||
from sqlalchemy.types import DateTime, BigInteger
|
||||
from sqlalchemy.schema import Sequence
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
|
||||
@@ -7,11 +8,20 @@ from atst.models import Base
|
||||
from atst.models.types import Id
|
||||
|
||||
|
||||
class RequestStatus(Enum):
|
||||
STARTED = "started"
|
||||
PENDING_FINANCIAL_VERIFICATION = "pending_financial_verification"
|
||||
PENDING_CCPO_APPROVAL = "pending_ccpo_approval"
|
||||
APPROVED = "approved"
|
||||
EXPIRED = "expired"
|
||||
DELETED = "deleted"
|
||||
|
||||
|
||||
class RequestStatusEvent(Base):
|
||||
__tablename__ = "request_status_events"
|
||||
|
||||
id = Id()
|
||||
new_status = Column(String())
|
||||
new_status = Column(SQLAEnum(RequestStatus))
|
||||
time_created = Column(DateTime(timezone=True), server_default=func.now())
|
||||
request_id = Column(
|
||||
UUID(as_uuid=True), ForeignKey("requests.id", ondelete="CASCADE")
|
||||
|
Reference in New Issue
Block a user