from http import HTTPStatus import logging from typing import List from common_apispec import doc, marshal_with, use_kwargs from flask import Blueprint from payee.config import Config from payee.constants import error from payee.constants.constants import ( PERMISSIONS_ACTIONS, PERMISSIONS_RESOURCE_TYPES, PROFILES, ) import payee.logic.tax_withholding_override as logic from payee.schemas.tax_withholding_override import ( TaxWithholdingOverrideCreateSchema, TaxWithholdingOverrideDataloaderOutputSchema, TaxWithholdingOverrideDataloaderSchema, TaxWithholdingOverrideSchema, ) from payee.utils.permissions import check_access, check_jwt_identity, or_ tax_withholding_override_api = Blueprint( 'tax_withholding_override_api', __name__, url_prefix='/account-payee' ) logger = logging.getLogger('segment_logger') @tax_withholding_override_api.route( '/withholding-tax-override/dataloader', methods=['POST'] ) @use_kwargs(TaxWithholdingOverrideDataloaderSchema, location='json', required=True) @marshal_with( TaxWithholdingOverrideDataloaderOutputSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) @doc( description='Get tax withholding override in bulk by account payee IDs.', tags=['tax withholding override'], ) def dataload_tax_withholding_override(account_payee_ids: List[int]): """Dataloader for tax withholding override.""" result = logic.get_tax_withholding_override_by_account_payee_ids(account_payee_ids) return result, HTTPStatus.OK @tax_withholding_override_api.route( '//withholding-tax-override', methods=['POST'] ) @or_( check_jwt_identity(Config.TAX_FORM_SERVICE_IDENTITIES), check_access( resource_type=PERMISSIONS_RESOURCE_TYPES.TAX_INFO, allowed_profiles=[PROFILES.ABACUS], action=PERMISSIONS_ACTIONS.EDIT, bypass=True, ), ) @doc( description='Create or update tax withholding override for account payee.', tags=['tax withholding override'], ) @use_kwargs(TaxWithholdingOverrideCreateSchema, location='json', required=True) @marshal_with( TaxWithholdingOverrideSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def post_tax_withholding_override(account_payee_id, **created_params): """Post (create or update) tax withholding override with account payee id.""" override = logic.create_or_update_tax_withholding_override( account_payee_id, **created_params ) return override, HTTPStatus.OK