@devx-commerce/plugin-gati 0.0.3 → 0.0.5

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 (202) hide show
  1. package/.medusa/server/development/erp-order-payload-example.js +76 -0
  2. package/.medusa/server/src/api/admin/erp-event/middlewares.js +17 -0
  3. package/.medusa/server/src/api/admin/erp-event/query-config.js +23 -0
  4. package/.medusa/server/src/api/admin/erp-event/route.js +22 -0
  5. package/.medusa/server/src/api/admin/erp-event/utils.js +20 -0
  6. package/.medusa/server/src/api/admin/erp-event/validators.js +9 -0
  7. package/.medusa/server/src/api/admin/middlewares.js +11 -0
  8. package/.medusa/server/src/api/erp/webhook/config.js +101 -0
  9. package/.medusa/server/src/api/erp/webhook/route.js +32 -126
  10. package/.medusa/server/src/api/erp/webhook/utils.js +61 -0
  11. package/.medusa/server/src/api/middlewares.js +15 -0
  12. package/.medusa/server/src/api/store/carts/[id]/custom-add-line-items/route.js +17 -0
  13. package/.medusa/server/src/api/store/carts/middleware.js +14 -0
  14. package/.medusa/server/src/api/store/custom-price/[variant_id]/route.js +25 -0
  15. package/.medusa/server/src/api/store/custom-price/middleware.js +13 -0
  16. package/.medusa/server/src/api/store/custom-price/query-config.js +11 -0
  17. package/.medusa/server/src/api/store/custom-price/validators.js +16 -0
  18. package/.medusa/server/src/api/store/middleware.js +15 -0
  19. package/.medusa/server/src/lib/api-response.js +103 -0
  20. package/.medusa/server/src/modules/category-group-master/migrations/Migration20250729035221.js +16 -0
  21. package/.medusa/server/src/modules/category-group-master/models/category-group-master.js +3 -2
  22. package/.medusa/server/src/modules/category-master/migrations/Migration20250729040659.js +18 -0
  23. package/.medusa/server/src/modules/category-master/models/category-master.js +5 -3
  24. package/.medusa/server/src/modules/discount-master/index.js +13 -0
  25. package/.medusa/server/src/modules/discount-master/migrations/Migration20250707232514.js +21 -0
  26. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051709.js +16 -0
  27. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051737.js +14 -0
  28. package/.medusa/server/src/modules/discount-master/models/discount-master.js +62 -0
  29. package/.medusa/server/src/modules/discount-master/service.js +84 -0
  30. package/.medusa/server/src/modules/erp/service.js +67 -1
  31. package/.medusa/server/src/modules/extended-product/migrations/Migration20250620030100.js +36 -0
  32. package/.medusa/server/src/modules/extended-product/migrations/Migration20250716041546.js +14 -0
  33. package/.medusa/server/src/modules/extended-product/models/extended-product.js +9 -6
  34. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030335.js +32 -0
  35. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030522.js +20 -0
  36. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629220100.js +42 -0
  37. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629223425.js +14 -0
  38. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250704064831.js +14 -0
  39. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250716121609.js +14 -0
  40. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250725104852.js +14 -0
  41. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250726232339.js +14 -0
  42. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +226 -11
  43. package/.medusa/server/src/modules/extended-variant/service.js +24 -1
  44. package/.medusa/server/src/modules/party-master/migrations/Migration20250708123734.js +14 -0
  45. package/.medusa/server/src/modules/party-master/models/party-master.js +2 -1
  46. package/.medusa/server/src/modules/shipping-info-master/index.js +13 -0
  47. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713113247.js +17 -0
  48. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713121440.js +16 -0
  49. package/.medusa/server/src/modules/shipping-info-master/models/shipping-info-master.js +22 -0
  50. package/.medusa/server/src/modules/shipping-info-master/service.js +10 -0
  51. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025135.js +16 -0
  52. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025307.js +22 -0
  53. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730032130.js +14 -0
  54. package/.medusa/server/src/modules/sub-category-master/models/sub-category-master.js +7 -4
  55. package/.medusa/server/src/subscribers/capture-payment.js +36 -0
  56. package/.medusa/server/src/subscribers/category-group-master.js +12 -8
  57. package/.medusa/server/src/subscribers/category-master.js +11 -8
  58. package/.medusa/server/src/subscribers/collection-master.js +6 -2
  59. package/.medusa/server/src/subscribers/create-customer.js +67 -0
  60. package/.medusa/server/src/subscribers/mark-inward.js +77 -0
  61. package/.medusa/server/src/subscribers/party-master-location.js +4 -6
  62. package/.medusa/server/src/subscribers/party-master.js +54 -17
  63. package/.medusa/server/src/subscribers/product-update.js +58 -0
  64. package/.medusa/server/src/subscribers/shipping-info-master.js +136 -0
  65. package/.medusa/server/src/subscribers/sub-category-master.js +5 -6
  66. package/.medusa/server/src/utils/address-formatter.js +2 -2
  67. package/.medusa/server/src/utils/state-helper.js +72 -0
  68. package/.medusa/server/src/workflows/add-to-cart/index.js +19 -0
  69. package/.medusa/server/src/workflows/add-to-cart/steps/get-variant-prices.js +103 -0
  70. package/.medusa/server/src/workflows/add-to-cart/steps/index.js +18 -0
  71. package/.medusa/server/src/workflows/add-to-cart/workflows/add-custom-to-cart.js +68 -0
  72. package/.medusa/server/src/workflows/add-to-cart/workflows/index.js +18 -0
  73. package/.medusa/server/src/workflows/category-group-master/steps/create-category-group.js +5 -3
  74. package/.medusa/server/src/workflows/category-group-master/steps/update-category-group.js +6 -4
  75. package/.medusa/server/src/workflows/category-master/steps/create-category.js +5 -2
  76. package/.medusa/server/src/workflows/category-master/steps/update-category.js +3 -1
  77. package/.medusa/server/src/workflows/collection-group-master/steps/create-category.js +3 -4
  78. package/.medusa/server/src/workflows/collection-group-master/steps/create-collection-group.js +3 -2
  79. package/.medusa/server/src/workflows/collection-group-master/steps/update-collection-group.js +3 -2
  80. package/.medusa/server/src/workflows/collection-master/index.js +1 -1
  81. package/.medusa/server/src/workflows/collection-master/steps/create-category.js +3 -4
  82. package/.medusa/server/src/workflows/collection-master/steps/create-collection.js +3 -2
  83. package/.medusa/server/src/workflows/create-extended-product-from-product/index.js +13 -3
  84. package/.medusa/server/src/workflows/create-extended-product-from-product/steps/create-extended-product.js +1 -1
  85. package/.medusa/server/src/workflows/create-extended-product-from-product/steps/create-style-exploration-lines.js +1 -2
  86. package/.medusa/server/src/workflows/create-extended-variant-from-variant/index.js +13 -3
  87. package/.medusa/server/src/workflows/custom-prices/index.js +19 -0
  88. package/.medusa/server/src/workflows/custom-prices/steps/get-variant-prices.js +97 -0
  89. package/.medusa/server/src/workflows/custom-prices/steps/index.js +18 -0
  90. package/.medusa/server/src/workflows/custom-prices/workflows/fetch-custom-price.js +40 -0
  91. package/.medusa/server/src/workflows/custom-prices/workflows/index.js +18 -0
  92. package/.medusa/server/src/workflows/discount-master/index.js +19 -0
  93. package/.medusa/server/src/workflows/discount-master/steps/create-discount-detail.js +17 -0
  94. package/.medusa/server/src/workflows/discount-master/steps/create-discount.js +17 -0
  95. package/.medusa/server/src/workflows/discount-master/steps/index.js +20 -0
  96. package/.medusa/server/src/workflows/discount-master/steps/update-discount-with-details.js +14 -0
  97. package/.medusa/server/src/workflows/discount-master/steps/update-discount.js +40 -0
  98. package/.medusa/server/src/workflows/discount-master/types/index.js +3 -0
  99. package/.medusa/server/src/workflows/discount-master/workflows/create-discount.js +47 -0
  100. package/.medusa/server/src/workflows/discount-master/workflows/index.js +19 -0
  101. package/.medusa/server/src/workflows/discount-master/workflows/update-discount.js +23 -0
  102. package/.medusa/server/src/workflows/helpers/product-helper.js +14 -18
  103. package/.medusa/server/src/workflows/hooks/product-created.js +2 -2
  104. package/.medusa/server/src/workflows/hooks/product-updated.js +12 -2
  105. package/.medusa/server/src/workflows/hooks/variant-created.js +2 -2
  106. package/.medusa/server/src/workflows/hooks/variant-updated.js +16 -0
  107. package/.medusa/server/src/workflows/index.js +4 -2
  108. package/.medusa/server/src/workflows/inward-master/helper/index.js +373 -0
  109. package/.medusa/server/src/workflows/inward-master/index.js +19 -0
  110. package/.medusa/server/src/workflows/inward-master/steps/create-inward-detail-lines.js +19 -0
  111. package/.medusa/server/src/workflows/inward-master/steps/create-inward-exploration-lines.js +20 -0
  112. package/.medusa/server/src/workflows/inward-master/steps/create-inward-extra-charges-lines.js +20 -0
  113. package/.medusa/server/src/workflows/inward-master/steps/create-inward.js +21 -0
  114. package/.medusa/server/src/workflows/inward-master/steps/delete-inward-detail-lines.js +16 -0
  115. package/.medusa/server/src/workflows/inward-master/steps/delete-inward-exploration-lines.js +16 -0
  116. package/.medusa/server/src/workflows/inward-master/steps/delete-inward-extra-charges-lines.js +16 -0
  117. package/.medusa/server/src/workflows/inward-master/steps/delete-inward.js +20 -0
  118. package/.medusa/server/src/workflows/{create-or-update-style-master/steps/fetch-styles.js → inward-master/steps/fetch-inward-master.js} +5 -5
  119. package/.medusa/server/src/workflows/inward-master/steps/index.js +29 -0
  120. package/.medusa/server/src/workflows/inward-master/steps/update-instock.js +37 -0
  121. package/.medusa/server/src/workflows/inward-master/steps/update-inward.js +44 -0
  122. package/.medusa/server/src/workflows/inward-master/steps/update-variant-manage-inventory.js +36 -0
  123. package/.medusa/server/src/workflows/inward-master/types/index.js +3 -0
  124. package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +209 -0
  125. package/.medusa/server/src/workflows/inward-master/workflows/delete-inward.js +102 -0
  126. package/.medusa/server/src/workflows/inward-master/workflows/index.js +21 -0
  127. package/.medusa/server/src/workflows/inward-master/workflows/update-instock.js +102 -0
  128. package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +37 -0
  129. package/.medusa/server/src/workflows/orders/index.js +18 -0
  130. package/.medusa/server/src/workflows/orders/steps/index.js +18 -0
  131. package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +32 -0
  132. package/.medusa/server/src/workflows/orders/utils/order-helper.js +77 -0
  133. package/.medusa/server/src/workflows/orders/workflows/index.js +18 -0
  134. package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +42 -0
  135. package/.medusa/server/src/workflows/party-master/index.js +17 -137
  136. package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +33 -0
  137. package/.medusa/server/src/workflows/party-master/steps/create-party.js +2 -1
  138. package/.medusa/server/src/workflows/party-master/steps/index.js +23 -0
  139. package/.medusa/server/src/workflows/party-master/steps/update-party.js +2 -1
  140. package/.medusa/server/src/workflows/party-master/workflows/create-customer-erp.js +11 -0
  141. package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +155 -0
  142. package/.medusa/server/src/workflows/party-master/workflows/create-party-workflow.js +13 -0
  143. package/.medusa/server/src/workflows/party-master/workflows/index.js +21 -0
  144. package/.medusa/server/src/workflows/party-style-master/index.js +19 -0
  145. package/.medusa/server/src/workflows/party-style-master/steps/delete-party-style-master.js +40 -0
  146. package/.medusa/server/src/workflows/party-style-master/steps/fetch-party-styles.js +70 -0
  147. package/.medusa/server/src/workflows/party-style-master/steps/index.js +20 -0
  148. package/.medusa/server/src/workflows/party-style-master/steps/update-party-style-master.js +40 -0
  149. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +238 -0
  150. package/.medusa/server/src/workflows/party-style-master/types/index.js +3 -0
  151. package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +388 -0
  152. package/.medusa/server/src/workflows/party-style-master/workflows/delete-party-style-master.js +98 -0
  153. package/.medusa/server/src/workflows/party-style-master/workflows/index.js +19 -0
  154. package/.medusa/server/src/workflows/party-style-master/workflows/update-party-style-master.js +26 -0
  155. package/.medusa/server/src/workflows/raw-master/steps/create-raw.js +1 -2
  156. package/.medusa/server/src/workflows/shipping-info-master/helper/index.js +23 -0
  157. package/.medusa/server/src/workflows/shipping-info-master/index.js +19 -0
  158. package/.medusa/server/src/workflows/shipping-info-master/steps/create-shipping-info-erp.js +10 -0
  159. package/.medusa/server/src/workflows/shipping-info-master/steps/create-shipping-info.js +17 -0
  160. package/.medusa/server/src/workflows/shipping-info-master/steps/delete-shipping-info.js +20 -0
  161. package/.medusa/server/src/workflows/shipping-info-master/steps/fetch-shipping-info-master.js +70 -0
  162. package/.medusa/server/src/workflows/shipping-info-master/steps/index.js +22 -0
  163. package/.medusa/server/src/workflows/shipping-info-master/steps/update-shipping-info.js +36 -0
  164. package/.medusa/server/src/workflows/shipping-info-master/types/index.js +3 -0
  165. package/.medusa/server/src/workflows/shipping-info-master/workflows/create-shipping-info.js +24 -0
  166. package/.medusa/server/src/workflows/shipping-info-master/workflows/delete-shipping-info.js +28 -0
  167. package/.medusa/server/src/workflows/shipping-info-master/workflows/index.js +20 -0
  168. package/.medusa/server/src/workflows/shipping-info-master/workflows/update-shipping-info.js +22 -0
  169. package/.medusa/server/src/workflows/style-master/index.js +19 -0
  170. package/.medusa/server/src/workflows/style-master/steps/delete-style-master.js +38 -0
  171. package/.medusa/server/src/workflows/style-master/steps/fetch-styles.js +70 -0
  172. package/.medusa/server/src/workflows/style-master/steps/index.js +19 -0
  173. package/.medusa/server/src/workflows/style-master/workflows/create-or-update-style-master.js +329 -0
  174. package/.medusa/server/src/workflows/style-master/workflows/delete-style-master.js +24 -0
  175. package/.medusa/server/src/workflows/style-master/workflows/index.js +19 -0
  176. package/.medusa/server/src/workflows/sub-category-master/index.js +4 -1
  177. package/.medusa/server/src/workflows/sub-category-master/steps/create-category.js +62 -0
  178. package/.medusa/server/src/workflows/sub-category-master/steps/create-sub-category.js +5 -2
  179. package/.medusa/server/src/workflows/sub-category-master/steps/update-sub-category.js +3 -1
  180. package/.medusa/server/src/workflows/types/common.js +21 -0
  181. package/.medusa/server/src/workflows/types/index.js +1 -9
  182. package/.medusa/server/src/workflows/update-extended-product-from-product/steps/update-extended-product-from-product.js +3 -3
  183. package/.medusa/server/src/workflows/update-extended-variant-from-variant/index.js +17 -41
  184. package/.medusa/server/src/workflows/update-extended-variant-from-variant/steps/index.js +20 -0
  185. package/.medusa/server/src/workflows/update-extended-variant-from-variant/steps/update-extended-variant-batch.js +21 -0
  186. package/.medusa/server/src/workflows/update-extended-variant-from-variant/steps/update-extended-variant-from-variant.js +55 -0
  187. package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/index.js +19 -0
  188. package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-from-variant.js +58 -0
  189. package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +45 -0
  190. package/package.json +1 -1
  191. package/.medusa/server/src/api/admin/plugin/route.js +0 -7
  192. package/.medusa/server/src/api/store/plugin/route.js +0 -7
  193. package/.medusa/server/src/modules/category-group-master/migrations/Migration20250531004725.js +0 -15
  194. package/.medusa/server/src/modules/extended-product/migrations/Migration20250519043358.js +0 -27
  195. package/.medusa/server/src/modules/extended-product/migrations/Migration20250601030519.js +0 -23
  196. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250507055941.js +0 -27
  197. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250508025507.js +0 -14
  198. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250601045242.js +0 -18
  199. package/.medusa/server/src/workflows/create-or-update-party-style-master/index.js +0 -191
  200. package/.medusa/server/src/workflows/create-or-update-party-style-master/steps/fetch-party-styles.js +0 -70
  201. package/.medusa/server/src/workflows/create-or-update-style-master/index.js +0 -326
  202. package/.medusa/server/src/workflows/update-extended-variant-from-variant/steps/update-extended-product-from-product.js +0 -54
