medusa-pos-plugin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +23 -0
- package/.medusa/server/src/admin/index.mjs +24 -0
- package/.medusa/server/src/api/admin/pos/catalog/route.js +139 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/confirm-lite/route.js +41 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/customer/route.js +68 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/finalize/route.js +424 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/items/route.js +452 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/items/update/route.js +137 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/manual-discount/route.js +386 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/promotions/route.js +59 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/route.js +178 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/wallet-debit/route.js +220 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/route.js +193 -0
- package/.medusa/server/src/api/admin/pos/manual-discounts/route.js +76 -0
- package/.medusa/server/src/api/admin/pos/orders/[id]/fulfill/route.js +103 -0
- package/.medusa/server/src/api/admin/pos/orders/[id]/returns/route.js +512 -0
- package/.medusa/server/src/api/admin/pos/orders/fulfill-pos-items.js +63 -0
- package/.medusa/server/src/api/admin/pos/orders/validators.js +62 -0
- package/.medusa/server/src/api/admin/pos/payments/config/route.js +15 -0
- package/.medusa/server/src/api/admin/pos/payments/device/[orderId]/route.js +39 -0
- package/.medusa/server/src/api/admin/pos/payments/device/cancel/route.js +27 -0
- package/.medusa/server/src/api/admin/pos/payments/device/route.js +107 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/[qrId]/close/route.js +36 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/[qrId]/route.js +42 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/route.js +78 -0
- package/.medusa/server/src/index.js +8 -0
- package/.medusa/server/src/types.js +3 -0
- package/.medusa/server/src/utils/pos-draft-edit.js +178 -0
- package/.medusa/server/src/utils/pos-finalize.js +166 -0
- package/.medusa/server/src/utils/pos-inventory.js +265 -0
- package/.medusa/server/src/utils/pos-returns.js +339 -0
- package/.medusa/server/src/utils/razorpay-pos-device.js +122 -0
- package/.medusa/server/src/utils/razorpay-pos.js +134 -0
- package/README.md +39 -0
- package/index.js +9 -0
- package/package.json +82 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
exports.DELETE = DELETE;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
|
+
const pos_draft_edit_1 = require("../../../../../../utils/pos-draft-edit");
|
|
8
|
+
const POSMAN_PREFIX = "POSMAN-";
|
|
9
|
+
const manualDiscountLocks = new Map();
|
|
10
|
+
async function withManualDiscountLock(draftOrderId, fn) {
|
|
11
|
+
const prev = manualDiscountLocks.get(draftOrderId) ?? Promise.resolve();
|
|
12
|
+
let release = () => undefined;
|
|
13
|
+
const gate = new Promise((resolve) => {
|
|
14
|
+
release = resolve;
|
|
15
|
+
});
|
|
16
|
+
const next = prev.then(() => gate);
|
|
17
|
+
manualDiscountLocks.set(draftOrderId, next);
|
|
18
|
+
await prev;
|
|
19
|
+
try {
|
|
20
|
+
return await fn();
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
release();
|
|
24
|
+
if (manualDiscountLocks.get(draftOrderId) === next) {
|
|
25
|
+
manualDiscountLocks.delete(draftOrderId);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function resolveAmount(value) {
|
|
30
|
+
return (0, pos_draft_edit_1.toAmount)(value);
|
|
31
|
+
}
|
|
32
|
+
/** Prefer order totals; fall back to summing line items when BigNumber parse fails. */
|
|
33
|
+
function resolveOrderPayable(order) {
|
|
34
|
+
const fromTotal = resolveAmount(order.total);
|
|
35
|
+
if (fromTotal > 0)
|
|
36
|
+
return fromTotal;
|
|
37
|
+
const fromSubtotal = resolveAmount(order.subtotal);
|
|
38
|
+
if (fromSubtotal > 0)
|
|
39
|
+
return fromSubtotal;
|
|
40
|
+
const items = Array.isArray(order.items) ? order.items : [];
|
|
41
|
+
let sum = 0;
|
|
42
|
+
for (const item of items) {
|
|
43
|
+
const line = resolveAmount(item?.subtotal) ||
|
|
44
|
+
resolveAmount(item?.total) ||
|
|
45
|
+
resolveAmount(item?.unit_price) * (Number(item?.quantity) || 0);
|
|
46
|
+
sum += Math.max(0, line);
|
|
47
|
+
}
|
|
48
|
+
return sum;
|
|
49
|
+
}
|
|
50
|
+
function isPosManualCode(code) {
|
|
51
|
+
return typeof code === "string" && code.startsWith(POSMAN_PREFIX);
|
|
52
|
+
}
|
|
53
|
+
function collectPosManualCodes(order) {
|
|
54
|
+
const fromItems = order.items?.flatMap((item) => item.adjustments
|
|
55
|
+
?.map((adj) => adj.code)
|
|
56
|
+
.filter((code) => isPosManualCode(code)) ?? []) ?? [];
|
|
57
|
+
const fromPromos = order.promotions
|
|
58
|
+
?.map((p) => p.code)
|
|
59
|
+
.filter((code) => isPosManualCode(code)) ?? [];
|
|
60
|
+
return Array.from(new Set([...fromItems, ...fromPromos]));
|
|
61
|
+
}
|
|
62
|
+
function isDraftOrder(order) {
|
|
63
|
+
if (!order)
|
|
64
|
+
return false;
|
|
65
|
+
if (order.is_draft_order === true)
|
|
66
|
+
return true;
|
|
67
|
+
return String(order.status || "").toLowerCase() === "draft";
|
|
68
|
+
}
|
|
69
|
+
async function loadDraftOrder(scope, id) {
|
|
70
|
+
const orderModule = scope.resolve(utils_1.Modules.ORDER);
|
|
71
|
+
let order = null;
|
|
72
|
+
try {
|
|
73
|
+
order = (await orderModule.retrieveOrder(id, {
|
|
74
|
+
select: [
|
|
75
|
+
"id",
|
|
76
|
+
"display_id",
|
|
77
|
+
"status",
|
|
78
|
+
"is_draft_order",
|
|
79
|
+
"currency_code",
|
|
80
|
+
"email",
|
|
81
|
+
"total",
|
|
82
|
+
"subtotal",
|
|
83
|
+
"discount_total",
|
|
84
|
+
"metadata",
|
|
85
|
+
],
|
|
86
|
+
relations: ["items", "items.adjustments", "promotions"],
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
91
|
+
const { data } = await query.graph({
|
|
92
|
+
entity: "order",
|
|
93
|
+
fields: [
|
|
94
|
+
"id",
|
|
95
|
+
"display_id",
|
|
96
|
+
"status",
|
|
97
|
+
"is_draft_order",
|
|
98
|
+
"currency_code",
|
|
99
|
+
"email",
|
|
100
|
+
"total",
|
|
101
|
+
"subtotal",
|
|
102
|
+
"discount_total",
|
|
103
|
+
"metadata",
|
|
104
|
+
"items.*",
|
|
105
|
+
"items.adjustments.*",
|
|
106
|
+
"promotions.*",
|
|
107
|
+
],
|
|
108
|
+
filters: { id },
|
|
109
|
+
});
|
|
110
|
+
order = (Array.isArray(data) ? data[0] : null);
|
|
111
|
+
}
|
|
112
|
+
if (!order)
|
|
113
|
+
return null;
|
|
114
|
+
// Open POS edit can leave confirmed order totals at 0 — prefer preview for payable math.
|
|
115
|
+
try {
|
|
116
|
+
const preview = await orderModule.previewOrderChange(id);
|
|
117
|
+
const previewItems = Array.isArray(preview?.items) ? preview.items : [];
|
|
118
|
+
if (previewItems.length > 0) {
|
|
119
|
+
return {
|
|
120
|
+
...order,
|
|
121
|
+
items: previewItems,
|
|
122
|
+
total: preview.total ?? order.total,
|
|
123
|
+
subtotal: preview.subtotal ?? order.subtotal,
|
|
124
|
+
discount_total: preview.discount_total ?? order.discount_total,
|
|
125
|
+
promotions: preview.promotions ?? order.promotions,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// no active change
|
|
131
|
+
}
|
|
132
|
+
return order;
|
|
133
|
+
}
|
|
134
|
+
/** Gross item prices before any POSMAN — 10% must use this, never already-discounted totals. */
|
|
135
|
+
function computeGrossForManualPercent(order) {
|
|
136
|
+
const items = Array.isArray(order.items) ? order.items : [];
|
|
137
|
+
let sum = 0;
|
|
138
|
+
for (const item of items) {
|
|
139
|
+
const qty = Math.max(resolveAmount(item?.quantity) || 1, 1);
|
|
140
|
+
const original = resolveAmount(item?.metadata?.original_price);
|
|
141
|
+
const unit = resolveAmount(item?.unit_price ?? item?.raw_unit_price);
|
|
142
|
+
const lineGross = original > 0 ? original * qty : unit * qty;
|
|
143
|
+
sum += Math.max(lineGross, 0);
|
|
144
|
+
}
|
|
145
|
+
return Number(sum.toFixed(2));
|
|
146
|
+
}
|
|
147
|
+
async function deactivateManualPromos(scope, codes) {
|
|
148
|
+
if (!codes.length)
|
|
149
|
+
return;
|
|
150
|
+
const promotionModule = scope.resolve(utils_1.Modules.PROMOTION);
|
|
151
|
+
const promos = await promotionModule.listPromotions({ code: codes }, { take: codes.length });
|
|
152
|
+
if (promos.length) {
|
|
153
|
+
await promotionModule.updatePromotions(promos.map((p) => ({ id: p.id, status: "inactive" })));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* POST /admin/pos/draft-orders/:id/manual-discount
|
|
158
|
+
* One edit session + confirm-lite (no payment-collection refresh).
|
|
159
|
+
*/
|
|
160
|
+
async function POST(req, res) {
|
|
161
|
+
const draftOrderId = req.params.id;
|
|
162
|
+
const body = (req.body || {});
|
|
163
|
+
const t0 = performance.now();
|
|
164
|
+
const discountType = body.type === "percentage" ? "percentage" : "fixed";
|
|
165
|
+
const rawValue = body.value ?? body.amount;
|
|
166
|
+
const discountValue = Number(rawValue);
|
|
167
|
+
if (!draftOrderId) {
|
|
168
|
+
res.status(400).json({ message: "Draft order id is required" });
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (!Number.isFinite(discountValue) || discountValue <= 0) {
|
|
172
|
+
res.status(400).json({ message: "Discount value must be greater than 0" });
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (discountType === "percentage" && discountValue > 100) {
|
|
176
|
+
res.status(400).json({ message: "Percentage discount cannot exceed 100%" });
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
return await withManualDiscountLock(draftOrderId, async () => {
|
|
181
|
+
const order = await loadDraftOrder(req.scope, draftOrderId);
|
|
182
|
+
if (!order || !isDraftOrder(order)) {
|
|
183
|
+
res.status(404).json({ message: "Draft order not found" });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const items = Array.isArray(order.items) ? order.items : [];
|
|
187
|
+
const itemCount = items.reduce((sum, item) => sum + (Math.max(resolveAmount(item.quantity) || 0, 0)), 0);
|
|
188
|
+
const grossPayable = computeGrossForManualPercent(order);
|
|
189
|
+
const netPayable = resolveOrderPayable(order);
|
|
190
|
+
if (itemCount <= 0 && grossPayable <= 0 && netPayable <= 0) {
|
|
191
|
+
res.status(400).json({ message: "Add items before applying a discount" });
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const metaCode = order.metadata &&
|
|
195
|
+
typeof order.metadata === "object" &&
|
|
196
|
+
typeof order.metadata.pos_manual_discount
|
|
197
|
+
?.code === "string"
|
|
198
|
+
? String(order.metadata.pos_manual_discount.code)
|
|
199
|
+
: "";
|
|
200
|
+
const existingManualCodes = Array.from(new Set([...collectPosManualCodes(order), metaCode].filter((code) => isPosManualCode(code))));
|
|
201
|
+
const basePayable = discountType === "percentage" ? grossPayable : Math.max(grossPayable, netPayable);
|
|
202
|
+
if (discountType === "fixed" && basePayable > 0 && discountValue >= basePayable) {
|
|
203
|
+
res.status(400).json({
|
|
204
|
+
message: "Discount must be less than the order total",
|
|
205
|
+
});
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const actorId = req.auth_context?.actor_id ||
|
|
209
|
+
req.auth?.actor_id ||
|
|
210
|
+
null;
|
|
211
|
+
const confirmedBy = actorId || "system";
|
|
212
|
+
const currency = String(order.currency_code || "inr").toLowerCase();
|
|
213
|
+
const shortId = String(draftOrderId).replace(/^order_/, "").slice(-4).toUpperCase();
|
|
214
|
+
const shortTs = Date.now().toString(36).slice(-5).toUpperCase();
|
|
215
|
+
const code = `${POSMAN_PREFIX}${shortId}-${shortTs}`;
|
|
216
|
+
const appliedAt = new Date().toISOString();
|
|
217
|
+
const calculatedAmount = discountType === "fixed"
|
|
218
|
+
? discountValue
|
|
219
|
+
: Number(((Math.max(basePayable, 0) * discountValue) / 100).toFixed(2));
|
|
220
|
+
if (!Number.isFinite(calculatedAmount) || calculatedAmount <= 0) {
|
|
221
|
+
res.status(400).json({
|
|
222
|
+
message: basePayable <= 0
|
|
223
|
+
? "Add items with a price before applying a percentage discount"
|
|
224
|
+
: "Calculated discount amount must be greater than 0",
|
|
225
|
+
_pos_debug: {
|
|
226
|
+
discountType,
|
|
227
|
+
discountValue,
|
|
228
|
+
grossPayable,
|
|
229
|
+
netPayable,
|
|
230
|
+
basePayable,
|
|
231
|
+
itemCount,
|
|
232
|
+
},
|
|
233
|
+
});
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const promoMetadata = {
|
|
237
|
+
source: "pos_manual",
|
|
238
|
+
type: "manual_discount",
|
|
239
|
+
discount_type: discountType,
|
|
240
|
+
discount_value: discountValue,
|
|
241
|
+
amount: calculatedAmount,
|
|
242
|
+
percentage: discountType === "percentage" ? discountValue : undefined,
|
|
243
|
+
currency_code: currency,
|
|
244
|
+
draft_order_id: draftOrderId,
|
|
245
|
+
applied_by: actorId,
|
|
246
|
+
applied_at: appliedAt,
|
|
247
|
+
};
|
|
248
|
+
const promotionModule = req.scope.resolve(utils_1.Modules.PROMOTION);
|
|
249
|
+
// Create promo outside the edit session (DB write only)
|
|
250
|
+
const created = await promotionModule.createPromotions({
|
|
251
|
+
code,
|
|
252
|
+
type: "standard",
|
|
253
|
+
status: "active",
|
|
254
|
+
is_automatic: false,
|
|
255
|
+
limit: 1,
|
|
256
|
+
metadata: promoMetadata,
|
|
257
|
+
application_method: {
|
|
258
|
+
type: "fixed",
|
|
259
|
+
target_type: "order",
|
|
260
|
+
allocation: "across",
|
|
261
|
+
value: calculatedAmount,
|
|
262
|
+
currency_code: currency,
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
const createdPromo = Array.isArray(created) ? created[0] : created;
|
|
266
|
+
// Single edit session: remove old POSMAN (if any) → add new → confirm-lite once
|
|
267
|
+
await (0, pos_draft_edit_1.beginEditSafe)(req.scope, draftOrderId);
|
|
268
|
+
if (existingManualCodes.length) {
|
|
269
|
+
await (0, core_flows_1.removeDraftOrderPromotionsWorkflow)(req.scope).run({
|
|
270
|
+
input: { order_id: draftOrderId, promo_codes: existingManualCodes },
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
await (0, core_flows_1.addDraftOrderPromotionWorkflow)(req.scope).run({
|
|
274
|
+
input: { order_id: draftOrderId, promo_codes: [code] },
|
|
275
|
+
});
|
|
276
|
+
await (0, pos_draft_edit_1.confirmEditLite)(req.scope, draftOrderId, confirmedBy);
|
|
277
|
+
if (existingManualCodes.length) {
|
|
278
|
+
await deactivateManualPromos(req.scope, existingManualCodes);
|
|
279
|
+
}
|
|
280
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
281
|
+
const prevMeta = order.metadata && typeof order.metadata === "object" ? order.metadata : {};
|
|
282
|
+
await orderModule.updateOrders(draftOrderId, {
|
|
283
|
+
metadata: {
|
|
284
|
+
...prevMeta,
|
|
285
|
+
pos_manual_discount: {
|
|
286
|
+
code,
|
|
287
|
+
discount_type: discountType,
|
|
288
|
+
discount_value: discountValue,
|
|
289
|
+
amount: calculatedAmount,
|
|
290
|
+
currency_code: currency,
|
|
291
|
+
applied_by: actorId,
|
|
292
|
+
applied_at: appliedAt,
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
const draft_order = await (0, pos_draft_edit_1.retrievePosCart)(req.scope, draftOrderId);
|
|
297
|
+
const ms = Math.round(performance.now() - t0);
|
|
298
|
+
console.log(`[pos manual-discount] draft=${draftOrderId} ms=${ms} code=${code}`);
|
|
299
|
+
res.json({
|
|
300
|
+
code,
|
|
301
|
+
discount_type: discountType,
|
|
302
|
+
discount_value: discountValue,
|
|
303
|
+
amount: calculatedAmount,
|
|
304
|
+
currency_code: currency,
|
|
305
|
+
metadata: promoMetadata,
|
|
306
|
+
promotion_id: createdPromo?.id ?? null,
|
|
307
|
+
draft_order: draft_order || { id: draftOrderId },
|
|
308
|
+
_pos_timings_ms: { total: ms },
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
console.error("[pos manual-discount] POST error:", error);
|
|
314
|
+
res.status(500).json({
|
|
315
|
+
message: error?.message || "Failed to apply manual discount",
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* DELETE /admin/pos/draft-orders/:id/manual-discount
|
|
321
|
+
*/
|
|
322
|
+
async function DELETE(req, res) {
|
|
323
|
+
const draftOrderId = req.params.id;
|
|
324
|
+
const t0 = performance.now();
|
|
325
|
+
if (!draftOrderId) {
|
|
326
|
+
res.status(400).json({ message: "Draft order id is required" });
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
try {
|
|
330
|
+
const order = await loadDraftOrder(req.scope, draftOrderId);
|
|
331
|
+
if (!order || !isDraftOrder(order)) {
|
|
332
|
+
res.status(404).json({ message: "Draft order not found" });
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
const metaCode = order.metadata?.pos_manual_discount
|
|
336
|
+
?.code;
|
|
337
|
+
const codes = Array.from(new Set([
|
|
338
|
+
...collectPosManualCodes(order),
|
|
339
|
+
...(typeof metaCode === "string" && isPosManualCode(metaCode) ? [metaCode] : []),
|
|
340
|
+
]));
|
|
341
|
+
if (codes.length === 0) {
|
|
342
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
343
|
+
const prevMeta = order.metadata && typeof order.metadata === "object"
|
|
344
|
+
? { ...order.metadata }
|
|
345
|
+
: {};
|
|
346
|
+
if (prevMeta.pos_manual_discount) {
|
|
347
|
+
delete prevMeta.pos_manual_discount;
|
|
348
|
+
await orderModule.updateOrders(draftOrderId, { metadata: prevMeta });
|
|
349
|
+
}
|
|
350
|
+
const draft_order = await (0, pos_draft_edit_1.retrievePosCart)(req.scope, draftOrderId);
|
|
351
|
+
res.json({ removed: true, draft_order: draft_order || { id: draftOrderId } });
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const confirmedBy = req.auth_context?.actor_id ||
|
|
355
|
+
req.auth?.actor_id ||
|
|
356
|
+
"system";
|
|
357
|
+
await (0, pos_draft_edit_1.beginEditSafe)(req.scope, draftOrderId);
|
|
358
|
+
await (0, core_flows_1.removeDraftOrderPromotionsWorkflow)(req.scope).run({
|
|
359
|
+
input: { order_id: draftOrderId, promo_codes: codes },
|
|
360
|
+
});
|
|
361
|
+
await (0, pos_draft_edit_1.confirmEditLite)(req.scope, draftOrderId, confirmedBy);
|
|
362
|
+
await deactivateManualPromos(req.scope, codes);
|
|
363
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
364
|
+
const prevMeta = order.metadata && typeof order.metadata === "object"
|
|
365
|
+
? { ...order.metadata }
|
|
366
|
+
: {};
|
|
367
|
+
delete prevMeta.pos_manual_discount;
|
|
368
|
+
await orderModule.updateOrders(draftOrderId, { metadata: prevMeta });
|
|
369
|
+
const draft_order = await (0, pos_draft_edit_1.retrievePosCart)(req.scope, draftOrderId);
|
|
370
|
+
const ms = Math.round(performance.now() - t0);
|
|
371
|
+
console.log(`[pos manual-discount] DELETE draft=${draftOrderId} ms=${ms}`);
|
|
372
|
+
res.json({
|
|
373
|
+
removed: true,
|
|
374
|
+
codes,
|
|
375
|
+
draft_order: draft_order || { id: draftOrderId },
|
|
376
|
+
_pos_timings_ms: { total: ms },
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
console.error("[pos manual-discount] DELETE error:", error);
|
|
381
|
+
res.status(500).json({
|
|
382
|
+
message: error?.message || "Failed to remove manual discount",
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9kcmFmdC1vcmRlcnMvW2lkXS9tYW51YWwtZGlzY291bnQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyTUEsb0JBc01DO0FBS0Qsd0JBOEVDO0FBbmVELHFEQUdrQztBQUNsQyw0REFHb0M7QUFDcEMsMkVBSytDO0FBRS9DLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQTtBQUUvQixNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUF5QixDQUFBO0FBRTVELEtBQUssVUFBVSxzQkFBc0IsQ0FBSSxZQUFvQixFQUFFLEVBQW9CO0lBQ2pGLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDdkUsSUFBSSxPQUFPLEdBQWUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFBO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDekMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtJQUNuQixDQUFDLENBQUMsQ0FBQTtJQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMzQyxNQUFNLElBQUksQ0FBQTtJQUNWLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQTtJQUNuQixDQUFDO1lBQVMsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFBO1FBQ1QsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbkQsbUJBQW1CLENBQUMs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
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
5
|
+
const pos_draft_edit_1 = require("../../../../../../utils/pos-draft-edit");
|
|
6
|
+
/**
|
|
7
|
+
* POST /admin/pos/draft-orders/:id/promotions
|
|
8
|
+
* Add/remove promo codes with confirm-lite (no payment-collection refresh).
|
|
9
|
+
*/
|
|
10
|
+
async function POST(req, res) {
|
|
11
|
+
const draftOrderId = req.params.id;
|
|
12
|
+
const body = (req.body || {});
|
|
13
|
+
const t0 = performance.now();
|
|
14
|
+
if (!draftOrderId) {
|
|
15
|
+
res.status(400).json({ message: "Draft order id is required" });
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const codes = (body.promo_codes || [])
|
|
19
|
+
.map((c) => String(c || "").trim())
|
|
20
|
+
.filter(Boolean);
|
|
21
|
+
if (!codes.length) {
|
|
22
|
+
res.status(400).json({ message: "At least one promo code is required" });
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const actorId = req.auth_context?.actor_id ||
|
|
26
|
+
req.auth?.actor_id ||
|
|
27
|
+
null;
|
|
28
|
+
const confirmedBy = actorId || "system";
|
|
29
|
+
try {
|
|
30
|
+
await (0, pos_draft_edit_1.beginEditSafe)(req.scope, draftOrderId);
|
|
31
|
+
if (body.remove) {
|
|
32
|
+
await (0, core_flows_1.removeDraftOrderPromotionsWorkflow)(req.scope).run({
|
|
33
|
+
input: { order_id: draftOrderId, promo_codes: codes },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
await (0, core_flows_1.addDraftOrderPromotionWorkflow)(req.scope).run({
|
|
38
|
+
input: { order_id: draftOrderId, promo_codes: codes },
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
await (0, pos_draft_edit_1.confirmEditLite)(req.scope, draftOrderId, confirmedBy);
|
|
42
|
+
const draft_order = await (0, pos_draft_edit_1.retrievePosCart)(req.scope, draftOrderId);
|
|
43
|
+
const ms = Math.round(performance.now() - t0);
|
|
44
|
+
console.log(`[pos promotions] draft=${draftOrderId} remove=${body.remove ? 1 : 0} codes=${codes.join(",")} ms=${ms}`);
|
|
45
|
+
res.status(200).json({
|
|
46
|
+
draft_order: draft_order || { id: draftOrderId },
|
|
47
|
+
promo_codes: codes,
|
|
48
|
+
removed: Boolean(body.remove),
|
|
49
|
+
_pos_timings_ms: { total: ms },
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error("[pos promotions] POST error:", error);
|
|
54
|
+
res.status(500).json({
|
|
55
|
+
message: String(error?.message || "Failed to update promotions"),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9kcmFmdC1vcmRlcnMvW2lkXS9wcm9tb3Rpb25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcUJBLG9CQTBEQztBQTlFRCw0REFHb0M7QUFDcEMsMkVBSStDO0FBUS9DOzs7R0FHRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUNoRSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtJQUNsQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFjLENBQUE7SUFDMUMsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBRTVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUE7UUFDL0QsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1NBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxDQUFDLENBQUE7UUFDeEUsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FDVixHQUFXLENBQUMsWUFBWSxFQUFFLFFBQVE7UUFDbEMsR0FBVyxDQUFDLElBQUksRUFBRSxRQUFRO1FBQzNCLElBQUksQ0FBQTtJQUNOLE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxRQUFRLENBQUE7SUFFdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFBLDhCQUFhLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUU1QyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUEsK0NBQWtDLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDdEQsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO2FBQ3RELENBQUMsQ0FBQTtRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFBLDJDQUE4QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTthQUN0RCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsTUFBTSxJQUFBLGdDQUFlLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFFM0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLGdDQUFlLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNsRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUNULDBCQUEwQixZQUFZLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDekcsQ0FBQTtRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLFdBQVcsRUFBRSxXQUFXLElBQUksRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFO1lBQ2hELFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3QixlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1NBQy9CLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDcEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLDZCQUE2QixDQUFDO1NBQ2pFLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDIn0=
|