@devx-commerce/plugin-gati 0.0.34-beta.56 → 0.0.34-beta.57
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.
|
@@ -2,102 +2,104 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.config = void 0;
|
|
4
4
|
exports.default = syncCustomerAdvancePaymentErp;
|
|
5
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
-
const sync_advanve_payment_to_erp_1 = require("../workflows/orders/workflows/sync-advanve-payment-to-erp");
|
|
7
5
|
const BATCH_SIZE = 50;
|
|
8
|
-
async function syncCustomerAdvancePaymentErp(container) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
6
|
+
// export default async function syncCustomerAdvancePaymentErp(container: MedusaContainer) {
|
|
7
|
+
// const logger = container.resolve(ContainerRegistrationKeys.LOGGER);
|
|
8
|
+
// const erpService: ErpService = container.resolve("erp");
|
|
9
|
+
// const healthy = await erpService.checkServiceHealth();
|
|
10
|
+
// if (!healthy) {
|
|
11
|
+
// logger.warn("[sync-customer-advance-payment-erp] ERP service unavailable, skipping sync");
|
|
12
|
+
// return;
|
|
13
|
+
// }
|
|
14
|
+
// const query = container.resolve(ContainerRegistrationKeys.QUERY);
|
|
15
|
+
// let skip = 0;
|
|
16
|
+
// let totalSynced = 0;
|
|
17
|
+
// // Track IDs attempted this run to avoid re-processing orders whose advance_payment_synced
|
|
18
|
+
// // flag was just set (they remain in the DB query result until the next read reflects the update).
|
|
19
|
+
// const attemptedIds = new Set<string>();
|
|
20
|
+
// while (true) {
|
|
21
|
+
// // Query orders where order was synced to ERP but advance payment was not yet synced.
|
|
22
|
+
// // The DB filter is stable (status doesn't change here), so we use normal skip pagination.
|
|
23
|
+
// const { data: batch } = await query.graph({
|
|
24
|
+
// entity: "order",
|
|
25
|
+
// fields: [
|
|
26
|
+
// "id",
|
|
27
|
+
// "metadata",
|
|
28
|
+
// "payment_collections.*",
|
|
29
|
+
// "payment_collections.payments.*",
|
|
30
|
+
// "order_master.*",
|
|
31
|
+
// ],
|
|
32
|
+
// filters: { status: ["pending", "completed"] },
|
|
33
|
+
// pagination: { skip, take: BATCH_SIZE },
|
|
34
|
+
// });
|
|
35
|
+
// if (!batch?.length) break;
|
|
36
|
+
// // Only retry orders that:
|
|
37
|
+
// // 1. Have a captured payment collection
|
|
38
|
+
// // 2. Were synced to ERP (metadata.sync_erp === true)
|
|
39
|
+
// // 3. Advance payment was not yet marked synced (metadata.advance_payment_synced !== true)
|
|
40
|
+
// // 4. Not already attempted this run
|
|
41
|
+
// const toSync = batch.filter((order: any) => {
|
|
42
|
+
// const paymentCaptured = order.payment_collections?.[0]?.status === "completed";
|
|
43
|
+
// const orderSynced = order.metadata?.sync_erp === true;
|
|
44
|
+
// const advancePaymentNotSynced = order.metadata?.advance_payment_synced !== true;
|
|
45
|
+
// return paymentCaptured && orderSynced && advancePaymentNotSynced && !attemptedIds.has(order.id);
|
|
46
|
+
// });
|
|
47
|
+
// logger.info(
|
|
48
|
+
// `[sync-customer-advance-payment-erp] Batch at skip=${skip}: ${toSync.length} orders pending advance payment sync`
|
|
49
|
+
// );
|
|
50
|
+
// for (const order of toSync) {
|
|
51
|
+
// attemptedIds.add(order.id);
|
|
52
|
+
// const paymentCollection = order.payment_collections?.[0];
|
|
53
|
+
// if (!paymentCollection?.payments?.length) continue;
|
|
54
|
+
// let allSucceeded = true;
|
|
55
|
+
// for (const payment of paymentCollection.payments) {
|
|
56
|
+
// try {
|
|
57
|
+
// await syncAdvancePaymentToERPWorkflow(container).run({
|
|
58
|
+
// input: {
|
|
59
|
+
// order_id: order.id,
|
|
60
|
+
// payment_collection_id: paymentCollection.id,
|
|
61
|
+
// payment_id: payment.id,
|
|
62
|
+
// },
|
|
63
|
+
// });
|
|
64
|
+
// totalSynced++;
|
|
65
|
+
// logger.info(
|
|
66
|
+
// `[sync-customer-advance-payment-erp] Synced advance payment ${payment.id} for order ${order.id}`
|
|
67
|
+
// );
|
|
68
|
+
// } catch (err: any) {
|
|
69
|
+
// allSucceeded = false;
|
|
70
|
+
// logger.error(
|
|
71
|
+
// `[sync-customer-advance-payment-erp] Failed for order ${order.id}, payment ${payment.id}: ${err?.message}`
|
|
72
|
+
// );
|
|
73
|
+
// }
|
|
74
|
+
// }
|
|
75
|
+
// // Only mark as synced if ALL payments in the collection succeeded
|
|
76
|
+
// if (allSucceeded) {
|
|
77
|
+
// try {
|
|
78
|
+
// const orderService = container.resolve("order") as any;
|
|
79
|
+
// await orderService.updateOrders({
|
|
80
|
+
// selector: { id: order.id },
|
|
81
|
+
// data: {
|
|
82
|
+
// metadata: {
|
|
83
|
+
// ...(order.metadata ?? {}),
|
|
84
|
+
// advance_payment_synced: true,
|
|
85
|
+
// },
|
|
86
|
+
// },
|
|
87
|
+
// });
|
|
88
|
+
// } catch (err: any) {
|
|
89
|
+
// logger.warn(
|
|
90
|
+
// `[sync-customer-advance-payment-erp] Could not mark advance_payment_synced for order ${order.id}: ${err?.message}`
|
|
91
|
+
// );
|
|
92
|
+
// }
|
|
93
|
+
// }
|
|
94
|
+
// }
|
|
95
|
+
// if (batch.length < BATCH_SIZE) break;
|
|
96
|
+
// skip += BATCH_SIZE;
|
|
97
|
+
// }
|
|
98
|
+
// logger.info(`[sync-customer-advance-payment-erp] Done. Total synced: ${totalSynced}`);
|
|
99
|
+
// }
|
|
100
|
+
async function syncCustomerAdvancePaymentErp(container) { }
|
|
99
101
|
exports.config = {
|
|
100
102
|
name: "sync-customer-advance-payment-erp",
|
|
101
103
|
schedule: "*/10 * * * *", // Every 10 minutes
|
|
102
104
|
};
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jdXN0b21lci1hZHZhbmNlLXBheW1lbnQtZXJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvc3luYy1jdXN0b21lci1hZHZhbmNlLXBheW1lbnQtZXJwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1IQSxnREFFSTtBQWhISixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFdEIsNEZBQTRGO0FBQzVGLHdFQUF3RTtBQUN4RSw2REFBNkQ7QUFFN0QsMkRBQTJEO0FBQzNELG9CQUFvQjtBQUNwQixpR0FBaUc7QUFDakcsY0FBYztBQUNkLE1BQU07QUFFTixzRUFBc0U7QUFFdEUsa0JBQWtCO0FBQ2xCLHlCQUF5QjtBQUN6QiwrRkFBK0Y7QUFDL0YsdUdBQXVHO0FBQ3ZHLDRDQUE0QztBQUU1QyxtQkFBbUI7QUFDbkIsNEZBQTRGO0FBQzVGLGlHQUFpRztBQUNqRyxrREFBa0Q7QUFDbEQseUJBQXlCO0FBQ3pCLGtCQUFrQjtBQUNsQixnQkFBZ0I7QUFDaEIsc0JBQXNCO0FBQ3RCLG1DQUFtQztBQUNuQyw0Q0FBNEM7QUFDNUMsNEJBQTRCO0FBQzVCLFdBQVc7QUFDWCx1REFBdUQ7QUFDdkQsZ0RBQWdEO0FBQ2hELFVBQVU7QUFFVixpQ0FBaUM7QUFFakMsaUNBQWlDO0FBQ2pDLCtDQUErQztBQUMvQyw0REFBNEQ7QUFDNUQsaUdBQWlHO0FBQ2pHLDJDQUEyQztBQUMzQyxvREFBb0Q7QUFDcEQsd0ZBQXdGO0FBQ3hGLCtEQUErRDtBQUMvRCx5RkFBeUY7QUFDekYseUdBQXlHO0FBQ3pHLFVBQVU7QUFFVixtQkFBbUI7QUFDbkIsMEhBQTBIO0FBQzFILFNBQVM7QUFFVCxvQ0FBb0M7QUFDcEMsb0NBQW9DO0FBQ3BDLGtFQUFrRTtBQUNsRSw0REFBNEQ7QUFFNUQsaUNBQWlDO0FBRWpDLDREQUE0RDtBQUM1RCxnQkFBZ0I7QUFDaEIsbUVBQW1FO0FBQ25FLHVCQUF1QjtBQUN2QixvQ0FBb0M7QUFDcEMsNkRBQTZEO0FBQzdELHdDQUF3QztBQUN4QyxpQkFBaUI7QUFDakIsZ0JBQWdCO0FBQ2hCLDJCQUEyQjtBQUMzQix5QkFBeUI7QUFDekIsK0dBQStHO0FBQy9HLGVBQWU7QUFDZiwrQkFBK0I7QUFDL0Isa0NBQWtDO0FBQ2xDLDBCQUEwQjtBQUMxQix5SEFBeUg7QUFDekgsZUFBZTtBQUNmLFlBQVk7QUFDWixVQUFVO0FBRVYsMkVBQTJFO0FBQzNFLDRCQUE0QjtBQUM1QixnQkFBZ0I7QUFDaEIsb0VBQW9FO0FBQ3BFLDhDQUE4QztBQUM5QywwQ0FBMEM7QUFDMUMsc0JBQXNCO0FBQ3RCLDRCQUE0QjtBQUM1Qiw2Q0FBNkM7QUFDN0MsZ0RBQWdEO0FBQ2hELG1CQUFtQjtBQUNuQixpQkFBaUI7QUFDakIsZ0JBQWdCO0FBQ2hCLCtCQUErQjtBQUMvQix5QkFBeUI7QUFDekIsaUlBQWlJO0FBQ2pJLGVBQWU7QUFDZixZQUFZO0FBQ1osVUFBVTtBQUNWLFFBQVE7QUFFUiw0Q0FBNEM7QUFDNUMsMEJBQTBCO0FBQzFCLE1BQU07QUFFTiwyRkFBMkY7QUFDM0YsSUFBSTtBQUVXLEtBQUssVUFBVSw2QkFBNkIsQ0FDekQsU0FBMEIsSUFDekIsQ0FBQztBQUVTLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxtQ0FBbUM7SUFDekMsUUFBUSxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7Q0FDOUMsQ0FBQyJ9
|