medusa-pos-plugin 0.0.34 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/api/admin/barcode-template/route.js +132 -0
- package/.medusa/server/src/api/admin/barcodes/bulk-generate/route.js +57 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/route.js +140 -1
- package/.medusa/server/src/api/admin/pos/manual-discounts/route.js +51 -32
- package/.medusa/server/src/utils/barcode-ean13.js +66 -0
- package/.medusa/server/src/utils/barcode-labels.js +336 -0
- package/.medusa/server/src/utils/barcode-template-default.js +434 -0
- package/README.md +30 -0
- package/package.json +1 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const barcode_labels_1 = require("../../../utils/barcode-labels");
|
|
7
|
+
const VARIANT_FIELDS = [
|
|
8
|
+
"id",
|
|
9
|
+
"barcode",
|
|
10
|
+
"sku",
|
|
11
|
+
"product.id",
|
|
12
|
+
"product.title",
|
|
13
|
+
"options.value",
|
|
14
|
+
"options.option.title",
|
|
15
|
+
"calculated_price.*",
|
|
16
|
+
"price_set.prices.amount",
|
|
17
|
+
"price_set.prices.currency_code",
|
|
18
|
+
"price_set.prices.price_list_id",
|
|
19
|
+
];
|
|
20
|
+
function isVariantRow(value) {
|
|
21
|
+
return (!!value &&
|
|
22
|
+
typeof value === "object" &&
|
|
23
|
+
typeof value.id === "string");
|
|
24
|
+
}
|
|
25
|
+
async function loadContactDetails(scope) {
|
|
26
|
+
try {
|
|
27
|
+
const dynamicConfigService = scope.resolve("dynamic_config");
|
|
28
|
+
return (0, barcode_labels_1.contactDetailsFromConfig)(await dynamicConfigService.listValues());
|
|
29
|
+
}
|
|
30
|
+
catch (configError) {
|
|
31
|
+
console.warn("[barcode-template] Could not fetch dynamic config:", configError);
|
|
32
|
+
return { phone: "", email: "", address: "" };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function resolveRegionId(scope, requested) {
|
|
36
|
+
if (requested)
|
|
37
|
+
return requested;
|
|
38
|
+
try {
|
|
39
|
+
const regionModule = scope.resolve(utils_1.Modules.REGION);
|
|
40
|
+
const regions = await regionModule.listRegions({}, { take: 20 });
|
|
41
|
+
const inr = regions.find((r) => (r.currency_code || "").toLowerCase() === "inr");
|
|
42
|
+
return inr?.id || regions[0]?.id || "";
|
|
43
|
+
}
|
|
44
|
+
catch (regionError) {
|
|
45
|
+
console.warn("[barcode-template] region resolve failed:", regionError);
|
|
46
|
+
return "";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* GET /admin/barcode-template
|
|
51
|
+
* Returns raw template + contact details (legacy / preview).
|
|
52
|
+
*/
|
|
53
|
+
async function GET(req, res) {
|
|
54
|
+
try {
|
|
55
|
+
const template = (0, barcode_labels_1.loadBarcodeTemplate)();
|
|
56
|
+
const contactDetails = await loadContactDetails(req.scope);
|
|
57
|
+
res.json({ template, contactDetails });
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error("Error reading barcode template:", error);
|
|
61
|
+
res.status(500).json({ error: "Failed to load barcode template" });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* POST /admin/barcode-template
|
|
66
|
+
* Body: { items: [{ variant_id, quantity }], region_id?, print_width?, print_height? }
|
|
67
|
+
* or legacy { variant_ids: string[] }
|
|
68
|
+
* Returns ready-to-print HTML with all variables filled on the backend.
|
|
69
|
+
* Quantity repeats labels (unique SVG ids per copy).
|
|
70
|
+
*/
|
|
71
|
+
async function POST(req, res) {
|
|
72
|
+
try {
|
|
73
|
+
const body = (0, barcode_labels_1.parseBarcodePrintBody)(req.body);
|
|
74
|
+
const printQueue = (0, barcode_labels_1.buildPrintQueue)(body);
|
|
75
|
+
if (printQueue.length === 0) {
|
|
76
|
+
res.status(400).json({ error: "items or variant_ids is required" });
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const uniqueVariantIds = [...new Set(printQueue)];
|
|
80
|
+
const printWidth = Number(body.print_width) || 2;
|
|
81
|
+
const printHeight = Number(body.print_height) || 60;
|
|
82
|
+
const template = (0, barcode_labels_1.loadBarcodeTemplate)();
|
|
83
|
+
const contactHtml = (0, barcode_labels_1.buildContactHtml)(await loadContactDetails(req.scope));
|
|
84
|
+
const regionId = await resolveRegionId(req.scope, body.region_id);
|
|
85
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
86
|
+
const { data: variantsRaw = [] } = await query.graph({
|
|
87
|
+
entity: "product_variant",
|
|
88
|
+
fields: VARIANT_FIELDS,
|
|
89
|
+
filters: { id: uniqueVariantIds },
|
|
90
|
+
...(regionId
|
|
91
|
+
? {
|
|
92
|
+
context: {
|
|
93
|
+
calculated_price: (0, utils_1.QueryContext)({
|
|
94
|
+
region_id: regionId,
|
|
95
|
+
currency_code: "inr",
|
|
96
|
+
}),
|
|
97
|
+
},
|
|
98
|
+
}
|
|
99
|
+
: {}),
|
|
100
|
+
});
|
|
101
|
+
const variants = (Array.isArray(variantsRaw) ? variantsRaw : []).filter(isVariantRow);
|
|
102
|
+
const byId = new Map(variants.map((v) => [v.id, v]));
|
|
103
|
+
const ordered = printQueue
|
|
104
|
+
.map((id) => byId.get(id))
|
|
105
|
+
.filter((v) => !!v);
|
|
106
|
+
if (ordered.length === 0) {
|
|
107
|
+
res.status(404).json({ error: "No variants found for the given ids" });
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const { html, count } = (0, barcode_labels_1.renderBarcodeLabelsHtml)({
|
|
111
|
+
template,
|
|
112
|
+
variants: ordered,
|
|
113
|
+
contactHtml,
|
|
114
|
+
printWidth,
|
|
115
|
+
printHeight,
|
|
116
|
+
});
|
|
117
|
+
res.json({
|
|
118
|
+
html,
|
|
119
|
+
count,
|
|
120
|
+
variants: uniqueVariantIds.length,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error("[barcode-template] POST error:", error);
|
|
125
|
+
res.status(500).json({
|
|
126
|
+
error: error instanceof Error && error.message
|
|
127
|
+
? error.message
|
|
128
|
+
: "Failed to build barcode print HTML",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JhcmNvZGUtdGVtcGxhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErRkEsa0JBWUM7QUFTRCxvQkF3RUM7QUEzTEQscURBSWtDO0FBQ2xDLGtFQVNzQztBQXVCdEMsTUFBTSxjQUFjLEdBQUc7SUFDckIsSUFBSTtJQUNKLFNBQVM7SUFDVCxLQUFLO0lBQ0wsWUFBWTtJQUNaLGVBQWU7SUFDZixlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQix5QkFBeUI7SUFDekIsZ0NBQWdDO0lBQ2hDLGdDQUFnQztDQUNqQyxDQUFBO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBYztJQUNsQyxPQUFPLENBQ0wsQ0FBQyxDQUFDLEtBQUs7UUFDUCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQVEsS0FBMEIsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUNuRCxDQUFBO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxrQkFBa0IsQ0FDL0IsS0FBNkI7SUFFN0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBdUIsZ0JBQWdCLENBQUMsQ0FBQTtRQUN2RCxPQUFPLElBQUEseUNBQXdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFBQyxPQUFPLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDOUMsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsZUFBZSxDQUM1QixLQUE2QixFQUM3QixTQUFr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
|
|
@@ -0,0 +1,57 @@
|
|
|
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 barcode_ean13_1 = require("../../../../utils/barcode-ean13");
|
|
6
|
+
function readVariantIds(body) {
|
|
7
|
+
if (!body || typeof body !== "object")
|
|
8
|
+
return [];
|
|
9
|
+
const ids = body.variantIds;
|
|
10
|
+
if (!Array.isArray(ids))
|
|
11
|
+
return [];
|
|
12
|
+
return ids.filter((id) => typeof id === "string" && !!id);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* POST /admin/barcodes/bulk-generate
|
|
16
|
+
* Body: { variantIds: string[] }
|
|
17
|
+
* Writes a deterministic SHA-256 EAN-13 barcode onto each variant.
|
|
18
|
+
*/
|
|
19
|
+
const POST = async (req, res) => {
|
|
20
|
+
try {
|
|
21
|
+
const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
|
|
22
|
+
const variantIds = readVariantIds(req.body);
|
|
23
|
+
if (variantIds.length === 0) {
|
|
24
|
+
res.json({ success: true, message: "No variants requested.", count: 0 });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Fetch variant details with parent product & options relations
|
|
28
|
+
const variants = await productModuleService.listProductVariants({ id: variantIds }, { relations: ["product", "options", "options.option"] });
|
|
29
|
+
const updates = [];
|
|
30
|
+
for (const id of variantIds) {
|
|
31
|
+
const variant = variants.find((v) => v.id === id);
|
|
32
|
+
const barcode = (0, barcode_ean13_1.generateDeterministicBarcodeSHA256)(variant?.product?.title || "", variant?.title || "", variant?.options || [], variant?.weight, variant?.width, variant?.length, variant?.height);
|
|
33
|
+
updates.push({ id, barcode });
|
|
34
|
+
}
|
|
35
|
+
for (const update of updates) {
|
|
36
|
+
await productModuleService.updateProductVariants(update.id, {
|
|
37
|
+
barcode: update.barcode,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
res.json({
|
|
41
|
+
success: true,
|
|
42
|
+
message: `Successfully generated SHA-256 deterministic barcodes for ${updates.length} variants.`,
|
|
43
|
+
count: updates.length,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error("Bulk barcode generation error:", error);
|
|
48
|
+
res.status(500).json({
|
|
49
|
+
success: false,
|
|
50
|
+
message: error instanceof Error && error.message
|
|
51
|
+
? error.message
|
|
52
|
+
: "Internal server error",
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
exports.POST = POST;
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JhcmNvZGVzL2J1bGstZ2VuZXJhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQW1EO0FBQ25ELG1FQUd3QztBQWF4QyxTQUFTLGNBQWMsQ0FBQyxJQUFhO0lBQ25DLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ2hELE1BQU0sR0FBRyxHQUFJLElBQWlDLENBQUMsVUFBVSxDQUFBO0lBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ2xDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDekUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ0osRUFBRTtJQUNqQixJQUFJLENBQUM7UUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUM1QyxlQUFPLENBQUMsT0FBTyxDQUNoQixDQUFBO1FBRUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMzQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3hFLE9BQU07UUFDUixDQUFDO1FBRUQsZ0VBQWdFO1FBQ2hFLE1BQU0sUUFBUSxHQUNaLE1BQU0sb0JBQW9CLENBQUMsbUJBQW1CLENBQzVDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUNsQixFQUFFLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUN4RCxDQUFBO1FBRUgsTUFBTSxPQUFPLEdBQTJDLEVBQUUsQ0FBQTtRQUUxRCxLQUFLLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7WUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBQSxrREFBa0MsRUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxFQUM3QixPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFDcEIsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQ3RCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLEtBQUssRUFDZCxPQUFPLEVBQUUsTUFBTSxFQUNmLE9BQU8sRUFBRSxNQUFNLENBQ2hCLENBQUE7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDL0IsQ0FBQztRQUVELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsTUFBTSxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUMxRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87YUFDeEIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSw2REFBNkQsT0FBTyxDQUFDLE1BQU0sWUFBWTtZQUNoRyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU07U0FDdEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3RELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxLQUFLO1lBQ2QsT0FBTyxFQUNMLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU87Z0JBQ3JDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztnQkFDZixDQUFDLENBQUMsdUJBQXVCO1NBQzlCLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDLENBQUE7QUEzRFksUUFBQSxJQUFJLFFBMkRoQiJ9
|
|
@@ -3,10 +3,145 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DELETE = DELETE;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const pos_manual_discount_1 = require("../../../../../utils/pos-manual-discount");
|
|
6
7
|
function log(step, detail) {
|
|
7
8
|
const payload = { step, at: new Date().toISOString(), ...detail };
|
|
8
9
|
console.log(`[POS Clear] ${step}`, payload);
|
|
9
10
|
}
|
|
11
|
+
async function cleanupManualDiscountPromotions(scope, draftOrderId) {
|
|
12
|
+
const deletedPromoIds = [];
|
|
13
|
+
try {
|
|
14
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
15
|
+
// Retrieve draft order or its cart to inspect manual discount and applied promotions
|
|
16
|
+
let draftOrder = null;
|
|
17
|
+
try {
|
|
18
|
+
const { data = [] } = await query.graph({
|
|
19
|
+
entity: "order",
|
|
20
|
+
fields: [
|
|
21
|
+
"id",
|
|
22
|
+
"metadata",
|
|
23
|
+
"promotions.id",
|
|
24
|
+
"promotions.code",
|
|
25
|
+
"items.adjustments.code",
|
|
26
|
+
],
|
|
27
|
+
filters: { id: draftOrderId },
|
|
28
|
+
});
|
|
29
|
+
draftOrder = Array.isArray(data) ? data[0] : null;
|
|
30
|
+
}
|
|
31
|
+
catch (graphErr) {
|
|
32
|
+
log("3_fetch_draft_order_graph_warn", {
|
|
33
|
+
deleting_id: draftOrderId,
|
|
34
|
+
message: graphErr instanceof Error ? graphErr.message : String(graphErr),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (!draftOrder) {
|
|
38
|
+
try {
|
|
39
|
+
const orderModule = scope.resolve(utils_1.Modules.ORDER);
|
|
40
|
+
draftOrder = await orderModule.retrieveOrder(draftOrderId, {
|
|
41
|
+
select: ["id", "metadata"],
|
|
42
|
+
relations: ["items", "items.adjustments"],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Fallback retrieve failed; continue with what we have
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const posManualMeta = draftOrder?.metadata && typeof draftOrder.metadata === "object"
|
|
50
|
+
? draftOrder.metadata.pos_manual_discount
|
|
51
|
+
: null;
|
|
52
|
+
const metaPromoId = posManualMeta && typeof posManualMeta === "object"
|
|
53
|
+
? (typeof posManualMeta.id === "string" && posManualMeta.id.trim()
|
|
54
|
+
? posManualMeta.id.trim()
|
|
55
|
+
: typeof posManualMeta.promotion_id === "string" && posManualMeta.promotion_id.trim()
|
|
56
|
+
? posManualMeta.promotion_id.trim()
|
|
57
|
+
: null)
|
|
58
|
+
: null;
|
|
59
|
+
const metaPromoCode = posManualMeta && typeof posManualMeta === "object" && typeof posManualMeta.code === "string"
|
|
60
|
+
? posManualMeta.code.trim()
|
|
61
|
+
: null;
|
|
62
|
+
const promoIdsToDelete = new Set();
|
|
63
|
+
const promoCodesToLookup = new Set();
|
|
64
|
+
if (metaPromoId) {
|
|
65
|
+
promoIdsToDelete.add(metaPromoId);
|
|
66
|
+
}
|
|
67
|
+
if (metaPromoCode) {
|
|
68
|
+
promoCodesToLookup.add(metaPromoCode);
|
|
69
|
+
}
|
|
70
|
+
// Check promotions applied on the draft order / cart
|
|
71
|
+
if (Array.isArray(draftOrder?.promotions)) {
|
|
72
|
+
for (const p of draftOrder.promotions) {
|
|
73
|
+
const code = typeof p?.code === "string" ? p.code.trim() : "";
|
|
74
|
+
const pid = typeof p?.id === "string" ? p.id.trim() : "";
|
|
75
|
+
if ((0, pos_manual_discount_1.isPosManualCode)(code)) {
|
|
76
|
+
if (pid)
|
|
77
|
+
promoIdsToDelete.add(pid);
|
|
78
|
+
if (code)
|
|
79
|
+
promoCodesToLookup.add(code);
|
|
80
|
+
}
|
|
81
|
+
else if (metaPromoCode && code === metaPromoCode) {
|
|
82
|
+
if (pid)
|
|
83
|
+
promoIdsToDelete.add(pid);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Check item adjustments for any POSMAN- codes
|
|
88
|
+
if (Array.isArray(draftOrder?.items)) {
|
|
89
|
+
for (const item of draftOrder.items) {
|
|
90
|
+
if (Array.isArray(item?.adjustments)) {
|
|
91
|
+
for (const adj of item.adjustments) {
|
|
92
|
+
const code = typeof adj?.code === "string" ? adj.code.trim() : "";
|
|
93
|
+
if ((0, pos_manual_discount_1.isPosManualCode)(code)) {
|
|
94
|
+
promoCodesToLookup.add(code);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (promoIdsToDelete.size > 0 || promoCodesToLookup.size > 0) {
|
|
101
|
+
const promotionModuleService = scope.resolve(utils_1.Modules.PROMOTION);
|
|
102
|
+
// If we found codes whose promotion IDs aren't in promoIdsToDelete yet, look them up
|
|
103
|
+
if (promoCodesToLookup.size > 0) {
|
|
104
|
+
try {
|
|
105
|
+
const codes = Array.from(promoCodesToLookup);
|
|
106
|
+
const foundPromos = await promotionModuleService.listPromotions({ code: codes }, { take: codes.length });
|
|
107
|
+
for (const promo of foundPromos || []) {
|
|
108
|
+
if (promo?.id) {
|
|
109
|
+
promoIdsToDelete.add(promo.id);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (lookupErr) {
|
|
114
|
+
log("3_lookup_promos_by_code_warn", {
|
|
115
|
+
deleting_id: draftOrderId,
|
|
116
|
+
codes: Array.from(promoCodesToLookup),
|
|
117
|
+
message: lookupErr instanceof Error ? lookupErr.message : String(lookupErr),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const promoId of promoIdsToDelete) {
|
|
122
|
+
try {
|
|
123
|
+
await promotionModuleService.deletePromotions([promoId]);
|
|
124
|
+
deletedPromoIds.push(promoId);
|
|
125
|
+
log("3_delete_manual_discount_promo_ok", { deleting_id: draftOrderId, promoId });
|
|
126
|
+
}
|
|
127
|
+
catch (delPromoErr) {
|
|
128
|
+
log("3_delete_manual_discount_promo_failed", {
|
|
129
|
+
deleting_id: draftOrderId,
|
|
130
|
+
promoId,
|
|
131
|
+
message: delPromoErr instanceof Error ? delPromoErr.message : String(delPromoErr),
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
log("3_cleanup_manual_discounts_error", {
|
|
139
|
+
deleting_id: draftOrderId,
|
|
140
|
+
message: err instanceof Error ? err.message : String(err),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return deletedPromoIds;
|
|
144
|
+
}
|
|
10
145
|
async function snapshotOrders(query) {
|
|
11
146
|
const { data = [] } = await query.graph({
|
|
12
147
|
entity: "order",
|
|
@@ -92,6 +227,9 @@ async function DELETE(req, res) {
|
|
|
92
227
|
});
|
|
93
228
|
return;
|
|
94
229
|
}
|
|
230
|
+
log("3_cleanup_manual_discounts", { deleting_id: id });
|
|
231
|
+
const deletedPromoIds = await cleanupManualDiscountPromotions(req.scope, id);
|
|
232
|
+
log("3_cleanup_manual_discounts_done", { deleting_id: id, promo_ids: deletedPromoIds });
|
|
95
233
|
log("4_cancel_edit", { deleting_id: id });
|
|
96
234
|
try {
|
|
97
235
|
await (0, core_flows_1.cancelDraftOrderEditWorkflow)(req.scope).run({
|
|
@@ -162,6 +300,7 @@ async function DELETE(req, res) {
|
|
|
162
300
|
missing_completed: missingCompleted,
|
|
163
301
|
drafts_removed: removedDrafts,
|
|
164
302
|
verdict: completedVerdict,
|
|
303
|
+
manual_discounts_deleted: deletedPromoIds,
|
|
165
304
|
},
|
|
166
305
|
});
|
|
167
306
|
}
|
|
@@ -175,4 +314,4 @@ async function DELETE(req, res) {
|
|
|
175
314
|
});
|
|
176
315
|
}
|
|
177
316
|
}
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9kcmFmdC1vcmRlcnMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZEQSx3QkF1SkM7QUFuTkQscURBQXFFO0FBQ3JFLDREQUdvQztBQVVwQyxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBZ0M7SUFDekQsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUNqRSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDN0MsQ0FBQztBQUVELEtBQUssVUFBVSxjQUFjLENBQUMsS0FFN0I7SUFDQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQztRQUN0RSxPQUFPLEVBQUUsRUFBRTtRQUNYLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO1NBQzlCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3hELE1BQU0sQ0FBQyxHQUFHLEdBQWdCLENBQUE7UUFD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
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9kcmFmdC1vcmRlcnMvW2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBOQSx3QkE0SkM7QUFyWEQscURBQThFO0FBQzlFLDREQUdvQztBQUNwQyxrRkFBMEU7QUFVMUUsU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLE1BQWdDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUE7SUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQzdDLENBQUM7QUFFRCxLQUFLLFVBQVUsK0JBQStCLENBQzVDLEtBQTZCLEVBQzdCLFlBQW9CO0lBRXBCLE1BQU0sZUFBZSxHQUFhLEVBQUUsQ0FBQTtJQUNwQyxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTVELHFGQUFxRjtRQUNyRixJQUFJLFVBQVUsR0FBK0IsSUFBSSxDQUFBO1FBQ2pELElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUU7b0JBQ04sSUFBSTtvQkFDSixVQUFVO29CQUNWLGVBQWU7b0JBQ2YsaUJBQWlCO29CQUNqQix3QkFBd0I7aUJBQ3pCO2dCQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUU7YUFDOUIsQ0FBQyxDQUFBO1lBQ0YsVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMs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
|
|
@@ -3,38 +3,48 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.GET = GET;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const POSMAN_PREFIX = "POSMAN-";
|
|
6
|
+
function isPosManualPromotion(p) {
|
|
7
|
+
const code = String(p.code || "");
|
|
8
|
+
return code.startsWith(POSMAN_PREFIX) || p.metadata?.source === "pos_manual";
|
|
9
|
+
}
|
|
6
10
|
/**
|
|
7
11
|
* GET /admin/pos/manual-discounts
|
|
8
|
-
* Lists POS manual-discount promotions (POSMAN-*)
|
|
9
|
-
*
|
|
12
|
+
* Lists POS manual-discount promotions (POSMAN-*) and Admin-created promo codes
|
|
13
|
+
* for the POS Discounts page. Includes inactive codes.
|
|
10
14
|
*/
|
|
11
15
|
async function GET(req, res) {
|
|
12
16
|
const query = (req.query || {});
|
|
13
|
-
const limit = Math.min(Math.max(Number(query.limit) || 50, 1),
|
|
17
|
+
const limit = Math.min(Math.max(Number(query.limit) || 50, 1), 200);
|
|
14
18
|
const offset = Math.max(Number(query.offset) || 0, 0);
|
|
15
19
|
const q = (query.q || "").trim().toLowerCase();
|
|
16
20
|
try {
|
|
17
21
|
const promotionModule = req.scope.resolve(utils_1.Modules.PROMOTION);
|
|
18
|
-
|
|
19
|
-
const take = Math.min(offset + limit + 200, 500);
|
|
20
|
-
const [rows] = await promotionModule.listAndCountPromotions({}, {
|
|
21
|
-
take,
|
|
22
|
-
skip: 0,
|
|
22
|
+
const config = {
|
|
23
23
|
order: { created_at: "DESC" },
|
|
24
24
|
relations: ["application_method"],
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
};
|
|
26
|
+
// POSMAN codes are created per sale, so Admin promos are queried separately
|
|
27
|
+
// to keep them from being pushed out of the POSMAN window.
|
|
28
|
+
const take = Math.min(offset + limit + 200, 500);
|
|
29
|
+
const [manualRows, adminRows] = await Promise.all([
|
|
30
|
+
promotionModule.listPromotions({}, { ...config, take, skip: 0 }),
|
|
31
|
+
promotionModule.listPromotions({ code: { $not: { $like: `${POSMAN_PREFIX}%` } } }, { ...config, take: 500, skip: 0 }),
|
|
32
|
+
]);
|
|
33
|
+
const manual = (manualRows || []).filter(isPosManualPromotion);
|
|
34
|
+
const admin = (adminRows || []).filter((p) => !isPosManualPromotion(p));
|
|
35
|
+
let combined = [...manual, ...admin].sort((a, b) => {
|
|
36
|
+
const at = new Date(a.created_at ?? 0).getTime();
|
|
37
|
+
const bt = new Date(b.created_at ?? 0).getTime();
|
|
38
|
+
return bt - at;
|
|
30
39
|
});
|
|
31
40
|
if (q) {
|
|
32
|
-
|
|
41
|
+
combined = combined.filter((p) => {
|
|
33
42
|
const hay = [
|
|
34
43
|
p.code,
|
|
35
44
|
p.metadata?.draft_order_id,
|
|
36
45
|
p.metadata?.applied_by,
|
|
37
46
|
String(p.metadata?.amount ?? ""),
|
|
47
|
+
String(p.application_method?.value ?? ""),
|
|
38
48
|
]
|
|
39
49
|
.filter(Boolean)
|
|
40
50
|
.join(" ")
|
|
@@ -42,23 +52,32 @@ async function GET(req, res) {
|
|
|
42
52
|
return hay.includes(q);
|
|
43
53
|
});
|
|
44
54
|
}
|
|
45
|
-
const count =
|
|
46
|
-
const page =
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
p.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
const count = combined.length;
|
|
56
|
+
const page = combined.slice(offset, offset + limit).map((p) => {
|
|
57
|
+
const posManual = isPosManualPromotion(p);
|
|
58
|
+
const method = p.application_method;
|
|
59
|
+
const methodType = method?.type === "percentage" ? "percentage" : method?.type === "fixed" ? "fixed" : null;
|
|
60
|
+
return {
|
|
61
|
+
id: p.id,
|
|
62
|
+
code: p.code,
|
|
63
|
+
status: p.status,
|
|
64
|
+
origin: posManual ? "pos_manual" : "admin",
|
|
65
|
+
// Admin percentage promos have no rupee amount until applied to a cart.
|
|
66
|
+
amount: posManual
|
|
67
|
+
? p.metadata?.amount ?? method?.value ?? null
|
|
68
|
+
: methodType === "fixed"
|
|
69
|
+
? method?.value ?? null
|
|
70
|
+
: null,
|
|
71
|
+
discount_type: posManual ? p.metadata?.discount_type ?? null : methodType,
|
|
72
|
+
discount_value: posManual ? p.metadata?.discount_value ?? null : method?.value ?? null,
|
|
73
|
+
currency_code: p.metadata?.currency_code ?? method?.currency_code ?? null,
|
|
74
|
+
draft_order_id: p.metadata?.draft_order_id ?? null,
|
|
75
|
+
applied_by: posManual ? p.metadata?.applied_by ?? null : "admin",
|
|
76
|
+
applied_at: posManual ? p.metadata?.applied_at ?? p.created_at ?? null : p.created_at ?? null,
|
|
77
|
+
created_at: p.created_at ?? null,
|
|
78
|
+
metadata: p.metadata ?? null,
|
|
79
|
+
};
|
|
80
|
+
});
|
|
62
81
|
res.json({
|
|
63
82
|
manual_discounts: page,
|
|
64
83
|
count,
|
|
@@ -73,4 +92,4 @@ async function GET(req, res) {
|
|
|
73
92
|
});
|
|
74
93
|
}
|
|
75
94
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9tYW51YWwtZGlzY291bnRzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUJBLGtCQWdHQztBQXRIRCxxREFBbUQ7QUFFbkQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFBO0FBVS9CLFNBQVMsb0JBQW9CLENBQUMsQ0FBZTtJQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNqQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssWUFBWSxDQUFBO0FBQzlFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQWMsQ0FBQTtJQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFFOUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxP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
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateDeterministicBarcodeSHA256 = generateDeterministicBarcodeSHA256;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
/**
|
|
9
|
+
* Deterministic EAN-13 Barcode Generator using SHA-256 Hashing.
|
|
10
|
+
* Format: Product Title|Variant Title|Color=White|Size=3-4Y|Weight=200|Width=20|Length=30|Height=2
|
|
11
|
+
*
|
|
12
|
+
* Algorithm Pipeline:
|
|
13
|
+
* Fixed Input String -> SHA-256 -> Numeric Conversion -> 12-Digit Base -> EAN-13 Check Digit -> Final 13-Digit Barcode
|
|
14
|
+
*
|
|
15
|
+
* Output must stay stable: printed labels already carry these values.
|
|
16
|
+
*/
|
|
17
|
+
function generateDeterministicBarcodeSHA256(productTitle, variantTitle, options, weight, width, length, height, prefix = "200" // Standard 3-digit in-store retail prefix
|
|
18
|
+
) {
|
|
19
|
+
const parts = [];
|
|
20
|
+
const pTitle = (productTitle || "").trim();
|
|
21
|
+
if (pTitle)
|
|
22
|
+
parts.push(pTitle);
|
|
23
|
+
const vTitle = (variantTitle || "").trim();
|
|
24
|
+
if (vTitle)
|
|
25
|
+
parts.push(vTitle);
|
|
26
|
+
// Append option attributes (e.g. Color=White|Size=3-4Y)
|
|
27
|
+
if (Array.isArray(options)) {
|
|
28
|
+
options.forEach((opt) => {
|
|
29
|
+
const optTitle = (opt?.option?.title || "").trim();
|
|
30
|
+
const optVal = (opt?.value || "").trim();
|
|
31
|
+
if (optTitle && optVal) {
|
|
32
|
+
parts.push(`${optTitle}=${optVal}`);
|
|
33
|
+
}
|
|
34
|
+
else if (optVal) {
|
|
35
|
+
parts.push(optVal);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// Append physical attributes if present
|
|
40
|
+
if (weight != null && !isNaN(Number(weight)))
|
|
41
|
+
parts.push(`Weight=${weight}`);
|
|
42
|
+
if (width != null && !isNaN(Number(width)))
|
|
43
|
+
parts.push(`Width=${width}`);
|
|
44
|
+
if (length != null && !isNaN(Number(length)))
|
|
45
|
+
parts.push(`Length=${length}`);
|
|
46
|
+
if (height != null && !isNaN(Number(height)))
|
|
47
|
+
parts.push(`Height=${height}`);
|
|
48
|
+
const inputString = parts.join("|");
|
|
49
|
+
// Step 1: Compute SHA-256 Hash
|
|
50
|
+
const sha256Hex = crypto_1.default.createHash("sha256").update(inputString).digest("hex");
|
|
51
|
+
// Step 2: Convert SHA-256 hash slice to 9-digit numeric payload
|
|
52
|
+
const numericVal = BigInt("0x" + sha256Hex.slice(0, 15));
|
|
53
|
+
const payload9Digits = String(numericVal % 1000000000n).padStart(9, "0");
|
|
54
|
+
// Step 3: Create 12-digit base number (3-digit prefix + 9-digit payload)
|
|
55
|
+
const base12 = `${prefix}${payload9Digits}`;
|
|
56
|
+
// Step 4: Calculate EAN-13 Check Digit
|
|
57
|
+
let sum = 0;
|
|
58
|
+
for (let i = 0; i < 12; i++) {
|
|
59
|
+
const digit = parseInt(base12.charAt(i), 10);
|
|
60
|
+
sum += i % 2 === 0 ? digit : digit * 3;
|
|
61
|
+
}
|
|
62
|
+
const checkDigit = (10 - (sum % 10)) % 10;
|
|
63
|
+
// Step 5: Final 13-digit EAN-13 Barcode
|
|
64
|
+
return `${base12}${checkDigit}`;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyY29kZS1lYW4xMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9iYXJjb2RlLWVhbjEzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0JBLGdGQTJEQztBQTNFRCxvREFBMkI7QUFPM0I7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixrQ0FBa0MsQ0FDaEQsWUFBb0IsRUFDcEIsWUFBb0IsRUFDcEIsT0FBdUMsRUFDdkMsTUFBc0IsRUFDdEIsS0FBcUIsRUFDckIsTUFBc0IsRUFDdEIsTUFBc0IsRUFDdEIsTUFBTSxHQUFHLEtBQUssQ0FBQywwQ0FBMEM7O0lBRXpELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUUxQixNQUFNLE1BQU0sR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMxQyxJQUFJLE1BQU07UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTlCLE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzFDLElBQUksTUFBTTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFOUIsd0RBQXdEO0lBQ3hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0QixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ2xELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUN4QyxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztn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
|