@devx-commerce/plugin-gati 0.0.34-beta.58 → 0.0.34-beta.60

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.
@@ -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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