AddCardRequest.fromModels constructor

AddCardRequest.fromModels({
  1. required PaymentRequest request,
  2. required CardData input,
})

Implementation

factory AddCardRequest.fromModels({
  required PaymentRequest request,
  required CardData input,
}) {
  final order = request.orderDetails.first;
  final expiryYear = input.expiryYear.length == 2
      ? '20${input.expiryYear}'
      : input.expiryYear;
  final expiry = '${input.expiryMonth}/$expiryYear';

  return AddCardRequest(
    data: AddCardRequestData(
      action: 'AUTH_REVERSAL',
      requestClass: 'ECOM',
      captureMethod: 'MANUAL',
      type: 'CARD',
      customerDetails: AddCardCustomerDetails(
        mCustomerId: request.customerDetails.mCustomerId,
        name: request.customerDetails.name,
        email: input.email ?? request.customerDetails.email,
        mobile: input.mobile ?? request.customerDetails.mobile,
        // API expects digits only (no leading "+").
        code: (input.countryCode ?? request.customerDetails.code)
            .replaceAll('+', '')
            .trim(),
      ),
      billingDetails: AddCardBillingDetails(
        addressLine1: request.billingDetails.addressLine1,
        addressLine2: request.billingDetails.addressLine2,
        city: request.billingDetails.city,
        province: request.billingDetails.province,
        country: request.billingDetails.country,
        pin: request.billingDetails.pin,
      ),
      orderDetails: AddCardOrderDetails(
        mOrderId: order.mOrderId,
        currency: order.currency,
        description: order.description,
        amount: order.amount,
      ),
      cardDetails: AddCardCardDetails(
        paymentToken: _nonEmptyPaymentToken(input.paymentToken),
        cardHolderName: input.cardholderName,
        cardNumber: input.cardNumber ?? '',
        cvv: input.cvv,
        expiry: expiry,
      ),
      shippingDetails: AddCardShippingDetails(
        shippingName: request.shippingDetails.shippingName,
        shippingEmail: request.shippingDetails.shippingEmail,
        shippingCode: request.shippingDetails.shippingCode,
        shippingMobile: request.shippingDetails.shippingMobile,
        addressLine1: request.shippingDetails.addressLine1,
        addressLine2: request.shippingDetails.addressLine2,
        city: request.shippingDetails.city,
        province: request.shippingDetails.province,
        country: request.shippingDetails.country,
        pin: request.shippingDetails.pin,
        shippingCurrency: request.shippingDetails.shippingCurrency,
        shippingAmount: request.shippingDetails.shippingAmount,
      ),
      parameters: payOrcNormalizedFiveSlots(request.parameters),
      customData: payOrcNormalizedFiveSlots(request.customData),
      urls: request.urls != null && request.urls!.webhookUrl.trim().isNotEmpty
          ? {'webhook_url': request.urls!.webhookUrl.trim()}
          : null,
    ),
  );
}