"""Migration schema for bank details parameters.""" from abacus_common_logic.marshalling.custom_fields import ma from marshmallow import post_load from marshmallow.validate import OneOf from payee.constants.constants import ( BANK_DETAILS_PAYEE_TYPE, ) from payee.schemas.address import MigrationAddressSchema from payee.schemas.bank_details import BankFieldDetailSchema from payee.schemas.mixins import SanitizeEmptyStringsMixin, SanitizeSpacesMixin class MigrationPaymentMethodSchema( ma.Schema, SanitizeEmptyStringsMixin, SanitizeSpacesMixin ): """Payment method schema for bank_details migration.""" bank_account_type = ma.String(allow_none=True) country = ma.String(allow_none=True) currency = ma.String(allow_none=True) bank_field_details = ma.List(ma.Nested(BankFieldDetailSchema), required=True) @post_load def sanitize_bank_field_details(self, data, **kwargs): data['bank_field_details'] = [ item for item in data['bank_field_details'] if item['value'] ] return data class MigrationContactSchema(ma.Schema, SanitizeEmptyStringsMixin, SanitizeSpacesMixin): """Base contact schema for bank_details migration.""" first_name = ma.String(allow_none=True) last_name = ma.String(allow_none=True) date_of_birth = ma.String(allow_none=True) email = ma.Email(allow_none=True) phone = ma.Str(allow_none=True) phone_country = ma.Str(allow_none=True) class MigrationCompanySchema(ma.Schema, SanitizeEmptyStringsMixin): name = ma.String(allow_none=True) class MigrationBankDetailsInputSchema(ma.Schema, SanitizeEmptyStringsMixin): """Bank post details schema for bank_details migration.""" type = ma.String(required=True, validate=OneOf(BANK_DETAILS_PAYEE_TYPE)) contact = ma.Nested(MigrationContactSchema) address = ma.Nested(MigrationAddressSchema, required=True) company = ma.Nested(MigrationCompanySchema) payout_method = ma.Nested(MigrationPaymentMethodSchema, required=True) class MigrationBankDetailsDetailedSchema(MigrationBankDetailsInputSchema): """Bank details detailed schema for bank_details migration.""" payoneer_client_reference_id = ma.String(required=True) account_payee_id = ma.String(required=True) modified_at = ma.String(required=True)