"""Payment Entity Payoneer Program model.""" from abacus_common_logic.connectors.database import db from abacus_common_logic.models.base import CRUDMixin class PaymentEntityPayoneerProgram(db.Model, CRUDMixin): """Payment Entity Payoneer Program model.""" __tablename__ = 'payment_entity_payoneer_program' payment_entity_payoneer_program_id = db.Column(db.Integer, primary_key=True) payment_currency = db.Column(db.String(3), nullable=False) agreement_type_id = db.Column( db.Integer, db.ForeignKey('reference_agreement_type.reference_agreement_type_id'), nullable=False, ) payoneer_program_id = db.Column( db.Integer, db.ForeignKey('reference_payoneer_program.payoneer_program_id'), nullable=False, ) reference_payment_entity_id = db.Column(db.Integer, nullable=False) @classmethod def get_by_payment_entity_id(cls, reference_payment_entity_id: int): """Get by reference_payment_entity_id. Args: reference_payment_entity_id (int): id of the related reference payment entity """ return cls.query.filter_by( reference_payment_entity_id=reference_payment_entity_id ).all() @classmethod def get_by_criteria( cls, payment_entity_id: int, payment_currency: str, **kwargs, ): """Get a payment_entity_payoneer_program record by specified criteria. Args: payment_entity_id (int): Id of the related reference_payment_entity payment_currency (str): An alpha-3 ISO currency code **kwargs: Optional fields including agreement_type_id (int) """ query = cls.query.filter_by( reference_payment_entity_id=payment_entity_id, payment_currency=payment_currency, ) # Remove fields with value None filteredArgs = dict(filter(lambda x: x[1], kwargs.items())) if filteredArgs: query = query.filter_by(**filteredArgs) return query.first()