"""Blueprint for payee.""" from http import HTTPStatus from abacus_common_logic.marshalling.base import PaginationSchema from common_apispec import doc, marshal_with, use_kwargs from flask import Blueprint from payee.logic import payee as logic from payee.schemas.payee import ( PayeeCollaboratorFilterSchema, PayeeCollaboratorPaginatedSchema, PayeeCreateSchema, PayeeDataloaderOutputSchema, PayeeDataloaderSchema, PayeePaginatedFilterSchema, PayeePaginatedSchema, PayeeSchema, ) payee_api = Blueprint('payee_api', __name__) @payee_api.route('/payees/bulk', methods=['POST']) @doc(tags=['payee'], description='Get payees in bulk') @use_kwargs(PayeePaginatedFilterSchema, location='json') @marshal_with( PayeePaginatedSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_payees_bulk(**payload: dict): message = logic.get_payees_paginated( limit=payload.get('limit'), offset=payload.get('offset'), requires_review=payload.get('requires_review'), search_term=payload.get('search_term'), abacus_states=payload.get('abacus_states'), account_ids=payload.get('account_ids'), payoneer_program_ids=payload.get('payoneer_program_ids'), ) return message, HTTPStatus.OK @payee_api.route('/payee/dataloader', methods=['POST']) @doc(tags=['payee'], description='Get payees in bulk') @use_kwargs(PayeeDataloaderSchema, location='json', required=True) @marshal_with( PayeeDataloaderOutputSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def dataload_payees(**payload: dict): """Get payees in bulk.""" collaborator_ids = payload.get('collaborator_ids') payoneer_client_reference_ids = payload.get('payoneer_client_reference_ids') message = logic.get_payees_dataloader( collaborator_ids, payoneer_client_reference_ids ) return message, HTTPStatus.OK @payee_api.route('/payee-collaborator', methods=['POST']) @doc(tags=['payee'], description='Create collaborator payee') @use_kwargs(PayeeCreateSchema, location='json', required=True) @marshal_with( PayeeSchema, code=HTTPStatus.CREATED, description=HTTPStatus.OK.phrase, ) @marshal_with( PayeeSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def create_payee_collaborator(**create_params: dict): """Create payee.""" collaborator_id = create_params.get('collaborator_id') payee = logic.get_payees_by_collaborator_ids([collaborator_id]).get(collaborator_id) if payee is not None: return payee, HTTPStatus.OK message = logic.create_payee_collaborator(create_params) return message, HTTPStatus.CREATED @payee_api.route('/payee-collaborators/bulk', methods=['POST']) @doc(tags=['payee'], description='Get collaborator payees in bulk') @use_kwargs(PayeeCollaboratorFilterSchema, location='json') @marshal_with( PayeeCollaboratorPaginatedSchema, code=HTTPStatus.OK, description=HTTPStatus.OK.phrase, ) def get_payee_collaborators_bulk(**payload: dict): limit = payload.get('limit') offset = payload.get('offset') payee_ids = payload.get('payee_ids') message = logic.get_payee_collaborators_paginated( limit=limit, offset=offset, payee_ids=payee_ids ) return message, HTTPStatus.OK