"""Contract model.""" from sqlalchemy import Column from sqlalchemy import Date from sqlalchemy import DateTime from sqlalchemy import Enum from sqlalchemy import ForeignKey from sqlalchemy import Integer from sqlalchemy import String from sqlalchemy.engine import Row from moneyhub import models from moneyhub.constants.constants import ContractType from moneyhub.models.mysql_base import BaseModel from moneyhub.models.reference_signing_entity import ReferenceSigningEntity class Contract(BaseModel): """Contract model.""" __tablename__ = 'contract' contract_id = Column(Integer, primary_key=True) reference_signing_entity_id = Column( Integer, ForeignKey( ReferenceSigningEntity.reference_signing_entity_id ), nullable=False) contract_name = Column(String(180), nullable=True) contract_type = Column( Enum( *ContractType, name='contract_type', create_type=False ), nullable=True ) sap_created_at = Column(DateTime, nullable=True) term_start = Column(Date, nullable=True) term_end = Column(Date, nullable=True) @classmethod def get_contract_type_by_account(cls, account_id: int) -> Row: """GET a contract type for an account. Args: account_id (int): Returns: string """ filters = [models.LedgerAccountContract.account_id == account_id] with_entities = [cls.contract_type] return cls.query.with_entities(*with_entities).distinct().filter(*filters)\ .join( models.LedgerAccountContract, models.LedgerAccountContract.contract_id == cls.contract_id ).first()