class GenesisRuby::Api::Requests::Financial::OnlineBankingPayments::OnlineBanking::PayIn

rubocop:disable Metrics/ClassLength
Online Banking PayIn transaction class

def init_field_validations # rubocop:disable Metrics/MethodLength, Metrics/AbcSize

rubocop:disable Metrics/MethodLength, Metrics/AbcSize
Online Banking PayIn field validations
def init_field_validations # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
  super
  required_fields.push *%i[transaction_id return_success_url return_failure_url amount currency bank_code]
  field_values.merge! payment_type: Api::Constants::Transactions::Parameters::OnlineBanking::
                          PaymentTypes.all,
                      currency:     Api::Constants::Transactions::Parameters::OnlineBanking::
                          BankCodeCurrencies.all.map(&:upcase),
                      bank_code:    Api::Constants::Transactions::Parameters::OnlineBanking::BankCodes.all
  field_value_dependencies.merge!(
    {
      currency: {
        AUD: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('AUD')
        },
        BRL: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('BRL')
        },
        CAD: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('CAD')
        },
        CHF: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('CHF')
        },
        CNY: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('CNY')
        },
        CLP: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('CLP')
        },
        EUR: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('EUR')
        },
        THB: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('THB')
        },
        USD: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('USD')
        },
        MYR: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('MYR')
        },
        PEN: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('PEN')
        },
        PYG: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('PYG')
        },
        IDR: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('IDR')
        },
        INR: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('INR')
        },
        MXN: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('MXN')
        },
        PHP: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('PHP')
        },
        SGD: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('SGD')
        },
        UYU: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('UYU')
        },
        VND: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('VND')
        },
        PLN: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('PLN')
        },
        GBP: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('GBP')
        },
        NZD: {
          bank_code: Api::Constants::Transactions::Parameters::OnlineBanking::BankCodeCurrencies
                       .bank_codes_per_currency('NZD')
        }
      }
    }
  )
end

def payment_transaction_structure # rubocop:disable Metrics/MethodLength

rubocop:disable Metrics/MethodLength
Online Banking PayIn parameters structure
def payment_transaction_structure # rubocop:disable Metrics/MethodLength
  {
    return_success_url:      return_success_url,
    return_failure_url:      return_failure_url,
    billing_address:         billing_address_parameters_structure,
    shipping_address:        shipping_address_parameters_structure,
    customer_email:          customer_email,
    customer_phone:          customer_phone,
    payment_type:            payment_type,
    bank_code:               bank_code,
    document_id:             document_id,
    user_category:           user_category,
    virtual_payment_address: virtual_payment_address,
    consumer_reference:      consumer_reference,
    auth_code:               auth_code
  }
end

def transaction_type

Online Banking PayIn transaction type
def transaction_type
  Api::Constants::Transactions::ONLINE_BANKING_PAYIN
end