"""Payment Group Payment Account Detail repository.""" import typing from abacus_common_logic.models.base import db from sqlalchemy import and_, select from payment.models.payment_group_payment_account import PaymentGroupPaymentAccount from payment.models.payment_group_payment_account_detail import ( PaymentGroupPaymentAccountDetail, ) from payment.models.payment_group_payment_batch_account import ( PaymentGroupPaymentBatchAccount, ) def get_by_payment_group_payment_batch( payment_group_payment_batch_id: int, ) -> typing.List[PaymentGroupPaymentAccountDetail]: """Get items by payment_group_payment_batch_id.""" filter_query = ( select(PaymentGroupPaymentAccount.payment_group_payment_account_id) .select_from(PaymentGroupPaymentAccount) .join( PaymentGroupPaymentBatchAccount, PaymentGroupPaymentBatchAccount.payment_group_payment_account_id # noqa == PaymentGroupPaymentAccount.payment_group_payment_account_id, ) .where( PaymentGroupPaymentBatchAccount.payment_group_payment_batch_id # noqa == payment_group_payment_batch_id ) ) return ( db.session.execute( select(PaymentGroupPaymentAccountDetail).where( and_( PaymentGroupPaymentAccountDetail.payment_group_payment_account_id.in_( filter_query ), PaymentGroupPaymentAccountDetail.payable_amount_post_tax > 0, ) ) ) .scalars() .all() )