atst/atst/models/clin.py
graham-dds e2bd6bd823 Reorganize task order review template
- update copy in translations
 - Move TO totals out of sidebar
 - Group CLINs into 1 table with altered columns, instead of a
    separate table for each
 - edit CSS on CLIN table
2019-09-04 12:14:53 -04:00

60 lines
1.6 KiB
Python

from enum import Enum
from sqlalchemy import Column, Date, Enum as SQLAEnum, ForeignKey, Numeric, String
from sqlalchemy.orm import relationship
from atst.models import Base, mixins, types
class JEDICLINType(Enum):
JEDI_CLIN_1 = "JEDI_CLIN_1"
JEDI_CLIN_2 = "JEDI_CLIN_2"
JEDI_CLIN_3 = "JEDI_CLIN_3"
JEDI_CLIN_4 = "JEDI_CLIN_4"
class CLIN(Base, mixins.TimestampsMixin):
__tablename__ = "clins"
id = types.Id()
task_order_id = Column(ForeignKey("task_orders.id"), nullable=False)
task_order = relationship("TaskOrder")
number = Column(String, nullable=True)
start_date = Column(Date, nullable=True)
end_date = Column(Date, nullable=True)
obligated_amount = Column(Numeric(scale=2), nullable=True)
jedi_clin_type = Column(SQLAEnum(JEDICLINType, native_enum=False), nullable=True)
#
# NOTE: For now obligated CLINS are CLIN 1 + CLIN 3
#
def is_obligated(self):
return self.jedi_clin_type in [
JEDICLINType.JEDI_CLIN_1,
JEDICLINType.JEDI_CLIN_3,
]
@property
def type(self):
return "Base" if self.number[0] == "0" else "Option"
@property
def is_completed(self):
return all(
[
self.number,
self.start_date,
self.end_date,
self.obligated_amount,
self.jedi_clin_type,
]
)
def to_dictionary(self):
return {
c.name: getattr(self, c.name)
for c in self.__table__.columns
if c.name not in ["id"]
}