atst/atst/models/request.py
2018-08-30 16:31:09 -04:00

50 lines
1.4 KiB
Python

from sqlalchemy import Column, func, ForeignKey
from sqlalchemy.types import DateTime
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import relationship
from atst.models import Base
from atst.models.types import Id
class Request(Base):
__tablename__ = "requests"
id = Id()
time_created = Column(DateTime(timezone=True), server_default=func.now())
body = Column(JSONB)
status_events = relationship(
"RequestStatusEvent", backref="request", order_by="RequestStatusEvent.sequence"
)
workspace = relationship("Workspace", uselist=False, backref="request")
user_id = Column(ForeignKey("users.id"), nullable=False)
creator = relationship("User")
task_order_id = Column(ForeignKey("task_order.id"))
task_order = relationship("TaskOrder")
@property
def status(self):
return self.status_events[-1].new_status
@property
def status_displayname(self):
return self.status_events[-1].displayname
@property
def annual_spend(self):
monthly = self.body.get("details_of_use", {}).get("estimated_monthly_spend", 0)
return monthly * 12
@property
def financial_verification(self):
return self.body.get("financial_verification")
@property
def is_financially_verified(self):
if self.task_order:
return self.task_order.verified
return False