@8medusa/utils 2.10.19 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/totals/line-item/index.js +92 -49
- package/dist/totals/line-item/index.js.map +1 -1
- package/dist/totals/promotion/index.d.ts.map +1 -1
- package/dist/totals/promotion/index.js +30 -48
- package/dist/totals/promotion/index.js.map +1 -1
- package/dist/totals/shipping-method/index.d.ts.map +1 -1
- package/dist/totals/shipping-method/index.js +14 -12
- package/dist/totals/shipping-method/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -22,78 +22,121 @@ function setRefundableTotal(item, discountsTotal, totals, context) {
|
|
|
22
22
|
const itemDetail = item.detail;
|
|
23
23
|
const totalReturnedQuantity = math_1.MathBN.sum(itemDetail.return_requested_quantity ?? 0, itemDetail.return_received_quantity ?? 0, itemDetail.return_dismissed_quantity ?? 0);
|
|
24
24
|
const currentQuantity = math_1.MathBN.sub(item.quantity, totalReturnedQuantity);
|
|
25
|
+
if (math_1.MathBN.eq(currentQuantity, 0)) {
|
|
26
|
+
totals.refundable_total_per_unit = new big_number_1.BigNumber(0);
|
|
27
|
+
totals.refundable_total = new big_number_1.BigNumber(0);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const isTaxInclusive = item.is_tax_inclusive ?? context.includeTax;
|
|
31
|
+
const sumTax = math_1.MathBN.sum(...((item.tax_lines ?? []).map((taxLine) => taxLine.rate) ?? []));
|
|
32
|
+
const sumTaxRate = math_1.MathBN.div(sumTax, 100);
|
|
33
|
+
const vatMul = math_1.MathBN.add(1, sumTaxRate);
|
|
34
|
+
// Derive unitNet (same as main calculation)
|
|
35
|
+
const unitNet = isTaxInclusive
|
|
36
|
+
? math_1.MathBN.div(item.unit_price, vatMul)
|
|
37
|
+
: item.unit_price;
|
|
38
|
+
// Calculate refundable line net (for current quantity, not returned)
|
|
39
|
+
const refundableLineNet = math_1.MathBN.mult(unitNet, currentQuantity);
|
|
40
|
+
const refundableLineNetRounded = math_1.MathBN.round(refundableLineNet, 2);
|
|
41
|
+
// Calculate discount per unit and apply to refundable quantity
|
|
25
42
|
const discountPerUnit = math_1.MathBN.div(discountsTotal, item.quantity);
|
|
26
|
-
const
|
|
43
|
+
const refundableDiscount = math_1.MathBN.mult(discountPerUnit, currentQuantity);
|
|
44
|
+
// Subtract discount from net
|
|
45
|
+
const refundableNetAfterDiscount = math_1.MathBN.sub(refundableLineNetRounded, refundableDiscount);
|
|
46
|
+
// Calculate tax on refundable net (after discount)
|
|
27
47
|
const taxTotal = (0, tax_1.calculateTaxTotal)({
|
|
28
48
|
taxLines: item.tax_lines || [],
|
|
29
|
-
taxableAmount:
|
|
49
|
+
taxableAmount: refundableNetAfterDiscount,
|
|
30
50
|
});
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
51
|
+
const taxTotalRounded = math_1.MathBN.round(taxTotal, 2);
|
|
52
|
+
// Calculate refundable gross total
|
|
53
|
+
const refundableTotal = math_1.MathBN.round(math_1.MathBN.add(refundableNetAfterDiscount, taxTotalRounded), 2);
|
|
54
|
+
totals.refundable_total_per_unit = new big_number_1.BigNumber(math_1.MathBN.div(refundableTotal, currentQuantity));
|
|
35
55
|
totals.refundable_total = new big_number_1.BigNumber(refundableTotal);
|
|
36
56
|
}
|
|
37
57
|
function getLineItemTotals(item, context) {
|
|
38
58
|
const isTaxInclusive = item.is_tax_inclusive ?? context.includeTax;
|
|
39
59
|
const sumTax = math_1.MathBN.sum(...((item.tax_lines ?? []).map((taxLine) => taxLine.rate) ?? []));
|
|
40
60
|
const sumTaxRate = math_1.MathBN.div(sumTax, 100);
|
|
61
|
+
const vatMul = math_1.MathBN.add(1, sumTaxRate);
|
|
41
62
|
/*
|
|
42
|
-
|
|
43
|
-
If the price is inclusive of tax, we need to remove the taxed amount
|
|
44
|
-
|
|
63
|
+
A) Derive vatRate and unitNet
|
|
64
|
+
If the price is inclusive of tax, we need to remove the taxed amount
|
|
65
|
+
unitNet = unitGross / (1 + vatRate)
|
|
66
|
+
DO NOT round unitNet - keep high precision for line-level calculation
|
|
45
67
|
*/
|
|
46
|
-
const
|
|
47
|
-
? math_1.MathBN.div(item.unit_price,
|
|
68
|
+
const unitNet = isTaxInclusive
|
|
69
|
+
? math_1.MathBN.div(item.unit_price, vatMul)
|
|
48
70
|
: item.unit_price;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
// Step 5: Multiply rounded unit total by quantity
|
|
67
|
-
const subtotal = math_1.MathBN.mult(unitSubtotal, item.quantity);
|
|
68
|
-
const total = math_1.MathBN.mult(unitTotal, item.quantity);
|
|
69
|
-
// Calculate original total using the same EU-standard method as total
|
|
70
|
-
const unitOriginalTotal = math_1.MathBN.round(unitTotalBeforeRounding, 2);
|
|
71
|
-
const originalTotal = math_1.MathBN.mult(unitOriginalTotal, item.quantity);
|
|
72
|
-
// Calculate tax totals for reporting
|
|
73
|
-
const taxTotal = (0, tax_1.calculateTaxTotal)({
|
|
71
|
+
/*
|
|
72
|
+
B) Compute line net BEFORE promotions (pre-promo base)
|
|
73
|
+
lineNetBefore = qty × unitNet (high precision, no rounding yet)
|
|
74
|
+
*/
|
|
75
|
+
const lineNetBefore = math_1.MathBN.mult(unitNet, item.quantity);
|
|
76
|
+
/*
|
|
77
|
+
C) CRITICAL: Round at NET LINE level to match Helios rounding point
|
|
78
|
+
Helios will do: round2(totalPrice / (1 + vatRate))
|
|
79
|
+
We ensure consistency by rounding the net base at LINE level, NOT unit level.
|
|
80
|
+
This is the key alignment point that prevents rounding drift.
|
|
81
|
+
*/
|
|
82
|
+
const lineNetBeforeRounded = math_1.MathBN.round(lineNetBefore, 2);
|
|
83
|
+
/*
|
|
84
|
+
D) Compute tax on the PRE-PROMO net (tax is NOT affected by promotions)
|
|
85
|
+
Tax must be calculated from lineNetBeforeRounded (not unit, not discounted net)
|
|
86
|
+
*/
|
|
87
|
+
const lineTax = (0, tax_1.calculateTaxTotal)({
|
|
74
88
|
taxLines: item.tax_lines || [],
|
|
75
|
-
taxableAmount:
|
|
89
|
+
taxableAmount: lineNetBeforeRounded,
|
|
76
90
|
setTotalField: "total",
|
|
77
91
|
});
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
const lineTaxRounded = math_1.MathBN.round(lineTax, 2);
|
|
93
|
+
/*
|
|
94
|
+
E) Compute original (pre-promo) gross line total
|
|
95
|
+
This is what the customer would pay without any promotions
|
|
96
|
+
*/
|
|
97
|
+
const lineGrossBeforePromo = math_1.MathBN.round(math_1.MathBN.add(lineNetBeforeRounded, lineTaxRounded), 2);
|
|
98
|
+
/*
|
|
99
|
+
F) Compute promo/discount on GROSS (post-tax reduction)
|
|
100
|
+
Promotions are applied to customer-facing gross totals, not to the taxable base.
|
|
101
|
+
- Percentage promos are computed on lineGrossBeforePromo (gross), not on net
|
|
102
|
+
- Fixed promos are subtracted from gross after percentage is computed
|
|
103
|
+
- Tax is NOT recalculated after applying promo
|
|
104
|
+
*/
|
|
105
|
+
const { adjustmentsTotal: promoGross } = (0, adjustment_1.calculateAdjustmentTotal)({
|
|
106
|
+
adjustments: item.adjustments || [],
|
|
107
|
+
includesTax: true, // Force gross interpretation - promotions reduce customer-facing price
|
|
108
|
+
taxRate: sumTaxRate,
|
|
82
109
|
});
|
|
110
|
+
/*
|
|
111
|
+
G) Compute final total (gross after promo)
|
|
112
|
+
This is the totalPrice we sync to Helios
|
|
113
|
+
*/
|
|
114
|
+
const total = math_1.MathBN.round(math_1.MathBN.sub(lineGrossBeforePromo, promoGross), 2);
|
|
115
|
+
/*
|
|
116
|
+
H) Prepare output fields
|
|
117
|
+
- subtotal: line net before promo (for consistency with existing API)
|
|
118
|
+
- total: gross line total after promo (synced to Helios as totalPrice)
|
|
119
|
+
- original_total: gross line total before promo
|
|
120
|
+
- original_tax_total: tax on pre-promo amounts
|
|
121
|
+
- tax_total: same as original_tax_total (tax doesn't change with promo)
|
|
122
|
+
- discount_total: gross discount amount
|
|
123
|
+
- discount_subtotal: net discount amount (derived)
|
|
124
|
+
- discount_tax_total: tax component of discount (derived)
|
|
125
|
+
*/
|
|
83
126
|
const totals = {
|
|
84
127
|
quantity: item.quantity,
|
|
85
128
|
unit_price: item.unit_price,
|
|
86
|
-
subtotal: new big_number_1.BigNumber(
|
|
129
|
+
subtotal: new big_number_1.BigNumber(lineNetBeforeRounded),
|
|
87
130
|
total: new big_number_1.BigNumber(total),
|
|
88
|
-
original_total: new big_number_1.BigNumber(
|
|
89
|
-
discount_total: new big_number_1.BigNumber(
|
|
90
|
-
discount_subtotal: new big_number_1.BigNumber(
|
|
91
|
-
discount_tax_total: new big_number_1.BigNumber(
|
|
92
|
-
tax_total: new big_number_1.BigNumber(
|
|
93
|
-
original_tax_total: new big_number_1.BigNumber(
|
|
131
|
+
original_total: new big_number_1.BigNumber(lineGrossBeforePromo),
|
|
132
|
+
discount_total: new big_number_1.BigNumber(promoGross),
|
|
133
|
+
discount_subtotal: new big_number_1.BigNumber(promoGross), // Same as discount_total - promotions apply to gross amounts
|
|
134
|
+
discount_tax_total: new big_number_1.BigNumber(0), // No tax on discount - promotions reduce post-tax totals
|
|
135
|
+
tax_total: new big_number_1.BigNumber(lineTaxRounded),
|
|
136
|
+
original_tax_total: new big_number_1.BigNumber(lineTaxRounded),
|
|
94
137
|
};
|
|
95
138
|
if ((0, common_1.isDefined)(item.detail?.return_requested_quantity)) {
|
|
96
|
-
setRefundableTotal(item,
|
|
139
|
+
setRefundableTotal(item, promoGross, totals, context);
|
|
97
140
|
}
|
|
98
141
|
const div = math_1.MathBN.eq(item.quantity, 0) ? 1 : item.quantity;
|
|
99
142
|
const totalPerUnit = math_1.MathBN.div(totals.total, div);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/totals/line-item/index.ts"],"names":[],"mappings":";;AAyDA,gDAgBC;AAxED,yCAA6D;AAC7D,8CAAwD;AACxD,8CAAyC;AACzC,kCAAgC;AAChC,gCAA0C;AAoD1C,SAAgB,kBAAkB,CAChC,KAA0B,EAC1B,OAAkC;IAElC,MAAM,WAAW,GAAG,EAAE,CAAA;IAEtB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE;YACtD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB;YACvD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;SACjD,CAAC,CAAA;QACF,KAAK,EAAE,CAAA;IACT,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAuB,EACvB,cAA8B,EAC9B,MAA0B,EAC1B,OAAkC;IAElC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAO,CAAA;IAC/B,MAAM,qBAAqB,GAAG,aAAM,CAAC,GAAG,CACtC,UAAU,CAAC,yBAAyB,IAAI,CAAC,EACzC,UAAU,CAAC,wBAAwB,IAAI,CAAC,EACxC,UAAU,CAAC,yBAAyB,IAAI,CAAC,CAC1C,CAAA;IACD,MAAM,eAAe,GAAG,aAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/totals/line-item/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/totals/promotion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAoC/C,wBAAgB,iBAAiB,CAAC,SAAS,KAAA,EAAE,aAAa,KAAA,EAAE,cAAc,KAAA,OAMzE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,KAAA,EAAE,WAAW,KAAA,OAM1D;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/totals/promotion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAoC/C,wBAAgB,iBAAiB,CAAC,SAAS,KAAA,EAAE,aAAa,KAAA,EAAE,cAAc,KAAA,OAMzE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,KAAA,EAAE,WAAW,KAAA,OAM1D;AAgCD,wBAAgB,sCAAsC,CACpD,QAAQ,KAAA,EACR,SAAS,KAAA,EACT,cAAc,GAAE,cAAkB,aAuDnC"}
|
|
@@ -31,41 +31,37 @@ function getApplicableQuantity(lineItem, maxQuantity) {
|
|
|
31
31
|
}
|
|
32
32
|
return lineItem.quantity;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Calculate gross total from subtotal and tax_lines
|
|
36
|
+
* ALL promotions apply to post-tax (gross) amounts
|
|
37
|
+
*/
|
|
38
|
+
function getLineItemGrossTotal(lineItem) {
|
|
39
|
+
const subtotal = math_1.MathBN.convert(lineItem.subtotal);
|
|
40
|
+
// Calculate tax from tax_lines if available
|
|
41
|
+
if (lineItem.tax_lines &&
|
|
42
|
+
Array.isArray(lineItem.tax_lines) &&
|
|
43
|
+
lineItem.tax_lines.length > 0) {
|
|
44
|
+
const totalTaxRate = lineItem.tax_lines.reduce((acc, taxLine) => math_1.MathBN.add(acc, math_1.MathBN.div(taxLine.rate, 100)), math_1.MathBN.convert(0));
|
|
45
|
+
const taxAmount = math_1.MathBN.mult(subtotal, totalTaxRate);
|
|
46
|
+
return math_1.MathBN.add(subtotal, taxAmount);
|
|
47
|
+
}
|
|
48
|
+
// If no tax_lines, return subtotal (gross = net when no tax)
|
|
49
|
+
return subtotal;
|
|
50
|
+
}
|
|
51
|
+
function getLineItemUnitPriceGross(lineItem) {
|
|
52
|
+
const grossTotal = getLineItemGrossTotal(lineItem);
|
|
53
|
+
return math_1.MathBN.div(grossTotal, lineItem.quantity);
|
|
36
54
|
}
|
|
37
55
|
function calculateAdjustmentAmountFromPromotion(lineItem, promotion, lineItemsTotal = 0) {
|
|
38
56
|
/*
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
For example, if the promotion is 100$, and the order total is 400$, and the items are:
|
|
44
|
-
item1: 250$
|
|
45
|
-
item2: 150$
|
|
46
|
-
total: 400$
|
|
47
|
-
|
|
48
|
-
The promotion value for the line items would be:
|
|
49
|
-
item1: 62.5$
|
|
50
|
-
item2: 37.5$
|
|
51
|
-
total: 100$
|
|
52
|
-
|
|
53
|
-
For the next 100$ promotion, we remove the applied promotions value from the line item total and redistribute the promotion value across the line items based on the updated totals.
|
|
54
|
-
|
|
55
|
-
Example:
|
|
56
|
-
item1: (250 - 62.5) = 187.5
|
|
57
|
-
item2: (150 - 37.5) = 112.5
|
|
58
|
-
total: 300
|
|
59
|
-
|
|
60
|
-
The promotion value for the line items would be:
|
|
61
|
-
item1: $62.5
|
|
62
|
-
item2: $37.5
|
|
63
|
-
total: 100$
|
|
64
|
-
|
|
57
|
+
ALL promotions apply to GROSS (post-tax) amounts.
|
|
58
|
+
- PERCENTAGE: Calculate percentage on gross total
|
|
59
|
+
- FIXED: Distribute fixed amount proportionally across items based on gross totals
|
|
65
60
|
*/
|
|
66
61
|
if (promotion.allocation === promotion_1.ApplicationMethodAllocation.ACROSS) {
|
|
67
62
|
const quantity = getApplicableQuantity(lineItem, promotion.max_quantity);
|
|
68
|
-
|
|
63
|
+
// Always use GROSS for all promotion types
|
|
64
|
+
const lineItemTotal = math_1.MathBN.mult(getLineItemUnitPriceGross(lineItem), quantity);
|
|
69
65
|
const applicableTotal = math_1.MathBN.sub(lineItemTotal, promotion.applied_value);
|
|
70
66
|
if (math_1.MathBN.lte(applicableTotal, 0)) {
|
|
71
67
|
return applicableTotal;
|
|
@@ -74,26 +70,12 @@ function calculateAdjustmentAmountFromPromotion(lineItem, promotion, lineItemsTo
|
|
|
74
70
|
return math_1.MathBN.min(promotionValue, applicableTotal);
|
|
75
71
|
}
|
|
76
72
|
/*
|
|
77
|
-
For
|
|
78
|
-
|
|
79
|
-
Example:
|
|
80
|
-
item1: {
|
|
81
|
-
subtotal: 200$,
|
|
82
|
-
unit_price: 50$,
|
|
83
|
-
quantity: 4,
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
When applying promotions, we need to consider 2 values:
|
|
87
|
-
1. What is the maximum promotion value?
|
|
88
|
-
2. What is the maximum promotion we can apply on the line item?
|
|
89
|
-
|
|
90
|
-
After applying each promotion, we reduce the maximum promotion that you can add to the line item by the value of the promotions applied.
|
|
91
|
-
|
|
92
|
-
We then apply whichever is lower.
|
|
73
|
+
For EACH allocation - also use GROSS
|
|
93
74
|
*/
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
const
|
|
75
|
+
const grossTotal = getLineItemGrossTotal(lineItem);
|
|
76
|
+
const remainingItemTotal = math_1.MathBN.sub(grossTotal, promotion.applied_value);
|
|
77
|
+
const unitPriceGross = math_1.MathBN.div(grossTotal, lineItem.quantity);
|
|
78
|
+
const maximumPromotionTotal = math_1.MathBN.mult(unitPriceGross, promotion.max_quantity ?? math_1.MathBN.convert(1));
|
|
97
79
|
const applicableTotal = math_1.MathBN.min(remainingItemTotal, maximumPromotionTotal);
|
|
98
80
|
if (math_1.MathBN.lte(applicableTotal, 0)) {
|
|
99
81
|
return math_1.MathBN.convert(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/totals/promotion/index.ts"],"names":[],"mappings":";;AAoCA,8CAMC;AAED,sDAMC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/totals/promotion/index.ts"],"names":[],"mappings":";;AAoCA,8CAMC;AAED,sDAMC;AAgCD,wFA0DC;AA3ID,+CAGwB;AACxB,kCAAgC;AAEhC,SAAS,8BAA8B,CAAC,SAAS,EAAE,aAAa;IAC9D,OAAO,aAAM,CAAC,IAAI,CAAC,aAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,aAAa,CAAC,CAAA;AACrE,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa;IACpE,IAAI,SAAS,CAAC,UAAU,KAAK,uCAA2B,CAAC,MAAM,EAAE,CAAC;QAChE,MAAM,qBAAqB,GAAG,aAAM,CAAC,IAAI,CACvC,aAAM,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,EACpC,SAAS,CAAC,KAAK,CAChB,CAAA;QAED,IAAI,aAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC,EAAE,CAAC;YACjD,OAAO,qBAAqB,CAAA;QAC9B,CAAC;QAED,MAAM,UAAU,GAAG,aAAM,CAAC,GAAG,CAC3B,aAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAC3B,qBAAqB,CACtB,CAAA;QAED,OAAO,aAAM,CAAC,IAAI,CAChB,qBAAqB,EACrB,aAAM,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAC5B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,CAAA;AACxB,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc;IACxE,IAAI,SAAS,CAAC,IAAI,KAAK,iCAAqB,CAAC,UAAU,EAAE,CAAC;QACxD,OAAO,8BAA8B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,yBAAyB,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAA;AAC5E,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW;IACzD,IAAI,WAAW,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,aAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,QAAQ,CAAC,QAAQ,CAAA;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,QAAQ;IACrC,MAAM,QAAQ,GAAG,aAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAElD,4CAA4C;IAC5C,IACE,QAAQ,CAAC,SAAS;QAClB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QACjC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAC7B,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAC5C,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,aAAM,CAAC,GAAG,CAAC,GAAG,EAAE,aAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAChE,aAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAClB,CAAA;QACD,MAAM,SAAS,GAAG,aAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QACrD,OAAO,aAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC;IAED,6DAA6D;IAC7D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAQ;IACzC,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAClD,OAAO,aAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC;AAED,SAAgB,sCAAsC,CACpD,QAAQ,EACR,SAAS,EACT,iBAAiC,CAAC;IAElC;;;;MAIE;IAEF,IAAI,SAAS,CAAC,UAAU,KAAK,uCAA2B,CAAC,MAAM,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;QAExE,2CAA2C;QAC3C,MAAM,aAAa,GAAG,aAAM,CAAC,IAAI,CAC/B,yBAAyB,CAAC,QAAQ,CAAC,EACnC,QAAQ,CACT,CAAA;QACD,MAAM,eAAe,GAAG,aAAM,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAA;QAE1E,IAAI,aAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC;YACnC,OAAO,eAAe,CAAA;QACxB,CAAC;QAED,MAAM,cAAc,GAAG,iBAAiB,CACtC,SAAS,EACT,eAAe,EACf,cAAc,CACf,CAAA;QAED,OAAO,aAAM,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;IACpD,CAAC;IAED;;MAEE;IACF,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAClD,MAAM,kBAAkB,GAAG,aAAM,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,CAAA;IAE1E,MAAM,cAAc,GAAG,aAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAChE,MAAM,qBAAqB,GAAG,aAAM,CAAC,IAAI,CACvC,cAAc,EACd,SAAS,CAAC,YAAY,IAAI,aAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAC5C,CAAA;IACD,MAAM,eAAe,GAAG,aAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAA;IAE7E,IAAI,aAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO,aAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,cAAc,GAAG,iBAAiB,CACtC,SAAS,EACT,eAAe,EACf,cAAc,CACf,CAAA;IAED,OAAO,aAAM,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/totals/shipping-method/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,UAAU,+BAA+B;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,SAAS,CAAA;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,UAAU,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAA;CAClD;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,SAAS,CAAA;IAEjB,QAAQ,EAAE,SAAS,CAAA;IAEnB,KAAK,EAAE,SAAS,CAAA;IAChB,cAAc,EAAE,SAAS,CAAA;IAEzB,cAAc,EAAE,SAAS,CAAA;IACzB,iBAAiB,EAAE,SAAS,CAAA;IAC5B,kBAAkB,EAAE,SAAS,CAAA;IAE7B,SAAS,EAAE,SAAS,CAAA;IACpB,kBAAkB,EAAE,SAAS,CAAA;CAC9B;AAED,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,2BAA2B,EAAE,EAC9C,OAAO,EAAE,+BAA+B,GACvC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAa9C;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,2BAA2B,EAC3C,OAAO,EAAE,+BAA+B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/totals/shipping-method/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,UAAU,+BAA+B;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,SAAS,CAAA;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,UAAU,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAA;CAClD;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,SAAS,CAAA;IAEjB,QAAQ,EAAE,SAAS,CAAA;IAEnB,KAAK,EAAE,SAAS,CAAA;IAChB,cAAc,EAAE,SAAS,CAAA;IAEzB,cAAc,EAAE,SAAS,CAAA;IACzB,iBAAiB,EAAE,SAAS,CAAA;IAC5B,kBAAkB,EAAE,SAAS,CAAA;IAE7B,SAAS,EAAE,SAAS,CAAA;IACpB,kBAAkB,EAAE,SAAS,CAAA;CAC9B;AAED,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,2BAA2B,EAAE,EAC9C,OAAO,EAAE,+BAA+B,GACvC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAa9C;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,2BAA2B,EAC3C,OAAO,EAAE,+BAA+B,gCAwDzC"}
|
|
@@ -23,32 +23,34 @@ function getShippingMethodTotals(shippingMethod, context) {
|
|
|
23
23
|
const subtotal = isTaxInclusive
|
|
24
24
|
? math_1.MathBN.div(shippingMethodAmount, math_1.MathBN.add(1, sumTaxRate))
|
|
25
25
|
: shippingMethodAmount;
|
|
26
|
-
const { adjustmentsTotal: discountsTotal
|
|
26
|
+
const { adjustmentsTotal: discountsTotal } = (0, adjustment_1.calculateAdjustmentTotal)({
|
|
27
27
|
adjustments: shippingMethod.adjustments || [],
|
|
28
28
|
includesTax: isTaxInclusive,
|
|
29
29
|
taxRate: sumTaxRate,
|
|
30
30
|
});
|
|
31
31
|
const taxLines = shippingMethod.tax_lines || [];
|
|
32
|
-
|
|
33
|
-
taxLines,
|
|
34
|
-
taxableAmount: math_1.MathBN.sub(subtotal, discountsSubtotal),
|
|
35
|
-
setTotalField: "total",
|
|
36
|
-
});
|
|
32
|
+
// Tax is calculated on original subtotal - not affected by discounts
|
|
37
33
|
const originalTaxTotal = (0, tax_1.calculateTaxTotal)({
|
|
38
34
|
taxLines,
|
|
39
35
|
taxableAmount: subtotal,
|
|
40
36
|
setTotalField: "subtotal",
|
|
41
37
|
});
|
|
38
|
+
// Tax total is same as original - promotions don't reduce tax
|
|
39
|
+
const taxTotal = originalTaxTotal;
|
|
40
|
+
// Original gross total (before promotions)
|
|
41
|
+
const originalGrossTotal = isTaxInclusive
|
|
42
|
+
? shippingMethodAmount
|
|
43
|
+
: math_1.MathBN.add(subtotal, originalTaxTotal);
|
|
44
|
+
// Final total = original gross - discount (promotions reduce post-tax total)
|
|
45
|
+
const total = math_1.MathBN.round(math_1.MathBN.sub(originalGrossTotal, discountsTotal), 2);
|
|
42
46
|
const totals = {
|
|
43
47
|
amount: new big_number_1.BigNumber(shippingMethodAmount),
|
|
44
48
|
subtotal: new big_number_1.BigNumber(subtotal),
|
|
45
|
-
total: new big_number_1.BigNumber(
|
|
46
|
-
original_total: new big_number_1.BigNumber(
|
|
47
|
-
? shippingMethodAmount
|
|
48
|
-
: math_1.MathBN.add(subtotal, originalTaxTotal)),
|
|
49
|
+
total: new big_number_1.BigNumber(total),
|
|
50
|
+
original_total: new big_number_1.BigNumber(originalGrossTotal),
|
|
49
51
|
discount_total: new big_number_1.BigNumber(discountsTotal),
|
|
50
|
-
discount_subtotal: new big_number_1.BigNumber(
|
|
51
|
-
discount_tax_total: new big_number_1.BigNumber(
|
|
52
|
+
discount_subtotal: new big_number_1.BigNumber(discountsTotal), // Same as discount_total - promotions apply to gross
|
|
53
|
+
discount_tax_total: new big_number_1.BigNumber(0), // No tax on discount - promotions reduce post-tax totals
|
|
52
54
|
tax_total: new big_number_1.BigNumber(taxTotal),
|
|
53
55
|
original_tax_total: new big_number_1.BigNumber(originalTaxTotal),
|
|
54
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/totals/shipping-method/index.ts"],"names":[],"mappings":";;AAkCA,4DAgBC;AAED,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/totals/shipping-method/index.ts"],"names":[],"mappings":"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"}
|