"""General Bank Details Document.""" from payee.connectors.secure_data.document import SecureDocument from payee.connectors.secure_data.fields.list_field import ListField from payee.connectors.secure_data.fields.text_field import TextField from payee.models.account_payee import AccountPayee from payee.models.address import AddressUtilDocument from payee.models.payee import Payee from payee.utils.bank_details import BankDetailsDataHelper class BankDetailsDocument(SecureDocument): """Bank Details Document.""" _document_type = 'bank_details' _fields = { 'type': TextField( 'type', encrypt=True, required=True, allowed_values=['INDIVIDUAL', 'COMPANY'], ), 'first_name': TextField('first_name', encrypt=True, required=True), 'last_name': TextField('last_name', encrypt=True, required=True), 'date_of_birth': TextField('date_of_birth', encrypt=True, required=True), 'name': TextField('name', encrypt=True, required=True), 'email': TextField('email', encrypt=True, required=False), 'phone': TextField('phone', encrypt=True, required=False), 'phone_country': TextField('phone_country', encrypt=True, required=False), 'bank_account_type': TextField( 'bank_account_type', encrypt=True, required=True ), 'bank_field_details': ListField( 'bank_field_details', encrypt=True, required=True ), 'country': TextField('country', encrypt=True, required=True), 'currency': TextField('currency', encrypt=True, required=True), 'modified_by_profile_type': TextField( 'modified_by_profile_type', encrypt=True, required=True ), 'modified_by_profile_id': TextField( 'modified_by_profile_id', encrypt=True, required=True ), 'modified_by_identity': TextField( 'modified_by_identity', encrypt=True, required=True ), 'modified_at': TextField('modified_at', encrypt=True, required=True), **AddressUtilDocument.fields, } @staticmethod def get_id_field_name(payee: Payee | AccountPayee) -> str: """Get the ID field required to build the response.""" return ( 'payoneer_client_reference_id' if isinstance(payee, Payee) else 'account_payee_id' ) @staticmethod def build_response( payoneer_client_reference_id: str | int, secure_document_item: SecureDocument, is_obscured: bool = False, ): values = secure_document_item.get_values(is_obscured) body = { 'payoneer_client_reference_id': str(payoneer_client_reference_id), 'account_payee_id': payoneer_client_reference_id, 'modified_by_profile_type': values.get('modified_by_profile_type'), 'modified_by_profile_id': values.get('modified_by_profile_id'), 'modified_by_identity': values.get('modified_by_identity'), 'modified_at': values.get('modified_at'), **BankDetailsDataHelper.build_bank_details(values), } return body