"""Blueprint for WorksheetAdjustment API.""" from abacus_common_logic.views.validations import validated_request_body from flask import Blueprint, request from owsresponse.adaptors.flask import flaskify from abacus_worksheet.logic.worksheet_adjustment import ( create_worksheet_adjustments_and_details, delete_worksheet_adjustments, get_adjustments_by_period_and_type_id, get_by_statement_period_adjustment_file_id, get_pending_worksheet_adjustments, get_worksheet_adjustments_accounts_by_file_id, get_worksheet_adjustments_and_details_by_file_id, get_worksheet_adjustments_contracts_by_file_id, get_worksheet_adjustments_deleted_aggregate_by_file_id, restore_worksheet_adjustments, soft_delete_worksheet_adjustments_and_details, ) from abacus_worksheet.schemas.worksheet_adjustment import ( WorksheetAdjustmentDeleteRestoreSchema, WorksheetAdjustmentImportSchema, ) worksheet_adjustment_api = Blueprint('worksheet_adjustment_api', __name__) @worksheet_adjustment_api.route( '/worksheet-adjustments/statement-period-adjustment-file//', methods=['GET'], ) def get_worksheet_adjustments(statement_period_adjustment_file_id: int): """Get a list of worksheet adjustments by statement_period_adjustment_file_id.""" return flaskify( get_by_statement_period_adjustment_file_id( statement_period_adjustment_file_id, request.args ) ) @worksheet_adjustment_api.route('/worksheet-adjustments/import/', methods=['POST']) def create_worksheet_adjustments_and_adjustment_details(): """Create worksheet adjustments and adjustments details.""" validated_params = validated_request_body(WorksheetAdjustmentImportSchema()) return flaskify(create_worksheet_adjustments_and_details(**validated_params)) @worksheet_adjustment_api.route('/worksheet-adjustments/delete', methods=['POST']) def delete_worksheet_adjustments_route(): """Soft-delete one or more worksheet adjustments (bulk-capable).""" validated = validated_request_body(WorksheetAdjustmentDeleteRestoreSchema()) return flaskify(delete_worksheet_adjustments(**validated)) @worksheet_adjustment_api.route('/worksheet-adjustments/restore', methods=['POST']) def restore_worksheet_adjustments_route(): """Restore one or more soft-deleted worksheet adjustments (bulk-capable).""" validated = validated_request_body(WorksheetAdjustmentDeleteRestoreSchema()) return flaskify(restore_worksheet_adjustments(**validated)) @worksheet_adjustment_api.route( '/worksheet-adjustments/statement-period-adjustment-file//', methods=['DELETE'], ) def soft_delete_worksheet_adjustments_and_details_by_file_id( statement_period_adjustment_file_id: int, ): """Soft delete worksheet adjustments and details by statement_period_adjustment_file_id.""" return flaskify( soft_delete_worksheet_adjustments_and_details( statement_period_adjustment_file_id ) ) @worksheet_adjustment_api.route( '/worksheet-adjustment/statement-period-adjustment-file//adjustments-and-details', methods=['GET'], ) def get_worksheet_adjustments_and_details(statement_period_adjustment_file_id: int): """Get a list of worksheet adjustments and details for a specified statement_period_adjustment_file_id. Args: statement_period_adjustment_file_id (int): id of the statement_period_adjustment_file Returns: a list of worksheet adjustments and details. """ return flaskify( get_worksheet_adjustments_and_details_by_file_id( statement_period_adjustment_file_id, request.args ) ) @worksheet_adjustment_api.route('/worksheet-adjustments/pending', methods=['GET']) def get_pending_worksheet_adjustments_endpoint(): """Get a list of pending worksheet adjustments.""" return flaskify(get_pending_worksheet_adjustments(request.args)) @worksheet_adjustment_api.route( '/worksheet-adjustments/statement-period-adjustment-file//contracts', methods=['GET'], ) def get_worksheet_adjustments_contracts(statement_period_adjustment_file_id: int): """Get a list of contracts for worksheet adjustments associated with a specified statement_period_adjustment_file_id. Args: statement_period_adjustment_file_id (int): id of the statement_period_adjustment_file Returns: a list of contract ids. """ return flaskify( get_worksheet_adjustments_contracts_by_file_id( statement_period_adjustment_file_id, request.args ) ) @worksheet_adjustment_api.route( '/worksheet-adjustments/statement-period-adjustment-file//accounts', methods=['GET'], ) def get_worksheet_adjustments_accounts(statement_period_adjustment_file_id: int): """Get a list of accounts for worksheet adjustments associated with a specified statement_period_adjustment_file_id. Args: statement_period_adjustment_file_id (int): id of the statement_period_adjustment_file Returns: a list of account ids. """ return flaskify( get_worksheet_adjustments_accounts_by_file_id( statement_period_adjustment_file_id, request.args ) ) @worksheet_adjustment_api.route( '/worksheet-adjustments/period//type/', methods=['GET'], ) def get_adjustments_by_period_and_type(period_id: int, type_id: int): """Test endpoint to verify the worksheet adjustments blueprint is working.""" return flaskify(get_adjustments_by_period_and_type_id(period_id, type_id)) @worksheet_adjustment_api.route( '/statement-period-adjustment-file//worksheet-adjustments/deleted/aggregate', methods=['GET'], ) def get_worksheet_adjustments_deleted_aggregate( statement_period_adjustment_file_id: int, ): """Get the deleted-entry aggregate for a statement_period_adjustment_file. Whole-file: does not honor the grid's account, contract, or flowthrough filters. currency_agnostic_deleted_amount sums across currencies (not a real money total). """ return flaskify( get_worksheet_adjustments_deleted_aggregate_by_file_id( statement_period_adjustment_file_id ) )