@devx-commerce/plugin-gati 0.0.34-beta.57 → 0.0.34-beta.59
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/erp/webhook/config.js +9 -3
- package/.medusa/server/src/jobs/process-erp-events.js +2 -1
- package/.medusa/server/src/modules/extended-product/service.js +37 -1
- package/.medusa/server/src/modules/extended-variant/service.js +37 -1
- package/.medusa/server/src/subscribers/product-variant-deleted.js +27 -0
- package/.medusa/server/src/subscribers/shipping-info-master.js +6 -2
- package/.medusa/server/src/workflows/daily-rate/index.js +29 -0
- package/.medusa/server/src/workflows/daily-rate/perf.js +89 -0
- package/.medusa/server/src/workflows/daily-rate/steps/fetch-gold-rate-step.js +21 -0
- package/.medusa/server/src/workflows/daily-rate/steps/update-inward-metal-rates-step.js +154 -0
- package/.medusa/server/src/workflows/daily-rate/steps/update-party-style-metal-rates-step.js +213 -0
- package/.medusa/server/src/workflows/daily-rate/steps/update-style-master-metal-rates-step.js +169 -0
- package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +36 -23
- package/.medusa/server/src/workflows/shipping-info-master/workflows/create-or-update-shipping-info.js +59 -0
- package/.medusa/server/src/workflows/shipping-info-master/workflows/index.js +2 -1
- package/package.json +1 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateInwardMetalRatesStep = exports.updateInwardMetalRatesStepId = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const quality_master_1 = require("../../../modules/quality-master");
|
|
6
|
+
const extended_variant_1 = require("../../../modules/extended-variant");
|
|
7
|
+
const perf_1 = require("../perf");
|
|
8
|
+
function computeMetalRates(line, qualityMap, gold24kSaleRate) {
|
|
9
|
+
const clarity = qualityMap.get(line.qly_code);
|
|
10
|
+
if (clarity == null) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const rate = Math.round((gold24kSaleRate * clarity) / 100);
|
|
14
|
+
const amount = Math.round(line.weight * rate);
|
|
15
|
+
return { rate, amount };
|
|
16
|
+
}
|
|
17
|
+
exports.updateInwardMetalRatesStepId = "update-inward-metal-rates-step";
|
|
18
|
+
exports.updateInwardMetalRatesStep = (0, workflows_sdk_1.createStep)(exports.updateInwardMetalRatesStepId, async (input, { container }) => {
|
|
19
|
+
const { gold24kSaleRate } = input;
|
|
20
|
+
const logger = container.resolve("logger");
|
|
21
|
+
const startTime = new Date();
|
|
22
|
+
logger.info(`[DailyRate] Inward update started at ${startTime.toISOString()}`);
|
|
23
|
+
const qualityService = container.resolve(quality_master_1.QUALITY_MASTER_MODULE);
|
|
24
|
+
const evService = container.resolve(extended_variant_1.EXTENDED_VARIANT_MODULE);
|
|
25
|
+
// Build quality map: qly_code → qly_clarity
|
|
26
|
+
const allQualities = await qualityService.listQualityMasters({}, { select: ["qly_code", "qly_clarity"] });
|
|
27
|
+
const qualityMap = new Map();
|
|
28
|
+
for (const q of allQualities) {
|
|
29
|
+
if (q.qly_clarity != null) {
|
|
30
|
+
qualityMap.set(q.qly_code, q.qly_clarity);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Accumulator: jewel_id → aggregated deltas
|
|
34
|
+
const jewelsAccumulator = new Map();
|
|
35
|
+
logger.info(`[DailyRate] Inward update — batchSize=${perf_1.BATCH_SIZE}`);
|
|
36
|
+
const perf = (0, perf_1.createPerfSampler)();
|
|
37
|
+
const batchMetrics = [];
|
|
38
|
+
const lineSnapshots = [];
|
|
39
|
+
let offset = 0;
|
|
40
|
+
let batchIndex = 0;
|
|
41
|
+
while (true) {
|
|
42
|
+
const lines = await evService.listInwardDetailsLines({ raw_type: "Metal" }, {
|
|
43
|
+
take: perf_1.BATCH_SIZE,
|
|
44
|
+
skip: offset,
|
|
45
|
+
order: { id: "ASC" },
|
|
46
|
+
select: [
|
|
47
|
+
"id",
|
|
48
|
+
"jewel_id",
|
|
49
|
+
"weight",
|
|
50
|
+
"qly_code",
|
|
51
|
+
"original_rate",
|
|
52
|
+
"rate",
|
|
53
|
+
"actual_amount",
|
|
54
|
+
"amount",
|
|
55
|
+
"final_amt",
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
if (!lines.length)
|
|
59
|
+
break;
|
|
60
|
+
const lineUpdates = [];
|
|
61
|
+
for (const line of lines) {
|
|
62
|
+
lineSnapshots.push({
|
|
63
|
+
id: line.id,
|
|
64
|
+
original_rate: line.original_rate,
|
|
65
|
+
rate: line.rate,
|
|
66
|
+
actual_amount: line.actual_amount,
|
|
67
|
+
amount: line.amount,
|
|
68
|
+
final_amt: line.final_amt,
|
|
69
|
+
});
|
|
70
|
+
const computed = computeMetalRates(line, qualityMap, gold24kSaleRate);
|
|
71
|
+
if (!computed)
|
|
72
|
+
continue;
|
|
73
|
+
const { rate, amount } = computed;
|
|
74
|
+
const oldAmount = line.amount ?? 0;
|
|
75
|
+
lineUpdates.push({
|
|
76
|
+
id: line.id,
|
|
77
|
+
original_rate: rate,
|
|
78
|
+
rate,
|
|
79
|
+
actual_amount: amount,
|
|
80
|
+
amount,
|
|
81
|
+
final_amt: amount,
|
|
82
|
+
});
|
|
83
|
+
const jewelId = line.jewel_id;
|
|
84
|
+
const acc = jewelsAccumulator.get(jewelId) ?? { mrpDelta: 0 };
|
|
85
|
+
acc.mrpDelta += amount - oldAmount;
|
|
86
|
+
jewelsAccumulator.set(jewelId, acc);
|
|
87
|
+
}
|
|
88
|
+
if (lineUpdates.length) {
|
|
89
|
+
await evService.bulkUpdateByIds("inward_details_line", lineUpdates);
|
|
90
|
+
}
|
|
91
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
92
|
+
batchMetrics.push(await perf.sampleBatch(batchIndex++, lines.length, lineUpdates.length));
|
|
93
|
+
logger.info(`[DailyRate][Inward] batch offset=${offset} lines=${lines.length} lines_updated=${lineUpdates.length}`);
|
|
94
|
+
if (lines.length < perf_1.BATCH_SIZE)
|
|
95
|
+
break;
|
|
96
|
+
offset += perf_1.BATCH_SIZE;
|
|
97
|
+
}
|
|
98
|
+
if (!jewelsAccumulator.size) {
|
|
99
|
+
return new workflows_sdk_1.StepResponse({ lines: lineSnapshots, inwards: [] }, { lines: lineSnapshots, inwards: [] });
|
|
100
|
+
}
|
|
101
|
+
// Load affected inward_masters
|
|
102
|
+
const affectedJewelIds = Array.from(jewelsAccumulator.keys());
|
|
103
|
+
const inwards = await evService.listInwardMasters({ jewel_id: affectedJewelIds }, { select: ["id", "jewel_id", "mrp", "actual_mrp"] });
|
|
104
|
+
const inwardSnapshots = inwards.map((inv) => ({
|
|
105
|
+
id: inv.id,
|
|
106
|
+
mrp: inv.mrp,
|
|
107
|
+
actual_mrp: inv.actual_mrp,
|
|
108
|
+
}));
|
|
109
|
+
const inwardUpdates = [];
|
|
110
|
+
for (const inv of inwards) {
|
|
111
|
+
const acc = jewelsAccumulator.get(inv.jewel_id);
|
|
112
|
+
if (!acc)
|
|
113
|
+
continue;
|
|
114
|
+
inwardUpdates.push({
|
|
115
|
+
id: inv.id,
|
|
116
|
+
mrp: (inv.mrp ?? 0) + acc.mrpDelta,
|
|
117
|
+
actual_mrp: (inv.actual_mrp ?? 0) + acc.mrpDelta,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (inwardUpdates.length) {
|
|
121
|
+
await evService.bulkUpdateByIds("inward_master", inwardUpdates);
|
|
122
|
+
}
|
|
123
|
+
const endTime = new Date();
|
|
124
|
+
const durationMs = endTime.getTime() - startTime.getTime();
|
|
125
|
+
logger.info(`[DailyRate] Inward update completed at ${endTime.toISOString()} (duration: ${durationMs}ms)`);
|
|
126
|
+
perf.summary("Inward", batchMetrics, durationMs, logger);
|
|
127
|
+
const compensationData = {
|
|
128
|
+
lines: lineSnapshots,
|
|
129
|
+
inwards: inwardSnapshots,
|
|
130
|
+
};
|
|
131
|
+
return new workflows_sdk_1.StepResponse(compensationData, compensationData);
|
|
132
|
+
}, async (compensationData, { container }) => {
|
|
133
|
+
if (!compensationData)
|
|
134
|
+
return;
|
|
135
|
+
const evService = container.resolve(extended_variant_1.EXTENDED_VARIANT_MODULE);
|
|
136
|
+
if (compensationData.lines.length) {
|
|
137
|
+
await evService.bulkUpdateByIds("inward_details_line", compensationData.lines.map((l) => ({
|
|
138
|
+
id: l.id,
|
|
139
|
+
original_rate: l.original_rate,
|
|
140
|
+
rate: l.rate,
|
|
141
|
+
actual_amount: l.actual_amount,
|
|
142
|
+
amount: l.amount,
|
|
143
|
+
final_amt: l.final_amt,
|
|
144
|
+
})));
|
|
145
|
+
}
|
|
146
|
+
if (compensationData.inwards.length) {
|
|
147
|
+
await evService.bulkUpdateByIds("inward_master", compensationData.inwards.map((inv) => ({
|
|
148
|
+
id: inv.id,
|
|
149
|
+
mrp: inv.mrp,
|
|
150
|
+
actual_mrp: inv.actual_mrp,
|
|
151
|
+
})));
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWlud2FyZC1tZXRhbC1yYXRlcy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kYWlseS1yYXRlL3N0ZXBzL3VwZGF0ZS1pbndhcmQtbWV0YWwtcmF0ZXMtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0Usb0VBQXdFO0FBRXhFLHdFQUE0RTtBQUc1RSxrQ0FBc0U7QUFzQnRFLFNBQVMsaUJBQWlCLENBQ3hCLElBQTBDLEVBQzFDLFVBQStCLEVBQy9CLGVBQXVCO0lBRXZCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRTlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVZLFFBQUEsNEJBQTRCLEdBQUcsZ0NBQWdDLENBQUM7QUFFaEUsUUFBQSwwQkFBMEIsR0FBRyxJQUFBLDBCQUFVLEVBQ2xELG9DQUE0QixFQUM1QixLQUFLLEVBQUUsS0FBOEIsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdEQsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVsQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLElB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
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updatePartyStyleMetalRatesStep = exports.updatePartyStyleMetalRatesStepId = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const quality_master_1 = require("../../../modules/quality-master");
|
|
7
|
+
const extended_variant_1 = require("../../../modules/extended-variant");
|
|
8
|
+
const perf_1 = require("../perf");
|
|
9
|
+
function computeMetalRates(line, qualityMap, gold24kSaleRate) {
|
|
10
|
+
const clarity = qualityMap.get(line.qly_code);
|
|
11
|
+
if (clarity == null) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const rate = Math.round((gold24kSaleRate * clarity) / 100);
|
|
15
|
+
const amount = Math.round(line.weight * rate);
|
|
16
|
+
return { rate, amount };
|
|
17
|
+
}
|
|
18
|
+
async function syncMedusaPrices(mappingIds, mrpByMappingId, remoteQuery, pricingService) {
|
|
19
|
+
if (!mappingIds.length)
|
|
20
|
+
return;
|
|
21
|
+
const { data: variantsWithPriceSets } = await remoteQuery.graph({
|
|
22
|
+
entity: "product_variant",
|
|
23
|
+
fields: ["id", "price_set.id"],
|
|
24
|
+
filters: { id: mappingIds },
|
|
25
|
+
});
|
|
26
|
+
const priceSetsToUpdate = variantsWithPriceSets
|
|
27
|
+
.filter((v) => v.price_set?.id)
|
|
28
|
+
.map((v) => ({
|
|
29
|
+
id: v.price_set.id,
|
|
30
|
+
prices: [{ amount: mrpByMappingId.get(v.id), currency_code: "inr" }],
|
|
31
|
+
}));
|
|
32
|
+
if (priceSetsToUpdate.length) {
|
|
33
|
+
await pricingService.upsertPriceSets(priceSetsToUpdate);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.updatePartyStyleMetalRatesStepId = "update-party-style-metal-rates-step";
|
|
37
|
+
exports.updatePartyStyleMetalRatesStep = (0, workflows_sdk_1.createStep)(exports.updatePartyStyleMetalRatesStepId, async (input, { container }) => {
|
|
38
|
+
const { gold24kSaleRate } = input;
|
|
39
|
+
const logger = container.resolve("logger");
|
|
40
|
+
const startTime = new Date();
|
|
41
|
+
logger.info(`[DailyRate] Party style update started at ${startTime.toISOString()}`);
|
|
42
|
+
const qualityService = container.resolve(quality_master_1.QUALITY_MASTER_MODULE);
|
|
43
|
+
const evService = container.resolve(extended_variant_1.EXTENDED_VARIANT_MODULE);
|
|
44
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
45
|
+
const pricingService = container.resolve(utils_1.Modules.PRICING);
|
|
46
|
+
// Build quality map: qly_code → qly_clarity
|
|
47
|
+
const allQualities = await qualityService.listQualityMasters({}, { select: ["qly_code", "qly_clarity"] });
|
|
48
|
+
const qualityMap = new Map();
|
|
49
|
+
for (const q of allQualities) {
|
|
50
|
+
if (q.qly_clarity != null) {
|
|
51
|
+
qualityMap.set(q.qly_code, q.qly_clarity);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
logger.info(`[DailyRate] Party style update — batchSize=${perf_1.BATCH_SIZE}`);
|
|
55
|
+
const perf = (0, perf_1.createPerfSampler)();
|
|
56
|
+
const batchMetrics = [];
|
|
57
|
+
const lineSnapshots = [];
|
|
58
|
+
const variantSnapshots = [];
|
|
59
|
+
let offset = 0;
|
|
60
|
+
let batchIndex = 0;
|
|
61
|
+
while (true) {
|
|
62
|
+
// Only process mapped, non-deleted extended_variants
|
|
63
|
+
const variants = await evService.listExtendedVariants({ mapping_id: { $ne: null }, deleted_at: null }, {
|
|
64
|
+
take: perf_1.BATCH_SIZE,
|
|
65
|
+
skip: offset,
|
|
66
|
+
order: { id: "ASC" },
|
|
67
|
+
select: [
|
|
68
|
+
"id",
|
|
69
|
+
"party_style_id",
|
|
70
|
+
"mapping_id",
|
|
71
|
+
"mrp",
|
|
72
|
+
"actual_mrp",
|
|
73
|
+
"metal_total_amount",
|
|
74
|
+
"actual_metal_total_amount",
|
|
75
|
+
"actual_total_amount",
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
if (!variants.length)
|
|
79
|
+
break;
|
|
80
|
+
for (const v of variants) {
|
|
81
|
+
variantSnapshots.push({
|
|
82
|
+
id: v.id,
|
|
83
|
+
mrp: v.mrp,
|
|
84
|
+
actual_mrp: v.actual_mrp,
|
|
85
|
+
metal_total_amount: v.metal_total_amount,
|
|
86
|
+
actual_total_amount: v.actual_total_amount,
|
|
87
|
+
mapping_id: v.mapping_id,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const partyStyleIds = variants.map((v) => v.party_style_id);
|
|
91
|
+
// Get all metal lines for these party styles
|
|
92
|
+
const lines = await evService.listPartyStyleDetailsLines({ party_style_id: partyStyleIds, raw_type: "Metal" }, {
|
|
93
|
+
select: [
|
|
94
|
+
"id",
|
|
95
|
+
"party_style_id",
|
|
96
|
+
"weight",
|
|
97
|
+
"qly_code",
|
|
98
|
+
"original_rate",
|
|
99
|
+
"rate",
|
|
100
|
+
"actual_amount",
|
|
101
|
+
"amount",
|
|
102
|
+
"final_amt",
|
|
103
|
+
],
|
|
104
|
+
});
|
|
105
|
+
const lineUpdates = [];
|
|
106
|
+
const styleAccumulator = new Map();
|
|
107
|
+
for (const line of lines) {
|
|
108
|
+
lineSnapshots.push({
|
|
109
|
+
id: line.id,
|
|
110
|
+
original_rate: line.original_rate,
|
|
111
|
+
rate: line.rate,
|
|
112
|
+
actual_amount: line.actual_amount,
|
|
113
|
+
amount: line.amount,
|
|
114
|
+
final_amt: line.final_amt,
|
|
115
|
+
});
|
|
116
|
+
const computed = computeMetalRates(line, qualityMap, gold24kSaleRate);
|
|
117
|
+
if (!computed)
|
|
118
|
+
continue;
|
|
119
|
+
const { rate, amount } = computed;
|
|
120
|
+
const oldAmount = line.amount ?? 0;
|
|
121
|
+
lineUpdates.push({
|
|
122
|
+
id: line.id,
|
|
123
|
+
original_rate: rate,
|
|
124
|
+
rate,
|
|
125
|
+
actual_amount: amount,
|
|
126
|
+
amount,
|
|
127
|
+
final_amt: amount,
|
|
128
|
+
});
|
|
129
|
+
const partyStyleId = line.party_style_id;
|
|
130
|
+
const acc = styleAccumulator.get(partyStyleId) ?? {
|
|
131
|
+
newMetalTotal: 0,
|
|
132
|
+
mrpDelta: 0,
|
|
133
|
+
};
|
|
134
|
+
acc.newMetalTotal += amount;
|
|
135
|
+
acc.mrpDelta += amount - oldAmount;
|
|
136
|
+
styleAccumulator.set(partyStyleId, acc);
|
|
137
|
+
}
|
|
138
|
+
if (lineUpdates.length) {
|
|
139
|
+
await evService.bulkUpdateByIds("party_style_details_line", lineUpdates);
|
|
140
|
+
}
|
|
141
|
+
// Update extended_variants and sync Medusa prices for this batch
|
|
142
|
+
const variantUpdates = [];
|
|
143
|
+
for (const v of variants) {
|
|
144
|
+
const acc = styleAccumulator.get(v.party_style_id);
|
|
145
|
+
if (!acc)
|
|
146
|
+
continue;
|
|
147
|
+
const nextMrp = (v.mrp ?? 0) + acc.mrpDelta;
|
|
148
|
+
variantUpdates.push({
|
|
149
|
+
id: v.id,
|
|
150
|
+
mapping_id: v.mapping_id,
|
|
151
|
+
metal_total_amount: acc.newMetalTotal,
|
|
152
|
+
actual_metal_total_amount: acc.newMetalTotal,
|
|
153
|
+
mrp: nextMrp,
|
|
154
|
+
actual_mrp: (v.actual_mrp ?? v.mrp ?? 0) + acc.mrpDelta,
|
|
155
|
+
actual_total_amount: (v.actual_total_amount ?? v.mrp ?? 0) + acc.mrpDelta,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (variantUpdates.length) {
|
|
159
|
+
await evService.bulkUpdateByIds("extended_variant", variantUpdates.map(({ mapping_id: _m, ...fields }) => fields));
|
|
160
|
+
// Update Medusa price sets directly — bypasses updateProductVariantsWorkflow
|
|
161
|
+
// to avoid emitting product-variant.updated per variant and workflow overhead.
|
|
162
|
+
const mrpByMappingId = new Map(variantUpdates.map((u) => [u.mapping_id, u.mrp]));
|
|
163
|
+
await syncMedusaPrices(variantUpdates.map((u) => u.mapping_id), mrpByMappingId, remoteQuery, pricingService);
|
|
164
|
+
}
|
|
165
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
166
|
+
batchMetrics.push(await perf.sampleBatch(batchIndex++, variants.length, lineUpdates.length));
|
|
167
|
+
logger.info(`[DailyRate][PartyStyle] batch offset=${offset} variants=${variants.length} lines_updated=${lineUpdates.length} prices_synced=${variantUpdates.length}`);
|
|
168
|
+
if (variants.length < perf_1.BATCH_SIZE)
|
|
169
|
+
break;
|
|
170
|
+
offset += perf_1.BATCH_SIZE;
|
|
171
|
+
}
|
|
172
|
+
const endTime = new Date();
|
|
173
|
+
const durationMs = endTime.getTime() - startTime.getTime();
|
|
174
|
+
logger.info(`[DailyRate] Party style update completed at ${endTime.toISOString()} (duration: ${durationMs}ms)`);
|
|
175
|
+
perf.summary("PartyStyle", batchMetrics, durationMs, logger);
|
|
176
|
+
const compensationData = {
|
|
177
|
+
lines: lineSnapshots,
|
|
178
|
+
variants: variantSnapshots,
|
|
179
|
+
};
|
|
180
|
+
return new workflows_sdk_1.StepResponse(compensationData, compensationData);
|
|
181
|
+
}, async (compensationData, { container }) => {
|
|
182
|
+
if (!compensationData)
|
|
183
|
+
return;
|
|
184
|
+
const evService = container.resolve(extended_variant_1.EXTENDED_VARIANT_MODULE);
|
|
185
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
186
|
+
const pricingService = container.resolve(utils_1.Modules.PRICING);
|
|
187
|
+
if (compensationData.lines.length) {
|
|
188
|
+
await evService.bulkUpdateByIds("party_style_details_line", compensationData.lines.map((l) => ({
|
|
189
|
+
id: l.id,
|
|
190
|
+
original_rate: l.original_rate,
|
|
191
|
+
rate: l.rate,
|
|
192
|
+
actual_amount: l.actual_amount,
|
|
193
|
+
amount: l.amount,
|
|
194
|
+
final_amt: l.final_amt,
|
|
195
|
+
})));
|
|
196
|
+
}
|
|
197
|
+
if (compensationData.variants.length) {
|
|
198
|
+
await evService.bulkUpdateByIds("extended_variant", compensationData.variants.map((v) => ({
|
|
199
|
+
id: v.id,
|
|
200
|
+
mrp: v.mrp,
|
|
201
|
+
actual_mrp: v.actual_mrp,
|
|
202
|
+
metal_total_amount: v.metal_total_amount,
|
|
203
|
+
actual_metal_total_amount: v.metal_total_amount,
|
|
204
|
+
actual_total_amount: v.actual_total_amount,
|
|
205
|
+
})));
|
|
206
|
+
const variantsWithMapping = compensationData.variants.filter((v) => v.mapping_id);
|
|
207
|
+
if (variantsWithMapping.length) {
|
|
208
|
+
const mrpByMappingId = new Map(variantsWithMapping.map((v) => [v.mapping_id, v.mrp]));
|
|
209
|
+
await syncMedusaPrices(variantsWithMapping.map((v) => v.mapping_id), mrpByMappingId, remoteQuery, pricingService);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXBhcnR5LXN0eWxlLW1ldGFsLXJhdGVzLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2RhaWx5LXJhdGUvc3RlcHMvdXBkYXRlLXBhcnR5LXN0eWxlLW1ldGFsLXJhdGVzLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTZFO0FBQzdFLHFEQUErRTtBQUUvRSxvRUFBd0U7QUFFeEUsd0VBQTRFO0FBRzVFLGtDQUFzRTtBQXlCdEUsU0FBUyxpQkFBaUIsQ0FDeEIsSUFBMEMsRUFDMUMsVUFBK0IsRUFDL0IsZUFBdUI7SUFFdkIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixVQUFvQixFQUNwQixjQUFtQyxFQUNuQyxXQUFnQixFQUNoQixjQUFxQztJQUVyQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07UUFBRSxPQUFPO0lBRS9CLE1BQU0sRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDOUQsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVB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
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateStyleMasterMetalRatesStep = exports.updateStyleMasterMetalRatesStepId = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const quality_master_1 = require("../../../modules/quality-master");
|
|
6
|
+
const extended_product_1 = require("../../../modules/extended-product");
|
|
7
|
+
const perf_1 = require("../perf");
|
|
8
|
+
function computeMetalRates(line, qualityMap, gold24kSaleRate) {
|
|
9
|
+
const clarity = qualityMap.get(line.qly_code);
|
|
10
|
+
if (clarity == null) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const rate = Math.round((gold24kSaleRate * clarity) / 100);
|
|
14
|
+
const amount = Math.round(line.weight * rate);
|
|
15
|
+
return { rate, amount };
|
|
16
|
+
}
|
|
17
|
+
exports.updateStyleMasterMetalRatesStepId = "update-style-master-metal-rates-step";
|
|
18
|
+
exports.updateStyleMasterMetalRatesStep = (0, workflows_sdk_1.createStep)(exports.updateStyleMasterMetalRatesStepId, async (input, { container }) => {
|
|
19
|
+
const { gold24kSaleRate } = input;
|
|
20
|
+
const logger = container.resolve("logger");
|
|
21
|
+
const startTime = new Date();
|
|
22
|
+
logger.info(`[DailyRate] Style master update started at ${startTime.toISOString()}`);
|
|
23
|
+
const qualityService = container.resolve(quality_master_1.QUALITY_MASTER_MODULE);
|
|
24
|
+
const epService = container.resolve(extended_product_1.EXTENDED_PRODUCT_MODULE);
|
|
25
|
+
// Build quality map: qly_code → qly_clarity
|
|
26
|
+
const allQualities = await qualityService.listQualityMasters({}, { select: ["qly_code", "qly_clarity"] });
|
|
27
|
+
const qualityMap = new Map();
|
|
28
|
+
for (const q of allQualities) {
|
|
29
|
+
if (q.qly_clarity != null) {
|
|
30
|
+
qualityMap.set(q.qly_code, q.qly_clarity);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Accumulator: style_id → aggregated values
|
|
34
|
+
const styleAccumulator = new Map();
|
|
35
|
+
logger.info(`[DailyRate] Style master update — batchSize=${perf_1.BATCH_SIZE}`);
|
|
36
|
+
const perf = (0, perf_1.createPerfSampler)();
|
|
37
|
+
const batchMetrics = [];
|
|
38
|
+
const lineSnapshots = [];
|
|
39
|
+
let offset = 0;
|
|
40
|
+
let batchIndex = 0;
|
|
41
|
+
while (true) {
|
|
42
|
+
const lines = await epService.listStyleDetailsLines({ raw_type: "Metal" }, {
|
|
43
|
+
take: perf_1.BATCH_SIZE,
|
|
44
|
+
skip: offset,
|
|
45
|
+
order: { id: "ASC" },
|
|
46
|
+
select: [
|
|
47
|
+
"id",
|
|
48
|
+
"style_id",
|
|
49
|
+
"weight",
|
|
50
|
+
"qly_code",
|
|
51
|
+
"original_rate",
|
|
52
|
+
"rate",
|
|
53
|
+
"actual_amount",
|
|
54
|
+
"amount",
|
|
55
|
+
"final_amt",
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
if (!lines.length)
|
|
59
|
+
break;
|
|
60
|
+
const lineUpdates = [];
|
|
61
|
+
for (const line of lines) {
|
|
62
|
+
lineSnapshots.push({
|
|
63
|
+
id: line.id,
|
|
64
|
+
original_rate: line.original_rate,
|
|
65
|
+
rate: line.rate,
|
|
66
|
+
actual_amount: line.actual_amount,
|
|
67
|
+
amount: line.amount,
|
|
68
|
+
final_amt: line.final_amt,
|
|
69
|
+
});
|
|
70
|
+
const computed = computeMetalRates(line, qualityMap, gold24kSaleRate);
|
|
71
|
+
if (!computed)
|
|
72
|
+
continue;
|
|
73
|
+
const { rate, amount } = computed;
|
|
74
|
+
const oldAmount = line.amount ?? 0;
|
|
75
|
+
lineUpdates.push({
|
|
76
|
+
id: line.id,
|
|
77
|
+
original_rate: rate,
|
|
78
|
+
rate,
|
|
79
|
+
actual_amount: amount,
|
|
80
|
+
amount,
|
|
81
|
+
final_amt: amount,
|
|
82
|
+
});
|
|
83
|
+
const styleId = line.style_id;
|
|
84
|
+
const acc = styleAccumulator.get(styleId) ?? {
|
|
85
|
+
newMetalTotal: 0,
|
|
86
|
+
mrpDelta: 0,
|
|
87
|
+
};
|
|
88
|
+
acc.newMetalTotal += amount;
|
|
89
|
+
acc.mrpDelta += amount - oldAmount;
|
|
90
|
+
styleAccumulator.set(styleId, acc);
|
|
91
|
+
}
|
|
92
|
+
if (lineUpdates.length) {
|
|
93
|
+
await epService.bulkUpdateByIds("style_details_line", lineUpdates);
|
|
94
|
+
}
|
|
95
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
96
|
+
batchMetrics.push(await perf.sampleBatch(batchIndex++, lines.length, lineUpdates.length));
|
|
97
|
+
logger.info(`[DailyRate][StyleMaster] batch offset=${offset} lines=${lines.length} lines_updated=${lineUpdates.length}`);
|
|
98
|
+
if (lines.length < perf_1.BATCH_SIZE)
|
|
99
|
+
break;
|
|
100
|
+
offset += perf_1.BATCH_SIZE;
|
|
101
|
+
}
|
|
102
|
+
if (!styleAccumulator.size) {
|
|
103
|
+
return new workflows_sdk_1.StepResponse({ lines: lineSnapshots, products: [] }, { lines: lineSnapshots, products: [] });
|
|
104
|
+
}
|
|
105
|
+
// Load affected extended_products
|
|
106
|
+
const affectedStyleIds = Array.from(styleAccumulator.keys());
|
|
107
|
+
const products = await epService.listExtendedProducts({ style_id: affectedStyleIds }, {
|
|
108
|
+
select: [
|
|
109
|
+
"id",
|
|
110
|
+
"style_id",
|
|
111
|
+
"mrp",
|
|
112
|
+
"actual_mrp",
|
|
113
|
+
"metal_total_amount",
|
|
114
|
+
],
|
|
115
|
+
});
|
|
116
|
+
const productSnapshots = products.map((p) => ({
|
|
117
|
+
id: p.id,
|
|
118
|
+
mrp: p.mrp,
|
|
119
|
+
actual_mrp: p.actual_mrp,
|
|
120
|
+
metal_total_amount: p.metal_total_amount,
|
|
121
|
+
}));
|
|
122
|
+
const productUpdates = [];
|
|
123
|
+
for (const p of products) {
|
|
124
|
+
const acc = styleAccumulator.get(p.style_id);
|
|
125
|
+
if (!acc)
|
|
126
|
+
continue;
|
|
127
|
+
productUpdates.push({
|
|
128
|
+
id: p.id,
|
|
129
|
+
metal_total_amount: acc.newMetalTotal,
|
|
130
|
+
mrp: (p.mrp ?? 0) + acc.mrpDelta,
|
|
131
|
+
actual_mrp: (p.actual_mrp ?? 0) + acc.mrpDelta,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (productUpdates.length) {
|
|
135
|
+
await epService.bulkUpdateByIds("extended_product", productUpdates);
|
|
136
|
+
}
|
|
137
|
+
const endTime = new Date();
|
|
138
|
+
const durationMs = endTime.getTime() - startTime.getTime();
|
|
139
|
+
logger.info(`[DailyRate] Style master update completed at ${endTime.toISOString()} (duration: ${durationMs}ms)`);
|
|
140
|
+
perf.summary("StyleMaster", batchMetrics, durationMs, logger);
|
|
141
|
+
const compensationData = {
|
|
142
|
+
lines: lineSnapshots,
|
|
143
|
+
products: productSnapshots,
|
|
144
|
+
};
|
|
145
|
+
return new workflows_sdk_1.StepResponse(compensationData, compensationData);
|
|
146
|
+
}, async (compensationData, { container }) => {
|
|
147
|
+
if (!compensationData)
|
|
148
|
+
return;
|
|
149
|
+
const epService = container.resolve(extended_product_1.EXTENDED_PRODUCT_MODULE);
|
|
150
|
+
if (compensationData.lines.length) {
|
|
151
|
+
await epService.bulkUpdateByIds("style_details_line", compensationData.lines.map((l) => ({
|
|
152
|
+
id: l.id,
|
|
153
|
+
original_rate: l.original_rate,
|
|
154
|
+
rate: l.rate,
|
|
155
|
+
actual_amount: l.actual_amount,
|
|
156
|
+
amount: l.amount,
|
|
157
|
+
final_amt: l.final_amt,
|
|
158
|
+
})));
|
|
159
|
+
}
|
|
160
|
+
if (compensationData.products.length) {
|
|
161
|
+
await epService.bulkUpdateByIds("extended_product", compensationData.products.map((p) => ({
|
|
162
|
+
id: p.id,
|
|
163
|
+
mrp: p.mrp,
|
|
164
|
+
actual_mrp: p.actual_mrp,
|
|
165
|
+
metal_total_amount: p.metal_total_amount,
|
|
166
|
+
})));
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0eWxlLW1hc3Rlci1tZXRhbC1yYXRlcy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kYWlseS1yYXRlL3N0ZXBzL3VwZGF0ZS1zdHlsZS1tYXN0ZXItbWV0YWwtcmF0ZXMtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFDN0Usb0VBQXdFO0FBRXhFLHdFQUE0RTtBQUc1RSxrQ0FBc0U7QUF1QnRFLFNBQVMsaUJBQWlCLENBQ3hCLElBQTBDLEVBQzFDLFVBQStCLEVBQy9CLGVBQXVCO0lBRXZCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRTlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVZLFFBQUEsaUNBQWlDLEdBQzVDLHNDQUFzQyxDQUFDO0FBRTVCLFFBQUEsK0JBQStCLEdBQUcsSUFBQSwwQkFBVSxFQUN2RCx5Q0FBaUMsRUFDakMsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3RELE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFN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
|