"""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.""" return cls.query.filter( cls.period_interval == period_interval, cls.period_type.ilike(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()