"""Contract Reserve Model.""" from abacus_common_logic.connectors.database import db from abacus_common_logic.models.base import BaseModel from abacus_contract.models.account_contract import AccountContract class ContractReserve(BaseModel): """Contract Reserve Model.""" __tablename__ = 'contract_reserve' contract_reserve_id = db.Column(db.Integer, primary_key=True) contract_id = db.Column( db.Integer, db.ForeignKey('contract.contract_id'), nullable=False ) reserve_rate = db.Column(db.Numeric(5, 2), nullable=True) reserve_release_offset_in_months = db.Column(db.SmallInteger, nullable=False) installments_in_months = db.Column(db.SmallInteger, nullable=False) release_schedule = db.Column( db.JSON, nullable=False ) deleted_at = db.Column(db.DateTime, nullable=True) deleted_by = db.Column(db.String(180), nullable=True) @classmethod def get_by_ids(cls, contract_reserve_ids: list): """Get contract reserves by their contract_reserve_ids.""" query = cls.query.join( AccountContract, cls.contract_id == AccountContract.contract_id ).filter( cls.contract_reserve_id.in_(contract_reserve_ids) ) return query.with_entities( AccountContract.account_id, cls.contract_id, cls.contract_reserve_id, cls.installments_in_months, cls.release_schedule, cls.reserve_rate, cls.reserve_release_offset_in_months ).all() @classmethod def get_by_contract_ids(cls, contract_ids: list): """Get contract reserves by contract_ids.""" return cls.query.filter( cls.contract_id.in_(contract_ids), cls.deleted_at.is_(None), cls.deleted_by.is_(None) ).all()