"""Blueprint for Ledger Contract Advance Applied.""" from abacus_common_logic.views.item_view import ItemView from flask import Blueprint, abort, request from marshmallow import ValidationError from owsrequest import flask_request from owsresponse import response from owsresponse.adaptors.flask import flaskify import ledger.logic.ledger_contract_advance_applied as logic from ledger.constants.error import ERROR_CODE_AUTHORIZATION from ledger.models.ledger_contract_advance_applied import LedgerContractAdvanceApplied from ledger.schemas.ledger_contract_advance_applied import ( LedgerContractAdvanceAppliedDetailSchema, LedgerContractAdvancePostSchema, ) ledger_contract_advance_applied_api = Blueprint( 'ledger_contract_advance_applied_api', __name__ ) class LedgerContractAdvanceAppliedItemView(ItemView): """View for getting ledger_contract_advance_applied by ID.""" model_class = LedgerContractAdvanceApplied object_detail_schema = LedgerContractAdvanceAppliedDetailSchema() def get(self, object_id, **kwargs): """Retrieve ledger_contract_advance_applied by ID.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, ) ) return super().get(object_id, **kwargs) ledger_contract_advance_applied_api.add_url_rule( '/ledger-contract-advance-applied/', methods=['GET'], view_func=LedgerContractAdvanceAppliedItemView.as_view( 'ledger_contract_advance_applied' ), ) @ledger_contract_advance_applied_api.route( '/ledger-contract-advance-applied/contract-advance//paid/', methods=['POST'], ) def create_contract_advance_ledger_entries(contract_advance_id: int): """Endpoint to create contract-advance ledger entries. Args: contract_advance_id (int): Id of the related contract_advance. """ access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, ) ) try: post_body = LedgerContractAdvancePostSchema().load(request.get_json()) except ValidationError as e: abort( status=400, description=e.messages, ) return flaskify( logic.create_contract_advance_ledger_entries(contract_advance_id, **post_body) ) @ledger_contract_advance_applied_api.route( '/ledger-contract-advance-applied/contract-advance//', methods=['GET'], ) def get_ledger_contract_advance_applied_by_contract_advance(contract_advance_id: int): """Endpoint to GET a ledger_contract_advance_applied item by contract_advance_id.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, ) ) return flaskify(logic.get_by_contract_advance_id(contract_advance_id)) @ledger_contract_advance_applied_api.route( '/ledger-contract-advance-applied/worksheet' '//', methods=['GET'], ) def get_ledger_contract_advance_applied_by_worksheet( worksheet_payment_contract_advance_id: int, entry_type: str ): """Endpoint to get ledger data by worksheet id.""" access_rule_decision = flask_request.verify_rules_access_standalone(request) if not access_rule_decision: return flaskify( response.create_error_response( code=ERROR_CODE_AUTHORIZATION, message='Unauthorized', status=403, ) ) return flaskify( logic.get_by_worksheet_payment_contract_advance_id( worksheet_payment_contract_advance_id, entry_type ) )