@devx-commerce/plugin-discounts-svaraa 0.0.1-beta.2
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/admin/index.js +20 -0
- package/.medusa/server/src/admin/index.mjs +21 -0
- package/.medusa/server/src/api/admin/discounts/freebie-rules/[id]/route.js +75 -0
- package/.medusa/server/src/api/admin/discounts/freebie-rules/route.js +73 -0
- package/.medusa/server/src/api/admin/discounts/middlewares.js +113 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/[id]/codes/export/route.js +41 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/[id]/codes/route.js +20 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/[id]/route.js +50 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/bulk/[id]/add-more-codes/route.js +34 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/bulk/route.js +33 -0
- package/.medusa/server/src/api/admin/discounts/price-rules/route.js +47 -0
- package/.medusa/server/src/api/admin/discounts/validators.js +649 -0
- package/.medusa/server/src/api/admin/plugin/route.js +7 -0
- package/.medusa/server/src/api/middlewares.js +14 -0
- package/.medusa/server/src/api/store/discounts/apply/route.js +24 -0
- package/.medusa/server/src/api/store/discounts/apply-freebie/route.js +20 -0
- package/.medusa/server/src/api/store/discounts/auto-apply/route.js +125 -0
- package/.medusa/server/src/api/store/discounts/cart-eligible-coupons/[cart_id]/route.js +19 -0
- package/.medusa/server/src/api/store/discounts/middlewares.js +49 -0
- package/.medusa/server/src/api/store/discounts/offers-on-product/[variant_id]/route.js +19 -0
- package/.medusa/server/src/api/store/discounts/price-rules/route.js +20 -0
- package/.medusa/server/src/api/store/discounts/remove/route.js +21 -0
- package/.medusa/server/src/api/store/plugin/route.js +7 -0
- package/.medusa/server/src/index.js +18 -0
- package/.medusa/server/src/jobs/price-rule-status-updates.js +80 -0
- package/.medusa/server/src/lib/api-response.js +42 -0
- package/.medusa/server/src/lib/utils.js +10 -0
- package/.medusa/server/src/links/mtm-freebie-rule-with-customers.js +16 -0
- package/.medusa/server/src/links/mtm-freebie-rule-with-products-categories.js +16 -0
- package/.medusa/server/src/links/mtm-freebie-rule-with-products-variants.js +18 -0
- package/.medusa/server/src/links/mtm-price-rule-with-customers.js +16 -0
- package/.medusa/server/src/links/mtm-price-rule-with-products-categories.js +16 -0
- package/.medusa/server/src/links/mtm-price-rule-with-products-variants.js +16 -0
- package/.medusa/server/src/modules/discounts/index.js +13 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250526174351.js +21 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250527074936.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250527104919.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250527113947.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250529123956.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602052234.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602052239.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602165037.js +16 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250602194000.js +130 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250603053221.js +16 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250604162727.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250604162741.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250604175305.js +15 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250605161922.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250605162116.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250605164908.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250610063653.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250611105345.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250611105356.js +14 -0
- package/.medusa/server/src/modules/discounts/migrations/Migration20250617113007.js +14 -0
- package/.medusa/server/src/modules/discounts/models/discount-code.js +20 -0
- package/.medusa/server/src/modules/discounts/models/freebie-rule.js +27 -0
- package/.medusa/server/src/modules/discounts/models/price-rule.js +53 -0
- package/.medusa/server/src/modules/discounts/service.js +98 -0
- package/.medusa/server/src/workflows/discount/add-more-code-in-price-rule/index.js +28 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/index.js +41 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step-backup.js +245 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step.js +244 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js +28 -0
- package/.medusa/server/src/workflows/discount/apply-coupon/steps/validate-coupon-step.js +212 -0
- package/.medusa/server/src/workflows/discount/apply-freebie/index.js +31 -0
- package/.medusa/server/src/workflows/discount/apply-freebie/steps/add-freebie-items-to-cart.js +212 -0
- package/.medusa/server/src/workflows/discount/apply-freebie/steps/remove-freebie-from-cart.js +16 -0
- package/.medusa/server/src/workflows/discount/auto-apply-coupon/index.js +10 -0
- package/.medusa/server/src/workflows/discount/auto-apply-coupon/steps/auto-apply-coupon.js +81 -0
- package/.medusa/server/src/workflows/discount/calculate-coupon-discount/index.js +74 -0
- package/.medusa/server/src/workflows/discount/create-bulk-discount/index.js +46 -0
- package/.medusa/server/src/workflows/discount/create-bulk-discount/steps/add-bulk-codes-to-rule.js +84 -0
- package/.medusa/server/src/workflows/discount/create-discount-code/index.js +10 -0
- package/.medusa/server/src/workflows/discount/create-discount-code/steps/create-discount-code-step.js +20 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/index.js +56 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/create-discount-price-rule-step.js +58 -0
- package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/validate-customer-exists.js +21 -0
- package/.medusa/server/src/workflows/discount/create-freebie-rule/index.js +44 -0
- package/.medusa/server/src/workflows/discount/create-freebie-rule/steps/create-freebie-rule-step.js +64 -0
- package/.medusa/server/src/workflows/discount/export-codes/index.js +14 -0
- package/.medusa/server/src/workflows/discount/export-codes/steps/export-codes-step.js +116 -0
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/index.js +15 -0
- package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/step/get-cart-eligible-coupon.js +39 -0
- package/.medusa/server/src/workflows/discount/get-product-offers/index.js +25 -0
- package/.medusa/server/src/workflows/discount/get-product-offers/step/calculate-product-offers.js +53 -0
- package/.medusa/server/src/workflows/discount/index.js +28 -0
- package/.medusa/server/src/workflows/discount/remove-coupon/index.js +18 -0
- package/.medusa/server/src/workflows/discount/remove-coupon/step/remove-coupon-step.js +32 -0
- package/.medusa/server/src/workflows/discount/steps/validate-cart-exists.js +22 -0
- package/.medusa/server/src/workflows/discount/steps/validate-discount-code-exists.js +20 -0
- package/.medusa/server/src/workflows/discount/steps/validate-freebie-code-exists.js +16 -0
- package/.medusa/server/src/workflows/discount/steps/validate-same-prefix-rule-exists.js +20 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/index.js +42 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/update-discount-price-rule-step.js +160 -0
- package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/validate-discount-price-rule-update-step.js +175 -0
- package/.medusa/server/src/workflows/discount/update-freebie-price-rule/index.js +44 -0
- package/.medusa/server/src/workflows/discount/update-freebie-price-rule/steps/update-freebie-price-rule-step.js +201 -0
- package/.medusa/server/src/workflows/discount/update-freebie-price-rule/steps/validate-freebie-rule-update-step.js +44 -0
- package/.medusa/server/src/workflows/index.js +18 -0
- package/.medusa/server/src/workflows/product/steps/validate-product-category-exists.js +26 -0
- package/.medusa/server/src/workflows/product/steps/validate-product-exists.js +28 -0
- package/.medusa/server/src/workflows/product/steps/validate-product-variant-exists.js +26 -0
- package/.medusa/server/src/workflows/steps/throw-error-step.js +9 -0
- package/README.md +64 -0
- package/package.json +87 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateDiscount = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const validators_1 = require("../../../../api/admin/discounts/validators");
|
|
6
|
+
const utils_1 = require("../../../../lib/utils");
|
|
7
|
+
function calculateCartTotal(cartItems) {
|
|
8
|
+
return cartItems?.reduce((acc, item) => {
|
|
9
|
+
const { variant } = item || {};
|
|
10
|
+
const { extended_product_variants } = variant || {};
|
|
11
|
+
const { amount_eligible_for_discount = 0 } = extended_product_variants || {};
|
|
12
|
+
return acc + Number(amount_eligible_for_discount);
|
|
13
|
+
}, 0);
|
|
14
|
+
}
|
|
15
|
+
function filterApplicableCartLineItems(cart, priceRule) {
|
|
16
|
+
const { product_variants, product_categories } = priceRule;
|
|
17
|
+
let applicableCartLineItems = [...cart.items];
|
|
18
|
+
if (product_variants?.length) {
|
|
19
|
+
applicableCartLineItems = applicableCartLineItems.filter((item) => product_variants?.some((v) => v.id === item.variant_id));
|
|
20
|
+
}
|
|
21
|
+
if (product_categories?.length) {
|
|
22
|
+
applicableCartLineItems = applicableCartLineItems.filter((item) => product_categories?.some((v) => v.products?.some((p) => p.id === item.product_id)));
|
|
23
|
+
}
|
|
24
|
+
if (!priceRule.applicable_on_bundle) {
|
|
25
|
+
applicableCartLineItems = applicableCartLineItems.filter((item) => !item.metadata?.bundle_type);
|
|
26
|
+
}
|
|
27
|
+
return applicableCartLineItems.map((item) => {
|
|
28
|
+
const variantListingPrice = item?.variant?.extended_product_variants?.compare_at_price;
|
|
29
|
+
const isBundle = !!item.metadata?.bundle_type;
|
|
30
|
+
const mrp = isBundle ? item.compare_at_unit_price : variantListingPrice;
|
|
31
|
+
const isMrp = priceRule.applies_on == validators_1.DiscountAppliesOn.Values.MRP;
|
|
32
|
+
return {
|
|
33
|
+
...item,
|
|
34
|
+
variant: {
|
|
35
|
+
...item.variant,
|
|
36
|
+
extended_product_variants: {
|
|
37
|
+
...item.variant.extended_product_variants,
|
|
38
|
+
compare_at_price: mrp,
|
|
39
|
+
amount_eligible_for_discount: (0, utils_1.toTwoDecimal)(Number((0, utils_1.toTwoDecimal)(Number(isMrp ? mrp : item.unit_price)) * Number(item.quantity || 1))),
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
exports.calculateDiscount = (0, workflows_sdk_1.createStep)("calculate-discount", async ({ priceRule, code, cart }, { container }) => {
|
|
46
|
+
const logger = container.resolve("logger");
|
|
47
|
+
logger.setLogLevel(process.env.LOG_LEVEL);
|
|
48
|
+
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;
|
|
49
|
+
const adjustmentLineItems = [];
|
|
50
|
+
let totalDiscount = 0;
|
|
51
|
+
let applicableCartLineItems = filterApplicableCartLineItems(cart, priceRule);
|
|
52
|
+
const totalApplicableProductsQty = applicableCartLineItems.reduce((acc, { quantity }) => acc + Number(quantity || 0), 0);
|
|
53
|
+
let numberOfTimeCouponShouldApply = Math.min(totalApplicableProductsQty, usage_limit_per_cart_type ==
|
|
54
|
+
validators_1.DiscountUsageLimitPerCartType.Values.ONLY_ONCE
|
|
55
|
+
? 1
|
|
56
|
+
: usage_limit_per_cart_specific || Infinity);
|
|
57
|
+
const cartTotal = calculateCartTotal(applicableCartLineItems);
|
|
58
|
+
switch (type) {
|
|
59
|
+
case validators_1.DiscountType.Values.FIXED:
|
|
60
|
+
totalDiscount = Math.min(get_flat_discount * numberOfTimeCouponShouldApply, cartTotal);
|
|
61
|
+
await Promise.all(applicableCartLineItems?.map(async (item) => {
|
|
62
|
+
const ratio = Number((Number(item.variant.extended_product_variants
|
|
63
|
+
.amount_eligible_for_discount) / Number(cartTotal)).toFixed(2));
|
|
64
|
+
const discount = ratio * totalDiscount;
|
|
65
|
+
adjustmentLineItems.push({
|
|
66
|
+
amount: discount,
|
|
67
|
+
code: code,
|
|
68
|
+
description: title || description || "Discount",
|
|
69
|
+
item_id: item.id,
|
|
70
|
+
promotion_id: priceRule.id,
|
|
71
|
+
});
|
|
72
|
+
}));
|
|
73
|
+
break;
|
|
74
|
+
case validators_1.DiscountType.Values.PERCENTAGE:
|
|
75
|
+
totalDiscount = Math.min((get_percent * cartTotal) / 100, max_discount || Infinity);
|
|
76
|
+
await Promise.all(applicableCartLineItems?.map(async (item) => {
|
|
77
|
+
const ratio = Number((Number(item.variant.extended_product_variants
|
|
78
|
+
.amount_eligible_for_discount) / Number(cartTotal)).toFixed(2));
|
|
79
|
+
const discount = ratio * totalDiscount;
|
|
80
|
+
adjustmentLineItems.push({
|
|
81
|
+
amount: discount,
|
|
82
|
+
code: code,
|
|
83
|
+
description: title || description || "Discount",
|
|
84
|
+
item_id: item.id,
|
|
85
|
+
promotion_id: priceRule.id,
|
|
86
|
+
});
|
|
87
|
+
}));
|
|
88
|
+
break;
|
|
89
|
+
case validators_1.DiscountType.Values.BXGY:
|
|
90
|
+
// This is a βBuy X, Get Y Freeβ coupon.
|
|
91
|
+
// We first count how many items the customer has.
|
|
92
|
+
// For every (X + Y) items, they get Y items free.
|
|
93
|
+
// We always give the free items starting from the cheapest ones.
|
|
94
|
+
// Example 1: Buy 2, Get 1 free (B2G1), used once
|
|
95
|
+
// If the cart has 3 to 6 items, the customer gets 1 free item (the cheapest).
|
|
96
|
+
// Example 2: B2G1, used twice
|
|
97
|
+
// If the cart has 6 or 7 items, the customer gets 2 free items (the cheapest ones).
|
|
98
|
+
// Example 3: Buy 3, Get 2 free (B3G2), used once
|
|
99
|
+
// If the cart has 5 items, the customer gets 2 free items (the cheapest).
|
|
100
|
+
const maxTimesCouponCanApply = Math.min(Math.floor(totalApplicableProductsQty / (buy_x + get_y)), numberOfTimeCouponShouldApply);
|
|
101
|
+
const sortedByUnitPrice = applicableCartLineItems.sort((a, b) => {
|
|
102
|
+
const aPrice = Number(a.variant.extended_product_variants.amount_eligible_for_discount);
|
|
103
|
+
const bPrice = Number(b.variant.extended_product_variants.amount_eligible_for_discount);
|
|
104
|
+
return aPrice - bPrice;
|
|
105
|
+
});
|
|
106
|
+
const numberOfFreeItems = Math.min(get_y * maxTimesCouponCanApply, totalApplicableProductsQty);
|
|
107
|
+
let iterator = 0;
|
|
108
|
+
for (const item of sortedByUnitPrice) {
|
|
109
|
+
const t = Math.min(Number(item.quantity), numberOfFreeItems - iterator);
|
|
110
|
+
if (t <= 0)
|
|
111
|
+
break;
|
|
112
|
+
iterator += t;
|
|
113
|
+
totalDiscount +=
|
|
114
|
+
t *
|
|
115
|
+
Number(item.variant.extended_product_variants
|
|
116
|
+
.amount_eligible_for_discount);
|
|
117
|
+
adjustmentLineItems.push({
|
|
118
|
+
amount: t *
|
|
119
|
+
Number(item.variant.extended_product_variants
|
|
120
|
+
.amount_eligible_for_discount),
|
|
121
|
+
code,
|
|
122
|
+
description: title || description || "Discount",
|
|
123
|
+
item_id: item.id,
|
|
124
|
+
promotion_id: priceRule.id,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
case validators_1.DiscountType.Values.BXAY:
|
|
129
|
+
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ|
|
|
130
|
+
* Apply a βBuy X At Yβ (BXAY) discount, which may fire multiple times per cart. |
|
|
131
|
+
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ|
|
|
132
|
+
* Example A: limit = 1 (βonly onceβ)
|
|
133
|
+
*
|
|
134
|
+
* Cart:
|
|
135
|
+
* - A: qty=1 @200 β units [200]
|
|
136
|
+
* - B: qty=4 @300 β units [300,300,300,300]
|
|
137
|
+
*
|
|
138
|
+
* buy_x = 2, at_y = 400, limit = 1
|
|
139
|
+
* totalQty = 5 β maxPossibleBundles = 2
|
|
140
|
+
* times = min(2,1) = 1
|
|
141
|
+
* unitsNeeded = 1 * 2 = 2
|
|
142
|
+
*
|
|
143
|
+
* Flatten & sort: [200,300,300,300,300] β select [200,300]
|
|
144
|
+
* sumPrices = 200 + 300 = 500
|
|
145
|
+
* bundleTotalPrice = 1 * 400 = 400
|
|
146
|
+
* totalBundleDiscount = 500 β 400 = 100
|
|
147
|
+
*
|
|
148
|
+
* Shares:
|
|
149
|
+
* - A: 200/500 = 0.4 β 0.4 * 100 = 40
|
|
150
|
+
* - B: 300/500 = 0.6 β 0.6 * 100 = 60
|
|
151
|
+
*
|
|
152
|
+
*
|
|
153
|
+
* Example B: limit = 2 (βtwiceβ)
|
|
154
|
+
*
|
|
155
|
+
* Same cart & rule, but limit = 2
|
|
156
|
+
* totalQty = 5 β maxPossibleBundles = 2
|
|
157
|
+
* times = min(2,2) = 2
|
|
158
|
+
* unitsNeeded = 2 * 2 = 4
|
|
159
|
+
*
|
|
160
|
+
* Flatten & sort: [200,300,300,300,300] β select [200,300,300,300]
|
|
161
|
+
* sumPrices = 200 + 3*300 = 1100
|
|
162
|
+
* bundleTotalPrice = 2 * 400 = 800
|
|
163
|
+
* totalBundleDiscount = 1100 β 800 = 300
|
|
164
|
+
*
|
|
165
|
+
* Shares:
|
|
166
|
+
* - A: 200/1100 β 0.1818 β ~300 * 0.1818 β 54.55
|
|
167
|
+
* - B: 900/1100 β 0.8182 β ~300 * 0.8182 β 245.45
|
|
168
|
+
*
|
|
169
|
+
* You can extend this to any n by adjusting `limit`. The algorithm
|
|
170
|
+
* automatically picks the cheapest `n * buy_x` units and splits the
|
|
171
|
+
* discount proportionally.
|
|
172
|
+
*/
|
|
173
|
+
const bxayTimes = Math.min(Math.floor(totalApplicableProductsQty / (buy_x || 1)), numberOfTimeCouponShouldApply);
|
|
174
|
+
logger.info("times: " + bxayTimes);
|
|
175
|
+
// 1) Total times the bundle applies, and units per bundle
|
|
176
|
+
const unitsNeeded = buy_x * bxayTimes;
|
|
177
|
+
const units = [];
|
|
178
|
+
for (const item of applicableCartLineItems) {
|
|
179
|
+
const unitPrice = item.variant.extended_product_variants.amount_eligible_for_discount;
|
|
180
|
+
for (let i = 0; i < (Number(item.quantity) || 1); i++) {
|
|
181
|
+
units.push({ item, unitPrice: Number(unitPrice) });
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// 3) Sort ascending by unitPrice
|
|
185
|
+
units.sort((a, b) => a.unitPrice - b.unitPrice);
|
|
186
|
+
// 4) Pick the cheapest `unitsNeeded` units
|
|
187
|
+
const selected = units.slice(0, unitsNeeded);
|
|
188
|
+
logger.info("selected: " + JSON.stringify(selected, null, 2));
|
|
189
|
+
// 5) Sum their original prices
|
|
190
|
+
const sumPrices = selected.reduce((sum, u) => sum + u.unitPrice, 0);
|
|
191
|
+
logger.info("sumPrices: " + sumPrices);
|
|
192
|
+
// 6) Compute total bundle price (you pay at_y per bundle)
|
|
193
|
+
const totalOfItemsAfterDiscount = at_y * bxayTimes;
|
|
194
|
+
logger.info("totalOfItemsAfterDiscount: " + totalOfItemsAfterDiscount);
|
|
195
|
+
// 7) Total discount to allocate
|
|
196
|
+
const totalBundleDiscount = sumPrices - totalOfItemsAfterDiscount;
|
|
197
|
+
logger.info("totalBundleDiscount: " + totalBundleDiscount);
|
|
198
|
+
// 8) Group back by line-item to allocate proportionally
|
|
199
|
+
const lineBuckets = {};
|
|
200
|
+
for (const { item, unitPrice } of selected) {
|
|
201
|
+
if (!lineBuckets[item.id]) {
|
|
202
|
+
lineBuckets[item.id] = { sumPrices: 0 };
|
|
203
|
+
}
|
|
204
|
+
lineBuckets[item.id].sumPrices += unitPrice;
|
|
205
|
+
}
|
|
206
|
+
logger.info("lineBuckets: " + JSON.stringify(lineBuckets, null, 2));
|
|
207
|
+
// 9) For each line, compute its share and create one adjustment
|
|
208
|
+
let allocated = 0;
|
|
209
|
+
for (const [itemId, { sumPrices: lineSum }] of Object.entries(lineBuckets)) {
|
|
210
|
+
const share = lineSum / sumPrices;
|
|
211
|
+
const lineDiscount = Math.round(totalBundleDiscount * share * 100) / 100;
|
|
212
|
+
allocated += lineDiscount;
|
|
213
|
+
logger.info("line items: " +
|
|
214
|
+
{
|
|
215
|
+
amount: lineDiscount,
|
|
216
|
+
code,
|
|
217
|
+
description: title || description || "Discount",
|
|
218
|
+
item_id: itemId,
|
|
219
|
+
promotion_id: priceRule.id,
|
|
220
|
+
});
|
|
221
|
+
adjustmentLineItems.push({
|
|
222
|
+
amount: lineDiscount,
|
|
223
|
+
code,
|
|
224
|
+
description: title || description || "Discount",
|
|
225
|
+
item_id: itemId,
|
|
226
|
+
promotion_id: priceRule.id,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
// 10) Track overall discount
|
|
230
|
+
totalDiscount += allocated;
|
|
231
|
+
break;
|
|
232
|
+
default:
|
|
233
|
+
logger.error("Discount type not supported" + type);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
return new workflows_sdk_1.StepResponse({
|
|
237
|
+
hasError: false,
|
|
238
|
+
isApplied: true,
|
|
239
|
+
discount: totalDiscount,
|
|
240
|
+
adjustmentLineItems,
|
|
241
|
+
message: "Coupon Applied Successfully",
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktY291cG9uLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWNvdXBvbi9zdGVwcy9hcHBseS1jb3Vwb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxRUFBNkU7QUFFN0UsMkVBSW9EO0FBRXBELGlEQUFxRDtBQXFCckQsU0FBUyxrQkFBa0IsQ0FBQyxTQUFxQztJQUMvRCxPQUFPLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBMkIsRUFBRSxFQUFFO1FBQzVELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxFQUFFLDRCQUE0QixHQUFHLENBQUMsRUFBRSxHQUN4Qyx5QkFBeUIsSUFBSSxFQUFFLENBQUM7UUFFbEMsT0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDcEQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQ3BDLElBVUMsRUFDRCxTQUdDO0lBRUQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsU0FBUyxDQUFDO0lBRTNELElBQUksdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzdCLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2hFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENB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
|
package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
4
|
+
const generateAdjustmentLineItem = (0, workflows_sdk_1.createStep)("generate-adjustment-line-item", async (input, { container }) => {
|
|
5
|
+
const cartService = container.resolve("cart");
|
|
6
|
+
console.log("input", input);
|
|
7
|
+
const adjustmentLineItems = await Promise.all(input.map(async (item) => {
|
|
8
|
+
return await cartService.addLineItemAdjustments({
|
|
9
|
+
amount: item.amount,
|
|
10
|
+
code: item.code,
|
|
11
|
+
description: item.description,
|
|
12
|
+
item_id: item.item_id,
|
|
13
|
+
promotion_id: item.promotion_id,
|
|
14
|
+
});
|
|
15
|
+
}));
|
|
16
|
+
return new workflows_sdk_1.StepResponse(adjustmentLineItems, input.map((item) => item.item_id));
|
|
17
|
+
}, async (input, { container }) => {
|
|
18
|
+
const cartService = container.resolve("cart");
|
|
19
|
+
const query = container.resolve("query");
|
|
20
|
+
const { data: cart_line_item_adjustment } = await query.graph({
|
|
21
|
+
entity: "line_item_adjustment",
|
|
22
|
+
fields: ["*"],
|
|
23
|
+
filters: { item_id: { $in: input } },
|
|
24
|
+
});
|
|
25
|
+
await cartService.deleteLineItemAdjustments(cart_line_item_adjustment.map((item) => item.id));
|
|
26
|
+
});
|
|
27
|
+
exports.default = generateAdjustmentLineItem;
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtYWRqdXN0bWVudC1saW5lLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWNvdXBvbi9zdGVwcy9nZW5lcmF0ZS1hZGp1c3RtZW50LWxpbmUtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFFQUE2RTtBQUc3RSxNQUFNLDBCQUEwQixHQUFHLElBQUEsMEJBQVUsRUFDM0MsK0JBQStCLEVBQy9CLEtBQUssRUFDSCxLQU1HLEVBQ0gsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU1QixNQUFNLG1CQUFtQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDM0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsT0FBTyxNQUFNLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztZQUM5QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVGLE9BQU8sSUFBSSw0QkFBWSxDQUNyQixtQkFBbUIsRUFDbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUNsQyxDQUFDO0FBQ0osQ0FBQyxFQUNELEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzdCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV6QyxNQUFNLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzVELE1BQU0sRUFBRSxzQkFBc0I7UUFDOUIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2IsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO0tBQ3JDLENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxDQUFDLHlCQUF5QixDQUN6Qyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDakQsQ0FBQztBQUNKLENBQUMsQ0FDRixDQUFDO0FBRUYsa0JBQWUsMEJBQTBCLENBQUMifQ==
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateCouponStep = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const validators_1 = require("../../../../api/admin/discounts/validators");
|
|
6
|
+
exports.validateCouponStep = (0, workflows_sdk_1.createStep)("validate-coupon-step", async ({ code, cart, priceRule, customerId }, { container }) => {
|
|
7
|
+
const query = container.resolve("query");
|
|
8
|
+
/* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
9
|
+
* Check Coupon Existence
|
|
10
|
+
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
11
|
+
if (!code) {
|
|
12
|
+
return new workflows_sdk_1.StepResponse({
|
|
13
|
+
isValid: false,
|
|
14
|
+
hasError: true,
|
|
15
|
+
message: "Coupon not found",
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
const { data: [discountCode], } = await query.graph({
|
|
19
|
+
entity: "discount_code",
|
|
20
|
+
fields: ["*"],
|
|
21
|
+
filters: { code, price_rule_id: priceRule.id },
|
|
22
|
+
});
|
|
23
|
+
if (!discountCode) {
|
|
24
|
+
return new workflows_sdk_1.StepResponse({
|
|
25
|
+
isValid: false,
|
|
26
|
+
hasError: true,
|
|
27
|
+
message: "Coupon not found under the price rule.",
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
31
|
+
* Check Price Rule Status
|
|
32
|
+
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
33
|
+
if (priceRule.status !== validators_1.DiscountStatus.Values.ACTIVE) {
|
|
34
|
+
return new workflows_sdk_1.StepResponse({
|
|
35
|
+
isValid: false,
|
|
36
|
+
hasError: true,
|
|
37
|
+
message: `Discount code is in ${priceRule.status} status.`,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
41
|
+
* Check Coupon Usage Limit
|
|
42
|
+
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
43
|
+
const { usage_limit: limitMode, usage_limit_specific } = priceRule;
|
|
44
|
+
const { usage_count } = discountCode;
|
|
45
|
+
const limitReached = (() => {
|
|
46
|
+
switch (limitMode) {
|
|
47
|
+
case "UNLIMITED":
|
|
48
|
+
return false; // no cap
|
|
49
|
+
case "ONLY_ONCE":
|
|
50
|
+
return usage_count >= 1; // hard-coded single use
|
|
51
|
+
case "SPECIFIC":
|
|
52
|
+
// treat null/undefined as βno capβ for safety
|
|
53
|
+
if (typeof usage_limit_specific !== "number")
|
|
54
|
+
return false;
|
|
55
|
+
return usage_count >= usage_limit_specific; // respect custom cap
|
|
56
|
+
default:
|
|
57
|
+
return false; // fallback β shouldnβt happen
|
|
58
|
+
}
|
|
59
|
+
})();
|
|
60
|
+
if (limitReached) {
|
|
61
|
+
return new workflows_sdk_1.StepResponse({
|
|
62
|
+
isValid: false,
|
|
63
|
+
hasError: true,
|
|
64
|
+
message: limitMode === "ONLY_ONCE"
|
|
65
|
+
? "Coupon can only be used once."
|
|
66
|
+
: "Coupon usage limit reached.",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
70
|
+
* Check Customer Existence
|
|
71
|
+
* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
72
|
+
if (priceRule.customers && priceRule.customers.length > 0) {
|
|
73
|
+
console.log("====> code: ", code);
|
|
74
|
+
console.log("===> priceRule.customers: ", priceRule.customers.map((customer) => customer.id));
|
|
75
|
+
console.log("===> customerId: ", customerId);
|
|
76
|
+
if (!customerId) {
|
|
77
|
+
return new workflows_sdk_1.StepResponse({
|
|
78
|
+
isValid: false,
|
|
79
|
+
hasError: true,
|
|
80
|
+
message: "Need to Login to use this coupon.",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (!priceRule.customers.some((customer) => customer.id === customerId)) {
|
|
84
|
+
return new workflows_sdk_1.StepResponse({
|
|
85
|
+
isValid: false,
|
|
86
|
+
hasError: true,
|
|
87
|
+
message: "Coupon is not applicable for this customer.",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
console.log("===> o <====");
|
|
91
|
+
}
|
|
92
|
+
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
93
|
+
* Check Cart Values
|
|
94
|
+
* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
95
|
+
if (priceRule.min_order_value != null &&
|
|
96
|
+
priceRule.min_order_value != undefined) {
|
|
97
|
+
let cartTotal = 0;
|
|
98
|
+
if (cart.items && cart.items.length > 0) {
|
|
99
|
+
cartTotal = cart.items.reduce((total, item) => {
|
|
100
|
+
let price = 0;
|
|
101
|
+
if (priceRule.applies_on == validators_1.DiscountAppliesOn.Values.MRP) {
|
|
102
|
+
let variantListingPrice = item?.variant?.extended_product_variants?.compare_at_price;
|
|
103
|
+
const isBundle = !!item.metadata?.bundle_type;
|
|
104
|
+
price = isBundle
|
|
105
|
+
? Number(item.compare_at_unit_price)
|
|
106
|
+
: Number(variantListingPrice);
|
|
107
|
+
}
|
|
108
|
+
if (priceRule.applies_on == validators_1.DiscountAppliesOn.Values.PRICE)
|
|
109
|
+
price = Number(item.unit_price) || 0;
|
|
110
|
+
return total + Number(price) * Number(item.quantity || 1);
|
|
111
|
+
}, 0);
|
|
112
|
+
}
|
|
113
|
+
if (priceRule.min_order_value && cartTotal < priceRule.min_order_value) {
|
|
114
|
+
return new workflows_sdk_1.StepResponse({
|
|
115
|
+
isValid: false,
|
|
116
|
+
hasError: true,
|
|
117
|
+
message: `Minimum order value of ${priceRule.min_order_value} is required.`,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
122
|
+
* Check Cart Quantity
|
|
123
|
+
* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
124
|
+
if (priceRule.min_order_qty != null &&
|
|
125
|
+
priceRule.min_order_qty != undefined) {
|
|
126
|
+
let cartTotalQuantity = 0;
|
|
127
|
+
if (cart.items && cart.items.length > 0) {
|
|
128
|
+
cartTotalQuantity = cart.items.reduce((total, item) => {
|
|
129
|
+
const isBundle = !!item.metadata?.bundle_type;
|
|
130
|
+
return (total +
|
|
131
|
+
Number(isBundle
|
|
132
|
+
? (item?.variant?.extended_product_variants
|
|
133
|
+
?.products_per_bundle || 1) * (item.quantity || 1)
|
|
134
|
+
: item.quantity || 1));
|
|
135
|
+
}, 0);
|
|
136
|
+
}
|
|
137
|
+
if (priceRule.min_order_qty &&
|
|
138
|
+
cartTotalQuantity < priceRule.min_order_qty) {
|
|
139
|
+
return new workflows_sdk_1.StepResponse({
|
|
140
|
+
isValid: false,
|
|
141
|
+
hasError: true,
|
|
142
|
+
message: `Minimum order Product quantity of ${priceRule.min_order_qty} is required to use this coupon.`,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
147
|
+
* Only for New Customer Check
|
|
148
|
+
* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
149
|
+
if (priceRule.only_for_new_customer && !customerId) {
|
|
150
|
+
return new workflows_sdk_1.StepResponse({
|
|
151
|
+
isValid: false,
|
|
152
|
+
hasError: true,
|
|
153
|
+
message: "Customer ID is required for new customer coupon validation.",
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
if (priceRule.only_for_new_customer && customerId) {
|
|
157
|
+
const { data: orders } = await query.graph({
|
|
158
|
+
entity: "order",
|
|
159
|
+
fields: ["*"],
|
|
160
|
+
filters: { customer_id: customerId },
|
|
161
|
+
pagination: { take: 1 },
|
|
162
|
+
});
|
|
163
|
+
if (orders.length > 0) {
|
|
164
|
+
return new workflows_sdk_1.StepResponse({
|
|
165
|
+
isValid: false,
|
|
166
|
+
hasError: true,
|
|
167
|
+
message: "Customer has already placed an order. cannot use new customer coupon.",
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
172
|
+
* Check User Specific Coupon Code Usage Limit
|
|
173
|
+
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/
|
|
174
|
+
if ((priceRule.usage_limit_per_customer_type ==
|
|
175
|
+
validators_1.DiscountUsageLimitPerCustomerType.Values.SPECIFIC ||
|
|
176
|
+
priceRule.usage_limit_per_customer_type ==
|
|
177
|
+
validators_1.DiscountUsageLimitPerCustomerType.Values.ONLY_ONCE) &&
|
|
178
|
+
!customerId) {
|
|
179
|
+
return new workflows_sdk_1.StepResponse({
|
|
180
|
+
isValid: false,
|
|
181
|
+
hasError: true,
|
|
182
|
+
message: "Customer ID is required for this coupon usage limit type.",
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
if (customerId &&
|
|
186
|
+
(priceRule.usage_limit_per_customer_type ==
|
|
187
|
+
validators_1.DiscountUsageLimitPerCustomerType.Values.SPECIFIC ||
|
|
188
|
+
priceRule.usage_limit_per_customer_type ==
|
|
189
|
+
validators_1.DiscountUsageLimitPerCustomerType.Values.ONLY_ONCE)) {
|
|
190
|
+
const { data: orders } = await query.graph({
|
|
191
|
+
entity: "order",
|
|
192
|
+
fields: ["id"],
|
|
193
|
+
filters: { customer_id: customerId, status: "completed" },
|
|
194
|
+
pagination: {
|
|
195
|
+
take: priceRule?.usage_limit_per_customer_specific || 1,
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
if (orders.length >= (priceRule.usage_limit_per_customer_specific || 1)) {
|
|
199
|
+
return new workflows_sdk_1.StepResponse({
|
|
200
|
+
isValid: false,
|
|
201
|
+
hasError: true,
|
|
202
|
+
message: "Customer has reached the usage limit for this coupon.",
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return new workflows_sdk_1.StepResponse({
|
|
207
|
+
isValid: true,
|
|
208
|
+
hasError: false,
|
|
209
|
+
message: "Coupon is valid.",
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtY291cG9uLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWNvdXBvbi9zdGVwcy92YWxpZGF0ZS1jb3Vwb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSxxRUFBNkU7QUFFN0UsMkVBSW9EO0FBd0J2QyxRQUFBLGtCQUFrQixHQUFHLElBQUEsMEJBQVUsRUFDMUMsc0JBQXNCLEVBQ3RCLEtBQUssRUFDSCxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBMkIsRUFDOUQsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV6Qzs7cUVBRWlFO0lBQ2pFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsa0JBQWtCO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQ3JCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNiLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRTtLQUMvQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLDRCQUFZLENBQUM7WUFDdEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSx3Q0FBd0M7U0FDbEQs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
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyFreebieWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const add_freebie_items_to_cart_1 = require("./steps/add-freebie-items-to-cart");
|
|
7
|
+
const remove_freebie_from_cart_1 = require("./steps/remove-freebie-from-cart");
|
|
8
|
+
exports.applyFreebieWorkflow = (0, workflows_sdk_1.createWorkflow)("apply-freebie", (input) => {
|
|
9
|
+
const { data: carts } = (0, core_flows_1.useQueryGraphStep)({
|
|
10
|
+
entity: "cart",
|
|
11
|
+
fields: [
|
|
12
|
+
"*",
|
|
13
|
+
"items.*",
|
|
14
|
+
"items.variant.*",
|
|
15
|
+
"items.variant.prices.*",
|
|
16
|
+
"items.variant.extended_product_variants.compare_at_price",
|
|
17
|
+
],
|
|
18
|
+
filters: { id: input.cart_id },
|
|
19
|
+
options: { throwIfKeyNotFound: true },
|
|
20
|
+
}).config({ name: "get-cart" });
|
|
21
|
+
const cart = (0, workflows_sdk_1.transform)({ carts }, ({ carts }) => carts[0]);
|
|
22
|
+
(0, remove_freebie_from_cart_1.removeFreebieFromCartStep)({ cart });
|
|
23
|
+
(0, add_freebie_items_to_cart_1.addFreebieItemsToCartStep)({ cart, customerId: input.customerId });
|
|
24
|
+
const { data: refetchedCart } = (0, core_flows_1.useQueryGraphStep)({
|
|
25
|
+
entity: "cart",
|
|
26
|
+
fields: ["*", "items.*"],
|
|
27
|
+
filters: { id: input.cart_id },
|
|
28
|
+
}).config({ name: "refetch-cart" });
|
|
29
|
+
return new workflows_sdk_1.WorkflowResponse(refetchedCart);
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Rpc2NvdW50L2FwcGx5LWZyZWViaWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSTJDO0FBQzNDLDREQUFnRTtBQUVoRSxpRkFBOEU7QUFDOUUsK0VBQTZFO0FBRWhFLFFBQUEsb0JBQW9CLEdBQUcsSUFBQSw4QkFBYyxFQUNoRCxlQUFlLEVBQ2YsQ0FBQyxLQUErQyxFQUFFLEVBQUU7SUFDbEQsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFBLDhCQUFpQixFQUFDO1FBQ3hDLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFO1lBQ04sR0FBRztZQUNILFNBQVM7WUFDVCxpQkFBaUI7WUFDakIsd0JBQXdCO1lBQ3hCLDBEQUEwRDtTQUMzRDtRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO1FBQzlCLE9BQU8sRUFBRSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRTtLQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFaEMsTUFBTSxJQUFJLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzRCxJQUFBLG9EQUF5QixFQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVwQyxJQUFBLHFEQUF5QixFQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUVsRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDaEQsTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUVwQyxPQUFPLElBQUksZ0NBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUNGLENBQUMifQ==
|