"""Blueprint for Payment Group Payment Report API.""" from http import HTTPStatus from common_apispec import doc, marshal_with, use_kwargs from flask import Blueprint from payment.logic import report_payment_group_payment as logic from payment.schemas.report_payment_group_payment import ( ReportPaymentGroupPaymentDetailSchema, ReportPaymentGroupPaymentDownloadSchema, ReportPaymentGroupPaymentPutSchema, ) from payment.utils.authorization import check_access report_payment_group_payment_api = Blueprint( 'report_payment_group_payment_api', __name__ ) @report_payment_group_payment_api.route( '/payment-group-payment//report', methods=['PUT'] ) @doc(tags=['reports'], description='Create or update payment group payment report.') @check_access @use_kwargs(ReportPaymentGroupPaymentPutSchema, location='json', required=True) @marshal_with( ReportPaymentGroupPaymentDetailSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) @marshal_with( ReportPaymentGroupPaymentDetailSchema, code=HTTPStatus.CREATED, description=HTTPStatus.CREATED.phrase, ) def create_or_update_report( payment_group_payment_id: int, report_export_url: str, report_type: str ) -> tuple: report, is_created = logic.create_or_update_report( payment_group_payment_id=payment_group_payment_id, report_export_url=report_export_url, report_type=report_type, ) return report, HTTPStatus.CREATED if is_created else HTTPStatus.OK @report_payment_group_payment_api.route( '/report-payment-group-payment/', methods=['GET'], ) @doc(tags=['reports'], description='Get payment group payment report by id.') @check_access @marshal_with( ReportPaymentGroupPaymentDetailSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_report(report_payment_group_payment_id: int) -> tuple: report = logic.get_report( report_payment_group_payment_id=report_payment_group_payment_id ) return report, HTTPStatus.OK @report_payment_group_payment_api.route( '/report-payment-group-payment/', methods=['DELETE'], ) @doc(tags=['reports'], description='Delete payment group payment report by id.') @check_access @marshal_with( None, code=HTTPStatus.NO_CONTENT, description=HTTPStatus.NO_CONTENT.phrase, apply=False, ) def delete_report(report_payment_group_payment_id: int) -> tuple: logic.delete_report(report_payment_group_payment_id=report_payment_group_payment_id) return None, HTTPStatus.NO_CONTENT @report_payment_group_payment_api.route( '/report-payment-group-payment//download', methods=['GET'], ) @doc(tags=['reports'], description='Download payment group payment report.') @check_access @marshal_with( ReportPaymentGroupPaymentDownloadSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def download_report(report_payment_group_payment_id: int) -> tuple: download = logic.get_download( report_payment_group_payment_id=report_payment_group_payment_id ) return download, HTTPStatus.OK @report_payment_group_payment_api.route( '/payment-group-payment//reports', methods=['GET'] ) @doc(tags=['reports'], description='Get reports by payment group payment.') @check_access @marshal_with( ReportPaymentGroupPaymentDetailSchema(many=True), code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_reports_by_payment_group_payment(payment_group_payment_id: int) -> tuple: reports = logic.get_by_payment_group_payment( payment_group_payment_id=payment_group_payment_id ) return reports, HTTPStatus.OK