@devx-commerce/plugin-gati 0.0.34-beta.50 → 0.0.34-beta.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/api/erp/webhook/config.js +38 -28
- package/.medusa/server/src/jobs/process-erp-events.js +8 -50
- package/.medusa/server/src/modules/order-proceed-master/index.js +13 -0
- package/.medusa/server/src/modules/order-proceed-master/migrations/Migration20260327100226.js +31 -0
- package/.medusa/server/src/modules/order-proceed-master/models/order-proceed-master.js +38 -0
- package/.medusa/server/src/modules/order-proceed-master/service.js +11 -0
- package/.medusa/server/src/modules/receive-voucher-master/index.js +13 -0
- package/.medusa/server/src/modules/receive-voucher-master/migrations/Migration20260328053649.js +16 -0
- package/.medusa/server/src/modules/receive-voucher-master/models/receive-voucher-master.js +27 -0
- package/.medusa/server/src/modules/receive-voucher-master/service.js +10 -0
- package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260327084135.js +14 -0
- package/.medusa/server/src/modules/sale-return-master/models/sale-return-master.js +3 -1
- package/.medusa/server/src/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/inward-master/steps/index.js +1 -2
- package/.medusa/server/src/workflows/inward-master/workflows/index.js +1 -2
- package/.medusa/server/src/workflows/material-purchase-master/steps/create-material-purchase-master.js +41 -2
- package/.medusa/server/src/workflows/material-purchase-master/steps/delete-material-purchase-master.js +22 -1
- package/.medusa/server/src/workflows/material-purchase-master/steps/update-material-purchase-master.js +67 -19
- package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js +2 -2
- package/.medusa/server/src/workflows/order-proceed-master/index.js +6 -0
- package/.medusa/server/src/workflows/order-proceed-master/order-proceed-master-webhook.js +26 -0
- package/.medusa/server/src/workflows/order-proceed-master/steps/create-or-update-order-proceed-master.js +186 -0
- package/.medusa/server/src/workflows/order-proceed-master/steps/delete-order-proceed-master-by-erp-ids.js +28 -0
- package/.medusa/server/src/workflows/orders/steps/sync-old-gold-to-erp-step.js +2 -2
- package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +97 -40
- package/.medusa/server/src/workflows/orders/steps/sync-sale-return-to-erp-step.js +102 -2
- package/.medusa/server/src/workflows/orders/utils/order-helper.js +5 -5
- package/.medusa/server/src/workflows/party-style-master/steps/index.js +1 -2
- package/.medusa/server/src/workflows/party-style-master/workflows/index.js +1 -2
- package/.medusa/server/src/workflows/receive-voucher-master/index.js +24 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/create-receive-voucher-master.js +125 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/delete-receive-voucher-master.js +45 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/fetch-receive-voucher-master.js +22 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/update-receive-voucher-master.js +44 -0
- package/.medusa/server/src/workflows/sale-return-master/index.js +4 -22
- package/.medusa/server/src/workflows/sale-return-master/sale-return-master-webhook.js +28 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/create-or-update-sale-return-master.js +109 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master-by-erp-ids.js +36 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/process-sale-return-from-webhook.js +232 -0
- package/.medusa/server/src/workflows/style-master/steps/index.js +1 -2
- package/.medusa/server/src/workflows/style-master/workflows/index.js +1 -2
- package/package.json +1 -1
- package/.medusa/server/src/workflows/inward-master/steps/update-inward-price-only.js +0 -47
- package/.medusa/server/src/workflows/inward-master/workflows/update-inward-price-only.js +0 -99
- package/.medusa/server/src/workflows/party-style-master/steps/update-party-style-price-only.js +0 -111
- package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master-price-only.js +0 -90
- package/.medusa/server/src/workflows/style-master/steps/update-style-price-only.js +0 -105
- package/.medusa/server/src/workflows/style-master/workflows/create-or-update-style-master-price-only.js +0 -104
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createOrUpdatePartyStyleMasterPriceOnlyWorkflow = void 0;
|
|
4
|
-
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
-
const product_helper_1 = require("../../helpers/product-helper");
|
|
7
|
-
const steps_1 = require("../steps");
|
|
8
|
-
const update_party_style_price_only_1 = require("../steps/update-party-style-price-only");
|
|
9
|
-
/**
|
|
10
|
-
* Price-only workflow for PartyStyleMst updates when DailyRate is detected
|
|
11
|
-
* This workflow:
|
|
12
|
-
* 1. Fetches party style data from ERP
|
|
13
|
-
* 2. Updates only price fields in extended variants (Mrp, cost fields)
|
|
14
|
-
* 3. Updates party style detail line prices
|
|
15
|
-
* 4. Does NOT update Medusa variant title, SKU, options, or explorations
|
|
16
|
-
*
|
|
17
|
-
* @param input - Contains operation type, data IDs, and priceOnly flag
|
|
18
|
-
*/
|
|
19
|
-
exports.createOrUpdatePartyStyleMasterPriceOnlyWorkflow = (0, workflows_sdk_1.createWorkflow)("create-or-update-party-style-master-price-only", (input) => {
|
|
20
|
-
// Step 1: Fetch party style data from ERP system
|
|
21
|
-
const partyStyleData = (0, steps_1.fetchPartyStyleData)(input);
|
|
22
|
-
const partyStyleIds = (0, workflows_sdk_1.transform)({
|
|
23
|
-
partyStyleData,
|
|
24
|
-
}, (data) => {
|
|
25
|
-
return data.partyStyleData?.map((product) => product?.PartyStyleId);
|
|
26
|
-
});
|
|
27
|
-
// Step 2: Query existing extended variants for price updates
|
|
28
|
-
const { data: existingExtendedVariants } = (0, core_flows_1.useQueryGraphStep)({
|
|
29
|
-
entity: "extended_variant",
|
|
30
|
-
fields: ["*"],
|
|
31
|
-
filters: {
|
|
32
|
-
party_style_id: partyStyleIds,
|
|
33
|
-
},
|
|
34
|
-
}).config({ name: "existing-extended-variants-price-only" });
|
|
35
|
-
(0, workflows_sdk_1.when)(input, (input) => {
|
|
36
|
-
return input.operation === "update";
|
|
37
|
-
}).then(() => {
|
|
38
|
-
const priceOnlyUpdateData = (0, workflows_sdk_1.transform)({
|
|
39
|
-
partyStyleData,
|
|
40
|
-
existingExtendedVariants,
|
|
41
|
-
}, (data) => {
|
|
42
|
-
const updates = [];
|
|
43
|
-
data.partyStyleData.forEach((partyStyleData) => {
|
|
44
|
-
// Find existing extended variant
|
|
45
|
-
const existingExtendedVariant = data.existingExtendedVariants.find((ev) => ev.party_style_id === partyStyleData?.PartyStyleId);
|
|
46
|
-
if (!existingExtendedVariant) {
|
|
47
|
-
return; // Skip if extended variant doesn't exist (price-only means it should already exist)
|
|
48
|
-
}
|
|
49
|
-
// Calculate price data
|
|
50
|
-
const { metal_total_cost, diamond_total_cost, stone_total_cost, cpf_total_cost, metal_total_amount, diamond_total_amount, stone_total_amount, cpf_total_amount, actual_metal_total_amount, actual_diamond_total_amount, actual_stone_total_amount, actual_cpf_total_amount, actual_total_amount, } = (0, product_helper_1.calculateStyleCostsAndAmounts)(partyStyleData.PartyStyleMstDetail || []);
|
|
51
|
-
// Get extended variant data (includes price fields)
|
|
52
|
-
const extendedVariantData = (0, product_helper_1.getExtendedVariantData)(partyStyleData, {
|
|
53
|
-
baseMetal: "",
|
|
54
|
-
baseMetalPurity: "",
|
|
55
|
-
baseMetalColor: "",
|
|
56
|
-
}, {
|
|
57
|
-
metal_total_cost,
|
|
58
|
-
diamond_total_cost,
|
|
59
|
-
stone_total_cost,
|
|
60
|
-
cpf_total_cost,
|
|
61
|
-
metal_total_amount,
|
|
62
|
-
diamond_total_amount,
|
|
63
|
-
stone_total_amount,
|
|
64
|
-
cpf_total_amount,
|
|
65
|
-
actual_metal_total_amount,
|
|
66
|
-
actual_diamond_total_amount,
|
|
67
|
-
actual_stone_total_amount,
|
|
68
|
-
actual_cpf_total_amount,
|
|
69
|
-
actual_total_amount,
|
|
70
|
-
}, existingExtendedVariant.sales_channel_id || "");
|
|
71
|
-
// Get party style detail lines (contains detail-level price fields)
|
|
72
|
-
const styleDetails = (0, product_helper_1.getPartyStyleDetailLines)(partyStyleData?.PartyStyleMstDetail || []);
|
|
73
|
-
updates.push({
|
|
74
|
-
extendedVariantId: existingExtendedVariant.id,
|
|
75
|
-
extendedVariantData,
|
|
76
|
-
styleDetails,
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
return updates;
|
|
80
|
-
});
|
|
81
|
-
// Execute the price-only update step
|
|
82
|
-
(0, update_party_style_price_only_1.updatePartyStylePriceOnly)({
|
|
83
|
-
updates: priceOnlyUpdateData,
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
return new workflows_sdk_1.WorkflowResponse({
|
|
87
|
-
success: true,
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLXVwZGF0ZS1wYXJ0eS1zdHlsZS1tYXN0ZXItcHJpY2Utb25seS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcGFydHktc3R5bGUtbWFzdGVyL3dvcmtmbG93cy9jcmVhdGUtb3ItdXBkYXRlLXBhcnR5LXN0eWxlLW1hc3Rlci1wcmljZS1vbmx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUsyQztBQUMzQyw0REFBZ0U7QUFHaEUsaUVBSXNDO0FBRXRDLG9DQUErQztBQUMvQywwRkFBbUY7QUFFbkY7Ozs7Ozs7OztHQVNHO0FBQ1UsUUFBQSwrQ0FBK0MsR0FBRyxJQUFBLDhCQUFjLEVBQzNFLGdEQUFnRCxFQUNoRCxDQUFDLEtBQXlCLEVBQUUsRUFBRTtJQUM1QixpREFBaUQ7SUFDakQsTUFBTSxjQUFjLEdBQUcsSUFBQSwyQkFBbUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUVsRCxNQUFNLGFBQWEsR0FBRyxJQUFBLHlCQUFTLEVBQzdCO1FBQ0UsY0FBYztLQUNmLEVBQ0QsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNQLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQ0YsQ0FBQztJQUVGLDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUMzRCxNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNiLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxhQUFhO1NBQzlCO0tBQ0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSx1Q0FBdUMsRUFBRSxDQUFDLENBQUM7SUFFN0QsSUFBQSxvQkFBSSxFQUFD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
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateStylePriceOnly = void 0;
|
|
4
|
-
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const extended_product_1 = require("../../../modules/extended-product");
|
|
6
|
-
/**
|
|
7
|
-
* Step to update extended product price fields only
|
|
8
|
-
* Does not touch Medusa product, variants, titles, categories, collections, or explorations
|
|
9
|
-
* Only updates:
|
|
10
|
-
* - Extended product price/cost/margin/discount/amount fields
|
|
11
|
-
* - Style detail lines with updated price calculations
|
|
12
|
-
*
|
|
13
|
-
* @param input - Array of price-only updates
|
|
14
|
-
* @param container - Dependency injection container
|
|
15
|
-
*/
|
|
16
|
-
exports.updateStylePriceOnly = (0, workflows_sdk_1.createStep)("update-style-price-only", async (input, { container }) => {
|
|
17
|
-
const extendedProductService = container.resolve(extended_product_1.EXTENDED_PRODUCT_MODULE);
|
|
18
|
-
const logger = container.resolve("logger");
|
|
19
|
-
if (!input.updates || input.updates.length === 0) {
|
|
20
|
-
logger.info("No price-only updates to process");
|
|
21
|
-
return new workflows_sdk_1.StepResponse({ success: true, updatedCount: 0 });
|
|
22
|
-
}
|
|
23
|
-
let updatedCount = 0;
|
|
24
|
-
for (const update of input.updates) {
|
|
25
|
-
try {
|
|
26
|
-
// Update extended product with price fields only
|
|
27
|
-
await extendedProductService.updateExtendedProducts({
|
|
28
|
-
id: update.extendedProductId,
|
|
29
|
-
// Price and cost fields
|
|
30
|
-
cost: update.extendedProductData.cost,
|
|
31
|
-
actual_cost: update.extendedProductData.actual_cost,
|
|
32
|
-
mrp: update.extendedProductData.mrp,
|
|
33
|
-
actual_mrp: update.extendedProductData.actual_mrp,
|
|
34
|
-
// Cost calculations
|
|
35
|
-
metal_total_cost: update.extendedProductData.metal_total_cost,
|
|
36
|
-
diamond_total_cost: update.extendedProductData.diamond_total_cost,
|
|
37
|
-
stone_total_cost: update.extendedProductData.stone_total_cost,
|
|
38
|
-
cpf_total_cost: update.extendedProductData.cpf_total_cost,
|
|
39
|
-
// Amount calculations
|
|
40
|
-
metal_total_amount: update.extendedProductData.metal_total_amount,
|
|
41
|
-
diamond_total_amount: update.extendedProductData.diamond_total_amount,
|
|
42
|
-
stone_total_amount: update.extendedProductData.stone_total_amount,
|
|
43
|
-
cpf_total_amount: update.extendedProductData.cpf_total_amount,
|
|
44
|
-
// Rate chart and discount markup
|
|
45
|
-
rate_chart: update.extendedProductData.rate_chart,
|
|
46
|
-
discount_markup: update.extendedProductData.discount_markup,
|
|
47
|
-
discount_markup_cost: update.extendedProductData.discount_markup_cost,
|
|
48
|
-
// Making and metal calculation formulas
|
|
49
|
-
making_cost_on: update.extendedProductData.making_cost_on,
|
|
50
|
-
metal_calculation_cost_on: update.extendedProductData.metal_calculation_cost_on,
|
|
51
|
-
gold_loss_cost_formula: update.extendedProductData.gold_loss_cost_formula,
|
|
52
|
-
labour_cost_formula: update.extendedProductData.labour_cost_formula,
|
|
53
|
-
// Margin and discount cost fields
|
|
54
|
-
cost_margin_per: update.extendedProductData.cost_margin_per,
|
|
55
|
-
cost_margin_is_fix: update.extendedProductData.cost_margin_is_fix,
|
|
56
|
-
actual_cost_margin_amt: update.extendedProductData.actual_cost_margin_amt,
|
|
57
|
-
cost_margin_amt: update.extendedProductData.cost_margin_amt,
|
|
58
|
-
cost_discount_per: update.extendedProductData.cost_discount_per,
|
|
59
|
-
cost_discount_is_fix: update.extendedProductData.cost_discount_is_fix,
|
|
60
|
-
actual_cost_discount_amt: update.extendedProductData.actual_cost_discount_amt,
|
|
61
|
-
cost_discount_amt: update.extendedProductData.cost_discount_amt,
|
|
62
|
-
// Making and metal calculation formulas (sale)
|
|
63
|
-
making_on: update.extendedProductData.making_on,
|
|
64
|
-
metal_calculation_on: update.extendedProductData.metal_calculation_on,
|
|
65
|
-
gold_loss_formula: update.extendedProductData.gold_loss_formula,
|
|
66
|
-
labour_formula: update.extendedProductData.labour_formula,
|
|
67
|
-
// Margin and discount sale fields
|
|
68
|
-
margin_per: update.extendedProductData.margin_per,
|
|
69
|
-
margin_is_fix: update.extendedProductData.margin_is_fix,
|
|
70
|
-
actual_margin_amt: update.extendedProductData.actual_margin_amt,
|
|
71
|
-
margin_amt: update.extendedProductData.margin_amt,
|
|
72
|
-
discount_per: update.extendedProductData.discount_per,
|
|
73
|
-
discount_is_fix: update.extendedProductData.discount_is_fix,
|
|
74
|
-
actual_discount_amt: update.extendedProductData.actual_discount_amt,
|
|
75
|
-
discount_amt: update.extendedProductData.discount_amt,
|
|
76
|
-
});
|
|
77
|
-
// Delete and recreate style detail lines with updated prices
|
|
78
|
-
if (update.styleDetails && update.styleDetails.length > 0) {
|
|
79
|
-
// Get existing detail line IDs to delete
|
|
80
|
-
const existingDetails = await extendedProductService.listStyleDetailsLines({
|
|
81
|
-
style_id: update.extendedProductData.style_id,
|
|
82
|
-
});
|
|
83
|
-
if (existingDetails.length > 0) {
|
|
84
|
-
await extendedProductService.deleteStyleDetailsLines(existingDetails.map((d) => d.id));
|
|
85
|
-
}
|
|
86
|
-
// Create new style details with updated prices
|
|
87
|
-
await extendedProductService.createStyleDetailsLines(update.styleDetails);
|
|
88
|
-
}
|
|
89
|
-
updatedCount++;
|
|
90
|
-
logger.info(`✅ Price-only update completed for product ${update.productId}`);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
logger.error(`❌ Failed to update price-only for product ${update.productId}:`, error);
|
|
94
|
-
throw error;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return new workflows_sdk_1.StepResponse({
|
|
98
|
-
success: true,
|
|
99
|
-
updatedCount,
|
|
100
|
-
});
|
|
101
|
-
}, async (result, { container }) => {
|
|
102
|
-
const logger = container.resolve("logger");
|
|
103
|
-
logger.error("Compensation: Failed to update price-only data");
|
|
104
|
-
});
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN0eWxlLXByaWNlLW9ubHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0eWxlLW1hc3Rlci9zdGVwcy91cGRhdGUtc3R5bGUtcHJpY2Utb25seS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkU7QUFHN0Usd0VBQTRFO0FBUzVFOzs7Ozs7Ozs7R0FTRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsSUFBQSwwQkFBVSxFQUM1Qyx5QkFBeUIsRUFDekIsS0FBSyxFQUFFLEtBQXFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzdELE1BQU0sc0JBQXNCLEdBQzFCLFNBQVMsQ0FBQyxPQUFPLENBQUMsMENBQXVCLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUVyQixLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUM7WUFDSCxpREFBaUQ7WUFDakQsTUFBTSxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDbEQsRUFBRSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7Z0JBQzVCLHdCQUF3QjtnQkFDeEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJO2dCQUNy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
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createOrUpdateStyleMasterPriceOnlyWorkflow = void 0;
|
|
4
|
-
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
-
const product_helper_1 = require("../../helpers/product-helper");
|
|
7
|
-
const fetch_styles_1 = require("../steps/fetch-styles");
|
|
8
|
-
const update_style_price_only_1 = require("../steps/update-style-price-only");
|
|
9
|
-
/**
|
|
10
|
-
* Price-only workflow for StyleMst updates when DailyRate is detected
|
|
11
|
-
* This workflow:
|
|
12
|
-
* 1. Fetches style data from ERP
|
|
13
|
-
* 2. Updates only price fields in extended product data
|
|
14
|
-
* 3. Updates style detail line prices
|
|
15
|
-
* 4. Does NOT update Medusa product, variants, categories, collections, or explorations
|
|
16
|
-
*
|
|
17
|
-
* @param input - Contains operation type, data IDs, and priceOnly flag
|
|
18
|
-
*/
|
|
19
|
-
exports.createOrUpdateStyleMasterPriceOnlyWorkflow = (0, workflows_sdk_1.createWorkflow)("create-or-update-style-master-price-only", (input) => {
|
|
20
|
-
// Step 1: Fetch style data from ERP system
|
|
21
|
-
const styleData = (0, fetch_styles_1.fetchStyleData)(input);
|
|
22
|
-
// Get base metal details
|
|
23
|
-
const externalIdsFilters = (0, workflows_sdk_1.transform)({
|
|
24
|
-
styleData,
|
|
25
|
-
}, (data) => {
|
|
26
|
-
return data.styleData.map((product) => `${product.StyleId}`);
|
|
27
|
-
});
|
|
28
|
-
// Step 2: Query existing products for updates
|
|
29
|
-
// @ts-ignore
|
|
30
|
-
const { data: existingProducts } = (0, core_flows_1.useQueryGraphStep)({
|
|
31
|
-
entity: "product",
|
|
32
|
-
fields: ["id", "external_id"],
|
|
33
|
-
filters: {
|
|
34
|
-
// @ts-ignore
|
|
35
|
-
external_id: externalIdsFilters,
|
|
36
|
-
},
|
|
37
|
-
}).config({ name: "existing-products" });
|
|
38
|
-
// Step 3: Query existing extended products to update price fields
|
|
39
|
-
const { data: existingExtendedProducts } = (0, core_flows_1.useQueryGraphStep)({
|
|
40
|
-
entity: "extended_product",
|
|
41
|
-
fields: ["*"],
|
|
42
|
-
filters: {
|
|
43
|
-
// @ts-ignore
|
|
44
|
-
external_id: externalIdsFilters,
|
|
45
|
-
},
|
|
46
|
-
}).config({ name: "existing-extended-products" });
|
|
47
|
-
(0, workflows_sdk_1.when)(input, (input) => {
|
|
48
|
-
return input.operation === "update";
|
|
49
|
-
}).then(() => {
|
|
50
|
-
const priceOnlyUpdateData = (0, workflows_sdk_1.transform)({
|
|
51
|
-
styleData,
|
|
52
|
-
existingProducts,
|
|
53
|
-
existingExtendedProducts,
|
|
54
|
-
}, (data) => {
|
|
55
|
-
const updates = [];
|
|
56
|
-
data.styleData.forEach((styleData) => {
|
|
57
|
-
// Find existing product
|
|
58
|
-
const existingProduct = data.existingProducts.find((p) => p.external_id === `${styleData.StyleId}`);
|
|
59
|
-
if (!existingProduct) {
|
|
60
|
-
return; // Skip if product doesn't exist (price-only means it should already exist)
|
|
61
|
-
}
|
|
62
|
-
// Find existing extended product
|
|
63
|
-
const existingExtendedProduct = data.existingExtendedProducts.find((ep) => ep.external_id === `${styleData.StyleId}`);
|
|
64
|
-
if (!existingExtendedProduct) {
|
|
65
|
-
return; // Skip if extended product doesn't exist
|
|
66
|
-
}
|
|
67
|
-
// Calculate price data
|
|
68
|
-
const { metal_total_cost, diamond_total_cost, stone_total_cost, cpf_total_cost, metal_total_amount, diamond_total_amount, stone_total_amount, cpf_total_amount, } = (0, product_helper_1.calculateStyleCostsAndAmounts)(styleData.StyleMstDetail);
|
|
69
|
-
// Get extended product data (includes price fields)
|
|
70
|
-
const extendedProductData = (0, product_helper_1.getExtendedProductData)(styleData, {
|
|
71
|
-
baseMetal: styleData.StyleMstDetail?.find((i) => i.RawType === "Metal" && i.IsBase)?.RawCode || "",
|
|
72
|
-
baseMetalPurity: "",
|
|
73
|
-
baseMetalColor: "",
|
|
74
|
-
}, {
|
|
75
|
-
metal_total_cost,
|
|
76
|
-
diamond_total_cost,
|
|
77
|
-
stone_total_cost,
|
|
78
|
-
cpf_total_cost,
|
|
79
|
-
metal_total_amount,
|
|
80
|
-
diamond_total_amount,
|
|
81
|
-
stone_total_amount,
|
|
82
|
-
cpf_total_amount,
|
|
83
|
-
});
|
|
84
|
-
// Get style detail lines (contains detail-level price fields)
|
|
85
|
-
const styleDetails = (0, product_helper_1.getStyleDetailLines)(styleData?.StyleMstDetail || []);
|
|
86
|
-
updates.push({
|
|
87
|
-
extendedProductId: existingExtendedProduct.id,
|
|
88
|
-
productId: existingProduct.id,
|
|
89
|
-
extendedProductData,
|
|
90
|
-
styleDetails,
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
return updates;
|
|
94
|
-
});
|
|
95
|
-
// Execute the price-only update step
|
|
96
|
-
(0, update_style_price_only_1.updateStylePriceOnly)({
|
|
97
|
-
updates: priceOnlyUpdateData,
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
return new workflows_sdk_1.WorkflowResponse({
|
|
101
|
-
success: true,
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLXVwZGF0ZS1zdHlsZS1tYXN0ZXItcHJpY2Utb25seS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3R5bGUtbWFzdGVyL3dvcmtmbG93cy9jcmVhdGUtb3ItdXBkYXRlLXN0eWxlLW1hc3Rlci1wcmljZS1vbmx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUsyQztBQUMzQyw0REFBZ0U7QUFHaEUsaUVBSXNDO0FBRXRDLHdEQUF1RDtBQUN2RCw4RUFBd0U7QUFFeEU7Ozs7Ozs7OztHQVNHO0FBQ1UsUUFBQSwwQ0FBMEMsR0FBRyxJQUFBLDhCQUFjLEVBQ3RFLDBDQUEwQyxFQUMxQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUN2QiwyQ0FBMkM7SUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBQSw2QkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLHlCQUF5QjtJQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUEseUJBQVMsRUFDbEM7UUFDRSxTQUFTO0tBQ1YsRUFDRCxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDLENBQ0YsQ0FBQztJQUVGLDhDQUE4QztJQUM5QyxhQUFhO0lBQ2IsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDbkQsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztRQUM3QixPQUFPLEVBQUU7WUFDUCxhQUFhO1lBQ2IsV0FBVyxFQUFFLGtCQUFrQjtTQUNoQztLQUNGLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsbUJBQW1C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
|