"""Blueprint for WorksheetPaymentContractAdvance API.""" from http import HTTPStatus from typing import List, Tuple from common_apispec import doc, marshal_with, use_kwargs from flask import Blueprint from payment.constants.constants import PERMISSIONS_ACTIONS, PERMISSIONS_RESOURCES from payment.logic import worksheet_payment_contract_advance as logic from payment.schemas.request import DataloaderParamsPostSchema from payment.schemas.worksheet_payment_contract_advance import ( WorksheetPaymentContractAdvanceDataloaderResponseSchema, WorksheetPaymentContractAdvanceDetailSchema, WorksheetPaymentContractAdvanceListQuerySchema, WorksheetPaymentContractAdvanceListSchema, WorksheetPaymentContractAdvancePostSchema, WorksheetPaymentContractAdvancePutSchema, ) from payment.utils.authorization import check_access worksheet_payment_contract_advance_api = Blueprint( 'worksheet_payment_contract_advance_api', __name__ ) @worksheet_payment_contract_advance_api.route( '/payment/advance/', methods=['POST'] ) @doc( tags=['Worksheet Payment Contract Advance'], description='Create worksheet payment contract advance.', ) @check_access @use_kwargs(WorksheetPaymentContractAdvancePostSchema, location='json') @marshal_with( WorksheetPaymentContractAdvanceDetailSchema, code=HTTPStatus.CREATED, description=HTTPStatus.CREATED.phrase, ) def create_worksheet_payment_contract_advance( contract_advance_id: int, **params ) -> Tuple: """Endpoint to create a worksheet payment contract advance.""" return logic.create_worksheet_payment_contract_advance( contract_advance_id=contract_advance_id, **params ), HTTPStatus.CREATED @worksheet_payment_contract_advance_api.route( '/payment/advance/worksheet/', methods=['GET'] ) @doc( tags=['Worksheet Payment Contract Advance'], description='Get worksheet payment contract advance.', ) @check_access @marshal_with( WorksheetPaymentContractAdvanceDetailSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_worksheet_payment_contract_advance(object_id: int) -> Tuple: """Endpoint to get a worksheet payment contract advance.""" return logic.get_worksheet_payment_contract_advance(object_id), HTTPStatus.OK @worksheet_payment_contract_advance_api.route( '/payment/advance/worksheet/', methods=['PUT'] ) @doc( tags=['Worksheet Payment Contract Advance'], description='Update worksheet payment contract advance.', ) @check_access @use_kwargs(WorksheetPaymentContractAdvancePutSchema, location='json') @marshal_with( WorksheetPaymentContractAdvanceDetailSchema, code=HTTPStatus.CREATED, # TODO: TAP--3282 check deps and change to OK. description=HTTPStatus.CREATED.phrase, ) def update_worksheet_payment_contract_advance(object_id: int, **params) -> Tuple: """Endpoint to update a worksheet payment contract advance.""" return logic.update_worksheet_payment_contract_advance( object_id, **params ), HTTPStatus.CREATED @worksheet_payment_contract_advance_api.route( '/payment/advance/worksheet/', methods=['DELETE'] ) @doc( tags=['Worksheet Payment Contract Advance'], description='Delete worksheet payment contract advance.', ) @check_access @marshal_with( None, code=HTTPStatus.NO_CONTENT, description=HTTPStatus.NO_CONTENT.phrase, apply=False, ) def delete_worksheet_payment_contract_advance(object_id: int) -> Tuple: """Endpoint to delete a worksheet payment contract advance.""" logic.delete_worksheet_payment_contract_advance(object_id) return None, HTTPStatus.NO_CONTENT @worksheet_payment_contract_advance_api.route('/payments/advances', methods=['GET']) @doc( tags=['Worksheet Payment Contract Advance'], description='List worksheet payment contract advances.', ) @check_access(PERMISSIONS_RESOURCES.CONTRACT_ADVANCE_PAYMENT, PERMISSIONS_ACTIONS.VIEW) @use_kwargs(WorksheetPaymentContractAdvanceListQuerySchema, location='query') @marshal_with( WorksheetPaymentContractAdvanceListSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def list_worksheet_payment_contract_advances(**params) -> Tuple: """Endpoint to list worksheet payment contract advances.""" return logic.list_worksheet_payment_contract_advances(**params), HTTPStatus.OK @worksheet_payment_contract_advance_api.route( '/payment/advance/worksheet/dataloader', methods=['POST'] ) @doc( tags=['Worksheet Payment Contract Advance'], description='Dataloader for worksheet payment contract advances by IDs.', ) @check_access @use_kwargs(DataloaderParamsPostSchema, location='json') @marshal_with( WorksheetPaymentContractAdvanceDataloaderResponseSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def dataload_worksheet_payment_contract_advances(ids: List[int]) -> Tuple: """Endpoint to dataload worksheet payment contract advances by IDs.""" return logic.dataload_worksheets_by_ids(ids), HTTPStatus.OK