"""Payoneer Program model.""" from abacus_common_logic.connectors.database import db from abacus_common_logic.models.base import CRUDMixin from abacus_account.models.payment_entity_payoneer_program import ( PaymentEntityPayoneerProgram, ) class ReferencePayoneerProgram(db.Model, CRUDMixin): """Payoneer Program model. NOTE: payoneer_program_id is equal to the program ID provided by Payoneer. It is not autoincrementing, but rather defined on the ID assigned by Payoneer. """ __tablename__ = 'reference_payoneer_program' payoneer_program_id = db.Column(db.Integer, primary_key=True) payoneer_program_name = db.Column(db.String(255), nullable=False) funding_currency = db.Column(db.String(3), nullable=False) reference_payment_type_id = db.Column(db.Integer, nullable=False) payment_entity_payoneer_programs = db.relationship( 'PaymentEntityPayoneerProgram', backref='reference_payoneer_program' ) account_payee = db.relationship( 'AccountPayee', backref='reference_payoneer_program', uselist=False ) @staticmethod def get_payoneer_program_by_params( currency_code: str, agreement_type_id: int, payment_entity_id: int ): """Build a query to get payoneer program by params.""" query = ( db.session.query(ReferencePayoneerProgram) .join(ReferencePayoneerProgram.payment_entity_payoneer_programs) .filter( PaymentEntityPayoneerProgram.payment_currency == currency_code, ) ) query = query.filter( PaymentEntityPayoneerProgram.agreement_type_id == agreement_type_id ) query = query.filter( PaymentEntityPayoneerProgram.reference_payment_entity_id == payment_entity_id # noqa: E501 ) return query.first()