@devx-commerce/plugin-gati 0.0.34-beta.21 → 0.0.34-beta.22

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.
Files changed (57) hide show
  1. package/.medusa/server/src/api/pos/gold-rate/route.js +15 -9
  2. package/.medusa/server/src/jobs/sync-labour-chart-master.js +20 -0
  3. package/.medusa/server/src/jobs/sync-order-erp.js +2 -2
  4. package/.medusa/server/src/jobs/sync-payment-book-master.js +63 -0
  5. package/.medusa/server/src/jobs/sync-rate-chart-master.js +20 -0
  6. package/.medusa/server/src/links/jewel-trans-master.js +13 -0
  7. package/.medusa/server/src/links/order-master.js +13 -0
  8. package/.medusa/server/src/modules/erp/service.js +118 -4
  9. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251210112341.js +18 -0
  10. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +2 -2
  11. package/.medusa/server/src/modules/jewel-trans-master/index.js +13 -0
  12. package/.medusa/server/src/modules/jewel-trans-master/migrations/Migration20260101104355.js +51 -0
  13. package/.medusa/server/src/modules/jewel-trans-master/models/jewel-trans-master.js +151 -0
  14. package/.medusa/server/src/modules/jewel-trans-master/service.js +16 -0
  15. package/.medusa/server/src/modules/labour-chart-master/index.js +13 -0
  16. package/.medusa/server/src/modules/labour-chart-master/migrations/Migration20260101081502.js +15 -0
  17. package/.medusa/server/src/modules/labour-chart-master/models/labour-chart-master.js +16 -0
  18. package/.medusa/server/src/modules/labour-chart-master/service.js +10 -0
  19. package/.medusa/server/src/modules/order-master/index.js +13 -0
  20. package/.medusa/server/src/modules/order-master/migrations/Migration20251204071941.js +27 -0
  21. package/.medusa/server/src/modules/order-master/models/order-master.js +97 -0
  22. package/.medusa/server/src/modules/order-master/service.js +12 -0
  23. package/.medusa/server/src/modules/payment-book-master/index.js +13 -0
  24. package/.medusa/server/src/modules/payment-book-master/migrations/Migration20251203105358.js +15 -0
  25. package/.medusa/server/src/modules/payment-book-master/models/payment-book-master.js +12 -0
  26. package/.medusa/server/src/modules/payment-book-master/service.js +10 -0
  27. package/.medusa/server/src/modules/rate-chart-master/index.js +13 -0
  28. package/.medusa/server/src/modules/rate-chart-master/migrations/Migration20260101081500.js +15 -0
  29. package/.medusa/server/src/modules/rate-chart-master/models/rate-chart-master.js +13 -0
  30. package/.medusa/server/src/modules/rate-chart-master/service.js +10 -0
  31. package/.medusa/server/src/subscribers/order-item-update.js +11 -0
  32. package/.medusa/server/src/workflows/jewel-trans-master/index.js +18 -0
  33. package/.medusa/server/src/workflows/jewel-trans-master/steps/create-or-update-jewel-trans-master.js +370 -0
  34. package/.medusa/server/src/workflows/jewel-trans-master/steps/index.js +18 -0
  35. package/.medusa/server/src/workflows/labour-chart-master/index.js +11 -0
  36. package/.medusa/server/src/workflows/labour-chart-master/steps/create-or-update-labour-chart-master.js +38 -0
  37. package/.medusa/server/src/workflows/labour-chart-master/steps/fetch-labour-chart.js +31 -0
  38. package/.medusa/server/src/workflows/order-master/index.js +3 -0
  39. package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +239 -0
  40. package/.medusa/server/src/workflows/orders/steps/get-today-gold-rate-step.js +77 -0
  41. package/.medusa/server/src/workflows/orders/steps/index.js +3 -1
  42. package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +171 -0
  43. package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +245 -9
  44. package/.medusa/server/src/workflows/orders/utils/order-helper.js +112 -28
  45. package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
  46. package/.medusa/server/src/workflows/orders/workflows/index.js +2 -1
  47. package/.medusa/server/src/workflows/orders/workflows/sync-advanve-payment-to-erp.js +21 -0
  48. package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +28 -4
  49. package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +2 -2
  50. package/.medusa/server/src/workflows/payment-book-master/index.js +11 -0
  51. package/.medusa/server/src/workflows/payment-book-master/steps/create-or-update-payment-book-master.js +31 -0
  52. package/.medusa/server/src/workflows/payment-book-master/steps/fetch-payment-book.js +64 -0
  53. package/.medusa/server/src/workflows/rate-chart-master/index.js +11 -0
  54. package/.medusa/server/src/workflows/rate-chart-master/steps/create-or-update-rate-chart-master.js +27 -0
  55. package/.medusa/server/src/workflows/rate-chart-master/steps/fetch-rate-chart.js +31 -0
  56. package/package.json +1 -1
  57. package/.medusa/server/development/erp-order-payload-example.js +0 -76
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOrderMaster = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const order_master_1 = require("../../../modules/order-master");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const framework_1 = require("@medusajs/framework");
8
+ exports.createOrderMaster = (0, workflows_sdk_1.createStep)("create-order-master-step", async (input, { container }) => {
9
+ const orderMasterService = container.resolve(order_master_1.ORDER_MASTER_MODULE);
10
+ const erpService = container.resolve("erp");
11
+ const orderData = await erpService.getMasterData("order", input.order_id);
12
+ if (!orderData) {
13
+ framework_1.logger.info(`No order data received for OrderID ${input.order_id}`);
14
+ return new workflows_sdk_1.StepResponse();
15
+ }
16
+ const masters = await Promise.all([orderData].map(async (data) => {
17
+ const existing = await orderMasterService.listOrderMasters({
18
+ erp_order_id: String(input.order_id),
19
+ });
20
+ let master;
21
+ if (existing?.length > 0) {
22
+ // Update existing order master
23
+ framework_1.logger.info(`Updating Order ${input.order_id} - already exists.`);
24
+ master = existing[0];
25
+ await orderMasterService.updateOrderMasters({
26
+ id: master.id,
27
+ erp_order_id: data.OrderId,
28
+ branch_no: data.BranchNo,
29
+ branch_name: data.BranchName,
30
+ order_prefix: data.OrderPrefix,
31
+ order_no: data.OrderNo,
32
+ order_date: data.OrderDate,
33
+ customer_id: data.CustomerId,
34
+ customer_name: data.Customer,
35
+ po_no: data.PoNo,
36
+ po_date: data.PoDate,
37
+ sales_person: data.SalesPerson,
38
+ work_order_no: data.WorkOrderNo,
39
+ remarks: data.Remarks,
40
+ shipping_id: data.ShippingId,
41
+ promocode_series_id: data.PromocodeSeriesId,
42
+ promocode: data.Promocode,
43
+ promocode_percentage: data.PromocodePercentage,
44
+ promocode_amount: data.PromocodeAmount,
45
+ });
46
+ // Handle order details - update existing or create new
47
+ if (data?.OrderDetail?.length) {
48
+ for (const d of data.OrderDetail) {
49
+ const existingDetail = await orderMasterService.listOrderDetailMasters({
50
+ erp_order_id: d.OrderId,
51
+ order_item_id: d.OrderItemId,
52
+ order_master: master.id,
53
+ });
54
+ const detailData = {
55
+ erp_order_id: d.OrderId,
56
+ order_item_id: d.OrderItemId,
57
+ order_master: master.id,
58
+ sr_no: d.SrNo,
59
+ style_id: d.StyleId,
60
+ style_code: d.StyleCode,
61
+ party_style_id: d.PartyStyleId,
62
+ party_style_code: d.PartyStyleCode ?? null,
63
+ jewel_id: d.JewelId,
64
+ jewel_code: d.JewelCode,
65
+ item_size_id: d.ItemSizeId,
66
+ item_size: d.ItemSize,
67
+ item_size_name: d.ItemSizeName,
68
+ order_qty: d.OrderQty,
69
+ order_item_pcs: d.OrderItemPcs,
70
+ metal_item_id: d.MetalItemId,
71
+ metal: d.Metal,
72
+ metal_name: d.MetalName,
73
+ metal_tone_no: d.MetalToneNo,
74
+ tone: d.Tone,
75
+ tone_name: d.ToneName,
76
+ priority_id: d.PriorityId,
77
+ priority: d.Priority,
78
+ priority_name: d.PriorityName,
79
+ stock_type_no: d.StockTypeNo,
80
+ stock_type: d.StockType,
81
+ stock_type_code: d.StockTypeCode,
82
+ make_type_no: d.MakeTypeNo,
83
+ make_type: d.MakeType,
84
+ make_type_code: d.MakeTypeCode,
85
+ expected_delivery_date: d.Expecteddeliverydate,
86
+ mrp: d.MRP,
87
+ };
88
+ if (existingDetail?.length > 0) {
89
+ await orderMasterService.updateOrderDetailMasters({
90
+ id: existingDetail[0].id,
91
+ ...detailData,
92
+ });
93
+ }
94
+ else {
95
+ await orderMasterService.createOrderDetailMasters(detailData);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ else {
101
+ // Create new order master
102
+ framework_1.logger.info(`Creating new Order ${input.order_id}.`);
103
+ master = await orderMasterService.createOrderMasters({
104
+ erp_order_id: data.OrderId,
105
+ branch_no: data.BranchNo,
106
+ branch_name: data.BranchName,
107
+ order_prefix: data.OrderPrefix,
108
+ order_no: data.OrderNo,
109
+ order_date: data.OrderDate,
110
+ customer_id: data.CustomerId,
111
+ customer_name: data.Customer,
112
+ po_no: data.PoNo,
113
+ po_date: data.PoDate,
114
+ sales_person: data.SalesPerson,
115
+ work_order_no: data.WorkOrderNo,
116
+ remarks: data.Remarks,
117
+ shipping_id: data.ShippingId,
118
+ promocode_series_id: data.PromocodeSeriesId,
119
+ promocode: data.Promocode,
120
+ promocode_percentage: data.PromocodePercentage,
121
+ promocode_amount: data.PromocodeAmount,
122
+ });
123
+ // Create order details
124
+ if (data?.OrderDetail?.length) {
125
+ await orderMasterService.createOrderDetailMasters(data.OrderDetail.map((d) => ({
126
+ erp_order_id: d.OrderId,
127
+ order_item_id: d.OrderItemId,
128
+ order_master: master.id,
129
+ sr_no: d.SrNo,
130
+ style_id: d.StyleId,
131
+ style_code: d.StyleCode,
132
+ party_style_id: d.PartyStyleId,
133
+ party_style_code: d.PartyStyleCode ?? null,
134
+ jewel_id: d.JewelId,
135
+ jewel_code: d.JewelCode,
136
+ item_size_id: d.ItemSizeId,
137
+ item_size: d.ItemSize,
138
+ item_size_name: d.ItemSizeName,
139
+ order_qty: d.OrderQty,
140
+ order_item_pcs: d.OrderItemPcs,
141
+ metal_item_id: d.MetalItemId,
142
+ metal: d.Metal,
143
+ metal_name: d.MetalName,
144
+ metal_tone_no: d.MetalToneNo,
145
+ tone: d.Tone,
146
+ tone_name: d.ToneName,
147
+ priority_id: d.PriorityId,
148
+ priority: d.Priority,
149
+ priority_name: d.PriorityName,
150
+ stock_type_no: d.StockTypeNo,
151
+ stock_type: d.StockType,
152
+ stock_type_code: d.StockTypeCode,
153
+ make_type_no: d.MakeTypeNo,
154
+ make_type: d.MakeType,
155
+ make_type_code: d.MakeTypeCode,
156
+ expected_delivery_date: d.Expecteddeliverydate,
157
+ mrp: d.MRP,
158
+ })));
159
+ }
160
+ }
161
+ // Handle order payments - check if exists, update or create
162
+ if (data?.PaymentOption?.length) {
163
+ framework_1.logger.info(`Processing ${data.PaymentOption.length} payment(s) for Order ${input.order_id}`);
164
+ for (const p of data.PaymentOption) {
165
+ // Check if payment exists - try multiple matching strategies
166
+ let existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
167
+ erp_order_id: p.OrderId,
168
+ voucher_entry_id: p.VoucherEntryId,
169
+ trans_no: p.TransNo,
170
+ order_master: master.id,
171
+ });
172
+ // If not found and trans_no exists, try without trans_no as fallback
173
+ if (existingPayment?.length === 0 && p.TransNo) {
174
+ existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
175
+ erp_order_id: p.OrderId,
176
+ voucher_entry_id: p.VoucherEntryId,
177
+ order_master: master.id,
178
+ });
179
+ }
180
+ const paymentData = {
181
+ erp_order_id: p.OrderId,
182
+ book_name: p.BookName,
183
+ order_master: master.id,
184
+ voucher_entry_id: p.VoucherEntryId,
185
+ trans_prefix: p.TransPrefix,
186
+ trans_no: p.TransNo,
187
+ transaction_date: p.TransactionDate,
188
+ doc_no: p.DocNo,
189
+ remarks: p.Remarks,
190
+ amount: p.Amount,
191
+ };
192
+ if (existingPayment?.length > 0) {
193
+ // Payment exists, update it
194
+ framework_1.logger.info(`Updating payment for Order ${input.order_id} - VoucherEntryId: ${p.VoucherEntryId}, TransNo: ${p.TransNo || 'N/A'}`);
195
+ await orderMasterService.updateOrderPaymentOptionMasters({
196
+ id: existingPayment[0].id,
197
+ ...paymentData,
198
+ });
199
+ }
200
+ else {
201
+ // Payment doesn't exist, create it
202
+ framework_1.logger.info(`Creating new payment for Order ${input.order_id} - VoucherEntryId: ${p.VoucherEntryId}, TransNo: ${p.TransNo || 'N/A'}`);
203
+ await orderMasterService.createOrderPaymentOptionMasters(paymentData);
204
+ }
205
+ }
206
+ }
207
+ return master;
208
+ }));
209
+ const createdMasters = masters.filter(Boolean);
210
+ if (createdMasters.length === 0) {
211
+ framework_1.logger.info(`No order master was processed`);
212
+ return new workflows_sdk_1.StepResponse();
213
+ }
214
+ const master = createdMasters[0];
215
+ // Create or update link between order_master and order
216
+ const link = container.resolve("link");
217
+ try {
218
+ await link.create({
219
+ [order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master?.id },
220
+ [utils_1.Modules.ORDER]: { order_id: input.id },
221
+ });
222
+ framework_1.logger.info(`Link created between order_master ${master.id} and order ${input.id}`);
223
+ }
224
+ catch (linkError) {
225
+ // If link already exists, that's okay - continue
226
+ if (linkError?.message?.includes("Cannot create multiple links") ||
227
+ linkError?.message?.includes("already exists") ||
228
+ linkError?.code === "23505" ||
229
+ linkError?.name === "UniqueConstraintViolationError") {
230
+ framework_1.logger.info(`Link already exists between order_master ${master.id} and order ${input.id}`);
231
+ }
232
+ else {
233
+ // Re-throw if it's a different error
234
+ throw linkError;
235
+ }
236
+ }
237
+ return new workflows_sdk_1.StepResponse(master);
238
+ });
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLXVwZGF0ZS1vcmRlci1tYXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVyLW1hc3Rlci9zdGVwcy9jcmVhdGUtb3ItdXBkYXRlLW9yZGVyLW1hc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFFN0UsZ0VBQW9FO0FBQ3BFLHFEQUFvRDtBQUVwRCxtREFBNkM7QUFRaEMsUUFBQSxpQkFBaUIsR0FBRyxJQUFBLDBCQUFVLEVBQ3pDLDBCQUEwQixFQUMxQixLQUFLLEVBQUUsS0FBaUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFekQsTUFBTSxrQkFBa0IsR0FBdUIsU0FBUyxDQUFDLE9BQU8sQ0FDOUQsa0NBQW1CLENBQ3BCLENBQUM7SUFDRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBcUIsQ0FBQztJQUNoRSxNQUFNLFNBQVMsR0FBTyxNQUFNLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUc5RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixrQkFBTSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEUsT0FBTyxJQUFJLDRCQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUMvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDckMsQ0FBQyxDQUFDO1FBRUgs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
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTodayGoldRateStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const framework_1 = require("@medusajs/framework");
7
+ const erp_1 = require("../../../modules/erp");
8
+ const quality_master_1 = require("../../../modules/quality-master");
9
+ const build_redis_key_1 = require("../../../utils/build-redis-key");
10
+ exports.getTodayGoldRateStep = (0, workflows_sdk_1.createStep)("get-today-gold-rate-step", async (_, { container }) => {
11
+ const cacheService = container.resolve(utils_1.Modules.CACHE);
12
+ const erpService = container.resolve(erp_1.ERP_MODULE);
13
+ const qualityMasterService = container.resolve(quality_master_1.QUALITY_MASTER_MODULE);
14
+ const cacheKey = (0, build_redis_key_1.buildRedisKey)("pos:gold-rate", {});
15
+ const cachedResult = await cacheService.get(cacheKey);
16
+ if (cachedResult) {
17
+ framework_1.logger.info("[POS-GOLD-RATE] : Returning cached result");
18
+ return new workflows_sdk_1.StepResponse(cachedResult);
19
+ }
20
+ framework_1.logger.info("[POS-GOLD-RATE] : Cache miss, fetching from ERP and quality master");
21
+ // Fetch all quality masters for all purities (14, 18, 22) to calculate rates correctly
22
+ let qly14, qly18, qly22;
23
+ try {
24
+ [qly14, qly18, qly22] = await Promise.all([
25
+ qualityMasterService.listQualityMasters({
26
+ qly_code: "14",
27
+ }).then((result) => result?.[0] || null),
28
+ qualityMasterService.listQualityMasters({
29
+ qly_code: "18",
30
+ }).then((result) => result?.[0] || null),
31
+ qualityMasterService.listQualityMasters({
32
+ qly_code: "22",
33
+ }).then((result) => result?.[0] || null),
34
+ ]);
35
+ }
36
+ catch (queryError) {
37
+ framework_1.logger.error(`[POS-GOLD-RATE] : Error querying quality masters: ${queryError?.message || JSON.stringify(queryError)}`);
38
+ throw new Error(`Failed to fetch quality masters: ${queryError?.message || "Unknown error"}`);
39
+ }
40
+ if (!qly22?.qly_mfg_clarity ||
41
+ !qly18?.qly_mfg_clarity ||
42
+ !qly14?.qly_mfg_clarity) {
43
+ framework_1.logger.error("[POS-GOLD-RATE] : Quality masters for 14/18/22 karat not found or missing qly_mfg_clarity");
44
+ throw new Error("Quality masters for 14/18/22 karat not found or missing qly_mfg_clarity");
45
+ }
46
+ const goldRateData = (await erpService.getGoldRateData());
47
+ if (!goldRateData?.CurrentGoldRate ||
48
+ goldRateData.CurrentGoldRate.length === 0) {
49
+ framework_1.logger.error("[POS-GOLD-RATE] : No gold rate data available from ERP");
50
+ throw new Error("No gold rate data available from ERP");
51
+ }
52
+ const purity = ["14", "18", "22", "24"];
53
+ const qlyMap = {
54
+ "14": qly14,
55
+ "18": qly18,
56
+ "22": qly22,
57
+ "24": { qly_mfg_clarity: 100 }, // 24K is always 100% purity
58
+ };
59
+ const currentGoldData = goldRateData.CurrentGoldRate?.find((item) => item.RawName === "GOLD");
60
+ const goldRateList = purity
61
+ .map((karat) => {
62
+ const qly = qlyMap[karat];
63
+ if (!qly) {
64
+ return null;
65
+ }
66
+ return {
67
+ rate: `${karat}K`,
68
+ amount: ((currentGoldData?.SaleRate || 0) * qly.qly_mfg_clarity) / 100,
69
+ };
70
+ })
71
+ .filter(Boolean);
72
+ const result = { currentGoldRateList: goldRateList };
73
+ await cacheService.set(cacheKey, result, build_redis_key_1.CACHE_VALIDATION_TIMES.GOLD_RATE);
74
+ framework_1.logger.info(`[POS-GOLD-RATE] : Successfully computed and cached gold rates - Current: ${goldRateList.length} rates`);
75
+ return new workflows_sdk_1.StepResponse(result);
76
+ });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRvZGF5LWdvbGQtcmF0ZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9vcmRlcnMvc3RlcHMvZ2V0LXRvZGF5LWdvbGQtcmF0ZS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBK0U7QUFDL0UsbURBQTZDO0FBRTdDLDhDQUFrRDtBQUNsRCxvRUFBd0U7QUFFeEUsb0VBR3dDO0FBb0IzQixRQUFBLG9CQUFvQixHQUFHLElBQUEsMEJBQVUsRUFDNUMsMEJBQTBCLEVBQzFCLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFlLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0JBQVUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sb0JBQW9CLEdBQXlCLFNBQVMsQ0FBQyxPQUFPLENBQ2xFLHNDQUFxQixDQUN0QixDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBQSwrQkFBYSxFQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVwRCxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQW1CLFFBQVEsQ0FBQyxDQUFDO0lBRXhFLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsa0JBQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksNEJBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsa0JBQU0sQ0FBQyxJQUFJLENBQ1Qsb0VBQW9FLENBQ3JFLENBQUM7SUFFRix1RkFBdUY7SUFDdkYsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUV4QixJQUFJLENBQUM7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
@@ -15,4 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./sync-order-to-erp"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVycy9zdGVwcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQW9DIn0=
18
+ __exportStar(require("./sync-advance-payment-to-erp-step"), exports);
19
+ __exportStar(require("./get-today-gold-rate-step"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVycy9zdGVwcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQW9DO0FBQ3BDLHFFQUFtRDtBQUNuRCw2REFBMkMifQ==
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.syncAdvancePaymentToErpStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ exports.syncAdvancePaymentToErpStep = (0, workflows_sdk_1.createStep)("sync-advance-payment-to-erp", async ({ order_id, payment_id }, { container }) => {
7
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
8
+ const { data: [order], } = await query.graph({
9
+ entity: "order",
10
+ fields: [
11
+ "*",
12
+ "metadata",
13
+ "shipping_address.*",
14
+ "billing_address.*",
15
+ "items.*",
16
+ "payment_collections.payments.*",
17
+ "order_master.*",
18
+ ],
19
+ filters: { id: order_id },
20
+ });
21
+ const { data: [customer], } = await query.graph({
22
+ entity: "customer",
23
+ fields: ["*", "extended_customer.*"],
24
+ filters: { id: order.customer_id },
25
+ });
26
+ const { data: party } = await query.graph({
27
+ entity: "party_master",
28
+ fields: ["*"],
29
+ filters: {
30
+ owner_mobile: customer.phone?.replace("+91", ""),
31
+ },
32
+ });
33
+ const payment = {
34
+ "pp_cash_cash": "cash",
35
+ "pp_cheque_cheque": "cheque",
36
+ "pp_bank_transfer_bank_transfer": "bank",
37
+ "pp_gokwik_gokwik": "gokwik",
38
+ "pp_razorpay_razorpay": "razorpay",
39
+ "pp_worldline-pos_worldline_pos": "pos",
40
+ };
41
+ let branchParty = {};
42
+ if (order?.metadata?.cart_type === "POS_CART") {
43
+ branchParty = party.find((p) => p.party_no === customer.extended_customer.external_id);
44
+ }
45
+ else {
46
+ branchParty = party.find((p) => p.branch_name.toLowerCase() === "self");
47
+ }
48
+ const partyToUse = branchParty || party[0];
49
+ const { data: payment_info, } = await query.graph({
50
+ entity: "payment_book_master",
51
+ fields: ["id", "book_name"],
52
+ filters: {
53
+ branch_no: order.order_master?.branch_no || partyToUse?.party_no || "",
54
+ type: "Receive",
55
+ },
56
+ });
57
+ const paymentData = order?.payment_collections?.[0].payments.find((item) => item.id === payment_id);
58
+ const provider = payment[paymentData.provider_id];
59
+ let book_name = "";
60
+ let remarks = "";
61
+ if (provider === "pos") {
62
+ const posType = paymentData.data?.pos_type || "";
63
+ book_name = payment_info?.find((item) => item.book_name?.toLowerCase()?.includes(posType.toLowerCase()))?.book_name || "";
64
+ const otherFields = { ...paymentData.data };
65
+ delete otherFields.amount;
66
+ delete otherFields.session_id;
67
+ if (otherFields.worldline_pos) {
68
+ const worldlineData = otherFields.worldline_pos;
69
+ if (worldlineData.verification_response) {
70
+ const verifyResponse = worldlineData.verification_response;
71
+ remarks = Object.entries({
72
+ pos_id: otherFields.pos_id || "",
73
+ pos_type: otherFields.pos_type || "",
74
+ transaction_id: verifyResponse.rrn || verifyResponse.transaction_id || "",
75
+ response_code: verifyResponse.response_code || "",
76
+ response_message: verifyResponse.response_message || "",
77
+ status: verifyResponse.status || "",
78
+ })
79
+ .filter(([_, v]) => v !== "")
80
+ .map(([k, v]) => `${k}: ${v}`)
81
+ .join(", ");
82
+ }
83
+ else {
84
+ remarks = Object.entries({
85
+ pos_id: otherFields.pos_id || "",
86
+ pos_type: otherFields.pos_type || "",
87
+ urn: worldlineData.urn || "",
88
+ })
89
+ .filter(([_, v]) => v !== "")
90
+ .map(([k, v]) => `${k}: ${v}`)
91
+ .join(", ");
92
+ }
93
+ }
94
+ else {
95
+ remarks = Object.entries(otherFields)
96
+ .filter(([_, v]) => v !== "")
97
+ .map(([k, v]) => {
98
+ if (typeof v === "object" && v !== null) {
99
+ return `${k}: ${JSON.stringify(v)}`;
100
+ }
101
+ return `${k}: ${v}`;
102
+ })
103
+ .join(", ");
104
+ }
105
+ }
106
+ else {
107
+ book_name = payment_info?.find((item) => item.book_name?.toLowerCase()?.includes(provider))?.book_name || "";
108
+ const otherFields = { ...paymentData.data };
109
+ delete otherFields.amount;
110
+ delete otherFields.session_id;
111
+ remarks = Object.entries(otherFields)
112
+ .filter(([_, v]) => v !== "")
113
+ .map(([k, v]) => {
114
+ // Handle nested objects
115
+ if (typeof v === "object" && v !== null) {
116
+ return `${k}: ${JSON.stringify(v)}`;
117
+ }
118
+ return `${k}: ${v}`;
119
+ })
120
+ .join(", ");
121
+ }
122
+ const payload = {
123
+ OrderId: order.order_master.erp_order_id || "",
124
+ VoucherEntryId: 0,
125
+ BranchNo: order.order_master?.branch_no || partyToUse?.branch_no || "",
126
+ BranchName: order.order_master?.branch_name || partyToUse?.branch_name || "",
127
+ TransactionDate: paymentData.created_at,
128
+ PartyNo: order.order_master?.customer_id || partyToUse?.party_no || customer.extended_customer.external_id,
129
+ BookName: book_name || "Cash - Shv.Adi.",
130
+ FirmName: order.order_master?.customer_name || customer.first_name + " " + customer.last_name,
131
+ SalesPerson: "",
132
+ DocNo: "",
133
+ Amount: paymentData.amount || 0,
134
+ Remarks: remarks
135
+ };
136
+ console.log("Advance Payment payload", JSON.stringify(payload, null, 2));
137
+ const erpModuleService = container.resolve("erp");
138
+ const erpAdvancePayment = await erpModuleService.createAdvancePayment(payload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
139
+ // Check if ERP response has status false and send Slack notification
140
+ if (erpAdvancePayment?.status === false) {
141
+ try {
142
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
143
+ await notificationService.createNotifications([
144
+ {
145
+ to: "slack",
146
+ channel: "slack",
147
+ template: "slack-alert",
148
+ data: {
149
+ alertType: "gati_create_advance_payment_failure",
150
+ message: `ERP Advance Payment Creation Failed for Order ID: ${order.id}`,
151
+ error: erpAdvancePayment.message || "Unknown error occurred",
152
+ severity: "high",
153
+ metadata: {
154
+ order_id: order.id,
155
+ order_display_id: order.display_id,
156
+ payment_id: payment_id,
157
+ error_message: erpAdvancePayment.message,
158
+ cart_type: order?.metadata?.cart_type || "WEBSITE",
159
+ },
160
+ timestamp: new Date(),
161
+ },
162
+ },
163
+ ]);
164
+ }
165
+ catch (slackError) {
166
+ console.error("Failed to send Slack notification:", slackError);
167
+ }
168
+ }
169
+ return new workflows_sdk_1.StepResponse(erpAdvancePayment?.data || null);
170
+ });
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1hZHZhbmNlLXBheW1lbnQtdG8tZXJwLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVycy9zdGVwcy9zeW5jLWFkdmFuY2UtcGF5bWVudC10by1lcnAtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBMkU7QUFFM0UscURBQTZFO0FBSWhFLFFBQUEsMkJBQTJCLEdBQUcsSUFBQSwwQkFBVSxFQUNuRCw2QkFBNkIsRUFDN0IsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFDLFVBQVUsRUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMxRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FDZCxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRTtZQUNOLEdBQUc7WUFDSCxVQUFVO1lBQ1Ysb0JBQW9CO1lBQ3BCLG1CQUFtQjtZQUNuQixTQUFTO1lBQ1QsZ0NBQWdDO1lBQ2hDLGdCQUFnQjtTQUNqQjtRQUNELE9BQU8sRUFBRSxFQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUM7S0FDeEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUNqQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsVUFBVTtRQUNsQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7UUFDcEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUU7S0FDbkMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVB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