"""Blueprint for Payment Group Payment Batch API.""" from http import HTTPStatus from typing import Any, Dict, Tuple from common_apispec import doc, marshal_with, use_kwargs from flask import Blueprint from payment.constants import constants from payment.logic import payment_group_payment_batch as logic from payment.schemas.payment_group_payment_account_detail import ( PaymentDebitCreditDataEntrySchema, ) from payment.schemas.payment_group_payment_batch import PaymentGroupPaymentBatchSchema from payment.utils.authorization import check_access payment_group_payment_batch_api = Blueprint( 'payment_group_payment_batch_api', __name__, url_prefix='/payment-group-payment-batch', ) @payment_group_payment_batch_api.route('/', methods=['POST']) @doc( tags=['payment group payment batch'], description='Create payment group payment batch.', ) @check_access @use_kwargs( PaymentGroupPaymentBatchSchema(exclude=('payment_group_payment_batch_id',)), location='json', ) @marshal_with( PaymentGroupPaymentBatchSchema, code=HTTPStatus.CREATED, description=HTTPStatus.CREATED.phrase, ) def create_payment_group_payment_batch(**params): """Create a payment_group_payment_batch.""" return logic.create_payment_group_payment_batch(**params), HTTPStatus.CREATED @payment_group_payment_batch_api.route( f'/' f'//debit', methods=['GET'], ) @doc( tags=['payment group payment batch'], description='Get debit data for payment group payment batch ' 'for "wht" or "payment" payment_type.', ) @check_access @marshal_with( PaymentDebitCreditDataEntrySchema(many=True), code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) @marshal_with( None, code=HTTPStatus.BAD_REQUEST, description=HTTPStatus.BAD_REQUEST.phrase, apply=False, ) def get_batch_debit_data(batch_id: int, payment_type: str): """Get batch debit data.""" return logic.get_batch_debit_data(batch_id, payment_type), HTTPStatus.OK @payment_group_payment_batch_api.route( '/', methods=['GET'], ) @doc( tags=['payment group payment batch'], description='Get payment group payment batch by id', ) @check_access @marshal_with( PaymentGroupPaymentBatchSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, apply=True, ) @marshal_with( None, code=HTTPStatus.BAD_REQUEST, description=HTTPStatus.BAD_REQUEST.phrase, apply=False, ) def get_payment_group_payment_batch( batch_id: int, ) -> Tuple[Dict[str, Any], int]: """Get payment group payment batch entity.""" return logic.get_payment_batch_by_id(batch_id), HTTPStatus.OK