"""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: 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 Optional Fields: - agreement_type_id(int): Id of the related agreement type """ 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()