46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from enum import Enum
|
|
from sqlalchemy import Column, Date, Enum as SQLAEnum, ForeignKey, Numeric, String
|
|
from sqlalchemy.dialects.postgresql import ARRAY
|
|
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)
|
|
loas = Column(ARRAY(String), server_default="{}", 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,
|
|
]
|
|
|
|
def to_dictionary(self):
|
|
return {
|
|
c.name: getattr(self, c.name)
|
|
for c in self.__table__.columns
|
|
if c.name not in ["id"]
|
|
}
|