graycoreio/daffodil

View on GitHub
libs/cart/driver/magento/src/transforms/outputs/cart-totals-transformer.ts

Summary

Maintainability
A
2 hrs
Test Coverage
import {
  DaffCart,
  DaffCartTotalTypeEnum,
} from '@daffodil/cart';
import { daffAdd } from '@daffodil/core';

import { MagentoCart } from '../../models/responses/cart';

function validateSelectedShippingAddress(cart: Partial<MagentoCart>): boolean {
  return !!cart.shipping_addresses?.[0]?.selected_shipping_method?.amount;
}

export function transformCartTotals(cart: Partial<MagentoCart>): {totals: DaffCart['totals']} {
  const totalTax = cart.prices.applied_taxes ? cart.prices.applied_taxes.reduce((acc, tax) => (daffAdd(acc, tax.amount.value)), 0) : 0;
  return {
    totals: {
      [DaffCartTotalTypeEnum.grandTotal]: {
        name: DaffCartTotalTypeEnum.grandTotal,
        label: 'Grand Total',
        value: cart.prices.grand_total.value,
        order: 0,
      },
      [DaffCartTotalTypeEnum.subtotalExcludingTax]: {
        name: DaffCartTotalTypeEnum.subtotalExcludingTax,
        label: 'Subtotal Excluding Tax',
        value: cart.prices.subtotal_excluding_tax.value,
        order: 1,
      },
      [DaffCartTotalTypeEnum.subtotalIncludingTax]: {
        name: DaffCartTotalTypeEnum.subtotalIncludingTax,
        label: 'Subtotal Including Tax',
        value: cart.prices.subtotal_including_tax.value,
        order: 2,
      },
      [DaffCartTotalTypeEnum.subtotalWithDiscountExcludingTax]: {
        name: DaffCartTotalTypeEnum.subtotalWithDiscountExcludingTax,
        label: 'Subtotal with Discount Excluding Tax',
        value: cart.prices.subtotal_with_discount_excluding_tax.value,
        order: 3,
      },
      [DaffCartTotalTypeEnum.subtotalWithDiscountIncludingTax]: {
        name: DaffCartTotalTypeEnum.subtotalWithDiscountIncludingTax,
        label: 'Subtotal with Discount Including Tax',
        value: cart.prices.subtotal_with_discount_excluding_tax.value ?
          daffAdd(cart.prices.subtotal_with_discount_excluding_tax.value, totalTax) :
          cart.prices.subtotal_with_discount_excluding_tax.value,
        order: 4,
      },
      [DaffCartTotalTypeEnum.tax]: {
        name: DaffCartTotalTypeEnum.tax,
        label: 'Tax',
        value: totalTax,
        order: 5,
      },
      [DaffCartTotalTypeEnum.discount]: {
        name: DaffCartTotalTypeEnum.discount,
        label: 'Discounts',
        value: cart.prices.discounts ? daffAdd(...cart.prices.discounts.map((discount) => discount.amount.value)) : 0,
        order: 6,
      },
      [DaffCartTotalTypeEnum.shipping]: {
        name: DaffCartTotalTypeEnum.shipping,
        label: 'Shipping',
        value: validateSelectedShippingAddress(cart) ? cart.shipping_addresses[0].selected_shipping_method.amount.value : null,
        order: 7,
      },
    },
  };
}