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,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const i18nTranslations0 = {};
|
|
3
|
+
const widgetModule = { widgets: [] };
|
|
4
|
+
const routeModule = {
|
|
5
|
+
routes: []
|
|
6
|
+
};
|
|
7
|
+
const menuItemModule = {
|
|
8
|
+
menuItems: []
|
|
9
|
+
};
|
|
10
|
+
const formModule = { customFields: {} };
|
|
11
|
+
const displayModule = {
|
|
12
|
+
displays: {}
|
|
13
|
+
};
|
|
14
|
+
const i18nModule = { resources: i18nTranslations0 };
|
|
15
|
+
const plugin = {
|
|
16
|
+
widgetModule,
|
|
17
|
+
routeModule,
|
|
18
|
+
menuItemModule,
|
|
19
|
+
formModule,
|
|
20
|
+
displayModule,
|
|
21
|
+
i18nModule
|
|
22
|
+
};
|
|
23
|
+
module.exports = plugin;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const i18nTranslations0 = {};
|
|
2
|
+
const widgetModule = { widgets: [] };
|
|
3
|
+
const routeModule = {
|
|
4
|
+
routes: []
|
|
5
|
+
};
|
|
6
|
+
const menuItemModule = {
|
|
7
|
+
menuItems: []
|
|
8
|
+
};
|
|
9
|
+
const formModule = { customFields: {} };
|
|
10
|
+
const displayModule = {
|
|
11
|
+
displays: {}
|
|
12
|
+
};
|
|
13
|
+
const i18nModule = { resources: i18nTranslations0 };
|
|
14
|
+
const plugin = {
|
|
15
|
+
widgetModule,
|
|
16
|
+
routeModule,
|
|
17
|
+
menuItemModule,
|
|
18
|
+
formModule,
|
|
19
|
+
displayModule,
|
|
20
|
+
i18nModule
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
plugin as default
|
|
24
|
+
};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const CATALOG_FIELDS = [
|
|
6
|
+
"id",
|
|
7
|
+
"title",
|
|
8
|
+
"thumbnail",
|
|
9
|
+
"handle",
|
|
10
|
+
"status",
|
|
11
|
+
"variants.id",
|
|
12
|
+
"variants.title",
|
|
13
|
+
"variants.sku",
|
|
14
|
+
"variants.barcode",
|
|
15
|
+
"variants.ean",
|
|
16
|
+
"variants.upc",
|
|
17
|
+
"variants.prices.amount",
|
|
18
|
+
"variants.prices.currency_code",
|
|
19
|
+
"variants.options.id",
|
|
20
|
+
"variants.options.value",
|
|
21
|
+
"variants.options.option_id",
|
|
22
|
+
"variants.options.option.id",
|
|
23
|
+
"variants.options.option.title",
|
|
24
|
+
"options.id",
|
|
25
|
+
"options.title",
|
|
26
|
+
"options.values.id",
|
|
27
|
+
"options.values.value",
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* GET /admin/pos/catalog?sales_channel_id=...
|
|
31
|
+
* Compact product+variant payload for POS search/scan (no inventory graphs).
|
|
32
|
+
*/
|
|
33
|
+
async function GET(req, res) {
|
|
34
|
+
const queryParams = (req.query || {});
|
|
35
|
+
const salesChannelId = typeof queryParams.sales_channel_id === "string" ? queryParams.sales_channel_id.trim() : "";
|
|
36
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
37
|
+
const t0 = performance.now();
|
|
38
|
+
try {
|
|
39
|
+
const pageSize = 100;
|
|
40
|
+
let offset = 0;
|
|
41
|
+
const products = [];
|
|
42
|
+
let total = 0;
|
|
43
|
+
// Prefer sales-channel filter when provided; fall back to all products if the
|
|
44
|
+
// link filter shape is unsupported by the query engine.
|
|
45
|
+
const tryFilters = salesChannelId
|
|
46
|
+
? [{ sales_channels: { id: salesChannelId } }, { sales_channel_id: salesChannelId }, undefined]
|
|
47
|
+
: [undefined];
|
|
48
|
+
let filters = tryFilters[0];
|
|
49
|
+
let filterIndex = 0;
|
|
50
|
+
let loadedWithFilter = false;
|
|
51
|
+
while (filterIndex < tryFilters.length) {
|
|
52
|
+
filters = tryFilters[filterIndex];
|
|
53
|
+
try {
|
|
54
|
+
offset = 0;
|
|
55
|
+
products.length = 0;
|
|
56
|
+
total = 0;
|
|
57
|
+
for (;;) {
|
|
58
|
+
const result = await query.graph({
|
|
59
|
+
entity: "product",
|
|
60
|
+
fields: CATALOG_FIELDS,
|
|
61
|
+
filters: {
|
|
62
|
+
status: "published",
|
|
63
|
+
...(filters || {}),
|
|
64
|
+
},
|
|
65
|
+
pagination: {
|
|
66
|
+
skip: offset,
|
|
67
|
+
take: pageSize,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
const batch = Array.isArray(result.data) ? result.data : result.data ? [result.data] : [];
|
|
71
|
+
const count = typeof result.metadata?.count === "number"
|
|
72
|
+
? result.metadata.count
|
|
73
|
+
: typeof result.count === "number"
|
|
74
|
+
? result.count
|
|
75
|
+
: offset + batch.length;
|
|
76
|
+
total = count;
|
|
77
|
+
products.push(...batch);
|
|
78
|
+
loadedWithFilter = true;
|
|
79
|
+
if (batch.length < pageSize || products.length >= count) {
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
offset += pageSize;
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
filterIndex += 1;
|
|
88
|
+
if (filterIndex >= tryFilters.length) {
|
|
89
|
+
throw err;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// If channel filter returned empty but we had a channel, retry without filter once
|
|
94
|
+
// so POS still works when products aren't linked in the query shape we tried.
|
|
95
|
+
if (salesChannelId && products.length === 0 && loadedWithFilter && filters) {
|
|
96
|
+
offset = 0;
|
|
97
|
+
total = 0;
|
|
98
|
+
for (;;) {
|
|
99
|
+
const result = await query.graph({
|
|
100
|
+
entity: "product",
|
|
101
|
+
fields: [...CATALOG_FIELDS, "sales_channels.id"],
|
|
102
|
+
filters: { status: "published" },
|
|
103
|
+
pagination: { skip: offset, take: pageSize },
|
|
104
|
+
});
|
|
105
|
+
const batch = Array.isArray(result.data) ? result.data : result.data ? [result.data] : [];
|
|
106
|
+
const count = typeof result.metadata?.count === "number"
|
|
107
|
+
? result.metadata.count
|
|
108
|
+
: offset + batch.length;
|
|
109
|
+
total = count;
|
|
110
|
+
for (const product of batch) {
|
|
111
|
+
const channels = Array.isArray(product?.sales_channels) ? product.sales_channels : [];
|
|
112
|
+
if (channels.some((c) => c?.id === salesChannelId)) {
|
|
113
|
+
const { sales_channels: _sc, ...rest } = product;
|
|
114
|
+
products.push(rest);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (batch.length < pageSize || offset + batch.length >= count) {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
offset += pageSize;
|
|
121
|
+
}
|
|
122
|
+
total = products.length;
|
|
123
|
+
}
|
|
124
|
+
const ms = Math.round(performance.now() - t0);
|
|
125
|
+
console.log(`[pos catalog] channel=${salesChannelId || "all"} products=${products.length} ms=${ms}`);
|
|
126
|
+
res.status(200).json({
|
|
127
|
+
products,
|
|
128
|
+
count: products.length || total,
|
|
129
|
+
_pos_timings_ms: { total: ms },
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error("[pos catalog] GET error:", error);
|
|
134
|
+
res.status(500).json({
|
|
135
|
+
message: String(error?.message || "Failed to load POS catalog"),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9jYXRhbG9nL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb0NBLGtCQXdIQztBQTNKRCxxREFBcUU7QUFNckUsTUFBTSxjQUFjLEdBQUc7SUFDckIsSUFBSTtJQUNKLE9BQU87SUFDUCxXQUFXO0lBQ1gsUUFBUTtJQUNSLFFBQVE7SUFDUixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsY0FBYztJQUNkLGNBQWM7SUFDZCx3QkFBd0I7SUFDeEIsK0JBQStCO0lBQy9CLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsNEJBQTRCO0lBQzVCLDRCQUE0QjtJQUM1QiwrQkFBK0I7SUFDL0IsWUFBWTtJQUNaLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsc0JBQXNCO0NBQ3ZCLENBQUE7QUFFRDs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBaUIsQ0FBQTtJQUNyRCxNQUFNLGNBQWMsR0FDbEIsT0FBTyxXQUFXLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUU3RixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFBO1FBQ3BCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUNk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
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const pos_draft_edit_1 = require("../../../../../../utils/pos-draft-edit");
|
|
5
|
+
const route_1 = require("../items/route");
|
|
6
|
+
/**
|
|
7
|
+
* POST /admin/pos/draft-orders/:id/confirm-lite
|
|
8
|
+
* Idle flush for new POS keep_edit_open path:
|
|
9
|
+
* confirm open draft edit (no payment-collection), then apply auto promotions.
|
|
10
|
+
*/
|
|
11
|
+
async function POST(req, res) {
|
|
12
|
+
const draftOrderId = req.params.id;
|
|
13
|
+
if (!draftOrderId) {
|
|
14
|
+
res.status(400).json({ message: "Draft order id is required" });
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const actorId = req.auth_context?.actor_id ||
|
|
18
|
+
req.auth?.actor_id ||
|
|
19
|
+
null;
|
|
20
|
+
const confirmedBy = actorId || "system";
|
|
21
|
+
try {
|
|
22
|
+
const t0 = performance.now();
|
|
23
|
+
const confirmed = await (0, pos_draft_edit_1.confirmEditLite)(req.scope, draftOrderId, confirmedBy);
|
|
24
|
+
const autoPromoRes = await (0, route_1.applyAutoPromotions)(req.scope, draftOrderId, confirmedBy);
|
|
25
|
+
const ms = Math.round(performance.now() - t0);
|
|
26
|
+
console.log(`[pos confirm-lite] draft=${draftOrderId} confirmed=${confirmed ? 1 : 0} ms=${ms} auto_promos=${JSON.stringify(autoPromoRes)}`);
|
|
27
|
+
res.status(200).json({
|
|
28
|
+
id: draftOrderId,
|
|
29
|
+
confirmed: Boolean(confirmed),
|
|
30
|
+
_pos_auto_promos: autoPromoRes,
|
|
31
|
+
_pos_timings_ms: { confirm_lite: ms },
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error("[pos confirm-lite] POST error:", error);
|
|
36
|
+
res.status(500).json({
|
|
37
|
+
message: String(error?.message || "Failed to confirm draft edit"),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9kcmFmdC1vcmRlcnMvW2lkXS9jb25maXJtLWxpdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxvQkFrQ0M7QUExQ0QsMkVBQXdFO0FBQ3hFLDBDQUFvRDtBQUVwRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLElBQUksQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQ2hFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO0lBRWxDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUE7UUFDL0QsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FDVixHQUFXLENBQUMsWUFBWSxFQUFFLFFBQVE7UUFDbEMsR0FBVyxDQUFDLElBQUksRUFBRSxRQUFRO1FBQzNCLElBQUksQ0FBQTtJQUNOLE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxRQUFRLENBQUE7SUFFdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzVCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSxnQ0FBZSxFQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQzdFLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBQSwyQkFBbUIsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUNwRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUNULDRCQUE0QixZQUFZLGNBQWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLGdCQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQy9ILENBQUE7UUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixFQUFFLEVBQUUsWUFBWTtZQUNoQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUM3QixnQkFBZ0IsRUFBRSxZQUFZO1lBQzlCLGVBQWUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7U0FDdEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN0RCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksOEJBQThCLENBQUM7U0FDbEUsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const pos_draft_edit_1 = require("../../../../../../utils/pos-draft-edit");
|
|
7
|
+
/**
|
|
8
|
+
* POST /admin/pos/draft-orders/:id/customer
|
|
9
|
+
* Attach/clear customer with confirm-lite (no payment-collection refresh).
|
|
10
|
+
*/
|
|
11
|
+
async function POST(req, res) {
|
|
12
|
+
const draftOrderId = req.params.id;
|
|
13
|
+
const body = (req.body || {});
|
|
14
|
+
const t0 = performance.now();
|
|
15
|
+
if (!draftOrderId) {
|
|
16
|
+
res.status(400).json({ message: "Draft order id is required" });
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const actorId = req.auth_context?.actor_id ||
|
|
20
|
+
req.auth?.actor_id ||
|
|
21
|
+
null;
|
|
22
|
+
const confirmedBy = actorId || "system";
|
|
23
|
+
try {
|
|
24
|
+
// Prefer direct order update when possible (no payment-collection path).
|
|
25
|
+
// Fall back to draft-edit + confirm-lite if Medusa rejects the direct write.
|
|
26
|
+
let usedEdit = false;
|
|
27
|
+
try {
|
|
28
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
29
|
+
const payload = {};
|
|
30
|
+
if ("customer_id" in body)
|
|
31
|
+
payload.customer_id = body.customer_id ?? null;
|
|
32
|
+
if ("email" in body && body.email != null)
|
|
33
|
+
payload.email = body.email;
|
|
34
|
+
if (body.billing_address)
|
|
35
|
+
payload.billing_address = body.billing_address;
|
|
36
|
+
await orderModule.updateOrders(draftOrderId, payload);
|
|
37
|
+
}
|
|
38
|
+
catch (directErr) {
|
|
39
|
+
console.warn(`[pos customer] direct updateOrders failed, using edit: ${directErr?.message || directErr}`);
|
|
40
|
+
usedEdit = true;
|
|
41
|
+
await (0, pos_draft_edit_1.beginEditSafe)(req.scope, draftOrderId);
|
|
42
|
+
await (0, core_flows_1.updateDraftOrderWorkflow)(req.scope).run({
|
|
43
|
+
input: {
|
|
44
|
+
id: draftOrderId,
|
|
45
|
+
user_id: confirmedBy,
|
|
46
|
+
customer_id: body.customer_id ?? undefined,
|
|
47
|
+
email: body.email ?? undefined,
|
|
48
|
+
...(body.billing_address ? { billing_address: body.billing_address } : {}),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
await (0, pos_draft_edit_1.confirmEditLite)(req.scope, draftOrderId, confirmedBy);
|
|
52
|
+
}
|
|
53
|
+
const draft_order = await (0, pos_draft_edit_1.retrievePosCart)(req.scope, draftOrderId);
|
|
54
|
+
const ms = Math.round(performance.now() - t0);
|
|
55
|
+
console.log(`[pos customer] draft=${draftOrderId} used_edit=${usedEdit ? 1 : 0} ms=${ms}`);
|
|
56
|
+
res.status(200).json({
|
|
57
|
+
draft_order: draft_order || { id: draftOrderId },
|
|
58
|
+
_pos_timings_ms: { total: ms },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error("[pos customer] POST error:", error);
|
|
63
|
+
res.status(500).json({
|
|
64
|
+
message: String(error?.message || "Failed to update draft customer"),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9kcmFmdC1vcmRlcnMvW2lkXS9jdXN0b21lci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1CQSxvQkFnRUM7QUFsRkQscURBQW1EO0FBQ25ELDREQUFzRTtBQUN0RSwyRUFJK0M7QUFRL0M7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLElBQUksQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQ2hFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQWlCLENBQUE7SUFDN0MsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBRTVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUE7UUFDL0QsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FDVixHQUFXLENBQUMsWUFBWSxFQUFFLFFBQVE7UUFDbEMsR0FBVyxDQUFDLElBQUksRUFBRSxRQUFRO1FBQzNCLElBQUksQ0FBQTtJQUNOLE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxRQUFRLENBQUE7SUFFdkMsSUFBSSxDQUFDO1FBQ0gseUVBQXlFO1FBQ3pFLDZFQUE2RTtRQUM3RSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDcEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FFbEQsQ0FBQTtZQUNELE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUE7WUFDM0MsSUFBSSxhQUFhLElBQUksSUFBSTtnQkFBRSxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFBO1lBQ3pFLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUk7Z0JBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1lBQ3JFLElBQUksSUFBSSxDQUFDLGVBQWU7Z0JBQUUsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFBO1lBRXhFLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdkQsQ0FBQztRQUFDLE9BQU8sU0FBYyxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLElBQUksQ0FDViwwREFBMEQsU0FBUyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FDNUYsQ0FBQTtZQUNELFFBQVEsR0FBRyxJQUFJLENBQUE7WUFDZixNQUFNLElBQUEsOEJBQWEsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFBO1lBQzVDLE1BQU0sSUFBQSxxQ0FBd0IsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUM1QyxLQUFLLEVBQUU7b0JBQ0wsRUFBRSxFQUFFLFlBQVk7b0JBQ2hCLE9BQU8sRUFBRSxXQUFXO29CQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTO29CQUMxQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTO29CQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNsRjthQUNGLENBQUMsQ0FBQTtZQUNGLE1BQU0sSUFBQSxnQ0FBZSxFQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQzdELENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsZ0NBQWUsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ2xFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsd0JBQXdCLFlBQVksY0FBYyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUM5RSxDQUFBO1FBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsV0FBVyxFQUFFLFdBQVcsSUFBSSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUU7WUFDaEQsZUFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtTQUMvQixDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxpQ0FBaUMsQ0FBQztTQUNyRSxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyJ9
|