@devx-commerce/plugin-discounts-svaraa 0.0.2-beta.12 → 0.0.2-beta.14
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/middlewares.js +4 -1
- package/.medusa/server/src/api/pos/discounts/apply/route.js +153 -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 +77 -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 +68 -0
- package/.medusa/server/src/api/pos/discounts/price-rules-list/route.js +46 -0
- package/.medusa/server/src/api/pos/discounts/remove/route.js +44 -0
- package/.medusa/server/src/api/pos/discounts/remove-store-discount/route.js +58 -0
- package/.medusa/server/src/api/pos/discounts/validators.js +356 -0
- package/.medusa/server/src/api/pos/discounts/verify-store-discount/route.js +268 -0
- package/.medusa/server/src/lib/constant.js +120 -2
- package/.medusa/server/src/lib/send-otp-helper.js +37 -0
- package/.medusa/server/src/workflows/discount/auto-apply-coupon/steps/auto-apply-coupon.js +7 -1
- package/.medusa/server/src/workflows/discount/rounded-cart-total/index.js +12 -0
- package/.medusa/server/src/workflows/discount/steps/rounded-cart-total.js +57 -0
- package/package.json +4 -2
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
5
|
+
const utils_1 = require("../../../../lib/utils");
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
try {
|
|
8
|
+
const query = req.scope.resolve("query");
|
|
9
|
+
const userId = req.auth_context?.actor_id || req.auth_context;
|
|
10
|
+
console.log("___userId", userId, req.auth_context);
|
|
11
|
+
let filters = { ...req.filterableFields };
|
|
12
|
+
if (!userId) {
|
|
13
|
+
filters = {
|
|
14
|
+
...filters,
|
|
15
|
+
usage_limit: "UNLIMITED",
|
|
16
|
+
is_birthday: false,
|
|
17
|
+
is_anniversary: false,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (userId) {
|
|
21
|
+
const { data: customer } = await query.graph({
|
|
22
|
+
entity: "customer",
|
|
23
|
+
fields: ["metadata", "extended_customer.id"],
|
|
24
|
+
filters: { id: userId },
|
|
25
|
+
});
|
|
26
|
+
const externalId = customer?.[0]?.extended_customer?.id;
|
|
27
|
+
if (externalId) {
|
|
28
|
+
const { data: ext } = await query.graph({
|
|
29
|
+
entity: "extended_customer",
|
|
30
|
+
fields: ["birth_date", "anniversary_date"],
|
|
31
|
+
filters: { id: externalId },
|
|
32
|
+
});
|
|
33
|
+
const todayIST = (0, utils_1.getISTMonthDay)(new Date());
|
|
34
|
+
const bday = ext?.[0]?.birth_date;
|
|
35
|
+
const anniv = ext?.[0]?.anniversary_date;
|
|
36
|
+
const isBirthday = bday && (0, utils_1.getISTMonthDay)(bday) === todayIST;
|
|
37
|
+
const isAnniversary = anniv && (0, utils_1.getISTMonthDay)(anniv) === todayIST;
|
|
38
|
+
if (isBirthday || isAnniversary) {
|
|
39
|
+
filters.$or = [
|
|
40
|
+
{ is_birthday: false, is_anniversary: false },
|
|
41
|
+
...(isBirthday ? [{ is_birthday: true }] : []),
|
|
42
|
+
...(isAnniversary ? [{ is_anniversary: true }] : []),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
filters.is_birthday = false;
|
|
47
|
+
filters.is_anniversary = false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
filters.is_birthday = false;
|
|
52
|
+
filters.is_anniversary = false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const { data, metadata } = await query.graph({
|
|
56
|
+
entity: "discount_price_rule",
|
|
57
|
+
...req.queryConfig,
|
|
58
|
+
filters,
|
|
59
|
+
});
|
|
60
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({ data, metadata }));
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.log(error);
|
|
64
|
+
const message = error instanceof Error ? error.message : "An unexpected error occurred";
|
|
65
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(message, 500));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9kaXNjb3VudHMvcHJpY2UtcnVsZXMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxrQkFzRUM7QUE5RUQsK0RBSXNDO0FBRXRDLGlEQUF1RDtBQUVoRCxLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUFvRSxFQUNwRSxHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEQsSUFBSSxPQUFPLEdBQXdCLEVBQUUsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUvRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLEdBQUc7Z0JBQ1IsR0FBRyxPQUFPO2dCQUNWLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixXQUFXLEVBQUUsS0FBSztnQkFDbEIsY0FBYyxFQUFFLEtBQUs7YUFDdEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzNDLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUMsc0JBQXNCLENBQUM7Z0JBQzNDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUksUUFB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
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
exports.GET = GET;
|
|
5
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
6
|
+
const create_discount_price_rule_1 = require("../../../../workflows/discount/create-discount-price-rule");
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
async function POST(req, res) {
|
|
9
|
+
try {
|
|
10
|
+
const { result } = await (0, create_discount_price_rule_1.createDiscountPriceRuleWorkflow)(req.scope).run({
|
|
11
|
+
input: req.validatedBody,
|
|
12
|
+
});
|
|
13
|
+
if (!result) {
|
|
14
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Failed to create discount price rule", 400));
|
|
15
|
+
}
|
|
16
|
+
const eventBus = req.scope.resolve(utils_1.Modules.EVENT_BUS);
|
|
17
|
+
eventBus.emit({
|
|
18
|
+
name: "audit.logs",
|
|
19
|
+
data: {
|
|
20
|
+
relation_id: result[0].id,
|
|
21
|
+
message: "Discount price rule created",
|
|
22
|
+
admin_id: req.auth_context.actor_id
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result));
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function GET(req, res) {
|
|
32
|
+
try {
|
|
33
|
+
const query = req.scope.resolve("query");
|
|
34
|
+
const response = await query.graph({
|
|
35
|
+
entity: "discount_price_rule",
|
|
36
|
+
...req.queryConfig,
|
|
37
|
+
filters: req.filterableFields,
|
|
38
|
+
});
|
|
39
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(response));
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const message = error instanceof Error ? error.message : "An unexpected error occurred";
|
|
43
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(message, 500));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9kaXNjb3VudHMvcHJpY2UtcnVsZXMtbGlzdC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSxvQkFnQ0M7QUFFRCxrQkFrQkM7QUFoRUQsK0RBSXNDO0FBQ3RDLDBHQUE0RztBQUs1RyxxREFBb0Q7QUFFN0MsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBa0UsRUFDbEUsR0FBbUI7SUFFbkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSw0REFBK0IsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3RFLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYTtTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQUMsc0NBQXNDLEVBQUUsR0FBRyxDQUFDLENBQ2pFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRELFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDWixJQUFJLEVBQUUsWUFBWTtZQUNsQixJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixPQUFPLEVBQUUsNkJBQTZCO2dCQUN0QyxRQUFRLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRO2FBQ3BDO1NBQ0YsQ0FBQyxDQUFBO1FBR0YsT0FBTyxJQUFBLDhCQUFlLEVBQUMsR0FBRyxFQUFFLElBQUEsb0NBQXFCLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLGtDQUFtQixFQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQW9FLEVBQ3BFLEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNqQyxNQUFNLEVBQUUscUJBQXFCO1lBQzdCLEdBQUcsR0FBRyxDQUFDLFdBQVc7WUFDbEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLDhCQUFlLEVBQUMsR0FBRyxFQUFFLElBQUEsb0NBQXFCLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sT0FBTyxHQUNYLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDO1FBQzFFLE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLGtDQUFtQixFQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const helpers_1 = require("@medusajs/medusa/api/store/carts/helpers");
|
|
5
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
6
|
+
const remove_coupon_1 = require("../../../../workflows/discount/remove-coupon");
|
|
7
|
+
const constant_1 = require("../../../../lib/constant");
|
|
8
|
+
async function POST(req, res) {
|
|
9
|
+
try {
|
|
10
|
+
const query = req.scope.resolve("query");
|
|
11
|
+
const { data: discount_codes } = await query.graph({
|
|
12
|
+
entity: "discount_code",
|
|
13
|
+
fields: [
|
|
14
|
+
"*",
|
|
15
|
+
],
|
|
16
|
+
filters: { code: req.validatedBody.code },
|
|
17
|
+
});
|
|
18
|
+
if (!discount_codes.length) {
|
|
19
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
|
|
20
|
+
discountResult: {
|
|
21
|
+
isApplied: false,
|
|
22
|
+
discount: 0,
|
|
23
|
+
message: "This coupon code is invalid or does not exist."
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
const { result } = await (0, remove_coupon_1.removeCouponWorkflow)(req.scope).run({
|
|
28
|
+
input: req.validatedBody,
|
|
29
|
+
});
|
|
30
|
+
if (!result) {
|
|
31
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Failed to create discount price rule", 400));
|
|
32
|
+
}
|
|
33
|
+
const cart = await (0, helpers_1.refetchCart)(req.validatedBody.cart_id, req.scope, constant_1.defaultStoreCartFields);
|
|
34
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
|
|
35
|
+
cart,
|
|
36
|
+
discountResult: result,
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.log("error: ", error);
|
|
41
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9kaXNjb3VudHMvcmVtb3ZlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZUEsb0JBbURDO0FBOURELHNFQUF1RTtBQUV2RSwrREFJc0M7QUFDdEMsZ0ZBQW9GO0FBRXBGLHVEQUFrRTtBQUUzRCxLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUEyRCxFQUMzRCxHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNqRCxNQUFNLEVBQUUsZUFBZTtZQUN2QixNQUFNLEVBQUU7Z0JBQ04sR0FBRzthQUNKO1lBQ0QsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1NBQzFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFBLDhCQUFlLEVBQUMsR0FBRyxFQUFFLElBQUEsb0NBQXFCLEVBQUM7Z0JBQ2hELGNBQWMsRUFBRTtvQkFDZCxTQUFTLEVBQUUsS0FBSztvQkFDaEIsUUFBUSxFQUFFLENBQUM7b0JBQ1gsT0FBTyxFQUFFLGdEQUFnRDtpQkFDMUQ7YUFDRixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFDRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLG9DQUFvQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDM0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxhQUFhO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sSUFBQSw4QkFBZSxFQUNwQixHQUFHLEVBQ0gsSUFBQSxrQ0FBbUIsRUFBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FDakUsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEscUJBQVcsRUFDNUIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQ3pCLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsaUNBQXNCLENBQ3ZCLENBQUM7UUFDRixPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsb0NBQXFCLEVBQUM7WUFDcEIsSUFBSTtZQUNKLGNBQWMsRUFBRSxNQUFNO1NBQ3ZCLENBQUMsQ0FDSCxDQUFDO0lBRUosQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUEsOEJBQWUsRUFBQyxHQUFHLEVBQUUsSUFBQSxrQ0FBbUIsRUFBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
6
|
+
const constant_1 = require("../../../../lib/constant");
|
|
7
|
+
const helpers_1 = require("@medusajs/medusa/api/store/carts/helpers");
|
|
8
|
+
/**
|
|
9
|
+
* POST /pos/discount/remove-store-discount
|
|
10
|
+
*
|
|
11
|
+
* Remove any existing manual store discount from a cart.
|
|
12
|
+
*/
|
|
13
|
+
const POST = async (req, res) => {
|
|
14
|
+
try {
|
|
15
|
+
const { cart_id } = req.validatedBody;
|
|
16
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
17
|
+
const cartService = req.scope.resolve("cart");
|
|
18
|
+
const { data: carts } = await query.graph({
|
|
19
|
+
entity: "cart",
|
|
20
|
+
fields: ["*", "items.*"],
|
|
21
|
+
filters: { id: cart_id },
|
|
22
|
+
});
|
|
23
|
+
if (!carts.length) {
|
|
24
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(`Cart ${cart_id} not found`, 404));
|
|
25
|
+
}
|
|
26
|
+
const cart = carts[0];
|
|
27
|
+
const itemIds = cart.items?.map((i) => i.id) || [];
|
|
28
|
+
if (itemIds.length) {
|
|
29
|
+
const { data: adjustments } = await query.graph({
|
|
30
|
+
entity: "line_item_adjustment",
|
|
31
|
+
fields: ["id"],
|
|
32
|
+
filters: {
|
|
33
|
+
item_id: { $in: itemIds },
|
|
34
|
+
code: "STORE_DISCOUNT",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
if (adjustments?.length) {
|
|
38
|
+
await cartService.deleteLineItemAdjustments(adjustments.map((a) => a.id));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Clear store_discount metadata
|
|
42
|
+
const currentCart = await cartService.retrieveCart(cart_id);
|
|
43
|
+
const meta = { ...(currentCart.metadata || {}), store_discount: null };
|
|
44
|
+
await cartService.updateCarts(cart_id, {
|
|
45
|
+
metadata: meta,
|
|
46
|
+
});
|
|
47
|
+
const updatedCart = await (0, helpers_1.refetchCart)(cart_id, req.scope, constant_1.defaultStoreCartFields);
|
|
48
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
|
|
49
|
+
cart: updatedCart,
|
|
50
|
+
}, "Store discount removed"));
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error("Error removing store discount:", error);
|
|
54
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message || "Failed to remove store discount", 500));
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.POST = POST;
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9kaXNjb3VudHMvcmVtb3ZlLXN0b3JlLWRpc2NvdW50L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFzRTtBQUV0RSwrREFJc0M7QUFFdEMsdURBQWtFO0FBQ2xFLHNFQUF1RTtBQUV2RTs7OztHQUlHO0FBQ0ksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUFnRSxFQUNoRSxHQUFtQixFQUNuQixFQUFFO0lBQ0YsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFFdEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDeEMsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUU7U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQUMsUUFBUSxPQUFPLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FDdEQsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzlDLE1BQU0sRUFBRSxzQkFBc0I7Z0JBQzlCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtvQkFDekIsSUFBSSxFQUFFLGdCQUFnQjtpQkFDdkI7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxXQUFXLENBQUMseUJBQXlCLENBQ3pDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDbEMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxJQUFJLEVBQUUsQ0FBQztRQUVyRSxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLHFCQUFXLEVBQ25DLE9BQU8sRUFDUCxHQUFHLENBQUMsS0FBSyxFQUNULGlDQUFzQixDQUN2QixDQUFDO1FBRUYsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLG9DQUFxQixFQUNuQjtZQUNFLElBQUksRUFBRSxXQUFXO1NBQ2xCLEVBQ0Qsd0JBQXdCLENBQ3pCLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLGtDQUFtQixFQUNqQixLQUFLLENBQUMsT0FBTyxJQUFJLGlDQUFpQyxFQUNsRCxHQUFHLENBQ0osQ0FDRixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQTVFVyxRQUFBLElBQUksUUE0RWYifQ==
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PosVerifyStoreDiscountInputValidator = exports.PosRemoveStoreDiscountInputValidator = exports.PosApplyStoreDiscountInputValidator = exports.PosApplyFreebieInputValidator = exports.PosAutoApplyDiscountInputValidator = exports.PosRemoveDiscountInputValidator = exports.PosApplyDiscountInputValidator = exports.PosGetDiscountPriceRulesParams = exports.PosListDiscountPriceRulesParams = exports.PosListDiscountPriceRulesParamsFields = exports.PosListDiscountPriceRulesDirectFields = exports.posDefaultDiscountPriceRuleFields = exports.PosCreateDiscountDetailsInputValidator = void 0;
|
|
4
|
+
const common_1 = require("@medusajs/medusa/api/utils/common-validators/common");
|
|
5
|
+
const validators_1 = require("@medusajs/medusa/api/utils/validators");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
// Import shared enums from admin validators
|
|
8
|
+
const validators_2 = require("../../admin/discounts/validators");
|
|
9
|
+
// ##################### POS DISCOUNT VALIDATORS #####################
|
|
10
|
+
// Extract the base object schema for reuse
|
|
11
|
+
const PosCreateDiscountDetailsBaseSchema = zod_1.z.object({
|
|
12
|
+
title: zod_1.z.string().optional(),
|
|
13
|
+
description: zod_1.z.string().optional(),
|
|
14
|
+
type: validators_2.DiscountType,
|
|
15
|
+
starts_at: zod_1.z.string().datetime(),
|
|
16
|
+
ends_at: zod_1.z.string().datetime().optional(),
|
|
17
|
+
applies_on: validators_2.DiscountAppliesOn.optional().default(validators_2.DiscountAppliesOn.Values.PRICE),
|
|
18
|
+
applies_on_components: zod_1.z.array(validators_2.DiscountAppliesOnComponents).optional(),
|
|
19
|
+
min_order_value: zod_1.z.number().optional(),
|
|
20
|
+
promocode_type_id: zod_1.z.number().optional(),
|
|
21
|
+
is_all_branch: zod_1.z.boolean().default(false),
|
|
22
|
+
code_count: zod_1.z.number().default(0).optional(),
|
|
23
|
+
is_category: zod_1.z.boolean().default(false),
|
|
24
|
+
is_make_type: zod_1.z.boolean().default(false),
|
|
25
|
+
is_style: zod_1.z.boolean().default(false),
|
|
26
|
+
is_stock_type: zod_1.z.boolean().default(false),
|
|
27
|
+
is_birthday: zod_1.z.boolean().default(false),
|
|
28
|
+
is_anniversary: zod_1.z.boolean().default(false),
|
|
29
|
+
assign_branch_nos: zod_1.z.string().optional(),
|
|
30
|
+
min_order_qty: zod_1.z.number().optional(),
|
|
31
|
+
max_discount: zod_1.z.number().optional(),
|
|
32
|
+
usage_limit_per_customer_type: validators_2.DiscountUsageLimitPerCustomerType.optional().default(validators_2.DiscountUsageLimitPerCustomerType.Values.UNLIMITED),
|
|
33
|
+
usage_limit_per_customer_specific: zod_1.z.number().optional(),
|
|
34
|
+
usage_limit: validators_2.DiscountUsageLimitType.optional().default(validators_2.DiscountUsageLimitType.Values.UNLIMITED),
|
|
35
|
+
usage_limit_specific: zod_1.z.number().optional(),
|
|
36
|
+
usage_limit_per_cart_type: validators_2.DiscountUsageLimitPerCartType.optional().default(validators_2.DiscountUsageLimitPerCartType.Values.ONLY_ONCE),
|
|
37
|
+
usage_limit_per_cart_specific: zod_1.z.number().optional(),
|
|
38
|
+
get_percent: zod_1.z.number().optional(),
|
|
39
|
+
get_flat_discount: zod_1.z.number().optional(),
|
|
40
|
+
visibility: zod_1.z.boolean().default(false),
|
|
41
|
+
only_for_new_customer: zod_1.z.boolean().default(false),
|
|
42
|
+
auto_apply: zod_1.z.boolean().default(false),
|
|
43
|
+
applicable_on_bundle: zod_1.z.boolean().default(false),
|
|
44
|
+
buy_x: zod_1.z.number().optional(),
|
|
45
|
+
get_y: zod_1.z.number().optional(),
|
|
46
|
+
at_y: zod_1.z.number().optional(),
|
|
47
|
+
applicable_product_variant_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
48
|
+
applicable_category_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
49
|
+
applicable_make_types: zod_1.z.array(zod_1.z.string()).optional(),
|
|
50
|
+
applicable_styles: zod_1.z.array(zod_1.z.string()).optional(),
|
|
51
|
+
applicable_stock_types: zod_1.z.array(zod_1.z.string()).optional(),
|
|
52
|
+
applicable_customer_ids: zod_1.z.array(zod_1.z.string()).optional(),
|
|
53
|
+
code: zod_1.z.string(),
|
|
54
|
+
});
|
|
55
|
+
const posCreatePriceRuleSuperRefine = (data, ctx) => {
|
|
56
|
+
if (data.usage_limit_per_customer_type ===
|
|
57
|
+
validators_2.DiscountUsageLimitPerCustomerType.Values.SPECIFIC &&
|
|
58
|
+
(data.usage_limit_per_customer_specific == null ||
|
|
59
|
+
data.usage_limit_per_customer_specific == undefined)) {
|
|
60
|
+
ctx.addIssue({
|
|
61
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
62
|
+
message: "usage_limit_per_customer_specific is required when usage_limit_per_customer_type is SPECIFIC",
|
|
63
|
+
path: ["usage_limit_per_customer_specific"],
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (data.usage_limit === validators_2.DiscountUsageLimitType.Values.SPECIFIC &&
|
|
67
|
+
(data.usage_limit_specific == null ||
|
|
68
|
+
data.usage_limit_specific == undefined)) {
|
|
69
|
+
ctx.addIssue({
|
|
70
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
71
|
+
message: "usage_limit_specific is required when usage_limit is SPECIFIC",
|
|
72
|
+
path: ["usage_limit_specific"],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (data.usage_limit_per_cart_type ===
|
|
76
|
+
validators_2.DiscountUsageLimitPerCartType.Values.SPECIFIC &&
|
|
77
|
+
(data.usage_limit_per_cart_specific == null ||
|
|
78
|
+
data.usage_limit_per_cart_specific == undefined)) {
|
|
79
|
+
ctx.addIssue({
|
|
80
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
81
|
+
message: "usage_limit_per_cart_specific is required when usage_limit_per_cart_type is SPECIFIC",
|
|
82
|
+
path: ["usage_limit_per_cart_specific"],
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (data.type === validators_2.DiscountType.Values.FIXED &&
|
|
86
|
+
(data.get_flat_discount == null || data.get_flat_discount == undefined)) {
|
|
87
|
+
ctx.addIssue({
|
|
88
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
89
|
+
message: "get_flat_discount is required for FIXED discount type",
|
|
90
|
+
path: ["get_flat_discount"],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (data.type === validators_2.DiscountType.Values.PERCENTAGE) {
|
|
94
|
+
if (data.get_percent == null ||
|
|
95
|
+
data.get_percent > 100 ||
|
|
96
|
+
data.get_percent < 0) {
|
|
97
|
+
ctx.addIssue({
|
|
98
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
99
|
+
message: "get_percent is required for PERCENTAGE discount type and must be between 0-100",
|
|
100
|
+
path: ["get_percent"],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (data.ends_at &&
|
|
105
|
+
data.starts_at &&
|
|
106
|
+
new Date(data.ends_at) <= new Date(data.starts_at)) {
|
|
107
|
+
ctx.addIssue({
|
|
108
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
109
|
+
message: "ends_at must be later than starts_at",
|
|
110
|
+
path: ["ends_at"],
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
if (data.usage_limit_per_cart_type) {
|
|
114
|
+
if ([
|
|
115
|
+
validators_2.DiscountType.Values.FIXED,
|
|
116
|
+
validators_2.DiscountType.Values.BXGY,
|
|
117
|
+
validators_2.DiscountType.Values.BXAY,
|
|
118
|
+
].includes(data.type)) {
|
|
119
|
+
// For FIXED, BXGY, BXAY: all usage_limit_per_cart_type values allowed
|
|
120
|
+
}
|
|
121
|
+
else if (data.type === validators_2.DiscountType.Values.PERCENTAGE) {
|
|
122
|
+
if (data.usage_limit_per_cart_type !== "ONLY_ONCE") {
|
|
123
|
+
ctx.addIssue({
|
|
124
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
125
|
+
message: "usage_limit_per_cart_type can only be 'ONLY_ONCE' when discount type is PERCENTAGE",
|
|
126
|
+
path: ["usage_limit_per_cart_type"],
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
ctx.addIssue({
|
|
132
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
133
|
+
message: `usage_limit_per_cart_type is not valid for discount type '${data.type}'`,
|
|
134
|
+
path: ["usage_limit_per_cart_type"],
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (data.type === validators_2.DiscountType.Values.BXGY) {
|
|
139
|
+
if (data.buy_x == null || data.get_y == null) {
|
|
140
|
+
ctx.addIssue({
|
|
141
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
142
|
+
message: "buy_x and get_y are required for BXGY discounts",
|
|
143
|
+
path: ["buy_x"],
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (data.type === validators_2.DiscountType.Values.BXAY) {
|
|
148
|
+
if (data.buy_x == null || data.at_y == null) {
|
|
149
|
+
ctx.addIssue({
|
|
150
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
151
|
+
message: "buy_x and at_y are required for BXAY discounts",
|
|
152
|
+
path: ["buy_x"],
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (data.applicable_product_variant_ids?.length &&
|
|
157
|
+
data.applicable_category_ids?.length) {
|
|
158
|
+
ctx.addIssue({
|
|
159
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
160
|
+
message: "You should provide either applicable_product_variant_ids or applicable_category_ids",
|
|
161
|
+
path: ["applicable_product_variant_ids"],
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (data.min_order_value != null && data.min_order_value < 0) {
|
|
165
|
+
ctx.addIssue({
|
|
166
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
167
|
+
message: "min_order_value cannot be negative",
|
|
168
|
+
path: ["min_order_value"],
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
if (data.min_order_qty != null && data.min_order_qty < 0) {
|
|
172
|
+
ctx.addIssue({
|
|
173
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
174
|
+
message: "min_order_qty cannot be negative",
|
|
175
|
+
path: ["min_order_qty"],
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (data.max_discount != null && data.max_discount < 0) {
|
|
179
|
+
ctx.addIssue({
|
|
180
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
181
|
+
message: "max_discount cannot be negative",
|
|
182
|
+
path: ["max_discount"],
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
if (data.type === validators_2.DiscountType.Values.FIXED) {
|
|
186
|
+
["get_percent", "buy_x", "get_y", "at_y"].forEach((fld) => {
|
|
187
|
+
if (data[fld] != null) {
|
|
188
|
+
ctx.addIssue({
|
|
189
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
190
|
+
message: `${fld} must be null when discount type is FIXED`,
|
|
191
|
+
path: [fld],
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (data.type === validators_2.DiscountType.Values.PERCENTAGE) {
|
|
197
|
+
["get_flat_discount", "buy_x", "get_y", "at_y"].forEach((fld) => {
|
|
198
|
+
if (data[fld] != null) {
|
|
199
|
+
ctx.addIssue({
|
|
200
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
201
|
+
message: `${fld} must be null when discount type is PERCENTAGE`,
|
|
202
|
+
path: [fld],
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (data.type === validators_2.DiscountType.Values.BXGY) {
|
|
208
|
+
["get_percent", "get_flat_discount", "at_y"].forEach((fld) => {
|
|
209
|
+
if (data[fld] != null) {
|
|
210
|
+
ctx.addIssue({
|
|
211
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
212
|
+
message: `${fld} must be null when discount type is BXGY`,
|
|
213
|
+
path: [fld],
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
if (data.type === validators_2.DiscountType.Values.BXAY) {
|
|
219
|
+
["get_percent", "get_flat_discount", "get_y"].forEach((fld) => {
|
|
220
|
+
if (data[fld] != null) {
|
|
221
|
+
ctx.addIssue({
|
|
222
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
223
|
+
message: `${fld} must be null when discount type is BXAY`,
|
|
224
|
+
path: [fld],
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return data;
|
|
230
|
+
};
|
|
231
|
+
const posCreatePriceRulePreprocessor = (input) => {
|
|
232
|
+
if (typeof input === "object" && input !== null && "type" in input) {
|
|
233
|
+
if (!("usage_limit_per_cart_type" in input) ||
|
|
234
|
+
input.usage_limit_per_cart_type === undefined) {
|
|
235
|
+
if (["FIXED", "BXGY", "BXAY"].includes(input.type)) {
|
|
236
|
+
return { ...input, usage_limit_per_cart_type: "UNLIMITED" };
|
|
237
|
+
}
|
|
238
|
+
if (input.type === "PERCENTAGE") {
|
|
239
|
+
return { ...input, usage_limit_per_cart_type: "ONLY_ONCE" };
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return input;
|
|
244
|
+
};
|
|
245
|
+
exports.PosCreateDiscountDetailsInputValidator = zod_1.z.preprocess(posCreatePriceRulePreprocessor, PosCreateDiscountDetailsBaseSchema.superRefine(posCreatePriceRuleSuperRefine));
|
|
246
|
+
exports.posDefaultDiscountPriceRuleFields = [
|
|
247
|
+
"id",
|
|
248
|
+
"title",
|
|
249
|
+
"description",
|
|
250
|
+
"type",
|
|
251
|
+
"starts_at",
|
|
252
|
+
"ends_at",
|
|
253
|
+
"status",
|
|
254
|
+
"applies_on",
|
|
255
|
+
"min_order_value",
|
|
256
|
+
"min_order_qty",
|
|
257
|
+
"max_discount",
|
|
258
|
+
"usage_limit_per_customer_type",
|
|
259
|
+
"usage_limit_per_customer_specific",
|
|
260
|
+
"usage_limit",
|
|
261
|
+
"usage_limit_specific",
|
|
262
|
+
"usage_limit_per_cart_type",
|
|
263
|
+
"usage_limit_per_cart_specific",
|
|
264
|
+
"get_percent",
|
|
265
|
+
"get_flat_discount",
|
|
266
|
+
"visibility",
|
|
267
|
+
"only_for_new_customer",
|
|
268
|
+
"auto_apply",
|
|
269
|
+
"applicable_on_bundle",
|
|
270
|
+
"buy_x",
|
|
271
|
+
"get_y",
|
|
272
|
+
"at_y",
|
|
273
|
+
"created_at",
|
|
274
|
+
"updated_at",
|
|
275
|
+
"code_count",
|
|
276
|
+
"prefix",
|
|
277
|
+
"discount_code",
|
|
278
|
+
];
|
|
279
|
+
exports.PosListDiscountPriceRulesDirectFields = (0, common_1.applyAndAndOrOperators)(zod_1.z.object({
|
|
280
|
+
id: (0, validators_1.createOperatorMap)().optional(),
|
|
281
|
+
title: (0, validators_1.createOperatorMap)().optional(),
|
|
282
|
+
description: (0, validators_1.createOperatorMap)().optional(),
|
|
283
|
+
type: (0, validators_1.createOperatorMap)().optional(),
|
|
284
|
+
starts_at: (0, validators_1.createOperatorMap)().optional(),
|
|
285
|
+
ends_at: (0, validators_1.createOperatorMap)().optional(),
|
|
286
|
+
status: (0, validators_1.createOperatorMap)().optional(),
|
|
287
|
+
applies_on: (0, validators_1.createOperatorMap)().optional(),
|
|
288
|
+
min_order_value: (0, validators_1.createOperatorMap)().optional(),
|
|
289
|
+
min_order_qty: (0, validators_1.createOperatorMap)().optional(),
|
|
290
|
+
max_discount: (0, validators_1.createOperatorMap)().optional(),
|
|
291
|
+
usage_limit_per_customer_type: (0, validators_1.createOperatorMap)().optional(),
|
|
292
|
+
usage_limit_per_customer_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
293
|
+
usage_limit: (0, validators_1.createOperatorMap)().optional(),
|
|
294
|
+
usage_limit_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
295
|
+
usage_limit_per_cart_type: (0, validators_1.createOperatorMap)().optional(),
|
|
296
|
+
usage_limit_per_cart_specific: (0, validators_1.createOperatorMap)().optional(),
|
|
297
|
+
get_percent: (0, validators_1.createOperatorMap)().optional(),
|
|
298
|
+
get_flat_discount: (0, validators_1.createOperatorMap)().optional(),
|
|
299
|
+
visibility: (0, validators_1.createOperatorMap)().optional(),
|
|
300
|
+
only_for_new_customer: (0, validators_1.createOperatorMap)().optional(),
|
|
301
|
+
auto_apply: (0, validators_1.createOperatorMap)().optional(),
|
|
302
|
+
applicable_on_bundle: (0, validators_1.createOperatorMap)().optional(),
|
|
303
|
+
buy_x: (0, validators_1.createOperatorMap)().optional(),
|
|
304
|
+
get_y: (0, validators_1.createOperatorMap)().optional(),
|
|
305
|
+
at_y: (0, validators_1.createOperatorMap)().optional(),
|
|
306
|
+
prefix: (0, validators_1.createOperatorMap)().optional(),
|
|
307
|
+
code_count: (0, validators_1.createOperatorMap)().optional(),
|
|
308
|
+
created_at: (0, validators_1.createOperatorMap)().optional(),
|
|
309
|
+
updated_at: (0, validators_1.createOperatorMap)().optional(),
|
|
310
|
+
}));
|
|
311
|
+
exports.PosListDiscountPriceRulesParamsFields = zod_1.z.object({
|
|
312
|
+
q: zod_1.z.string().optional(),
|
|
313
|
+
title: zod_1.z.string().optional(),
|
|
314
|
+
id: zod_1.z.string().optional(),
|
|
315
|
+
});
|
|
316
|
+
exports.PosListDiscountPriceRulesParams = (0, validators_1.createFindParams)({
|
|
317
|
+
limit: 10,
|
|
318
|
+
offset: 0,
|
|
319
|
+
order: "-created_at",
|
|
320
|
+
})
|
|
321
|
+
.merge(exports.PosListDiscountPriceRulesDirectFields)
|
|
322
|
+
.merge(exports.PosListDiscountPriceRulesParamsFields);
|
|
323
|
+
exports.PosGetDiscountPriceRulesParams = (0, validators_1.createFindParams)({
|
|
324
|
+
offset: 0,
|
|
325
|
+
limit: 50,
|
|
326
|
+
});
|
|
327
|
+
exports.PosApplyDiscountInputValidator = zod_1.z.object({
|
|
328
|
+
code: zod_1.z.string(),
|
|
329
|
+
cart_id: zod_1.z.string(),
|
|
330
|
+
customerId: zod_1.z.string().optional(),
|
|
331
|
+
});
|
|
332
|
+
exports.PosRemoveDiscountInputValidator = zod_1.z.object({
|
|
333
|
+
cart_id: zod_1.z.string(),
|
|
334
|
+
code: zod_1.z.string().optional(),
|
|
335
|
+
});
|
|
336
|
+
exports.PosAutoApplyDiscountInputValidator = zod_1.z.object({
|
|
337
|
+
cart_id: zod_1.z.string(),
|
|
338
|
+
});
|
|
339
|
+
exports.PosApplyFreebieInputValidator = zod_1.z.object({
|
|
340
|
+
cart_id: zod_1.z.string(),
|
|
341
|
+
});
|
|
342
|
+
// Store discount (manual staff discount) for POS
|
|
343
|
+
exports.PosApplyStoreDiscountInputValidator = zod_1.z.object({
|
|
344
|
+
cart_id: zod_1.z.string(),
|
|
345
|
+
amount: zod_1.z.number().positive(),
|
|
346
|
+
});
|
|
347
|
+
exports.PosRemoveStoreDiscountInputValidator = zod_1.z.object({
|
|
348
|
+
cart_id: zod_1.z.string(),
|
|
349
|
+
});
|
|
350
|
+
// Verify store discount (OTP-based approval) for POS
|
|
351
|
+
exports.PosVerifyStoreDiscountInputValidator = zod_1.z.object({
|
|
352
|
+
cart_id: zod_1.z.string(),
|
|
353
|
+
amount: zod_1.z.number().positive(),
|
|
354
|
+
otp: zod_1.z.string().optional(),
|
|
355
|
+
});
|
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvcG9zL2Rpc2NvdW50cy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdGQUE2RjtBQUM3RixzRUFHK0M7QUFDL0MsNkJBQXdCO0FBRXhCLDRDQUE0QztBQUM1QyxpRUFPMEM7QUFFMUMsc0VBQXNFO0FBRXRFLDJDQUEyQztBQUMzQyxNQUFNLGtDQUFrQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsSUFBSSxFQUFFLHlCQUFZO0lBQ2xCLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXpDLFVBQVUsRUFBRSw4QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQzlDLDhCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQy9CO0lBQ0QscUJBQXFCLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQyx3Q0FBMkIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN0RSxlQUFlLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hDLGFBQWEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QyxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FB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
|