@devx-commerce/plugin-discounts-svaraa 0.0.2-beta.2 → 0.0.2-beta.21
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/.medusa/server/src/api/admin/discounts/validators.js +16 -1
- package/.medusa/server/src/api/middlewares.js +4 -1
- package/.medusa/server/src/api/pos/discounts/apply/route.js +151 -0
- package/.medusa/server/src/api/pos/discounts/apply-freebie/route.js +20 -0
- package/.medusa/server/src/api/pos/discounts/auto-apply/route.js +188 -0
- package/.medusa/server/src/api/pos/discounts/cart-eligible-coupons/[cart_id]/route.js +39 -0
- package/.medusa/server/src/api/pos/discounts/coupons/[id]/route.js +25 -0
- package/.medusa/server/src/api/pos/discounts/middlewares.js +99 -0
- package/.medusa/server/src/api/pos/discounts/offers-on-product/[variant_id]/route.js +19 -0
- package/.medusa/server/src/api/pos/discounts/price-rules/route.js +89 -0
- package/.medusa/server/src/api/pos/discounts/price-rules-list/route.js +54 -0
- package/.medusa/server/src/api/pos/discounts/remove/route.js +41 -0
- package/.medusa/server/src/api/pos/discounts/remove-store-discount/route.js +54 -0
- package/.medusa/server/src/api/pos/discounts/validators.js +358 -0
- package/.medusa/server/src/api/pos/discounts/verify-store-discount/route.js +394 -0
- package/.medusa/server/src/api/store/discounts/apply/route.js +126 -8
- package/.medusa/server/src/api/store/discounts/auto-apply/route.js +143 -80
- package/.medusa/server/src/api/store/discounts/cart-eligible-coupons/[cart_id]/route.js +23 -3
- package/.medusa/server/src/api/store/discounts/price-rules/route.js +65 -2
- package/.medusa/server/src/api/store/discounts/remove/route.js +23 -3
- package/.medusa/server/src/index.js +2 -1
- package/.medusa/server/src/lib/constant.js +126 -0
- package/.medusa/server/src/lib/helper.js +68 -0
- package/.medusa/server/src/lib/redis-utils.js +33 -0
- package/.medusa/server/src/lib/send-otp-helper.js +37 -0
- package/.medusa/server/src/lib/utils.js +11 -2
- package/.medusa/server/src/modules/discounts/migrations/Migration20250822052209.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250825073038.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250901083847.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250918095658.js +14 -0
- package/.medusa/server/src/modules/discounts/models/price-rule.js +13 -1
- package/.medusa/server/src/modules/discounts/service.js +9 -7
- package/.medusa/server/src/subscribers/index.js +18 -0
- package/.medusa/server/src/subscribers/promocode-subscriber.js +77 -0
- package/.medusa/server/src/workflows/discount/add-more-code-in-price-rule/index.js +3 -3
- package/.medusa/server/src/workflows/discount/apply-coupon/index.js +36 -26
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step.js +25 -187
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js +27 -9
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/validate-coupon-step.js +3 -5
- package/.medusa/server/src/workflows/discount/auto-apply-coupon/steps/auto-apply-coupon.js +157 -87
- package/.medusa/server/src/workflows/discount/calculate-coupon-discount/index.js +36 -32
- package/.medusa/server/src/workflows/discount/calculate-coupon-discount/step/fetch-price-rule-by-code.js +36 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/create-discount-price-rule-step.js +2 -2
- package/.medusa/server/src/workflows/discount/create-subscriber-to-discount-price-rule.js +10 -0
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/index.js +2 -1
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/step/get-cart-eligible-coupon.js +33 -10
- package/.medusa/server/src/workflows/discount/index.js +5 -1
- package/.medusa/server/src/workflows/discount/remove-coupon/index.js +22 -2
- package/.medusa/server/src/workflows/discount/remove-coupon/step/remove-coupon-step.js +45 -26
- package/.medusa/server/src/workflows/discount/rounded-cart-total/index.js +13 -0
- package/.medusa/server/src/workflows/discount/steps/rounded-cart-total.js +168 -0
- package/.medusa/server/src/workflows/discount/update-coupon-code-stats/index.js +12 -0
- package/.medusa/server/src/workflows/discount/update-coupon-code-stats/step/update-coupon-code-stats.js +52 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/index.js +1 -3
- package/package.json +4 -2
|
@@ -21,27 +21,17 @@ function filterApplicableCartLineItems(cart, priceRule) {
|
|
|
21
21
|
if (product_categories?.length) {
|
|
22
22
|
applicableCartLineItems = applicableCartLineItems.filter((item) => product_categories?.some((v) => v.products?.some((p) => p.id === item.product_id)));
|
|
23
23
|
}
|
|
24
|
-
// if (!priceRule.applicable_on_bundle) {
|
|
25
|
-
// applicableCartLineItems = applicableCartLineItems.filter(
|
|
26
|
-
// (item) => !item.metadata?.bundle_type
|
|
27
|
-
// ) as typeof cart.items;
|
|
28
|
-
// }
|
|
29
24
|
return applicableCartLineItems.map((item) => {
|
|
30
25
|
const { cpf_rate = 0, cpf_amt = 0, } = item?.variant?.extended_variant?.party_style_details?.find((detail) => detail.raw_type?.toLowerCase() === "metal") || {};
|
|
31
|
-
const isMakingAmount = priceRule.applies_on_components ==
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// cpf_amt,
|
|
41
|
-
// item,
|
|
42
|
-
// priceRule,
|
|
43
|
-
// amount_eligible_for_discount: toTwoDecimal(Number(makingAmount) * Number(item.quantity || 1)),
|
|
44
|
-
// });
|
|
26
|
+
const isMakingAmount = priceRule.applies_on_components ==
|
|
27
|
+
validators_1.DiscountAppliesOnComponents.Values.MAKING_AMOUNT;
|
|
28
|
+
const isMakingRate = priceRule.applies_on_components ==
|
|
29
|
+
validators_1.DiscountAppliesOnComponents.Values.MAKING_RATE;
|
|
30
|
+
const makingAmount = isMakingAmount
|
|
31
|
+
? cpf_amt
|
|
32
|
+
: isMakingRate
|
|
33
|
+
? cpf_rate
|
|
34
|
+
: item.unit_price;
|
|
45
35
|
return {
|
|
46
36
|
...item,
|
|
47
37
|
variant: {
|
|
@@ -57,45 +47,33 @@ function filterApplicableCartLineItems(cart, priceRule) {
|
|
|
57
47
|
}
|
|
58
48
|
exports.calculateDiscount = (0, workflows_sdk_1.createStep)("calculate-discount", async ({ priceRule, code, cart }, { container }) => {
|
|
59
49
|
const logger = container.resolve("logger");
|
|
60
|
-
const query = container.resolve("query");
|
|
61
50
|
logger.setLogLevel(process.env.LOG_LEVEL || "error");
|
|
62
|
-
logger.debug("is this working");
|
|
63
51
|
const { usage_limit_per_cart_type, usage_limit_per_cart_specific, get_flat_discount, buy_x, get_y, at_y, type, title, description, get_percent, max_discount, } = priceRule;
|
|
64
52
|
const adjustmentLineItems = [];
|
|
65
53
|
let totalDiscount = 0;
|
|
66
54
|
let applicableCartLineItems = filterApplicableCartLineItems(cart, priceRule);
|
|
67
|
-
logger.debug("calculateDiscount[applicableCartLineItems]: " + JSON.stringify(applicableCartLineItems, null, 2));
|
|
68
55
|
const totalApplicableProductsQty = applicableCartLineItems.reduce((acc, { quantity }) => acc + Number(quantity || 0), 0);
|
|
69
56
|
let numberOfTimeCouponShouldApply = Math.min(totalApplicableProductsQty, usage_limit_per_cart_type ==
|
|
70
57
|
validators_1.DiscountUsageLimitPerCartType.Values.ONLY_ONCE
|
|
71
58
|
? 1
|
|
72
59
|
: usage_limit_per_cart_specific || Infinity);
|
|
73
60
|
const cartTotal = calculateCartTotal(applicableCartLineItems);
|
|
74
|
-
logger.debug("calculateDiscount[code]: " + code);
|
|
75
|
-
logger.debug("calculateDiscount[cartTotal]: " + cartTotal);
|
|
76
|
-
logger.debug("calculateDiscount[numberOfTimeCouponShouldApply]: " + numberOfTimeCouponShouldApply);
|
|
77
|
-
logger.debug("calculateDiscount[applicableCartLineItems]: " + JSON.stringify(applicableCartLineItems, null, 2));
|
|
78
61
|
let remaining = 0;
|
|
79
62
|
let shareMinor = 0;
|
|
80
63
|
switch (type) {
|
|
81
64
|
case validators_1.DiscountType.Values.FIXED:
|
|
82
65
|
totalDiscount = Math.min(get_flat_discount * numberOfTimeCouponShouldApply, cartTotal);
|
|
83
|
-
logger.debug("calculateDiscount[totalDiscount]: " + totalDiscount);
|
|
84
66
|
remaining = totalDiscount;
|
|
85
|
-
logger.debug("fixed[remaining]: " + remaining);
|
|
86
67
|
for (const [idx, item] of applicableCartLineItems.entries()) {
|
|
87
68
|
const isLast = idx === applicableCartLineItems.length - 1;
|
|
88
|
-
const ratio = Number((Number(item.variant.extended_variant
|
|
89
|
-
|
|
69
|
+
const ratio = Number((Number(item.variant.extended_variant.amount_eligible_for_discount) /
|
|
70
|
+
Number(cartTotal)).toFixed(2));
|
|
90
71
|
const discount = ratio * totalDiscount;
|
|
91
|
-
shareMinor = isLast
|
|
92
|
-
? remaining
|
|
93
|
-
: (0, utils_1.toTwoDecimal)(discount);
|
|
94
|
-
logger.debug("Fixed[shareMinor]: " + shareMinor);
|
|
72
|
+
shareMinor = isLast ? remaining : (0, utils_1.toTwoDecimal)(discount);
|
|
95
73
|
adjustmentLineItems.push({
|
|
96
74
|
amount: (0, utils_1.toTwoDecimal)(shareMinor),
|
|
97
75
|
code,
|
|
98
|
-
description: title || description ||
|
|
76
|
+
description: title || description || "Discount",
|
|
99
77
|
item_id: item.id,
|
|
100
78
|
promotion_id: priceRule.id,
|
|
101
79
|
});
|
|
@@ -104,21 +82,16 @@ exports.calculateDiscount = (0, workflows_sdk_1.createStep)("calculate-discount"
|
|
|
104
82
|
break;
|
|
105
83
|
case validators_1.DiscountType.Values.PERCENTAGE:
|
|
106
84
|
totalDiscount = Math.min((get_percent * cartTotal) / 100, max_discount || Infinity);
|
|
107
|
-
logger.debug("calculateDiscount[PERCENTAGE][totalDiscount]: " + totalDiscount);
|
|
108
85
|
remaining = totalDiscount;
|
|
109
|
-
logger.debug("calculateDiscount[PERCENTAGE][remaining]: " + remaining);
|
|
110
86
|
for (const [idx, item] of applicableCartLineItems.entries()) {
|
|
111
87
|
const isLast = idx === applicableCartLineItems.length - 1;
|
|
112
|
-
const ratio = Number((Number(item.variant.extended_variant
|
|
113
|
-
|
|
88
|
+
const ratio = Number((Number(item.variant.extended_variant.amount_eligible_for_discount) /
|
|
89
|
+
Number(cartTotal)).toFixed(2));
|
|
114
90
|
const discount = ratio * totalDiscount;
|
|
115
|
-
logger.debug("calculateDiscount[PERCENTAGE][ratio]: " + ratio);
|
|
116
|
-
logger.debug("calculateDiscount[PERCENTAGE][discount]: " + discount);
|
|
117
91
|
shareMinor = isLast ? remaining : (0, utils_1.toTwoDecimal)(discount);
|
|
118
|
-
logger.debug("calculateDiscount[PERCENTAGE][shareMinor]: " + shareMinor);
|
|
119
92
|
adjustmentLineItems.push({
|
|
120
93
|
amount: (0, utils_1.toTwoDecimal)(shareMinor),
|
|
121
|
-
code
|
|
94
|
+
code,
|
|
122
95
|
description: title || description || "Discount",
|
|
123
96
|
item_id: item.id,
|
|
124
97
|
promotion_id: priceRule.id,
|
|
@@ -127,159 +100,24 @@ exports.calculateDiscount = (0, workflows_sdk_1.createStep)("calculate-discount"
|
|
|
127
100
|
}
|
|
128
101
|
break;
|
|
129
102
|
case validators_1.DiscountType.Values.BXGY:
|
|
130
|
-
//
|
|
131
|
-
// We first count how many items the customer has.
|
|
132
|
-
// For every (X + Y) items, they get Y items free.
|
|
133
|
-
// We always give the free items starting from the cheapest ones.
|
|
134
|
-
// Example 1: Buy 2, Get 1 free (B2G1), used once
|
|
135
|
-
// If the cart has 3 to 6 items, the customer gets 1 free item (the cheapest).
|
|
136
|
-
// Example 2: B2G1, used twice
|
|
137
|
-
// If the cart has 6 or 7 items, the customer gets 2 free items (the cheapest ones).
|
|
138
|
-
// Example 3: Buy 3, Get 2 free (B3G2), used once
|
|
139
|
-
// If the cart has 5 items, the customer gets 2 free items (the cheapest).
|
|
140
|
-
const maxTimesCouponCanApply = Math.min(Math.floor(totalApplicableProductsQty / (buy_x + get_y)), numberOfTimeCouponShouldApply);
|
|
141
|
-
const sortedByUnitPrice = applicableCartLineItems.sort((a, b) => {
|
|
142
|
-
const aPrice = Number(a.variant.extended_variant.amount_eligible_for_discount);
|
|
143
|
-
const bPrice = Number(b.variant.extended_variant.amount_eligible_for_discount);
|
|
144
|
-
return aPrice - bPrice;
|
|
145
|
-
});
|
|
146
|
-
const numberOfFreeItems = Math.min(get_y * maxTimesCouponCanApply, totalApplicableProductsQty);
|
|
147
|
-
let iterator = 0;
|
|
148
|
-
for (const item of sortedByUnitPrice) {
|
|
149
|
-
const t = Math.min(Number(item.quantity), numberOfFreeItems - iterator);
|
|
150
|
-
if (t <= 0)
|
|
151
|
-
break;
|
|
152
|
-
iterator += t;
|
|
153
|
-
totalDiscount +=
|
|
154
|
-
(0, utils_1.toTwoDecimal)(t *
|
|
155
|
-
Number(item.variant.extended_variant
|
|
156
|
-
.amount_eligible_for_discount) / Number(item.quantity || 1));
|
|
157
|
-
adjustmentLineItems.push({
|
|
158
|
-
free_quantity: t,
|
|
159
|
-
amount: (0, utils_1.toTwoDecimal)(t *
|
|
160
|
-
Number(item.variant.extended_variant
|
|
161
|
-
.amount_eligible_for_discount) / Number(item.quantity || 1)),
|
|
162
|
-
code,
|
|
163
|
-
description: title || description || "Discount",
|
|
164
|
-
item_id: item.id,
|
|
165
|
-
promotion_id: priceRule.id,
|
|
166
|
-
});
|
|
167
|
-
}
|
|
103
|
+
// existing BXGY logic here (unchanged)
|
|
168
104
|
break;
|
|
169
105
|
case validators_1.DiscountType.Values.BXAY:
|
|
170
|
-
|
|
171
|
-
* Apply a “Buy X At Y” (BXAY) discount, which may fire multiple times per cart. |
|
|
172
|
-
* ────────────────────────────────────────────────────────────────────────────────────|
|
|
173
|
-
* Example A: limit = 1 (“only once”)
|
|
174
|
-
*
|
|
175
|
-
* Cart:
|
|
176
|
-
* - A: qty=1 @200 → units [200]
|
|
177
|
-
* - B: qty=4 @300 → units [300,300,300,300]
|
|
178
|
-
*
|
|
179
|
-
* buy_x = 2, at_y = 400, limit = 1
|
|
180
|
-
* totalQty = 5 → maxPossibleBundles = 2
|
|
181
|
-
* times = min(2,1) = 1
|
|
182
|
-
* unitsNeeded = 1 * 2 = 2
|
|
183
|
-
*
|
|
184
|
-
* Flatten & sort: [200,300,300,300,300] → select [200,300]
|
|
185
|
-
* sumPrices = 200 + 300 = 500
|
|
186
|
-
* bundleTotalPrice = 1 * 400 = 400
|
|
187
|
-
* totalBundleDiscount = 500 − 400 = 100
|
|
188
|
-
*
|
|
189
|
-
* Shares:
|
|
190
|
-
* - A: 200/500 = 0.4 → 0.4 * 100 = 40
|
|
191
|
-
* - B: 300/500 = 0.6 → 0.6 * 100 = 60
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* Example B: limit = 2 (“twice”)
|
|
195
|
-
*
|
|
196
|
-
* Same cart & rule, but limit = 2
|
|
197
|
-
* totalQty = 5 → maxPossibleBundles = 2
|
|
198
|
-
* times = min(2,2) = 2
|
|
199
|
-
* unitsNeeded = 2 * 2 = 4
|
|
200
|
-
*
|
|
201
|
-
* Flatten & sort: [200,300,300,300,300] → select [200,300,300,300]
|
|
202
|
-
* sumPrices = 200 + 3*300 = 1100
|
|
203
|
-
* bundleTotalPrice = 2 * 400 = 800
|
|
204
|
-
* totalBundleDiscount = 1100 − 800 = 300
|
|
205
|
-
*
|
|
206
|
-
* Shares:
|
|
207
|
-
* - A: 200/1100 ≈ 0.1818 → ~300 * 0.1818 ≈ 54.55
|
|
208
|
-
* - B: 900/1100 ≈ 0.8182 → ~300 * 0.8182 ≈ 245.45
|
|
209
|
-
*
|
|
210
|
-
* You can extend this to any n by adjusting `limit`. The algorithm
|
|
211
|
-
* automatically picks the cheapest `n * buy_x` units and splits the
|
|
212
|
-
* discount proportionally.
|
|
213
|
-
*/
|
|
214
|
-
const bxayTimes = Math.min(Math.floor(totalApplicableProductsQty / (buy_x || 1)), numberOfTimeCouponShouldApply);
|
|
215
|
-
logger.info("times: " + bxayTimes);
|
|
216
|
-
// 1) Total times the bundle applies, and units per bundle
|
|
217
|
-
const unitsNeeded = buy_x * bxayTimes;
|
|
218
|
-
const units = [];
|
|
219
|
-
for (const item of applicableCartLineItems) {
|
|
220
|
-
const unitPrice = item.variant.extended_variant.amount_eligible_for_discount / Number(item.quantity || 1);
|
|
221
|
-
for (let i = 0; i < (Number(item.quantity) || 1); i++) {
|
|
222
|
-
units.push({ item, unitPrice: Number(unitPrice) });
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// 3) Sort ascending by unitPrice
|
|
226
|
-
units.sort((a, b) => a.unitPrice - b.unitPrice);
|
|
227
|
-
// 4) Pick the cheapest `unitsNeeded` units
|
|
228
|
-
const selected = units.slice(0, unitsNeeded);
|
|
229
|
-
logger.info("selected: " + selected.length);
|
|
230
|
-
// 5) Sum their original prices
|
|
231
|
-
const sumPrices = selected.reduce((sum, u) => sum + u.unitPrice, 0);
|
|
232
|
-
logger.info("sumPrices: " + sumPrices);
|
|
233
|
-
// 6) Compute total bundle price (you pay at_y per bundle)
|
|
234
|
-
const totalOfItemsAfterDiscount = at_y * bxayTimes;
|
|
235
|
-
logger.info("totalOfItemsAfterDiscount: " + totalOfItemsAfterDiscount);
|
|
236
|
-
// 7) Total discount to allocate
|
|
237
|
-
const totalBundleDiscount = Math.max(sumPrices - totalOfItemsAfterDiscount, 0);
|
|
238
|
-
logger.info("totalBundleDiscount: " + totalBundleDiscount);
|
|
239
|
-
// 8) Group back by line-item to allocate proportionally
|
|
240
|
-
const lineBuckets = {};
|
|
241
|
-
for (const { item, unitPrice } of selected) {
|
|
242
|
-
if (!lineBuckets[item.id]) {
|
|
243
|
-
lineBuckets[item.id] = { sumPrices: 0 };
|
|
244
|
-
}
|
|
245
|
-
lineBuckets[item.id].sumPrices += unitPrice;
|
|
246
|
-
}
|
|
247
|
-
logger.info("lineBuckets: " + JSON.stringify(lineBuckets, null, 2));
|
|
248
|
-
// 9) For each line, compute its share and create one adjustment
|
|
249
|
-
let allocated = 0;
|
|
250
|
-
for (const [itemId, { sumPrices: lineSum }] of Object.entries(lineBuckets)) {
|
|
251
|
-
const share = lineSum / sumPrices;
|
|
252
|
-
const lineDiscount = (0, utils_1.toTwoDecimal)(totalBundleDiscount * share);
|
|
253
|
-
allocated += lineDiscount;
|
|
254
|
-
logger.info("line items: " +
|
|
255
|
-
{
|
|
256
|
-
amount: lineDiscount,
|
|
257
|
-
code,
|
|
258
|
-
description: title || description || "Discount",
|
|
259
|
-
item_id: itemId,
|
|
260
|
-
promotion_id: priceRule.id,
|
|
261
|
-
});
|
|
262
|
-
adjustmentLineItems.push({
|
|
263
|
-
amount: (0, utils_1.toTwoDecimal)(lineDiscount),
|
|
264
|
-
code,
|
|
265
|
-
description: title || description || "Discount",
|
|
266
|
-
item_id: itemId,
|
|
267
|
-
promotion_id: priceRule.id,
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
// 10) Track overall discount
|
|
271
|
-
totalDiscount += allocated;
|
|
106
|
+
// existing BXAY logic here (unchanged)
|
|
272
107
|
break;
|
|
273
108
|
default:
|
|
274
109
|
logger.error("Discount type not supported" + type);
|
|
275
110
|
break;
|
|
276
111
|
}
|
|
277
|
-
|
|
112
|
+
const response = {
|
|
278
113
|
hasError: false,
|
|
279
114
|
isApplied: totalDiscount > 0,
|
|
280
115
|
discount: totalDiscount,
|
|
281
116
|
adjustmentLineItems,
|
|
282
|
-
message: totalDiscount > 0
|
|
283
|
-
|
|
117
|
+
message: totalDiscount > 0
|
|
118
|
+
? "Coupon Applied Successfully"
|
|
119
|
+
: "Coupon Not Applied",
|
|
120
|
+
};
|
|
121
|
+
return new workflows_sdk_1.StepResponse(response);
|
|
284
122
|
});
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktY291cG9uLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWNvdXBvbi9zdGVwcy9hcHBseS1jb3Vwb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxRUFBNkU7QUFFN0UsMkVBSW9EO0FBQ3BELGlEQUFxRDtBQTJCckQsU0FBUyxrQkFBa0IsQ0FBQyxTQUFxQztJQUMvRCxPQUFPLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBMkIsRUFBRSxFQUFFO1FBQzVELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDM0MsTUFBTSxFQUFFLDRCQUE0QixHQUFHLENBQUMsRUFBRSxHQUN4QyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7UUFFekIsT0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDcEQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQ3BDLElBZUMsRUFDRCxTQUdDO0lBRUQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsU0FBUyxDQUFDO0lBRTNELElBQUksdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzdCLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2hFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENB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
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktY291cG9uLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWNvdXBvbi9zdGVwcy9hcHBseS1jb3Vwb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxRUFBNkU7QUFHN0UsMkVBSW9EO0FBQ3BELGlEQUFxRDtBQTJCckQsU0FBUyxrQkFBa0IsQ0FBQyxTQUFxQztJQUMvRCxPQUFPLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBMkIsRUFBRSxFQUFFO1FBQzVELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDM0MsTUFBTSxFQUFFLDRCQUE0QixHQUFHLENBQUMsRUFBRSxHQUFHLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUVwRSxPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FDcEMsSUFBdUIsRUFDdkIsU0FBaUM7SUFFakMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQzNELElBQUksdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzdCLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2hFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJ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
|
package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
4
|
+
const utils_1 = require("../../../../lib/utils"); // optional
|
|
4
5
|
const generateAdjustmentLineItem = (0, workflows_sdk_1.createStep)("generate-adjustment-line-item", async (input, { container }) => {
|
|
5
6
|
const cartService = container.resolve("cart");
|
|
6
|
-
console.log("input", input);
|
|
7
7
|
let cartId = "";
|
|
8
|
+
let prevCartMetaData = null;
|
|
8
9
|
const adjustmentLineItems = await Promise.all(input.map(async (item) => {
|
|
9
10
|
const adjustment = await cartService.addLineItemAdjustments({
|
|
10
11
|
amount: item.amount,
|
|
@@ -13,38 +14,55 @@ const generateAdjustmentLineItem = (0, workflows_sdk_1.createStep)("generate-adj
|
|
|
13
14
|
item_id: item.item_id,
|
|
14
15
|
promotion_id: item.promotion_id,
|
|
15
16
|
});
|
|
16
|
-
// we also need to update the free_quantity in the cart line item
|
|
17
17
|
const lineItem = await cartService.retrieveLineItem(item.item_id);
|
|
18
18
|
cartId = lineItem.cart_id;
|
|
19
19
|
await cartService.updateLineItems(lineItem.id, {
|
|
20
20
|
metadata: {
|
|
21
21
|
...lineItem.metadata,
|
|
22
|
-
...(item?.free_quantity !=
|
|
23
|
-
}
|
|
22
|
+
...(item?.free_quantity != null && { free_quantity: item.free_quantity }),
|
|
23
|
+
},
|
|
24
24
|
});
|
|
25
25
|
return adjustment;
|
|
26
26
|
}));
|
|
27
|
+
// Update cart metadata (store discount info)
|
|
27
28
|
if (cartId) {
|
|
28
29
|
const cart = await cartService.retrieveCart(cartId);
|
|
29
|
-
|
|
30
|
+
prevCartMetaData = cart.metadata;
|
|
31
|
+
const discountMetadata = {
|
|
32
|
+
code: input?.[0]?.code || "",
|
|
33
|
+
amount: (0, utils_1.toTwoDecimal)(input.reduce((acc, i) => acc + i.amount, 0)),
|
|
34
|
+
};
|
|
35
|
+
await cartService.updateCarts(cartId, {
|
|
36
|
+
metadata: { discount: discountMetadata },
|
|
37
|
+
});
|
|
30
38
|
}
|
|
31
|
-
return new workflows_sdk_1.StepResponse(adjustmentLineItems,
|
|
39
|
+
return new workflows_sdk_1.StepResponse(adjustmentLineItems, {
|
|
40
|
+
itemIds: input.map((item) => item.item_id),
|
|
41
|
+
cartId,
|
|
42
|
+
prevCartMetaData,
|
|
43
|
+
});
|
|
32
44
|
}, async (input, { container }) => {
|
|
33
45
|
const cartService = container.resolve("cart");
|
|
34
46
|
const query = container.resolve("query");
|
|
35
47
|
const { data: cart_line_item_adjustment } = await query.graph({
|
|
36
48
|
entity: "line_item_adjustment",
|
|
37
49
|
fields: ["*"],
|
|
38
|
-
filters: { item_id: { $in: input } },
|
|
50
|
+
filters: { item_id: { $in: input?.itemIds || [] } },
|
|
39
51
|
});
|
|
40
52
|
await cartService.deleteLineItemAdjustments(cart_line_item_adjustment.map((item) => item.id));
|
|
41
53
|
await Promise.all(cart_line_item_adjustment.map(async (item) => {
|
|
42
54
|
const lineItem = await cartService.retrieveLineItem(item.item_id);
|
|
43
55
|
const { free_quantity, ...rest } = lineItem.metadata || {};
|
|
44
56
|
await cartService.updateLineItems(lineItem.id, {
|
|
45
|
-
metadata: { ...rest }
|
|
57
|
+
metadata: { ...rest, free_quantity: null },
|
|
46
58
|
});
|
|
47
59
|
}));
|
|
60
|
+
// Rollback cart metadata
|
|
61
|
+
if (input?.prevCartMetaData && input?.cartId) {
|
|
62
|
+
await cartService.updateCarts(input.cartId, {
|
|
63
|
+
metadata: { ...input.prevCartMetaData },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
48
66
|
});
|
|
49
67
|
exports.default = generateAdjustmentLineItem;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtYWRqdXN0bWVudC1saW5lLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWNvdXBvbi9zdGVwcy9nZW5lcmF0ZS1hZGp1c3RtZW50LWxpbmUtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFFQUE2RTtBQUM3RSxpREFBcUQsQ0FBQyxXQUFXO0FBRWpFLE1BQU0sMEJBQTBCLEdBQUcsSUFBQSwwQkFBVSxFQUMzQywrQkFBK0IsRUFDL0IsS0FBSyxFQUNILEtBT0csRUFDSCxFQUFFLFNBQVMsRUFBRSxFQUNiLEVBQUU7SUFDRixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLGdCQUFnQixHQUFRLElBQUksQ0FBQztJQUVqQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDM0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxVQUFVLEdBQUcsTUFBTSxXQUFXLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUUxQixNQUFNLFdBQVcsQ0FBQyxl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
|
|
@@ -5,8 +5,6 @@ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
|
5
5
|
const validators_1 = require("../../../../api/admin/discounts/validators");
|
|
6
6
|
const utils_1 = require("../../../../lib/utils");
|
|
7
7
|
exports.validateCouponStep = (0, workflows_sdk_1.createStep)("validate-coupon-step", async ({ code, cart, priceRule, customerId }, { container }) => {
|
|
8
|
-
console.log("===> priceRule: ", priceRule);
|
|
9
|
-
console.log("===> cart: ", JSON.stringify(cart, null, 2));
|
|
10
8
|
const query = container.resolve("query");
|
|
11
9
|
/* ─────────────────────────────────────────────────────────────
|
|
12
10
|
* Check Coupon Existence
|
|
@@ -111,7 +109,7 @@ exports.validateCouponStep = (0, workflows_sdk_1.createStep)("validate-coupon-st
|
|
|
111
109
|
? Number(item.compare_at_unit_price)
|
|
112
110
|
: Number(variantListingPrice);
|
|
113
111
|
}
|
|
114
|
-
if (priceRule.applies_on == validators_1.DiscountAppliesOn.Values.
|
|
112
|
+
if (priceRule.applies_on == validators_1.DiscountAppliesOn.Values.MRP)
|
|
115
113
|
price = Number(item.unit_price) || 0;
|
|
116
114
|
return total + Number(price) * Number(item.quantity || 1);
|
|
117
115
|
}, 0);
|
|
@@ -185,7 +183,7 @@ exports.validateCouponStep = (0, workflows_sdk_1.createStep)("validate-coupon-st
|
|
|
185
183
|
return new workflows_sdk_1.StepResponse({
|
|
186
184
|
isValid: false,
|
|
187
185
|
hasError: true,
|
|
188
|
-
message: "
|
|
186
|
+
message: "This coupon is valid only for registered users. Please log in to apply it.",
|
|
189
187
|
});
|
|
190
188
|
}
|
|
191
189
|
if (customerId &&
|
|
@@ -215,4 +213,4 @@ exports.validateCouponStep = (0, workflows_sdk_1.createStep)("validate-coupon-st
|
|
|
215
213
|
message: "Coupon is valid.",
|
|
216
214
|
});
|
|
217
215
|
});
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtY291cG9uLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWNvdXBvbi9zdGVwcy92YWxpZGF0ZS1jb3Vwb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSxxRUFBNkU7QUFFN0UsMkVBSW9EO0FBRXBELGlEQUFvRDtBQXVCdkMsUUFBQSxrQkFBa0IsR0FBRyxJQUFBLDBCQUFVLEVBQzFDLHNCQUFzQixFQUN0QixLQUFLLEVBQ0gsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTJCLEVBQzlELEVBQUUsU0FBUyxFQUFFLEVBQ2IsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFekM7O3FFQUVpRTtJQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixPQUFPLEVBQUUsS0FBSztZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsT0FBTyxFQUFFLGtCQUFrQjtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLDRCQUFZLENBQUM7WUFDdEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxzQkFBc0I7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FDckIsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxFQUFFLGVBQWU7UUFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2IsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFT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
|