"""Blueprint for Worksheet account contract closing balance API.""" from http import HTTPStatus from typing import List from common_apispec import doc, marshal_with, use_kwargs from flask import Blueprint from payment.logic import worksheet_payable_balance_after_tax as logic from payment.schemas.generic_success_response import GenericSuccessResponseSchema from payment.schemas.worksheet_payable_balance_after_tax import ( WorksheetPayableAfterTaxFilterSchema, WorksheetPayableBalanceAfterTaxBulkUpdateSchema, WorksheetPayableBalanceAfterTaxDetailSchema, WorksheetPayableBalanceAfterTaxListSchema, WorksheetPayableBalanceAfterTaxOverviewSchema, WorksheetPayableBalanceAfterTaxSchema, ) from payment.utils.authorization import check_access worksheet_payable_balance_after_tax_api = Blueprint( 'worksheet_payable_balance_after_tax_api', __name__, url_prefix='/worksheet-payable-balance-after-tax', ) @worksheet_payable_balance_after_tax_api.route( '/event//statement-period//bulk/', methods=['POST'], ) @doc( tags=['worksheet payable balance after tax'], description='Insert one or more worksheet_payable_balance_after_tax records.', # noqa: E501 ) @check_access @use_kwargs( WorksheetPayableBalanceAfterTaxSchema( exclude=('abacus_event_id', 'statement_period_id'), many=True ), location='json', ) @marshal_with( GenericSuccessResponseSchema, code=HTTPStatus.CREATED, description=HTTPStatus.CREATED.phrase, ) def bulk_create_worksheet_payable_balance_after_tax( *create_params: dict, event_id: int, statement_period_id: int ): """Bulk create worksheet_payable_balance_after_tax records.""" return logic.bulk_create( event_id=event_id, statement_period_id=statement_period_id, create_params=create_params, ), HTTPStatus.CREATED @worksheet_payable_balance_after_tax_api.route( '/event//bulk', methods=['DELETE'] ) @doc( tags=['worksheet payable balance after tax'], description='Bulk delete worksheet_payable_balance_after_tax by event_id.', ) @check_access @marshal_with(None, code=HTTPStatus.NO_CONTENT, apply=False) def bulk_delete_worksheet_payable_balance_after_tax(event_id: int): """Bulk delete worksheet_payable_balance_after_tax.""" logic.bulk_delete_worksheet_payable_balance_after_tax(event_id) return None, HTTPStatus.NO_CONTENT @worksheet_payable_balance_after_tax_api.route( '/event//', methods=['GET'] ) @worksheet_payable_balance_after_tax_api.route( '/statement-period//', methods=['GET'] ) @doc( tags=['worksheet payable balance after tax'], description='Get worksheet_payable_balance_after_tax data by event_id or statement_period_id.', # noqa: E501 ) @check_access @use_kwargs(WorksheetPayableAfterTaxFilterSchema, location='query') @marshal_with( WorksheetPayableBalanceAfterTaxListSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_worksheet_payable_balance_after_tax( limit: int, offset: int, contract_ids: List[int] = None, event_id: int = 0, statement_period_id: int = 0, search_term: str | None = None, sort_by: str | None = None, sort_order: str | None = None, ): """Get worksheet_payable_balance_after_tax data.""" response = logic.get_worksheet_payable_balance_after_tax( event_id=event_id, statement_period_id=statement_period_id, limit=limit, offset=offset, contract_ids=contract_ids, search_term=search_term, sort_by=sort_by, sort_order=sort_order, ) return response, HTTPStatus.OK @worksheet_payable_balance_after_tax_api.route( '/event//overview/', methods=['GET'] ) @doc( tags=['worksheet payable balance after tax overview'], description='Get aggregated overview for worksheet_payable_balance_after_tax data by event_id.', ) @check_access @marshal_with( WorksheetPayableBalanceAfterTaxOverviewSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_worksheet_payable_balance_after_tax_overview( event_id: int, ) -> tuple[dict, int]: """Get aggregated worksheet_payable_balance_after_tax data.""" result = logic.get_worksheet_payable_balance_after_tax_overview( event_id=event_id, ) return result, HTTPStatus.OK @worksheet_payable_balance_after_tax_api.route( '//', methods=['DELETE'] ) @check_access @marshal_with( None, code=HTTPStatus.NO_CONTENT, description=HTTPStatus.NO_CONTENT.phrase, apply=False, ) def delete_worksheet_payable_balance_after_tax( worksheet_account_contract_payable_after_tax_id: int, ) -> tuple[None, int]: """Delete worksheet_payable_balance_after_tax instance.""" logic.delete_worksheet_payable_balance_after_tax( worksheet_account_contract_payable_after_tax_id ) return None, HTTPStatus.NO_CONTENT @worksheet_payable_balance_after_tax_api.route( '//', methods=['GET'] ) @doc( tags=['worksheet payable balance after tax detail'], description='Get detail data for worksheet_payable_balance_after_tax.', ) @check_access @marshal_with( WorksheetPayableBalanceAfterTaxDetailSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_worksheet_payable_balance_after_tax_detail( worksheet_account_contract_payable_after_tax_id: int, ) -> tuple[dict, int]: """Get aggregated worksheet_payable_balance_after_tax data.""" result = logic.get_worksheet_payable_balance_after_tax_detail( worksheet_account_contract_payable_after_tax_id, ) return result, HTTPStatus.OK @worksheet_payable_balance_after_tax_api.route('/bulk', methods=['PUT']) @doc( tags=['worksheet payable balance after tax'], description='Bulk update worksheet_payable_balance_after_tax records by worksheet_account_contract_payable_after_tax_id.', ) @check_access @use_kwargs( WorksheetPayableBalanceAfterTaxBulkUpdateSchema(many=True), location='json', required=True, ) @marshal_with( WorksheetPayableBalanceAfterTaxDetailSchema(many=True), code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def bulk_update_worksheet_payable_balance_after_tax( *update_params: dict, ) -> tuple[list, int]: """Bulk update worksheet_payable_balance_after_tax records. Updates tax_withholding_amount, vat_amount, and payable_amount_post_tax for multiple worksheet records identified by worksheet_account_contract_payable_after_tax_id. Returns: List of updated worksheet_payable_balance_after_tax records. """ if not update_params: return [], HTTPStatus.OK updated_items = logic.bulk_update_worksheet_payable_balance_after_tax( list(update_params) ) return updated_items, HTTPStatus.OK