"""Contract Lifecycle Schedule Detail Model.""" from abacus_common_logic.connectors.database import db from abacus_common_logic.models.base import CRUDMixin from sqlalchemy import Enum from abacus_contract.constants.constants import\ CONTRACT_LIFECYCLE_SCHEDULE_DETAIL_PERIOD_TYPES class ContractLifecycleScheduleDetail(db.Model, CRUDMixin): """Contract Lifecycle Schedule Detail Model.""" __tablename__ = 'contract_lifecycle_schedule_detail' contract_lifecycle_schedule_detail_id = db.Column(db.Integer, primary_key=True) period_interval = db.Column(db.Integer, nullable=False) period_type = db.Column(Enum( *CONTRACT_LIFECYCLE_SCHEDULE_DETAIL_PERIOD_TYPES, name='period_type', create_type=False) ) @classmethod def get_by_period_interval_and_period_type( cls, period_interval: int, period_type: str ) -> 'ContractLifecycleScheduleDetail': """Get a contract lifecycle schedule detail record by period interval and period type.""" # noqa: E501 return cls.query.filter( cls.period_interval == period_interval, cls.period_type == period_type ).first() @classmethod def get_by_ids( cls, contract_lifecycle_schedule_detail_ids: list ) -> list: """Get a list of contract lifecycle schedule details by ids. Args: contract_lifecycle_schedule_detail_ids (list): List of contract lifecycle schedule detail ids. """ return cls.query.filter( cls. contract_lifecycle_schedule_detail_id. in_(contract_lifecycle_schedule_detail_ids) ).all()