from typing import Dict, List from src.constants import BANK_FIELDS_DETAILS_NAMES, REMAP_DETAILS_FIELDS from src.models import ( Address, BankFieldDetail, Company, Contact, PayeeDetails, PayoutMethod, ) def map_row_to_payout_method(row: Dict[str, str]) -> PayoutMethod: bank_field_details = { name: row[name] for name in BANK_FIELDS_DETAILS_NAMES if name in row and row[name] } # remap cases like 'OtherBankName' >> 'BankName' for from_name, to_name in REMAP_DETAILS_FIELDS.items(): if not bank_field_details.get(to_name) and bank_field_details.get(from_name): bank_field_details[to_name] = bank_field_details.pop(from_name) else: bank_field_details.pop(from_name, None) bank_account_type = row.get('bankAccountType') if bank_account_type: bank_account_type = bank_account_type.upper() return PayoutMethod( bank_account_type=bank_account_type, country=row.get('bankCountry'), currency=row.get('currency'), bank_field_details=[ BankFieldDetail(name=k, value=v) for k, v in bank_field_details.items() ], ) def map_to_banking_details(row: Dict[str, str], account_payee_id: int) -> PayeeDetails: payee_type = row.get('payeeType') if payee_type: payee_type = payee_type.upper() return PayeeDetails( account_payee_id=account_payee_id, type=payee_type, contact=Contact.model_validate(row), company=Company.model_validate(row), address=Address.model_validate(row), payout_method=map_row_to_payout_method(row), )