"""Account payee model.""" from typing import Self from abacus_common_logic.models.base import BaseModel, db class AccountPayee(BaseModel): """Account payee model.""" __tablename__ = 'account_payee' account_payee_id = db.Column(db.Integer, primary_key=True) account_id = db.Column( db.Integer, db.ForeignKey('account.account_id'), nullable=False ) payoneer_program_id = db.Column( db.Integer, db.ForeignKey('reference_payoneer_program.payoneer_program_id'), nullable=True, ) payoneer_payee_id = db.Column(db.Integer, nullable=True) payoneer_payee_name = db.Column(db.String(180), nullable=True) payoneer_iframe_url = db.Column(db.String(180), nullable=True) payoneer_iframe_url_date = db.Column(db.Date, nullable=True) payoneer_session_id = db.Column(db.String(180), nullable=True) sap_vendor_id = db.Column(db.Integer, nullable=True) reference_payment_type_id = db.Column( db.Integer, db.ForeignKey('reference_payment_type.reference_payment_type_id'), nullable=True, ) payment_description = db.Column( db.String(250), nullable=False, server_default='', default='' ) @classmethod def get_filtered_query(cls, params): """Get account payees by field values. To prevent filters from being injected, they are applied to the account payee search in an ad-hoc fashion. """ account_ids = params.get('account_ids', None) payee_ids = params.get('account_payee_ids', None) query = cls.query # Account Payee IDs Filter if payee_ids is not None: query = query.filter(cls.account_payee_id.in_(payee_ids)) # Account IDs Filter if account_ids is not None: query = query.filter(cls.account_id.in_(account_ids)) return query @classmethod def get_by_account_id(cls, account_id: int) -> Self: """Get account payee by account ID.""" return cls.query.filter_by(account_id=account_id).first()