@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.
- package/.medusa/server/src/api/pos/gold-rate/route.js +15 -9
- package/.medusa/server/src/jobs/sync-labour-chart-master.js +20 -0
- package/.medusa/server/src/jobs/sync-order-erp.js +2 -2
- package/.medusa/server/src/jobs/sync-payment-book-master.js +63 -0
- package/.medusa/server/src/jobs/sync-rate-chart-master.js +20 -0
- package/.medusa/server/src/links/jewel-trans-master.js +13 -0
- package/.medusa/server/src/links/order-master.js +13 -0
- package/.medusa/server/src/modules/erp/service.js +118 -4
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251210112341.js +18 -0
- package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +2 -2
- package/.medusa/server/src/modules/jewel-trans-master/index.js +13 -0
- package/.medusa/server/src/modules/jewel-trans-master/migrations/Migration20260101104355.js +51 -0
- package/.medusa/server/src/modules/jewel-trans-master/models/jewel-trans-master.js +151 -0
- package/.medusa/server/src/modules/jewel-trans-master/service.js +16 -0
- package/.medusa/server/src/modules/labour-chart-master/index.js +13 -0
- package/.medusa/server/src/modules/labour-chart-master/migrations/Migration20260101081502.js +15 -0
- package/.medusa/server/src/modules/labour-chart-master/models/labour-chart-master.js +16 -0
- package/.medusa/server/src/modules/labour-chart-master/service.js +10 -0
- package/.medusa/server/src/modules/order-master/index.js +13 -0
- package/.medusa/server/src/modules/order-master/migrations/Migration20251204071941.js +27 -0
- package/.medusa/server/src/modules/order-master/models/order-master.js +97 -0
- package/.medusa/server/src/modules/order-master/service.js +12 -0
- package/.medusa/server/src/modules/payment-book-master/index.js +13 -0
- package/.medusa/server/src/modules/payment-book-master/migrations/Migration20251203105358.js +15 -0
- package/.medusa/server/src/modules/payment-book-master/models/payment-book-master.js +12 -0
- package/.medusa/server/src/modules/payment-book-master/service.js +10 -0
- package/.medusa/server/src/modules/rate-chart-master/index.js +13 -0
- package/.medusa/server/src/modules/rate-chart-master/migrations/Migration20260101081500.js +15 -0
- package/.medusa/server/src/modules/rate-chart-master/models/rate-chart-master.js +13 -0
- package/.medusa/server/src/modules/rate-chart-master/service.js +10 -0
- package/.medusa/server/src/subscribers/order-item-update.js +11 -0
- package/.medusa/server/src/workflows/jewel-trans-master/index.js +18 -0
- package/.medusa/server/src/workflows/jewel-trans-master/steps/create-or-update-jewel-trans-master.js +370 -0
- package/.medusa/server/src/workflows/jewel-trans-master/steps/index.js +18 -0
- package/.medusa/server/src/workflows/labour-chart-master/index.js +11 -0
- package/.medusa/server/src/workflows/labour-chart-master/steps/create-or-update-labour-chart-master.js +38 -0
- package/.medusa/server/src/workflows/labour-chart-master/steps/fetch-labour-chart.js +31 -0
- package/.medusa/server/src/workflows/order-master/index.js +3 -0
- package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +239 -0
- package/.medusa/server/src/workflows/orders/steps/get-today-gold-rate-step.js +77 -0
- package/.medusa/server/src/workflows/orders/steps/index.js +3 -1
- package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +171 -0
- package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +245 -9
- package/.medusa/server/src/workflows/orders/utils/order-helper.js +112 -28
- package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
- package/.medusa/server/src/workflows/orders/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/orders/workflows/sync-advanve-payment-to-erp.js +21 -0
- package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +28 -4
- package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +2 -2
- package/.medusa/server/src/workflows/payment-book-master/index.js +11 -0
- package/.medusa/server/src/workflows/payment-book-master/steps/create-or-update-payment-book-master.js +31 -0
- package/.medusa/server/src/workflows/payment-book-master/steps/fetch-payment-book.js +64 -0
- package/.medusa/server/src/workflows/rate-chart-master/index.js +11 -0
- package/.medusa/server/src/workflows/rate-chart-master/steps/create-or-update-rate-chart-master.js +27 -0
- package/.medusa/server/src/workflows/rate-chart-master/steps/fetch-rate-chart.js +31 -0
- package/package.json +1 -1
- 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
|
-
|
|
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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
|