From 2f6edf367abb9d3e71f398c3b98a749b73517ea6 Mon Sep 17 00:00:00 2001 From: William Bouchard <46496014+willbouch@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:50:37 -0400 Subject: [PATCH] feat(dashboard,cart,types,utils): refine order details summary (#13313) * feat(dashboard,types,utils): refine order details summary * fix tests * changeset * ui corrections * tests again * weird tests failing * revert update to subtotal * revert http tests too * comments * move credit lines so it makes more sense * remove currency codes and add bold prices * add new properties in default for storefront * minor to patch * remove bold on things that should be * olis comment about taxes * remove bold from shipping --- .changeset/spotty-games-retire.md | 7 + .../draft-order/admin/draft-order.spec.ts | 5 +- .../src/i18n/translations/$schema.json | 6 +- .../dashboard/src/i18n/translations/en.json | 3 +- .../order-summary-section.tsx | 410 +++++++++++------- .../routes/orders/order-detail/constants.ts | 7 + packages/core/types/src/http/order/common.ts | 10 +- .../types/src/modules-sdk/remote-query.ts | 2 +- packages/core/types/src/order/common.ts | 10 + .../core/utils/src/totals/__tests__/totals.ts | 16 + packages/core/utils/src/totals/cart/index.ts | 74 ++-- .../src/api/store/carts/query-config.ts | 2 + .../services/cart-module/index.spec.ts | 10 + 13 files changed, 348 insertions(+), 214 deletions(-) create mode 100644 .changeset/spotty-games-retire.md diff --git a/.changeset/spotty-games-retire.md b/.changeset/spotty-games-retire.md new file mode 100644 index 0000000000..837aec1f9e --- /dev/null +++ b/.changeset/spotty-games-retire.md @@ -0,0 +1,7 @@ +--- +"@medusajs/utils": patch +"@medusajs/dashboard": patch +"@medusajs/types": patch +--- + +feat(dashboard,cart,types,utils): refine order details summary diff --git a/integration-tests/http/__tests__/draft-order/admin/draft-order.spec.ts b/integration-tests/http/__tests__/draft-order/admin/draft-order.spec.ts index c83a2c5ff4..535107a13e 100644 --- a/integration-tests/http/__tests__/draft-order/admin/draft-order.spec.ts +++ b/integration-tests/http/__tests__/draft-order/admin/draft-order.spec.ts @@ -1,10 +1,7 @@ import { medusaIntegrationTestRunner } from "@medusajs/test-utils" import { HttpTypes } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/utils" -import { - adminHeaders, - createAdminUser, -} from "../../../../helpers/create-admin-user" +import { adminHeaders, createAdminUser, } from "../../../../helpers/create-admin-user" import { setupTaxStructure } from "../../../../modules/__tests__/fixtures" jest.setTimeout(300000) diff --git a/packages/admin/dashboard/src/i18n/translations/$schema.json b/packages/admin/dashboard/src/i18n/translations/$schema.json index 3b8d241fa5..33b50f67bf 100644 --- a/packages/admin/dashboard/src/i18n/translations/$schema.json +++ b/packages/admin/dashboard/src/i18n/translations/$schema.json @@ -3987,6 +3987,9 @@ }, "taxTotal": { "type": "string" + }, + "totalAfterDiscount": { + "type": "string" } }, "required": [ @@ -4002,7 +4005,8 @@ "itemSubtotal", "shippingSubtotal", "discountSubtotal", - "taxTotal" + "taxTotal", + "totalAfterDiscount" ], "additionalProperties": false }, diff --git a/packages/admin/dashboard/src/i18n/translations/en.json b/packages/admin/dashboard/src/i18n/translations/en.json index 2793d92a2c..3b936b121c 100644 --- a/packages/admin/dashboard/src/i18n/translations/en.json +++ b/packages/admin/dashboard/src/i18n/translations/en.json @@ -1067,7 +1067,8 @@ "itemSubtotal": "Item Subtotal", "shippingSubtotal": "Shipping Subtotal", "discountSubtotal": "Discount Subtotal", - "taxTotal": "Tax Total" + "taxTotal": "Tax Total", + "totalAfterDiscount": "Total After Discount" }, "transfer": { "title": "Transfer ownership", diff --git a/packages/admin/dashboard/src/routes/orders/order-detail/components/order-summary-section/order-summary-section.tsx b/packages/admin/dashboard/src/routes/orders/order-detail/components/order-summary-section/order-summary-section.tsx index e77ffdfc69..8d8be46c8c 100644 --- a/packages/admin/dashboard/src/routes/orders/order-detail/components/order-summary-section/order-summary-section.tsx +++ b/packages/admin/dashboard/src/routes/orders/order-detail/components/order-summary-section/order-summary-section.tsx @@ -63,6 +63,7 @@ import { getReturnableQuantity } from "../../../../../lib/rma" import { CopyPaymentLink } from "../copy-payment-link/copy-payment-link" import ReturnInfoPopover from "./return-info-popover" import ShippingInfoPopover from "./shipping-info-popover" +import { formatPercentage } from "../../../../../lib/percentage-helpers.ts" type OrderSummarySectionProps = { order: AdminOrder @@ -191,7 +192,7 @@ export const OrderSummarySection = ({
- + {(showAllocateButton || showReturns || showPayment || showRefund) && ( @@ -569,51 +570,39 @@ const CostBreakdown = ({ const [isTaxOpen, setIsTaxOpen] = useState(false) const [isShippingOpen, setIsShippingOpen] = useState(false) - const discountCodes = useMemo(() => { - const codes = new Set() - order.items.forEach((item) => - item.adjustments?.forEach((adj) => { - codes.add(adj.code) - }) - ) - - return Array.from(codes).sort() - }, [order]) - const taxCodes = useMemo(() => { - const taxCodeMap = {} + const taxCodeMap: { [key: string]: { total: number; rate: number } } = {} order.items.forEach((item) => { item.tax_lines?.forEach((line) => { - taxCodeMap[line.code] = (taxCodeMap[line.code] || 0) + line.total + const prevTotal = taxCodeMap[line.code]?.total || 0 + taxCodeMap[line.code] = { + total: prevTotal + line.subtotal, + rate: line.rate, + } }) }) order.shipping_methods.forEach((sm) => { sm.tax_lines?.forEach((line) => { - taxCodeMap[line.code] = (taxCodeMap[line.code] || 0) + line.total + const prevTotal = taxCodeMap[line.code]?.total || 0 + taxCodeMap[line.code] = { + total: prevTotal + line.subtotal, + rate: line.rate, + } }) }) return taxCodeMap }, [order]) - const automaticTaxesOn = !!order.region?.automatic_taxes - const hasTaxLines = !!Object.keys(taxCodes).length - - const discountTotal = automaticTaxesOn - ? order.discount_total - : order.discount_subtotal + const hasTaxes = !!Object.keys(taxCodes).length return (
setIsShippingOpen((o) => !o)} className="flex cursor-pointer items-center gap-1" > - - {t( - automaticTaxesOn - ? "orders.summary.shippingTotal" - : "orders.summary.shippingSubtotal" - )} - + {t("orders.summary.shippingSubtotal")}
} - value={getLocaleAmount( - automaticTaxesOn ? order.shipping_total : order.shipping_subtotal, - order.currency_code - )} + value={getLocaleAmount(order.shipping_subtotal, order.currency_code)} /> {isShippingOpen && ( @@ -654,7 +634,7 @@ const CostBreakdown = ({ className="flex items-center justify-between gap-x-2" >
- + {sm.name} {sm.detail.return_id && ` (${t("fields.returnShipping")})`}{" "} @@ -665,10 +645,7 @@ const CostBreakdown = ({
- {getLocaleAmount( - automaticTaxesOn ? sm.total : sm.subtotal, - order.currency_code - )} + {getLocaleAmount(sm.subtotal, order.currency_code)}
) @@ -676,36 +653,18 @@ const CostBreakdown = ({ )} - 0 - ? `- ${getLocaleAmount(discountTotal, order.currency_code)}` - : "-" - } - /> - <>
hasTaxLines && setIsTaxOpen((o) => !o)} + onClick={() => hasTaxes && setIsTaxOpen((o) => !o)} className={clx("flex items-center gap-1", { - "cursor-pointer": hasTaxLines, + "cursor-pointer": hasTaxes, })} > - {t( - automaticTaxesOn - ? "orders.summary.taxTotalIncl" - : "orders.summary.taxTotal" - )} + {t("orders.summary.taxTotal")} - {hasTaxLines && ( + {hasTaxes && ( - {getLocaleAmount(order.tax_total, order.currency_code)} + {getLocaleAmount(order.original_tax_total, order.currency_code)}
{isTaxOpen && (
- {Object.entries(taxCodes).map(([code, total]) => { + {Object.entries(taxCodes).map(([code, { total, rate }]) => { return (
-
- - {code} +
+ {code} + + ({formatPercentage(rate)})
@@ -745,11 +705,23 @@ const CostBreakdown = ({
)} +
+ + {t("fields.total")} + + + {getLocaleAmount(order.original_total, order.currency_code)} + +
) } -const CreditLinesBreakdown = ({ +const DiscountAndTotalBreakdown = ({ order, plugins, }: { @@ -757,97 +729,208 @@ const CreditLinesBreakdown = ({ plugins: AdminPlugin[] }) => { const { t } = useTranslation() + const [isDiscountOpen, setIsDiscountOpen] = useState(false) const [isCreditLinesOpen, setIsCreditLinesOpen] = useState(false) + const creditLines = order.credit_lines ?? [] const loyaltyPlugin = getLoyaltyPlugin(plugins) - if (creditLines.length === 0) { - return null - } + const discounts = useMemo(() => { + const discounts: { + type: "item" | "shipping" + total: number + codes: string[] + }[] = [] + if (order.item_discount_total) { + discounts.push({ + type: "item", + total: order.item_discount_total, + codes: Array.from( + new Set( + order.items + .flatMap((item) => item.adjustments || []) + .map((adjustment) => adjustment.code!) + ) + ).sort(), + }) + } + if (order.shipping_discount_total) { + discounts.push({ + type: "shipping", + total: order.shipping_discount_total, + codes: Array.from( + new Set( + order.shipping_methods + .flatMap((shippingMethod) => shippingMethod.adjustments || []) + .map((adjustment) => adjustment.code!) + ) + ).sort(), + }) + } + return discounts + }, [order]) + + const hasDiscount = discounts.length > 0 + const hasCreditLines = creditLines.length > 0 return ( -
- <> -
setIsCreditLinesOpen((o) => !o)} - className="bg-ui-bg-component flex cursor-pointer items-center justify-between border border-dashed px-6 py-4" - > -
- - - {loyaltyPlugin - ? t("orders.giftCardsStoreCreditLines") - : t("orders.creditLines.title")} - -
- -
- - {getLocaleAmount(order.credit_line_total, order.currency_code)} - +
+ hasDiscount && setIsDiscountOpen((o) => !o)} + className={clx("flex items-center gap-1", { + "cursor-pointer": hasDiscount, + })} + > + {t("orders.summary.discountTotal")} + {hasDiscount && ( + + )}
+ } + value={getLocaleAmount(order.discount_total, order.currency_code)} + /> + {isDiscountOpen && ( +
+ {discounts.map(({ type, total, codes }) => { + return ( +
+
+ {t(`fields.${type}`)} + ({codes.join(", ")}) +
+
+
+
+ + {getLocaleAmount(total, order.currency_code)} + +
+ ) + })}
+ )} - {isCreditLinesOpen && ( -
- {creditLines.map((creditLine) => { - const prettyReference = creditLine.reference - ?.split("_") - .join(" ") - .split("-") - .join(" ") + {hasCreditLines && ( + <> + setIsCreditLinesOpen((o) => !o)} + className="flex cursor-pointer items-center gap-1" + > + + {loyaltyPlugin + ? t("orders.giftCardsStoreCreditLines") + : t("orders.creditLines.title")} + + +
+ } + value={getLocaleAmount( + order.credit_line_total, + order.currency_code + )} + /> + {isCreditLinesOpen && ( +
+ {creditLines.map((creditLine) => { + const prettyReference = creditLine.reference + ?.split("_") + .join(" ") + .split("-") + .join(" ") - const prettyReferenceId = creditLine.reference_id ? ( - - ) : null + const prettyReferenceId = creditLine.reference_id ? ( + + ) : null - return ( -
-
- - - - - - {format( - new Date(creditLine.created_at), - "dd MMM, yyyy, HH:mm:ss" - )} - -
- -
- - {prettyReference} ({prettyReferenceId}) - -
- -
- + return ( +
+
+ + + + + - + + + + {format( + new Date(creditLine.created_at), + "dd MMM, yyyy" + )} + + + + - + + + ({prettyReference} {prettyReferenceId}) + +
+
+
+
+ {getLocaleAmount( creditLine.amount as number, order.currency_code )} - +
-
- ) - })} -
- )} - + ) + })} +
+ )} + + )} + +
+ + {t("orders.summary.totalAfterDiscount")} + + + {getLocaleAmount(order.total, order.currency_code)} + +
) } @@ -1138,15 +1221,6 @@ const Total = ({ order }: { order: AdminOrder }) => { return (
-
- - {t("fields.total")} - - - {getStylizedAmount(order.original_total, order.currency_code)} - -
-
{t("fields.paidTotal")} @@ -1159,18 +1233,20 @@ const Total = ({ order }: { order: AdminOrder }) => {
-
- - {t("fields.creditTotal")} - + {getTotalCreditLines(order.credit_lines ?? []) > 0 && ( +
+ + {t("fields.creditTotal")} + - - {getStylizedAmount( - getTotalCreditLines(order.credit_lines ?? []), - order.currency_code - )} - -
+ + {getStylizedAmount( + getTotalCreditLines(order.credit_lines ?? []), + order.currency_code + )} + +
+ )}
{ {t("orders.returns.outstandingAmount")} diff --git a/packages/admin/dashboard/src/routes/orders/order-detail/constants.ts b/packages/admin/dashboard/src/routes/orders/order-detail/constants.ts index 1162a33181..957835287d 100644 --- a/packages/admin/dashboard/src/routes/orders/order-detail/constants.ts +++ b/packages/admin/dashboard/src/routes/orders/order-detail/constants.ts @@ -10,14 +10,21 @@ const DEFAULT_PROPERTIES = [ // --- TOTALS --- "total", "credit_line_total", + "item_subtotal", "item_total", + "item_tax_total", + "original_item_tax_total", + "item_discount_total", "shipping_subtotal", "original_total", + "original_tax_total", "subtotal", "discount_total", "discount_subtotal", "shipping_total", "shipping_tax_total", + "original_shipping_tax_total", + "shipping_discount_total", "tax_total", "refundable_total", "order_change", diff --git a/packages/core/types/src/http/order/common.ts b/packages/core/types/src/http/order/common.ts index f248d759b8..2ca4de467a 100644 --- a/packages/core/types/src/http/order/common.ts +++ b/packages/core/types/src/http/order/common.ts @@ -820,6 +820,10 @@ export interface BaseOrder { * The tax total applied on the order's items, including promotions. */ item_tax_total: number + /** + * The promotion total applied on the order's items. + */ + item_discount_total: number /** * The total of the order including taxes, excluding promotions. */ @@ -837,7 +841,7 @@ export interface BaseOrder { */ total: number /** - * The total of the order excluding taxes, including promotions. + * The total of the order excluding taxes and promotions. */ subtotal: number /** @@ -872,6 +876,10 @@ export interface BaseOrder { * The tax total applied on the order's shipping methods, including promotions. */ shipping_tax_total: number + /** + * The promotion total applied on the order's shipping methods. + */ + shipping_discount_total: number /** * The total of the order's shipping methods including taxes, excluding promotions. */ diff --git a/packages/core/types/src/modules-sdk/remote-query.ts b/packages/core/types/src/modules-sdk/remote-query.ts index 4ab9cce4cb..a368681749 100644 --- a/packages/core/types/src/modules-sdk/remote-query.ts +++ b/packages/core/types/src/modules-sdk/remote-query.ts @@ -68,7 +68,7 @@ export type QueryIndexFunction = { metadata: RemoteQueryFunctionReturnPagination } : Variables extends { skip?: number | undefined } | { skip?: number } - ? // TODO: the real type is the one in parenthsis but we put any for now as the current API is broken and need fixin in a separate iteration (RemoteQueryReturnedData[] | {rows: RemoteQueryReturnedData[] metadata: RemoteQueryFunctionReturnPagination }) + ? // TODO: the real type is the one in parenthesis but we put any for now as the current API is broken and need fixing in a separate iteration (RemoteQueryReturnedData[] | {rows: RemoteQueryReturnedData[] metadata: RemoteQueryFunctionReturnPagination }) any : RemoteQueryReturnedData[] : RemoteQueryReturnedData[] diff --git a/packages/core/types/src/order/common.ts b/packages/core/types/src/order/common.ts index eb531f0f8f..576fa8b05c 100644 --- a/packages/core/types/src/order/common.ts +++ b/packages/core/types/src/order/common.ts @@ -1182,6 +1182,11 @@ export interface OrderDTO { */ item_tax_total: BigNumberValue + /** + * The item discount total of the order. + */ + item_discount_total: BigNumberValue + /** * The original total of the order. */ @@ -1257,6 +1262,11 @@ export interface OrderDTO { */ shipping_tax_total: BigNumberValue + /** + * The shipping discount total of the order. + */ + shipping_discount_total: BigNumberValue + /** * The original shipping total of the order. */ diff --git a/packages/core/utils/src/totals/__tests__/totals.ts b/packages/core/utils/src/totals/__tests__/totals.ts index 01351de969..9d23d0fcb2 100644 --- a/packages/core/utils/src/totals/__tests__/totals.ts +++ b/packages/core/utils/src/totals/__tests__/totals.ts @@ -76,6 +76,7 @@ describe("Total calculation", function () { item_total: 73.5, item_subtotal: 65, item_tax_total: 8.5, + item_discount_total: 0, original_total: 73.5, original_tax_total: 8.5, original_item_subtotal: 65, @@ -149,6 +150,7 @@ describe("Total calculation", function () { item_total: 99, item_subtotal: 100, item_tax_total: 9, + item_discount_total: 11, original_item_total: 110, original_item_subtotal: 100, original_item_tax_total: 10, @@ -350,12 +352,14 @@ describe("Total calculation", function () { item_total: 95.7, item_subtotal: 99, item_tax_total: 8.7, + item_discount_total: 13.2, original_item_total: 108.9, original_item_subtotal: 99, original_item_tax_total: 9.9, shipping_total: 95.7, shipping_subtotal: 99, shipping_tax_total: 8.7, + shipping_discount_total: 13.2, original_shipping_tax_total: 9.9, original_shipping_subtotal: 99, original_shipping_total: 108.9, @@ -444,6 +448,7 @@ describe("Total calculation", function () { item_total: 100, item_subtotal: 90.9090909090909, item_tax_total: 9.090909090909092, + item_discount_total: 0, original_item_total: 100, original_item_subtotal: 90.9090909090909, original_item_tax_total: 9.090909090909092, @@ -486,6 +491,7 @@ describe("Total calculation", function () { item_total: 110, item_subtotal: 100, item_tax_total: 10, + item_discount_total: 0, original_item_total: 110, original_item_subtotal: 100, original_item_tax_total: 10, @@ -548,6 +554,7 @@ describe("Total calculation", function () { item_total: 210, item_subtotal: 190.9090909090909, item_tax_total: 19.09090909090909, + item_discount_total: 0, original_item_total: 210, original_item_subtotal: 190.9090909090909, original_item_tax_total: 19.09090909090909, @@ -638,6 +645,7 @@ describe("Total calculation", function () { item_subtotal: 100, item_tax_total: 18.333333333333332, item_total: 110, + item_discount_total: 10, credit_line_subtotal: 0, credit_line_tax_total: 0, @@ -749,12 +757,14 @@ describe("Total calculation", function () { item_total: 88, item_subtotal: 100, item_tax_total: 8, + item_discount_total: 22, original_item_total: 110, original_item_subtotal: 100, original_item_tax_total: 10, shipping_total: 25.3, shipping_subtotal: 25, shipping_tax_total: 2.3, + shipping_discount_total: 2.2, original_shipping_tax_total: 2.5, original_shipping_subtotal: 25, original_shipping_total: 27.5, @@ -866,6 +876,7 @@ describe("Total calculation", function () { item_total: 88, item_subtotal: 100, item_tax_total: 8, + item_discount_total: 22, original_item_total: 110, original_item_subtotal: 100, original_item_tax_total: 10, @@ -942,6 +953,7 @@ describe("Total calculation", function () { item_total: 0, item_subtotal: 119, item_tax_total: 0, + item_discount_total: 141.61, original_item_total: 141.61, original_item_subtotal: 119, original_item_tax_total: 22.61, @@ -1005,6 +1017,7 @@ describe("Total calculation", function () { discount_total: 0, item_subtotal: 100, item_tax_total: 19, + item_discount_total: 0, item_total: 119, items: [ { @@ -1048,6 +1061,7 @@ describe("Total calculation", function () { item_subtotal: 119, item_tax_total: 22.61, item_total: 141.61, + item_discount_total: 0, items: [ { discount_subtotal: 0, @@ -1090,6 +1104,7 @@ describe("Total calculation", function () { item_subtotal: 219, item_tax_total: 41.61, item_total: 260.61, + item_discount_total: 0, items: [ { discount_subtotal: 0, @@ -1176,6 +1191,7 @@ describe("Total calculation", function () { item_subtotal: 100, item_tax_total: 0, item_total: 0, + item_discount_total: 119, items: [ { adjustments: [ diff --git a/packages/core/utils/src/totals/cart/index.ts b/packages/core/utils/src/totals/cart/index.ts index 2237141309..988e41afbe 100644 --- a/packages/core/utils/src/totals/cart/index.ts +++ b/packages/core/utils/src/totals/cart/index.ts @@ -4,8 +4,8 @@ import { calculateCreditLinesTotal } from "../credit-lines" import { GetItemTotalInput, getLineItemsTotals } from "../line-item" import { MathBN } from "../math" import { - GetShippingMethodTotalInput, getShippingMethodsTotals, + GetShippingMethodTotalInput, } from "../shipping-method" import { transformPropertiesToBigNumber } from "../transform-properties-to-bignumber" @@ -86,23 +86,19 @@ export function decorateCartTotals( let itemsSubtotal = MathBN.convert(0) let itemsTotal = MathBN.convert(0) - let itemsOriginalTotal = MathBN.convert(0) let itemsOriginalSubtotal = MathBN.convert(0) - let itemsTaxTotal = MathBN.convert(0) - let itemsOriginalTaxTotal = MathBN.convert(0) + let itemsDiscountTotal = MathBN.convert(0) let shippingSubtotal = MathBN.convert(0) let shippingTotal = MathBN.convert(0) - let shippingOriginalTotal = MathBN.convert(0) let shippingOriginalSubtotal = MathBN.convert(0) - let shippingTaxTotal = MathBN.convert(0) - let shippingOriginalTaxTotal = MathBN.convert(0) + let shippingDiscountTotal = MathBN.convert(0) const cartItems = items.map((item, index) => { const itemTotals = Object.assign(item, itemsTotals[item.id ?? index] ?? {}) @@ -128,15 +124,16 @@ export function decorateCartTotals( itemsTotal = MathBN.add(itemsTotal, itemTotal) itemsOriginalTotal = MathBN.add(itemsOriginalTotal, itemOriginalTotal) itemsOriginalSubtotal = MathBN.add(itemsOriginalSubtotal, itemSubtotal) - itemsSubtotal = MathBN.add(itemsSubtotal, itemSubtotal) - itemsTaxTotal = MathBN.add(itemsTaxTotal, itemTaxTotal) - itemsOriginalTaxTotal = MathBN.add( itemsOriginalTaxTotal, itemOriginalTaxTotal ) + itemsDiscountTotal = MathBN.add( + itemsDiscountTotal, + itemDiscountTotal + ) for (const key of Object.values(optionalFields)) { if (key in itemTotals) { @@ -156,48 +153,45 @@ export function decorateCartTotals( subtotal = MathBN.add(subtotal, shippingMethodTotals.subtotal) - shippingSubtotal = MathBN.add( - shippingSubtotal, - shippingMethodTotals.subtotal - ) - - shippingTotal = MathBN.add(shippingTotal, shippingMethodTotals.total) - - shippingOriginalTotal = MathBN.add( - shippingOriginalTotal, - shippingMethodTotals.original_total - ) - - shippingOriginalSubtotal = MathBN.add( - shippingOriginalSubtotal, - shippingMethodTotals.subtotal - ) - - shippingTaxTotal = MathBN.add( - shippingTaxTotal, - shippingMethodTotals.tax_total - ) - - shippingOriginalTaxTotal = MathBN.add( - shippingOriginalTaxTotal, - shippingMethodTotals.original_tax_total - ) - discountTotal = MathBN.add( discountTotal, shippingMethodTotals.discount_total ) - discountSubtotal = MathBN.add( discountSubtotal, shippingMethodTotals.discount_subtotal ) - discountTaxTotal = MathBN.add( discountTaxTotal, shippingMethodTotals.discount_tax_total ) + shippingSubtotal = MathBN.add( + shippingSubtotal, + shippingMethodTotals.subtotal + ) + shippingTotal = MathBN.add(shippingTotal, shippingMethodTotals.total) + shippingOriginalTotal = MathBN.add( + shippingOriginalTotal, + shippingMethodTotals.original_total + ) + shippingOriginalSubtotal = MathBN.add( + shippingOriginalSubtotal, + shippingMethodTotals.subtotal + ) + shippingTaxTotal = MathBN.add( + shippingTaxTotal, + shippingMethodTotals.tax_total + ) + shippingOriginalTaxTotal = MathBN.add( + shippingOriginalTaxTotal, + shippingMethodTotals.original_tax_total + ) + shippingDiscountTotal = MathBN.add( + shippingDiscountTotal, + shippingMethodTotals.discount_total + ) + return shippingMethodTotals }) @@ -250,6 +244,7 @@ export function decorateCartTotals( cart.item_total = new BigNumber(itemsTotal) cart.item_subtotal = new BigNumber(itemsSubtotal) cart.item_tax_total = new BigNumber(itemsTaxTotal) + cart.item_discount_total = new BigNumber(itemsDiscountTotal) cart.original_item_total = new BigNumber(itemsOriginalTotal) cart.original_item_subtotal = new BigNumber(itemsOriginalSubtotal) @@ -265,6 +260,7 @@ export function decorateCartTotals( cart.shipping_total = new BigNumber(shippingTotal) cart.shipping_subtotal = new BigNumber(shippingSubtotal) cart.shipping_tax_total = new BigNumber(shippingTaxTotal) + cart.shipping_discount_total = new BigNumber(shippingDiscountTotal) cart.original_shipping_tax_total = new BigNumber(shippingOriginalTaxTotal) cart.original_shipping_subtotal = new BigNumber(shippingOriginalSubtotal) diff --git a/packages/medusa/src/api/store/carts/query-config.ts b/packages/medusa/src/api/store/carts/query-config.ts index 4b5ca64f66..a1c3f4aa40 100644 --- a/packages/medusa/src/api/store/carts/query-config.ts +++ b/packages/medusa/src/api/store/carts/query-config.ts @@ -18,12 +18,14 @@ export const defaultStoreCartFields = [ "item_total", "item_subtotal", "item_tax_total", + "item_discount_total", "original_item_total", "original_item_subtotal", "original_item_tax_total", "shipping_total", "shipping_subtotal", "shipping_tax_total", + "shipping_discount_total", "original_shipping_tax_total", "original_shipping_subtotal", "original_shipping_total", diff --git a/packages/modules/cart/integration-tests/__tests__/services/cart-module/index.spec.ts b/packages/modules/cart/integration-tests/__tests__/services/cart-module/index.spec.ts index 69988030b9..3be9bdd98d 100644 --- a/packages/modules/cart/integration-tests/__tests__/services/cart-module/index.spec.ts +++ b/packages/modules/cart/integration-tests/__tests__/services/cart-module/index.spec.ts @@ -3170,12 +3170,14 @@ moduleIntegrationTestRunner({ item_total: 200, item_subtotal: 500, item_tax_total: 0, + item_discount_total: 300, original_item_total: 500, original_item_subtotal: 500, original_item_tax_total: 0, shipping_total: 10, shipping_subtotal: 10, shipping_tax_total: 0, + shipping_discount_total: 0, original_shipping_tax_total: 0, original_shipping_subtotal: 10, original_shipping_total: 10, @@ -3195,6 +3197,14 @@ moduleIntegrationTestRunner({ value: "300", precision: 20, }, + raw_item_discount_total: { + value: "300", + precision: 20, + }, + raw_shipping_discount_total: { + value: "0", + precision: 20, + }, raw_discount_subtotal: { value: "300", precision: 20,