@@ -1,191 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
7
- const core_flows_1 = require("@medusajs/medusa/core-flows");
8
- const create_or_update_product_options_1 = __importDefault(require("../create-or-update-product-options"));
9
- const product_helper_1 = require("../helpers/product-helper");
10
- const fetch_party_styles_1 = require("./steps/fetch-party-styles");
11
- /**
12
- * Main workflow for handling PartyStyleMst operations
13
- * This workflow:
14
- * 1. Fetches PartyStyle data from ERP
15
- * 2. Conditionally creates variants based on operation type
16
- *
17
- * @param input - Contains operation type, datafor type, and transaction IDs
18
- */
19
- const partyStyleMstWorkflow = (0, workflows_sdk_1.createWorkflow)("party-style-mst", (input) => {
20
- // Step 1: Fetch style data from ERP system
21
- const partyStyleData = (0, fetch_party_styles_1.fetchPartyStyleData)(input);
22
- const externalIdsFilters = (0, workflows_sdk_1.transform)({
23
- partyStyleData,
24
- }, (data) => {
25
- return [
26
- ...new Set(data.partyStyleData.map((product) => `${product?.StyleId}`)),
27
- ];
28
- });
29
- const { data: existingProducts } = (0, core_flows_1.useQueryGraphStep)({
30
- entity: "product",
31
- fields: [
32
- "id",
33
- "external_id",
34
- "variants.*",
35
- "options.*",
36
- "extended_product.*",
37
- "extended_product.style_details.*",
38
- "extended_product.style_explorations.*",
39
- "extended_product.style_collections.*",
40
- ],
41
- filters: {
42
- external_id: externalIdsFilters,
43
- },
44
- }).config({ name: "existing-products" });
45
- (0, workflows_sdk_1.when)(input, (input) => {
46
- return input.operation === "add";
47
- }).then(() => {
48
- // Create product options
49
- const productOptionsAllData = create_or_update_product_options_1.default.runAsStep({
50
- input: {
51
- existingProducts,
52
- partyStyleData,
53
- },
54
- });
55
- const { variantsToCreate, productsToUpdate } = (0, workflows_sdk_1.transform)({
56
- partyStyleData,
57
- existingProducts,
58
- productOptionsAllData,
59
- }, (data) => {
60
- const variantsToCreate = [];
61
- const productsToUpdate = [];
62
- const existingProductIds = data.existingProducts.map((product) => product.external_id);
63
- // First, collect all variant data for each product
64
- const productVariantData = new Map();
65
- data.partyStyleData
66
- .filter((styleData) => existingProductIds.includes(String(styleData.StyleId)))
67
- .forEach((styleData) => {
68
- const existingProduct = data.existingProducts.find((p) => p.external_id === String(styleData.StyleId));
69
- 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.PartyStyleMstDetail);
70
- const { baseMetal, baseMetalPurity, baseMetalColor } = (0, product_helper_1.getBaseMetalDetails)(styleData.PartyStyleMstDetail);
71
- const extendedVariantData = (0, product_helper_1.getExtendedVariantData)(styleData, { baseMetal, baseMetalPurity, baseMetalColor }, {
72
- metal_total_cost,
73
- diamond_total_cost,
74
- stone_total_cost,
75
- cpf_total_cost,
76
- metal_total_amount,
77
- diamond_total_amount,
78
- stone_total_amount,
79
- cpf_total_amount,
80
- });
81
- // Collect variant data for each product
82
- if (!productVariantData.has(existingProduct.id)) {
83
- productVariantData.set(existingProduct.id, {
84
- gross_weights: new Set(),
85
- net_weights: new Set(),
86
- prices: new Set(),
87
- product: existingProduct,
88
- });
89
- }
90
- const productData = productVariantData.get(existingProduct.id);
91
- productData.gross_weights.add(extendedVariantData.gross_weight.toString());
92
- productData.net_weights.add(extendedVariantData.net_weight.toString());
93
- productData.prices.add(styleData.Mrp.toString());
94
- // Create variant
95
- const productOptions = (0, product_helper_1.createProductOptionsForPartyStyleId)(styleData, data.productOptionsAllData.find((option) => option.id === existingProduct.id));
96
- const title = styleData.PartyStyleMstExploration.find((exploration) => exploration.ExplorationName.toLowerCase() === "product name")?.ExplorationValue;
97
- const variant = {
98
- product_id: existingProduct.id,
99
- title: title ||
100
- `${styleData.PartyStyleCode}-${styleData.PartyStyleId}-${styleData.StyleId}`,
101
- sku: `${styleData.PartyStyleSKUNo}-${styleData.PartyStyleCode}` ||
102
- `${styleData.PartyStyleCode}-${styleData.PartyStyleId}-${styleData.StyleId}`,
103
- prices: [
104
- {
105
- amount: styleData.Mrp,
106
- currency_code: "inr",
107
- },
108
- ],
109
- options: {
110
- ...productOptions,
111
- },
112
- manage_inventory: false,
113
- metadata: {
114
- external_id: `${styleData.PartyStyleId}`,
115
- },
116
- };
117
- const styleDetails = (0, product_helper_1.getPartyStyleDetailLines)(styleData?.PartyStyleMstDetail);
118
- const explorationDetails = (0, product_helper_1.getPartyStyleExplorationLines)(styleData?.PartyStyleMstExploration);
119
- variantsToCreate.push({
120
- variant: variant,
121
- additional_data: {
122
- extendedVariantData,
123
- styleDetails,
124
- explorationDetails,
125
- },
126
- });
127
- });
128
- // Now update products with all collected variant data
129
- productVariantData.forEach((productData, productId) => {
130
- const existingProduct = productData.product;
131
- productsToUpdate.push({
132
- product: existingProduct,
133
- additional_data: {
134
- extendedProductData: {
135
- ...existingProduct.extended_product,
136
- gross_weights_range: Array.from(productData.gross_weights),
137
- net_weights_range: Array.from(productData.net_weights),
138
- prices_range: Array.from(productData.prices),
139
- },
140
- styleDetails: existingProduct?.extended_product?.style_details,
141
- styleExplorations: existingProduct?.extended_product?.style_explorations,
142
- styleCollections: existingProduct?.extended_product?.style_collections,
143
- },
144
- });
145
- });
146
- return {
147
- variantsToCreate: {
148
- product_variants: variantsToCreate.map((p) => p.variant),
149
- additional_data: variantsToCreate.reduce((acc, p) => {
150
- const externalId = p?.variant?.metadata?.external_id;
151
- if (externalId) {
152
- acc[externalId] = p.additional_data;
153
- }
154
- return acc;
155
- }, {}),
156
- },
157
- productsToUpdate: {
158
- products: productsToUpdate.map((p) => {
159
- return {
160
- id: p.product.id,
161
- external_id: p.product.external_id,
162
- options: data.productOptionsAllData.find((option) => option.id === p.product.id)?.options,
163
- };
164
- }),
165
- additional_data: productsToUpdate.reduce((acc, p) => {
166
- const externalId = p?.product?.external_id;
167
- if (externalId) {
168
- acc[externalId] = p.additional_data;
169
- }
170
- return acc;
171
- }, {}),
172
- },
173
- };
174
- });
175
- core_flows_1.updateProductsWorkflow.runAsStep({
176
- input: {
177
- ...productsToUpdate,
178
- },
179
- });
180
- core_flows_1.createProductVariantsWorkflow.runAsStep({
181
- input: {
182
- ...variantsToCreate,
183
- },
184
- });
185
- });
186
- return new workflows_sdk_1.WorkflowResponse({
187
- success: true,
188
- });
189
- });
190
- exports.default = partyStyleMstWorkflow;
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2NyZWF0ZS1vci11cGRhdGUtcGFydHktc3R5bGUtbWFzdGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEscUVBSzJDO0FBQzNDLDREQUlxQztBQUdyQywyR0FBdUY7QUFDdkYsOERBT21DO0FBRW5DLG1FQUFpRTtBQUVqRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLDhCQUFjLEVBQzFDLGlCQUFpQixFQUNqQixDQUFDLEtBQXlCLEVBQUUsRUFBRTtJQUM1QiwyQ0FBMkM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBQSx3Q0FBbUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUVsRCxNQUFNLGtCQUFrQixHQUFHLElBQUEseUJBQVMsRUFDbEM7UUFDRSxjQUFjO0tBQ2YsRUFDRCxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1AsT0FBTztZQUNMLEdBQUcsSUFBSSxHQUFHLENBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQzVEO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FDRixDQUFDO0lBRUYsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDbkQsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFO1lBQ04sSUFBSTtZQUNKLGFBQWE7WUFDYixZQUFZO1lBQ1osV0FBVztZQUNYLG9CQUFvQjtZQUNwQixrQ0FBa0M7WUFDbEMsdUNBQXVDO1lBQ3ZDLHNDQUFzQztTQUN2QztRQUNELE9BQU8sRUFBRTtZQUNQLFdBQVcsRUFBRSxrQkFBa0I7U0FDaEM7S0FDRixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFt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
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchPartyStyleData = void 0;
4
- const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
- const BATCH_SIZE = 50; // Process 50 items at a time
6
- const MAX_RETRIES = 3;
7
- const RETRY_DELAY = 1000; // 1 second delay between retries
8
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
9
- const processBatch = async (erpService, datafor, batch, retryCount = 0) => {
10
- try {
11
- const results = await Promise.all(batch.map(async (transactionId) => {
12
- try {
13
- return await erpService.getMasterData(datafor, transactionId);
14
- }
15
- catch (error) {
16
- console.error(`Error fetching data for ID ${transactionId}:`, error);
17
- return null;
18
- }
19
- }));
20
- // Filter out failed requests
21
- const successfulResults = results.filter((result) => result !== null);
22
- // If we have failed requests and haven't exceeded max retries, retry them
23
- if (results.length !== successfulResults.length &&
24
- retryCount < MAX_RETRIES) {
25
- const failedIds = batch.filter((_, index) => results[index] === null);
26
- console.log(`Retrying ${failedIds.length} failed requests (attempt ${retryCount + 1})`);
27
- await sleep(RETRY_DELAY);
28
- const retryResults = await processBatch(erpService, datafor, failedIds, retryCount + 1);
29
- return [...successfulResults, ...retryResults];
30
- }
31
- return successfulResults;
32
- }
33
- catch (error) {
34
- console.error("Batch processing error:", error);
35
- if (retryCount < MAX_RETRIES) {
36
- console.log(`Retrying entire batch (attempt ${retryCount + 1})`);
37
- await sleep(RETRY_DELAY);
38
- return processBatch(erpService, datafor, batch, retryCount + 1);
39
- }
40
- throw error;
41
- }
42
- };
43
- /**
44
- * Step to fetch style data from ERP system
45
- * This step processes data in batches to avoid timeouts and handle large datasets
46
- * @param input - Contains datafor type and array of transaction IDs
47
- * @param container - Dependency injection container to resolve services
48
- */
49
- exports.fetchPartyStyleData = (0, workflows_sdk_1.createStep)("fetch-party-style-data", async (input, { container }) => {
50
- const erpService = container.resolve("erp");
51
- const { datafor, data } = input;
52
- // Split data into batches
53
- const batches = [];
54
- for (let i = 0; i < data.length; i += BATCH_SIZE) {
55
- batches.push(data.slice(i, i + BATCH_SIZE));
56
- }
57
- console.log(`Processing ${data.length} items in ${batches.length} batches`);
58
- // Process each batch sequentially
59
- const allResults = [];
60
- for (let i = 0; i < batches.length; i++) {
61
- console.log(`Processing batch ${i + 1}/${batches.length}`);
62
- const batchResults = await processBatch(erpService, datafor, batches[i]);
63
- allResults.push(...batchResults);
64
- }
65
- console.log(`Successfully processed ${allResults.length} items`);
66
- return new workflows_sdk_1.StepResponse(allResults);
67
- }, async (result, { container }) => {
68
- console.log("Something went wrong in fetch-style-data");
69
- });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtcGFydHktc3R5bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jcmVhdGUtb3ItdXBkYXRlLXBhcnR5LXN0eWxlLW1hc3Rlci9zdGVwcy9mZXRjaC1wYXJ0eS1zdHlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTZFO0FBSTdFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLDZCQUE2QjtBQUNwRCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsaUNBQWlDO0FBRTNELE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWhGLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFDeEIsVUFBNEIsRUFDNUIsT0FBZSxFQUNmLEtBQWUsRUFDZixVQUFVLEdBQUcsQ0FBQyxFQUNFLEVBQUU7SUFDbEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLGFBQWEsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNyRSxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsNkJBQTZCO1FBQzdCLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBRXRFLDBFQUEwRTtRQUMxRSxJQUNFLE9BQU8sQ0FBQyxNQUFNLEtBQUssaUJBQWlCLENBQUMsTUFBTTtZQUMzQyxVQUFVLEdBQUcsV0FBVyxFQUN4QixDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN0RSxPQUFPLENBQUMsR0FBRyxDQUNULFlBQVksU0FBUyxDQUFDLE1BQU0sNkJBQzFCLFVBQVUsR0FBRyxDQUNmLEdBQUcsQ0FDSixDQUFDO1lBQ0YsTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekIsTUFBTSxZQUFZLEdBQUcsTUFBTSxZQUFZLENBQ3JDLFVBQVUsRUFDVixPQUFPLEVBQ1AsU0FBUyxFQUNULFVBQVUsR0FBRyxDQUFDLENBQ2YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE9BQU8saUJBQWlCLENBQUM7SUFDM0IsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksVUFBVSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sWUFBWSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDVSxRQUFBLG1CQUFtQixHQUFHLElBQUEsMEJBQVUsRUFDM0Msd0JBQXdCLEVBQ3hCLEtBQUssRUFBRSxLQUF5QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNqRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBcUIsQ0FBQztJQUNoRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVoQywwQkFBMEI7SUFDMUIsTUFBTSxPQUFPLEdBQWUsRUFBRSxDQUFDO0lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxDQUFDLE1BQU0sYUFBYSxPQUFPLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQztJQUU1RSxrQ0FBa0M7SUFDbEMsTUFBTSxVQUFVLEdBQVUsRUFBRSxDQUFDO0lBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsVUFBVSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7SUFDakUsT0FBTyxJQUFJLDRCQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxFQUNELEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQ0YsQ0FBQyJ9
@@ -1,326 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
4
- const core_flows_1 = require("@medusajs/medusa/core-flows");
5
- const product_helper_1 = require("../helpers/product-helper");
6
- const fetch_styles_1 = require("./steps/fetch-styles");
7
- /**
8
- * Main workflow for handling StyleMst operations
9
- * This workflow:
10
- * 1. Fetches style data from ERP
11
- * 2. Gets required sales channels and shipping profiles
12
- * 3. Conditionally creates products based on operation type
13
- *
14
- * @param input - Contains operation type, datafor type, and transaction IDs
15
- */
16
- const styleMstWorkflow = (0, workflows_sdk_1.createWorkflow)("style-mst", (input) => {
17
- // Step 1: Fetch style data from ERP system
18
- const styleData = (0, fetch_styles_1.fetchStyleData)(input);
19
- // Step 2: Get all sales channels for product creation
20
- const { data: salesChannels } = (0, core_flows_1.useQueryGraphStep)({
21
- entity: "sales_channel",
22
- fields: ["id", "name"],
23
- }).config({ name: "sales-channels" });
24
- // Step 3: Get shipping profile for product creation
25
- const { data: shippingProfiles } = (0, core_flows_1.useQueryGraphStep)({
26
- entity: "shipping_profile",
27
- fields: ["id"],
28
- pagination: {
29
- take: 1,
30
- },
31
- }).config({ name: "shipping-profile" });
32
- const externalIdsFilters = (0, workflows_sdk_1.transform)({
33
- styleData,
34
- }, (data) => {
35
- return data.styleData.map((product) => `${product.StyleId}`);
36
- });
37
- const externalCollectionFilters = (0, workflows_sdk_1.transform)({
38
- styleData,
39
- }, (data) => {
40
- return data.styleData.map((product) => {
41
- const collection = product?.StyleMstCollection?.find((collection) => collection.CollectionGroupName.toLowerCase() === "collection")?.Collection;
42
- return collection;
43
- });
44
- });
45
- const externalCollectionGroupFilters = (0, workflows_sdk_1.transform)({
46
- styleData,
47
- }, (data) => {
48
- return data.styleData
49
- .map((product) => {
50
- return product?.StyleMstCollection?.filter((collection) => collection.CollectionGroupName.toLowerCase() !== "collection")?.map((collection) => collection.CollectionGroupNo);
51
- })
52
- .flat()
53
- .filter(Boolean);
54
- });
55
- const externalCollectionCategoryFilters = (0, workflows_sdk_1.transform)({
56
- styleData,
57
- }, (data) => {
58
- return data.styleData
59
- .map((product) => {
60
- return product?.StyleMstCollection?.filter((collection) => collection.CollectionGroupName.toLowerCase() !== "collection")?.map((collection) => collection.DesgNo);
61
- })
62
- .flat()
63
- .filter(Boolean);
64
- });
65
- const externalCategoryGroupFilters = (0, workflows_sdk_1.transform)({
66
- styleData,
67
- }, (data) => {
68
- return data.styleData.map((product) => product?.GrpGroupNo);
69
- });
70
- const externalCategoryFilters = (0, workflows_sdk_1.transform)({
71
- styleData,
72
- }, (data) => {
73
- return data.styleData.map((product) => product?.GrpNo);
74
- });
75
- const externalSubCategoryFilters = (0, workflows_sdk_1.transform)({
76
- styleData,
77
- }, (data) => {
78
- return data.styleData.map((product) => product?.SubItmNo);
79
- });
80
- const combinedCategoryFilters = (0, workflows_sdk_1.transform)({
81
- externalCategoryFilters,
82
- externalSubCategoryFilters,
83
- }, (data) => [
84
- ...data.externalCategoryFilters,
85
- ...data.externalSubCategoryFilters,
86
- ]);
87
- // @ts-ignore
88
- const { data: existingProducts } = (0, core_flows_1.useQueryGraphStep)({
89
- entity: "product",
90
- fields: ["id", "external_id", "variants.*"],
91
- filters: {
92
- // @ts-ignore
93
- external_id: externalIdsFilters,
94
- },
95
- }).config({ name: "existing-products" });
96
- const { data: existingCollection } = (0, core_flows_1.useQueryGraphStep)({
97
- entity: "collection_master",
98
- fields: ["*"],
99
- filters: {
100
- collection_code: externalCollectionFilters,
101
- },
102
- }).config({ name: "existing-collection" });
103
- const { data: existingCategoryGroup } = (0, core_flows_1.useQueryGraphStep)({
104
- entity: "category_group_master",
105
- fields: ["*"],
106
- filters: {
107
- grp_no: externalCategoryGroupFilters,
108
- },
109
- }).config({ name: "existing-category-group" });
110
- const { data: existingCategory } = (0, core_flows_1.useQueryGraphStep)({
111
- entity: "category_master",
112
- fields: ["*"],
113
- filters: {
114
- grp_no: combinedCategoryFilters,
115
- },
116
- }).config({ name: "existing-category" });
117
- const { data: existingSubCategory } = (0, core_flows_1.useQueryGraphStep)({
118
- entity: "sub_category_master",
119
- fields: ["*"],
120
- filters: {
121
- sub_item_no: externalSubCategoryFilters,
122
- },
123
- }).config({ name: "existing-sub-category" });
124
- const { data: existingCollectionGroup } = (0, core_flows_1.useQueryGraphStep)({
125
- entity: "collection_group_master",
126
- fields: ["*"],
127
- filters: {
128
- collection_group_no: externalCollectionGroupFilters,
129
- },
130
- }).config({ name: "existing-collection-group" });
131
- const { data: existingCollectionCategory } = (0, core_flows_1.useQueryGraphStep)({
132
- entity: "collection_master",
133
- fields: ["*"],
134
- filters: {
135
- collection_no: externalCollectionCategoryFilters,
136
- },
137
- }).config({ name: "existing-collection-category" });
138
- (0, workflows_sdk_1.when)(input, (input) => {
139
- return input.operation === "add" || input.operation === "update";
140
- }).then(() => {
141
- const { productsToCreate, productsToUpdate } = (0, workflows_sdk_1.transform)({
142
- styleData,
143
- shippingProfiles,
144
- salesChannels,
145
- existingProducts,
146
- existingCollection,
147
- existingCategoryGroup,
148
- existingCategory,
149
- existingSubCategory,
150
- existingCollectionGroup,
151
- existingCollectionCategory,
152
- }, (data) => {
153
- const productsToCreate = [];
154
- const productsToUpdate = [];
155
- data.styleData.forEach((styleData) => {
156
- // Calculate costs based on raw codes
157
- 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);
158
- const productTitle = styleData.StyleMstExploration?.find((exploration) => exploration.ExplorationCode === "Product Name")?.ExplorationValue ||
159
- `Style ${styleData.StyleCode}-${styleData.StyleId}`;
160
- const productDescription = styleData.StyleMstExploration?.find((exploration) => exploration.ExplorationCode === "PD")?.ExplorationValue || "";
161
- const productAvailabilityInOnline = styleData.StyleMstExploration?.find((exploration) => exploration.ExplorationCode.toLowerCase() === "web indicator")?.ExplorationValue.toLowerCase() === "true";
162
- const { baseMetal, baseMetalPurity, baseMetalColor } = (0, product_helper_1.getBaseMetalDetails)(styleData.StyleMstDetail);
163
- let collectionId = "";
164
- const categoryIds = [];
165
- const collection = styleData?.StyleMstCollection?.find((collection) => collection.CollectionGroupName.toLowerCase() === "collection")?.Collection;
166
- if (styleData.GrpGroupNo) {
167
- const existingCategoryGroupData = data.existingCategoryGroup.find((c) => c.grp_no === styleData.GrpGroupNo);
168
- if (existingCategoryGroupData) {
169
- categoryIds.push(existingCategoryGroupData?.mapping_id);
170
- }
171
- }
172
- if (styleData.GrpNo) {
173
- const existingCategoryData = data.existingCategory.find((c) => c.grp_no === styleData.GrpNo);
174
- if (existingCategoryData) {
175
- categoryIds.push(existingCategoryData?.mapping_id);
176
- }
177
- }
178
- if (styleData.SubItmNo) {
179
- const existingSubCategoryData = data.existingSubCategory.find((c) => c.sub_item_no === styleData.SubItmNo);
180
- if (existingSubCategoryData) {
181
- categoryIds.push(existingSubCategoryData?.mapping_id);
182
- }
183
- }
184
- const categories = styleData?.StyleMstCollection?.filter((collection) => collection.CollectionGroupName.toLowerCase() !== "collection")?.map((collection) => collection.DesgNo);
185
- if (categories?.length > 0) {
186
- for (const category of categories) {
187
- const existingCollectionCategoryData = data.existingCollectionCategory.find((c) => c.collection_no === category);
188
- if (existingCollectionCategoryData) {
189
- categoryIds.push(existingCollectionCategoryData?.mapping_id);
190
- }
191
- }
192
- }
193
- const categoriesByGroup = styleData?.StyleMstCollection?.filter((collection) => collection.CollectionGroupName.toLowerCase() !== "collection")?.map((collection) => collection.CollectionGroupNo);
194
- if (categoriesByGroup?.length > 0) {
195
- for (const category of categoriesByGroup) {
196
- const existingCollectionGroupData = data.existingCollectionGroup.find((c) => c.collection_group_no === category);
197
- if (existingCollectionGroupData) {
198
- categoryIds.push(existingCollectionGroupData?.mapping_id);
199
- }
200
- }
201
- }
202
- if (collection) {
203
- const existingCollectionData = data.existingCollection.find((c) => c.collection_code === collection);
204
- if (existingCollectionData) {
205
- collectionId = existingCollectionData?.mapping_id;
206
- }
207
- }
208
- const onlineSalesChannelId = data.salesChannels.find((channel) => channel.name.toLowerCase() === "online")?.id || "";
209
- const offlineSalesChannelId = data.salesChannels.find((channel) => channel.name.toLowerCase() === "offline")?.id || "";
210
- const width = parseFloat(styleData.StyleMstExploration.find((i) => i.ExplorationName.toLowerCase() === "width")?.ExplorationValue?.split(" ")[0] || "0");
211
- const height = parseFloat(styleData.StyleMstExploration.find((i) => i.ExplorationName.toLowerCase() === "height")?.ExplorationValue?.split(" ")[0] || "0");
212
- //TODO: Add category ids
213
- const product = {
214
- external_id: `${styleData.StyleId}`,
215
- title: productTitle || "",
216
- description: productDescription || styleData.WebDescription || "",
217
- status: "draft",
218
- options: [
219
- {
220
- title: "Default",
221
- values: ["Default"],
222
- },
223
- ],
224
- origin_country: "IN",
225
- material: styleData.StyleMstDetail.find((i) => i.RawType === "Metal" && i.IsBase)?.RawCode || "",
226
- height,
227
- width,
228
- handle: (0, product_helper_1.toKebabCase)([productTitle, styleData.StyleCode]),
229
- variants: [],
230
- shipping_profile_id: data.shippingProfiles[0].id,
231
- category_ids: categoryIds.filter(Boolean),
232
- sales_channels: [
233
- {
234
- id: productAvailabilityInOnline
235
- ? onlineSalesChannelId
236
- : offlineSalesChannelId,
237
- },
238
- ],
239
- };
240
- const existingProduct = data.existingProducts.find((p) => p.external_id === product.external_id);
241
- if (collectionId) {
242
- product.collection_id = collectionId;
243
- }
244
- if (existingProduct) {
245
- product.id = existingProduct.id;
246
- product.status = existingProduct.status;
247
- product.title = existingProduct.title;
248
- product.description = existingProduct.description;
249
- product.handle = existingProduct.handle;
250
- }
251
- const extendedProductData = (0, product_helper_1.getExtendedProductData)(styleData, { baseMetal, baseMetalPurity, baseMetalColor }, {
252
- metal_total_cost,
253
- diamond_total_cost,
254
- stone_total_cost,
255
- cpf_total_cost,
256
- metal_total_amount,
257
- diamond_total_amount,
258
- stone_total_amount,
259
- cpf_total_amount,
260
- });
261
- const styleDetails = (0, product_helper_1.getStyleDetailLines)(styleData?.StyleMstDetail || []);
262
- const styleExploration = (0, product_helper_1.getStyleExplorationLines)(styleData?.StyleMstExploration || []);
263
- const styleCollection = (0, product_helper_1.getStyleCollectionLines)(styleData?.StyleMstCollection || []);
264
- if (existingProduct) {
265
- productsToUpdate.push({
266
- product: product,
267
- additional_data: {
268
- extendedProductData,
269
- styleDetails,
270
- styleExploration,
271
- styleCollection,
272
- },
273
- });
274
- }
275
- else {
276
- productsToCreate.push({
277
- product: product,
278
- additional_data: {
279
- extendedProductData,
280
- styleDetails,
281
- styleExploration,
282
- styleCollection,
283
- },
284
- });
285
- }
286
- });
287
- return {
288
- productsToCreate: {
289
- products: productsToCreate.map((p) => p.product),
290
- additional_data: productsToCreate.reduce((acc, p) => {
291
- const externalId = p?.product?.external_id;
292
- if (externalId) {
293
- acc[externalId] = p.additional_data;
294
- }
295
- return acc;
296
- }, {}),
297
- },
298
- productsToUpdate: {
299
- products: productsToUpdate.map((p) => p.product),
300
- additional_data: productsToUpdate.reduce((acc, p) => {
301
- const externalId = p?.product?.external_id;
302
- if (externalId) {
303
- acc[externalId] = p.additional_data;
304
- }
305
- return acc;
306
- }, {}),
307
- },
308
- };
309
- });
310
- core_flows_1.createProductsWorkflow.runAsStep({
311
- input: {
312
- ...productsToCreate,
313
- },
314
- });
315
- core_flows_1.updateProductsWorkflow.runAsStep({
316
- input: {
317
- ...productsToUpdate,
318
- },
319
- });
320
- });
321
- return new workflows_sdk_1.WorkflowResponse({
322
- success: true,
323
- });
324
- });
325
- exports.default = styleMstWorkflow;
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2NyZWF0ZS1vci11cGRhdGUtc3R5bGUtbWFzdGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEscUVBSzJDO0FBQzNDLDREQUlxQztBQUdyQyw4REFRbUM7QUFFbkMsdURBQXNEO0FBRXREOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDhCQUFjLEVBQUMsV0FBVyxFQUFFLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQzVFLDJDQUEyQztJQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFBLDZCQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEMsc0RBQXNEO0lBQ3RELE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUNoRCxNQUFNLEVBQUUsZUFBZTtRQUN2QixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0tBQ3ZCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBRXRDLG9EQUFvRDtJQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUNuRCxNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFDO1NBQ1I7S0FDRixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUV4QyxNQUFNLGtCQUFrQixHQUFHLElBQUEseUJBQVMsRUFDbEM7UUFDRSxTQUFTO0tBQ1YsRUFDRCxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FB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