@devx-commerce/plugin-gati 0.0.2 → 0.0.3

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 (148) hide show
  1. package/.medusa/server/src/api/erp/webhook/route.js +99 -14
  2. package/.medusa/server/src/links/extended-product.js +10 -0
  3. package/.medusa/server/src/links/extended-variant.js +10 -0
  4. package/.medusa/server/src/modules/category-group-master/index.js +13 -0
  5. package/.medusa/server/src/modules/category-group-master/migrations/Migration20250531004725.js +15 -0
  6. package/.medusa/server/src/modules/category-group-master/models/category-group-master.js +12 -0
  7. package/.medusa/server/src/modules/category-group-master/service.js +10 -0
  8. package/.medusa/server/src/modules/category-master/index.js +13 -0
  9. package/.medusa/server/src/modules/category-master/migrations/Migration20250513122212.js +15 -0
  10. package/.medusa/server/src/modules/category-master/migrations/Migration20250519180539.js +14 -0
  11. package/.medusa/server/src/modules/category-master/migrations/Migration20250531004724.js +14 -0
  12. package/.medusa/server/src/modules/category-master/models/category-master.js +15 -0
  13. package/.medusa/server/src/modules/category-master/service.js +10 -0
  14. package/.medusa/server/src/modules/collection-group-master/index.js +13 -0
  15. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20250531022203.js +15 -0
  16. package/.medusa/server/src/modules/collection-group-master/models/collection-group-master.js +12 -0
  17. package/.medusa/server/src/modules/collection-group-master/service.js +10 -0
  18. package/.medusa/server/src/modules/collection-master/index.js +13 -0
  19. package/.medusa/server/src/modules/collection-master/migrations/Migration20250513122211.js +16 -0
  20. package/.medusa/server/src/modules/collection-master/migrations/Migration20250531025048.js +14 -0
  21. package/.medusa/server/src/modules/collection-master/models/collection-master.js +15 -0
  22. package/.medusa/server/src/modules/collection-master/service.js +10 -0
  23. package/.medusa/server/src/modules/erp/migrations/Migration20250513121436.js +16 -0
  24. package/.medusa/server/src/modules/erp/models/erp.js +10 -0
  25. package/.medusa/server/src/modules/erp/service.js +1 -1
  26. package/.medusa/server/src/modules/erp-event/index.js +13 -0
  27. package/.medusa/server/src/modules/erp-event/migrations/Migration20250608221239.js +15 -0
  28. package/.medusa/server/src/modules/erp-event/models/erp-event.js +11 -0
  29. package/.medusa/server/src/modules/erp-event/service.js +10 -0
  30. package/.medusa/server/src/modules/extended-product/index.js +13 -0
  31. package/.medusa/server/src/modules/extended-product/migrations/Migration20250519043358.js +27 -0
  32. package/.medusa/server/src/modules/extended-product/migrations/Migration20250601030519.js +23 -0
  33. package/.medusa/server/src/modules/extended-product/models/extended-product.js +173 -0
  34. package/.medusa/server/src/modules/extended-product/service.js +13 -0
  35. package/.medusa/server/src/modules/extended-variant/index.js +13 -0
  36. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250507055941.js +27 -0
  37. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250508025507.js +14 -0
  38. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250601045242.js +18 -0
  39. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +162 -0
  40. package/.medusa/server/src/modules/extended-variant/service.js +12 -0
  41. package/.medusa/server/src/modules/party-master/index.js +13 -0
  42. package/.medusa/server/src/modules/party-master/migrations/Migration20250604104235.js +16 -0
  43. package/.medusa/server/src/modules/party-master/migrations/Migration20250604115453.js +16 -0
  44. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120348.js +16 -0
  45. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120701.js +14 -0
  46. package/.medusa/server/src/modules/party-master/migrations/Migration20250608220924.js +16 -0
  47. package/.medusa/server/src/modules/party-master/migrations/Migration20250612225738.js +20 -0
  48. package/.medusa/server/src/modules/party-master/migrations/Migration20250612231031.js +16 -0
  49. package/.medusa/server/src/modules/party-master/models/party-master.js +60 -0
  50. package/.medusa/server/src/modules/party-master/service.js +10 -0
  51. package/.medusa/server/src/modules/raw-master/index.js +13 -0
  52. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190057.js +16 -0
  53. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190322.js +14 -0
  54. package/.medusa/server/src/modules/raw-master/models/raw-master.js +17 -0
  55. package/.medusa/server/src/modules/raw-master/service.js +10 -0
  56. package/.medusa/server/src/modules/shape-master/index.js +13 -0
  57. package/.medusa/server/src/modules/shape-master/migrations/Migration20250509174455.js +16 -0
  58. package/.medusa/server/src/modules/shape-master/models/shape-master.js +13 -0
  59. package/.medusa/server/src/modules/shape-master/service.js +10 -0
  60. package/.medusa/server/src/modules/sub-category-master/index.js +13 -0
  61. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250513115356.js +15 -0
  62. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250519180538.js +14 -0
  63. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250531010409.js +14 -0
  64. package/.medusa/server/src/modules/sub-category-master/models/sub-category-master.js +15 -0
  65. package/.medusa/server/src/modules/sub-category-master/service.js +10 -0
  66. package/.medusa/server/src/subscribers/category-group-master.js +117 -0
  67. package/.medusa/server/src/subscribers/category-master.js +130 -0
  68. package/.medusa/server/src/subscribers/collection-master.js +115 -0
  69. package/.medusa/server/src/subscribers/party-master-location.js +128 -0
  70. package/.medusa/server/src/subscribers/party-master.js +226 -0
  71. package/.medusa/server/src/subscribers/sub-category-master.js +130 -0
  72. package/.medusa/server/src/utils/address-formatter.js +60 -0
  73. package/.medusa/server/src/utils/phone-mapper.js +28 -0
  74. package/.medusa/server/src/workflows/category-group-master/index.js +58 -0
  75. package/.medusa/server/src/workflows/category-group-master/steps/create-category-group.js +18 -0
  76. package/.medusa/server/src/workflows/category-group-master/steps/delete-category-group.js +23 -0
  77. package/.medusa/server/src/workflows/category-group-master/steps/fetch-category-master.js +70 -0
  78. package/.medusa/server/src/workflows/category-group-master/steps/update-category-group.js +26 -0
  79. package/.medusa/server/src/workflows/category-master/index.js +58 -0
  80. package/.medusa/server/src/workflows/category-master/steps/create-category.js +21 -0
  81. package/.medusa/server/src/workflows/category-master/steps/delete-category.js +23 -0
  82. package/.medusa/server/src/workflows/category-master/steps/fetch-category-master.js +70 -0
  83. package/.medusa/server/src/workflows/category-master/steps/update-category.js +29 -0
  84. package/.medusa/server/src/workflows/collection-group-master/index.js +37 -0
  85. package/.medusa/server/src/workflows/collection-group-master/steps/create-category.js +50 -0
  86. package/.medusa/server/src/workflows/collection-group-master/steps/create-collection-group.js +18 -0
  87. package/.medusa/server/src/workflows/collection-group-master/steps/delete-collection-group.js +23 -0
  88. package/.medusa/server/src/workflows/collection-group-master/steps/fetch-collection-grp-master.js +70 -0
  89. package/.medusa/server/src/workflows/collection-group-master/steps/update-collection-group.js +26 -0
  90. package/.medusa/server/src/workflows/collection-master/index.js +68 -0
  91. package/.medusa/server/src/workflows/collection-master/steps/create-category.js +60 -0
  92. package/.medusa/server/src/workflows/collection-master/steps/create-collection.js +22 -0
  93. package/.medusa/server/src/workflows/collection-master/steps/delete-collection.js +22 -0
  94. package/.medusa/server/src/workflows/collection-master/steps/fetch-collection-master.js +70 -0
  95. package/.medusa/server/src/workflows/collection-master/steps/update-collection.js +32 -0
  96. package/.medusa/server/src/workflows/create-extended-product-from-product/index.js +86 -0
  97. package/.medusa/server/src/workflows/create-extended-product-from-product/steps/create-extended-product.js +18 -0
  98. package/.medusa/server/src/workflows/create-extended-product-from-product/steps/create-style-collection-lines.js +25 -0
  99. package/.medusa/server/src/workflows/create-extended-product-from-product/steps/create-style-detail-lines.js +25 -0
  100. package/.medusa/server/src/workflows/create-extended-product-from-product/steps/create-style-exploration-lines.js +26 -0
  101. package/.medusa/server/src/workflows/create-extended-variant-from-variant/index.js +74 -0
  102. package/.medusa/server/src/workflows/create-extended-variant-from-variant/steps/create-extended-variant.js +18 -0
  103. package/.medusa/server/src/workflows/create-extended-variant-from-variant/steps/create-style-detail-lines.js +25 -0
  104. package/.medusa/server/src/workflows/create-or-update-party-style-master/index.js +191 -0
  105. package/.medusa/server/src/workflows/create-or-update-party-style-master/steps/fetch-party-styles.js +70 -0
  106. package/.medusa/server/src/workflows/create-or-update-product-options/index.js +25 -0
  107. package/.medusa/server/src/workflows/create-or-update-product-options/steps/create-update-product-options.js +28 -0
  108. package/.medusa/server/src/workflows/create-or-update-style-master/index.js +203 -105
  109. package/.medusa/server/src/workflows/create-or-update-style-master/steps/fetch-styles.js +70 -0
  110. package/.medusa/server/src/workflows/erp-event/index.js +10 -0
  111. package/.medusa/server/src/workflows/erp-event/steps/create-erp-event.js +18 -0
  112. package/.medusa/server/src/workflows/helpers/product-helper.js +585 -8
  113. package/.medusa/server/src/workflows/hooks/product-created.js +16 -0
  114. package/.medusa/server/src/workflows/hooks/product-updated.js +16 -0
  115. package/.medusa/server/src/workflows/hooks/variant-created.js +16 -0
  116. package/.medusa/server/src/workflows/index.js +18 -0
  117. package/.medusa/server/src/workflows/party-master/helpers/index.js +9 -0
  118. package/.medusa/server/src/workflows/party-master/index.js +139 -0
  119. package/.medusa/server/src/workflows/party-master/steps/create-party.js +71 -0
  120. package/.medusa/server/src/workflows/party-master/steps/delete-party.js +23 -0
  121. package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +70 -0
  122. package/.medusa/server/src/workflows/party-master/steps/update-party-master-with-field.js +15 -0
  123. package/.medusa/server/src/workflows/party-master/steps/update-party.js +79 -0
  124. package/.medusa/server/src/workflows/party-master/workflows/update-party-master-with-field.js +11 -0
  125. package/.medusa/server/src/workflows/raw-master/index.js +30 -0
  126. package/.medusa/server/src/workflows/raw-master/steps/create-raw.js +25 -0
  127. package/.medusa/server/src/workflows/raw-master/steps/delete-raw.js +23 -0
  128. package/.medusa/server/src/workflows/raw-master/steps/fetch-raw-master.js +70 -0
  129. package/.medusa/server/src/workflows/raw-master/steps/update-raw.js +34 -0
  130. package/.medusa/server/src/workflows/shape-master/index.js +30 -0
  131. package/.medusa/server/src/workflows/shape-master/steps/create-shape.js +20 -0
  132. package/.medusa/server/src/workflows/shape-master/steps/delete-shape.js +23 -0
  133. package/.medusa/server/src/workflows/shape-master/steps/fetch-shape-master.js +70 -0
  134. package/.medusa/server/src/workflows/shape-master/steps/update-shape.js +30 -0
  135. package/.medusa/server/src/workflows/sub-category-master/index.js +58 -0
  136. package/.medusa/server/src/workflows/sub-category-master/steps/create-sub-category.js +21 -0
  137. package/.medusa/server/src/workflows/sub-category-master/steps/delete-sub-category.js +23 -0
  138. package/.medusa/server/src/workflows/sub-category-master/steps/fetch-category-master.js +70 -0
  139. package/.medusa/server/src/workflows/sub-category-master/steps/update-sub-category.js +31 -0
  140. package/.medusa/server/src/workflows/types/index.js +9 -1
  141. package/.medusa/server/src/workflows/update-extended-product-from-product/index.js +48 -0
  142. package/.medusa/server/src/workflows/update-extended-product-from-product/steps/update-extended-product-from-product.js +56 -0
  143. package/.medusa/server/src/workflows/update-extended-product-from-product/steps/update-extended-product-with-field.js +15 -0
  144. package/.medusa/server/src/workflows/update-extended-variant-from-variant/index.js +43 -0
  145. package/.medusa/server/src/workflows/update-extended-variant-from-variant/steps/update-extended-product-from-product.js +54 -0
  146. package/.medusa/server/src/workflows/update-extended-variant-from-variant/steps/update-extended-variant-with-field.js +15 -0
  147. package/package.json +6 -2
  148. package/.medusa/server/src/workflows/create-or-update-style-master/steps/index.js +0 -18
@@ -1,22 +1,599 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.genderMapper = exports.toKebabCase = void 0;
3
+ exports.mergeProductOptions = exports.createProductOptionsForPartyStyleId = exports.createProductOptionsStepFromData = exports.getPartyStyleExplorationLines = exports.getPartyStyleDetailLines = exports.getStyleCollectionLines = exports.getStyleExplorationLines = exports.getStyleDetailLines = exports.getExtendedVariantData = exports.getExtendedProductData = exports.getBaseMetalDetails = exports.calculateStyleCostsAndAmounts = exports.genderMapper = exports.toKebabCase = void 0;
4
+ const types_1 = require("../types");
4
5
  const toKebabCase = (strings) => {
5
6
  return strings
7
+ .filter(Boolean)
6
8
  .join("-")
7
9
  .toLowerCase()
8
10
  .replace(/\s+/g, "-") // Replace spaces with hyphens
9
- .replace(/[^a-z0-9-]/g, ""); // Remove non-alphanumeric characters except hyphens
11
+ .replace(/[^a-z0-9-]/g, "")
12
+ .replace(/-{2,}/g, "-");
10
13
  };
11
14
  exports.toKebabCase = toKebabCase;
12
15
  const genderMapper = (gender) => {
13
16
  const genderMap = {
14
- MN: "Men",
15
- WN: "Women",
16
- UN: "Unisex",
17
- KD: "Kids",
17
+ MN: types_1.Gender.MN,
18
+ WN: types_1.Gender.WN,
19
+ UN: types_1.Gender.UN,
20
+ KD: types_1.Gender.KD,
18
21
  };
19
- return genderMap[gender] || "Unisex";
22
+ return genderMap[gender] || types_1.Gender.UN;
20
23
  };
21
24
  exports.genderMapper = genderMapper;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2hlbHBlcnMvcHJvZHVjdC1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFpQixFQUFVLEVBQUU7SUFDdkQsT0FBTyxPQUFPO1NBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNULFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsOEJBQThCO1NBQ25ELE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxvREFBb0Q7QUFDckYsQ0FBQyxDQUFDO0FBTlcsUUFBQSxXQUFXLGVBTXRCO0FBRUssTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFjLEVBQVUsRUFBRTtJQUNyRCxNQUFNLFNBQVMsR0FBMkI7UUFDeEMsRUFBRSxFQUFFLEtBQUs7UUFDVCxFQUFFLEVBQUUsT0FBTztRQUNYLEVBQUUsRUFBRSxRQUFRO1FBQ1osRUFBRSxFQUFFLE1BQU07S0FDWCxDQUFDO0lBQ0YsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDO0FBQ3ZDLENBQUMsQ0FBQztBQVJXLFFBQUEsWUFBWSxnQkFRdkIifQ==
25
+ const calculateStyleCostsAndAmounts = (styleDetails) => {
26
+ const metalTotalCost = styleDetails
27
+ .filter((detail) => detail.RawType === "Metal")
28
+ .reduce((acc, detail) => acc + detail.CostAmount, 0);
29
+ const diamondTotalCost = styleDetails
30
+ .filter((detail) => detail.RawType === "Diamond")
31
+ .reduce((acc, detail) => acc + detail.CostAmount, 0);
32
+ const stoneTotalCost = styleDetails
33
+ .filter((detail) => detail.RawType === "Stone" || detail.RawType === "Stone(Color Stone)")
34
+ .reduce((acc, detail) => acc + detail.CostAmount, 0);
35
+ const cpfTotalCost = styleDetails
36
+ .filter((detail) => detail.RawType === "Metal")
37
+ .reduce((acc, detail) => acc + detail.CPFCostAmt, 0);
38
+ const metalTotalAmount = styleDetails
39
+ .filter((detail) => detail.RawType === "Metal")
40
+ .reduce((acc, detail) => acc + detail.Amount, 0);
41
+ const diamondTotalAmount = styleDetails
42
+ .filter((detail) => detail.RawType === "Diamond")
43
+ .reduce((acc, detail) => acc + detail.Amount, 0);
44
+ const stoneTotalAmount = styleDetails
45
+ .filter((detail) => detail.RawType === "Stone" || detail.RawType === "Stone(Color Stone)")
46
+ .reduce((acc, detail) => acc + detail.Amount, 0);
47
+ const cpfTotalAmount = styleDetails
48
+ .filter((detail) => detail.RawType === "Metal")
49
+ .reduce((acc, detail) => acc + detail.CPFAmt, 0);
50
+ return {
51
+ metal_total_cost: metalTotalCost,
52
+ diamond_total_cost: diamondTotalCost,
53
+ stone_total_cost: stoneTotalCost,
54
+ cpf_total_cost: cpfTotalCost,
55
+ metal_total_amount: metalTotalAmount,
56
+ diamond_total_amount: diamondTotalAmount,
57
+ stone_total_amount: stoneTotalAmount,
58
+ cpf_total_amount: cpfTotalAmount,
59
+ };
60
+ };
61
+ exports.calculateStyleCostsAndAmounts = calculateStyleCostsAndAmounts;
62
+ const getBaseMetalDetails = (styleDetails) => {
63
+ const baseMetalDetail = styleDetails.find((detail) => detail.RawType === "Metal" && detail.IsBase);
64
+ return {
65
+ baseMetal: baseMetalDetail?.RawCode || "",
66
+ baseMetalPurity: baseMetalDetail?.QlyCode || "",
67
+ baseMetalColor: baseMetalDetail?.ToneCode || "",
68
+ };
69
+ };
70
+ exports.getBaseMetalDetails = getBaseMetalDetails;
71
+ const getExtendedProductData = (styleData, baseMetalDetails, styleCalculations) => {
72
+ return {
73
+ style_id: styleData.StyleId,
74
+ style_date: styleData.StyleDate,
75
+ style_code: styleData.StyleCode,
76
+ style_alias_no: styleData.StyleAliasNo,
77
+ grp_group_no: styleData.GrpGroupNo,
78
+ category_group_name: styleData.CategoryGroupName,
79
+ category_group_code: styleData.CategoryGroupCode,
80
+ grp_no: styleData.GrpNo,
81
+ category: styleData.Category || "",
82
+ category_code: styleData.CategoryCode,
83
+ sub_itm_no: styleData.SubItmNo,
84
+ sub_category: styleData.SubCategory || "",
85
+ sub_category_code: styleData.SubCategoryCode,
86
+ manufacturer: styleData.Manufacturer || "",
87
+ manufacturer_no: styleData.ManufacturerNo || "",
88
+ make_type_no: styleData.MakeTypeNo,
89
+ make_type: styleData.MakeType || "",
90
+ make_type_code: styleData.MakeTypeCode,
91
+ stock_type_no: styleData.StockTypeNo,
92
+ stock_type: styleData.StockType || "",
93
+ stock_type_code: styleData.StockTypeCode,
94
+ item_size_id: styleData.ItemSizeId,
95
+ item_size: styleData.ItemSize || "",
96
+ item_size_name: styleData.ItemSizeName,
97
+ brand_no: styleData.BrandNo,
98
+ brand: styleData.Brand || "",
99
+ brand_name: styleData.BrandName,
100
+ gender_no: styleData.GenderNo,
101
+ gender: (0, exports.genderMapper)(styleData.Gender),
102
+ gender_name: styleData.GenderName,
103
+ shape_code: styleData.StyleMstDetail.find((detail) => detail.IsCenterStone && detail.IsBase)?.ShapeCode || "",
104
+ is_complete: styleData.IsComplete || false,
105
+ restricted: styleData.Restricted || false,
106
+ currency: styleData.Currency || "INR",
107
+ rate_chart: styleData.RateChart || "",
108
+ discount_markup: styleData.DiscountMarkup || "",
109
+ cost: styleData.Cost || 0,
110
+ mrp: styleData.Mrp || 0,
111
+ hsn_code: styleData.HSN || "",
112
+ gross_weight: styleData.GrossWt || 0,
113
+ net_weight: styleData.NetWt || 0,
114
+ wax_weight: styleData.WaxWt || 0,
115
+ model_weight: styleData.ModelWt || 0,
116
+ metal: baseMetalDetails.baseMetal,
117
+ metal_purity: baseMetalDetails.baseMetalPurity,
118
+ metal_color: baseMetalDetails.baseMetalColor,
119
+ total_diamond_pcs: styleData.TotDiamondPcs || 0,
120
+ total_diamond_weight: styleData.TotDiamondWt || 0,
121
+ total_client_diamond_pcs: styleData.TotClientDiamondPcs || 0,
122
+ total_client_diamond_weight: styleData.TotClientDiamondWt || 0,
123
+ total_stone_pcs: styleData.TotStonePcs || 0,
124
+ total_stone_weight: styleData.TotStoneWt || 0,
125
+ total_cz_pcs: styleData.TotCzPcs || 0,
126
+ total_cz_weight: styleData.TotCzWt || 0,
127
+ web_description: styleData.WebDescription || "",
128
+ remarks: styleData.Remarks || "",
129
+ customer_remarks: styleData.CustomerRemarks || "",
130
+ special_remarks: styleData.SpecialRemarks || "",
131
+ metal_total_cost: styleCalculations.metal_total_cost,
132
+ diamond_total_cost: styleCalculations.diamond_total_cost,
133
+ stone_total_cost: styleCalculations.stone_total_cost,
134
+ cpf_total_cost: styleCalculations.cpf_total_cost,
135
+ metal_total_amount: styleCalculations.metal_total_amount,
136
+ diamond_total_amount: styleCalculations.diamond_total_amount,
137
+ stone_total_amount: styleCalculations.stone_total_amount,
138
+ cpf_total_amount: styleCalculations.cpf_total_amount,
139
+ };
140
+ };
141
+ exports.getExtendedProductData = getExtendedProductData;
142
+ const getExtendedVariantData = (styleData, baseMetalDetails, styleCalculations) => {
143
+ return {
144
+ images: [],
145
+ thumbnail: "",
146
+ party_style_id: styleData.PartyStyleId,
147
+ party_style_date: styleData.PartyStyleDate,
148
+ party_style_code: styleData.PartyStyleCode,
149
+ party_style_alias_no: styleData.PartyStyleAliasNo,
150
+ party_style_sku_no: styleData.PartyStyleSKUNo,
151
+ style_id: styleData.StyleId,
152
+ style_code: styleData.StyleCode,
153
+ grp_group_no: styleData.GrpGroupNo,
154
+ category_group_name: styleData.CategoryGroupName,
155
+ category_group_code: styleData.CategoryGroupCode,
156
+ grp_no: styleData.GrpNo,
157
+ category: styleData.Category || "",
158
+ category_code: styleData.CategoryCode,
159
+ sub_itm_no: styleData.SubItmNo,
160
+ sub_category: styleData.SubCategory || "",
161
+ sub_category_code: styleData.SubCategoryCode,
162
+ manufacturer: styleData.Manufacturer || "",
163
+ manufacturer_no: styleData.ManufacturerNo || "",
164
+ make_type: styleData.MakeType || "",
165
+ make_type_no: styleData.MakeTypeNo,
166
+ make_type_code: styleData.MakeTypeCode,
167
+ stock_type_no: styleData.StockTypeNo,
168
+ stock_type: styleData.StockType || "",
169
+ stock_type_code: styleData.StockTypeCode,
170
+ item_size_id: styleData.ItemSizeId,
171
+ item_size: styleData.ItemSize || "",
172
+ item_size_name: styleData.ItemSizeName,
173
+ brand_no: styleData.BrandNo,
174
+ brand: styleData.Brand || "",
175
+ brand_name: styleData.BrandName || "",
176
+ gender_no: styleData.GenderNo,
177
+ gender: (0, exports.genderMapper)(styleData.Gender),
178
+ gender_name: styleData.GenderName,
179
+ shape_code: styleData.PartyStyleMstDetail.find((detail) => detail.IsCenterStone && detail.IsBase)?.ShapeCode || "",
180
+ is_complete: styleData.IsComplete || false,
181
+ restricted: styleData.Restricted || false,
182
+ currency: styleData.Currency || "INR",
183
+ rate_chart: styleData.RateChart || "",
184
+ discount_markup: styleData.DiscountMarkup || "",
185
+ cost: styleData.Cost || 0,
186
+ mrp: styleData.Mrp || 0,
187
+ hsn_code: styleData.HSN || "",
188
+ gross_weight: styleData.GrossWt || 0,
189
+ net_weight: styleData.NetWt || 0,
190
+ wax_weight: styleData.WaxWt || 0,
191
+ model_weight: styleData.ModelWt || 0,
192
+ metal: baseMetalDetails.baseMetal,
193
+ metal_purity: baseMetalDetails.baseMetalPurity,
194
+ metal_color: baseMetalDetails.baseMetalColor,
195
+ total_diamond_pcs: styleData.TotDiamondPcs || 0,
196
+ total_diamond_weight: styleData.TotDiamondWt || 0,
197
+ total_client_diamond_pcs: styleData.TotClientDiamondPcs || 0,
198
+ total_client_diamond_weight: styleData.TotClientDiamondWt || 0,
199
+ total_stone_pcs: styleData.TotStonePcs || 0,
200
+ total_stone_weight: styleData.TotStoneWt || 0,
201
+ total_cz_pcs: styleData.TotCzPcs || 0,
202
+ total_cz_weight: styleData.TotCzWt || 0,
203
+ web_description: styleData.WebDescription || "",
204
+ remarks: styleData.Remarks || "",
205
+ customer_remarks: styleData.CustomerRemarks || "",
206
+ special_remarks: styleData.SpecialRemarks || "",
207
+ metal_total_cost: styleCalculations.metal_total_cost,
208
+ diamond_total_cost: styleCalculations.diamond_total_cost,
209
+ stone_total_cost: styleCalculations.stone_total_cost,
210
+ cpf_total_cost: styleCalculations.cpf_total_cost,
211
+ metal_total_amount: styleCalculations.metal_total_amount,
212
+ diamond_total_amount: styleCalculations.diamond_total_amount,
213
+ stone_total_amount: styleCalculations.stone_total_amount,
214
+ cpf_total_amount: styleCalculations.cpf_total_amount,
215
+ };
216
+ };
217
+ exports.getExtendedVariantData = getExtendedVariantData;
218
+ const getStyleDetailLines = (data) => {
219
+ return data.map((detail) => {
220
+ return {
221
+ style_id: detail.StyleId,
222
+ style_mst_detail_id: detail.StyleMstDetailId,
223
+ item_id: detail.ItemId,
224
+ item_name: detail.ItemName || "",
225
+ item_code: detail.ItemCode || "",
226
+ raw_type: detail.RawType || "",
227
+ material_group: detail.MaterialGroup || "",
228
+ raw_no: detail.RawNo || 0,
229
+ raw_code: detail.RawCode || "",
230
+ shape_no: detail.ShapeNo || 0,
231
+ shape_code: detail.ShapeCode || "",
232
+ qly_no: detail.QlyNo || 0,
233
+ qly_code: detail.QlyCode || "",
234
+ tone_no: detail.ToneNo || 0,
235
+ tone_code: detail.ToneCode || "",
236
+ description: detail.Description || "",
237
+ size: detail.Size || "",
238
+ size_no: detail.SizeNo || 0,
239
+ size_name: detail.SizeName || "",
240
+ accessories: detail.Accessories || "",
241
+ accessories_id: detail.AccessoriesId || 0,
242
+ accessories_name: detail.AccessoriesName || "",
243
+ setting: detail.Setting || "",
244
+ smd_set_no: detail.SMDSetNo || 0,
245
+ setting_name: detail.SettingName || "",
246
+ is_base: detail.IsBase || false,
247
+ is_center_stone: detail.IsCenterStone || false,
248
+ pieces: detail.Pieces || 0,
249
+ weight: detail.Weight || 0,
250
+ min_weight: detail.MinWeight || 0,
251
+ max_weight: detail.MaxWeight || 0,
252
+ stone_wt: detail.StoneWt || 0,
253
+ default_wt: detail.DefaultWt || 0,
254
+ raw_formula: detail.RawFormula || "",
255
+ cost_rate: detail.CostRate || 0,
256
+ cost_amount: detail.CostAmount || 0,
257
+ hand_cost_rate: detail.HandCostRate || 0,
258
+ hand_cost_amount: detail.HandCostAmount || 0,
259
+ set_cost_rate: detail.SetCostRate || 0,
260
+ set_cost_amount: detail.SetCostAmount || 0,
261
+ loss_cost_per: detail.LossCostPer || 0,
262
+ loss_cost_per_is_fix: detail.LossCostPerIsFix || false,
263
+ loss_cost_weight: detail.LossCostWeight || 0,
264
+ loss_cost_amt: detail.LossCostAmt || 0,
265
+ cpf_cost_rate: detail.CPFCostRate || 0,
266
+ cpf_cost_is_fix: detail.CPFCostIsFix || false,
267
+ cpf_cost_amt: detail.CPFCostAmt || 0,
268
+ rate: detail.Rate || 0,
269
+ amount: detail.Amount || 0,
270
+ hand_rate: detail.HandRate || 0,
271
+ hand_amount: detail.HandAmount || 0,
272
+ set_rate: detail.SetRate || 0,
273
+ set_amount: detail.SetAmount || 0,
274
+ loss_per: detail.LossPer || 0,
275
+ loss_per_is_fix: detail.LossPerIsFix || false,
276
+ loss_weight: detail.LossWeight || 0,
277
+ loss_amt: detail.LossAmt || 0,
278
+ cpf_rate: detail.CPFRate || 0,
279
+ cpf_is_fix: detail.CPFIsFix || false,
280
+ cpf_amt: detail.CPFAmt || 0,
281
+ };
282
+ });
283
+ };
284
+ exports.getStyleDetailLines = getStyleDetailLines;
285
+ const getStyleExplorationLines = (data) => {
286
+ return data.map((detail) => {
287
+ return {
288
+ style_id: detail.StyleId,
289
+ exploration_id: detail.ExplorationId,
290
+ exploration_name: detail.ExplorationName || "",
291
+ exploration_code: detail.ExplorationCode || "",
292
+ exploration_value: detail.ExplorationValue || "",
293
+ };
294
+ });
295
+ };
296
+ exports.getStyleExplorationLines = getStyleExplorationLines;
297
+ const getStyleCollectionLines = (data) => {
298
+ return data.map((detail) => {
299
+ return {
300
+ style_id: detail.StyleId,
301
+ desg_no: detail.DesgNo,
302
+ collection_name: detail.CollectionName || "",
303
+ collection_group_no: detail.CollectionGroupNo,
304
+ collection_group_name: detail.CollectionGroupName || "",
305
+ collection_group_code: detail.CollectionGroupCode || "",
306
+ };
307
+ });
308
+ };
309
+ exports.getStyleCollectionLines = getStyleCollectionLines;
310
+ const getPartyStyleDetailLines = (data) => {
311
+ return data.map((detail) => {
312
+ return {
313
+ party_style_id: detail.PartyStyleId,
314
+ party_style_mst_detail_id: detail.PartyStyleMstDetailId,
315
+ item_code: detail.ItemCode || "",
316
+ item_id: detail.ItemId || 0,
317
+ item_name: detail.ItemName || "",
318
+ raw_type: detail.RawType || "",
319
+ material_group: detail.MaterialGroup || "",
320
+ raw_no: detail.RawNo || 0,
321
+ raw_code: detail.RawCode || "",
322
+ shape_no: detail.ShapeNo || 0,
323
+ shape_code: detail.ShapeCode || "",
324
+ qly_no: detail.QlyNo || 0,
325
+ qly_code: detail.QlyCode || "",
326
+ tone_no: detail.ToneNo || 0,
327
+ tone_code: detail.ToneCode || "",
328
+ description: detail.Description || "",
329
+ size_no: detail.SizeNo || 0,
330
+ size: detail.Size || "",
331
+ size_name: detail.SizeName || "",
332
+ accessories_id: detail.AccessoriesId || 0,
333
+ accessories: detail.Accessories || "",
334
+ accessories_name: detail.AccessoriesName || "",
335
+ smd_set_no: detail.SMDSetNo || 0,
336
+ setting: detail.Setting || "",
337
+ setting_name: detail.SettingName || "",
338
+ is_base: detail.IsBase || false,
339
+ is_center_stone: detail.IsCenterStone || false,
340
+ pieces: detail.Pieces || 0,
341
+ weight: detail.Weight || 0,
342
+ min_weight: detail.MinWeight || 0,
343
+ max_weight: detail.MaxWeight || 0,
344
+ stone_wt: detail.StoneWt || 0,
345
+ default_wt: detail.DefaultWt || 0,
346
+ raw_formula: detail.RawFormula || "",
347
+ cost_rate: detail.CostRate || 0,
348
+ cost_amount: detail.CostAmount || 0,
349
+ hand_cost_rate: detail.HandCostRate || 0,
350
+ hand_cost_amount: detail.HandCostAmount || 0,
351
+ set_cost_rate: detail.SetCostRate || 0,
352
+ set_cost_amount: detail.SetCostAmount || 0,
353
+ loss_cost_per: detail.LossCostPer || 0,
354
+ loss_cost_per_is_fix: detail.LossCostPerIsFix || false,
355
+ loss_cost_weight: detail.LossCostWeight || 0,
356
+ loss_cost_amt: detail.LossCostAmt || 0,
357
+ cpf_cost_rate: detail.CPFCostRate || 0,
358
+ cpf_cost_is_fix: detail.CPFCostIsFix || false,
359
+ cpf_cost_amt: detail.CPFCostAmt || 0,
360
+ rate: detail.Rate || 0,
361
+ amount: detail.Amount || 0,
362
+ hand_rate: detail.HandRate || 0,
363
+ hand_amount: detail.HandAmount || 0,
364
+ set_rate: detail.SetRate || 0,
365
+ set_amount: detail.SetAmount || 0,
366
+ loss_per: detail.LossPer || 0,
367
+ loss_per_is_fix: detail.LossPerIsFix || false,
368
+ loss_weight: detail.LossWeight || 0,
369
+ loss_amt: detail.LossAmt || 0,
370
+ cpf_rate: detail.CPFRate || 0,
371
+ cpf_is_fix: detail.CPFIsFix || false,
372
+ cpf_amt: detail.CPFAmt || 0,
373
+ };
374
+ });
375
+ };
376
+ exports.getPartyStyleDetailLines = getPartyStyleDetailLines;
377
+ const getPartyStyleExplorationLines = (data) => {
378
+ return data.map((detail) => {
379
+ return {
380
+ party_style_id: detail.PartyStyleId,
381
+ exploration_code: detail.ExplorationCode || "",
382
+ exploration_value: detail.ExplorationValue || "",
383
+ };
384
+ });
385
+ };
386
+ exports.getPartyStyleExplorationLines = getPartyStyleExplorationLines;
387
+ const createProductOptionsStepFromData = (partyStyles) => {
388
+ // Group all styles by StyleId
389
+ const stylesByStyleId = new Map();
390
+ partyStyles?.forEach((style) => {
391
+ const styleId = String(style.StyleId);
392
+ if (!stylesByStyleId.has(styleId)) {
393
+ stylesByStyleId.set(styleId, []);
394
+ }
395
+ stylesByStyleId.get(styleId).push(style);
396
+ });
397
+ // Process each style group
398
+ return Array.from(stylesByStyleId.entries()).map(([styleId, styles]) => {
399
+ // Create sets to store unique values for each option type
400
+ const options = {
401
+ metals: new Set(),
402
+ metalColors: new Set(),
403
+ diamondQualities: new Set(),
404
+ sizes: new Set(),
405
+ };
406
+ // Track if all styles in the group have each option type
407
+ const optionAvailability = {
408
+ metals: true,
409
+ metalColors: true,
410
+ diamondQualities: true,
411
+ sizes: true,
412
+ };
413
+ // First, check option availability across all styles in this group
414
+ styles.forEach((style) => {
415
+ // Check Size availability
416
+ if (!style.ItemSize) {
417
+ optionAvailability.sizes = false;
418
+ }
419
+ // Check other options availability
420
+ let hasMetals = false;
421
+ let hasMetalColors = false;
422
+ let hasDiamondQualities = false;
423
+ style.PartyStyleMstDetail.forEach((detail) => {
424
+ if (detail.RawType === "Metal" && detail.IsBase) {
425
+ hasMetals = true;
426
+ hasMetalColors = true;
427
+ }
428
+ if (detail.RawType === "Diamond") {
429
+ hasDiamondQualities = true;
430
+ }
431
+ });
432
+ if (!hasMetals)
433
+ optionAvailability.metals = false;
434
+ if (!hasMetalColors)
435
+ optionAvailability.metalColors = false;
436
+ if (!hasDiamondQualities)
437
+ optionAvailability.diamondQualities = false;
438
+ });
439
+ // Now gather values only for available options
440
+ styles.forEach((style) => {
441
+ // Only collect size data if all items have it
442
+ if (optionAvailability.sizes && style.ItemSize) {
443
+ options.sizes.add(String(style.ItemSize));
444
+ }
445
+ // Process other options
446
+ style.PartyStyleMstDetail.forEach((detail) => {
447
+ if (optionAvailability.metals &&
448
+ detail.RawType === "Metal" &&
449
+ detail.IsBase) {
450
+ options.metals.add(`${detail.QlyCode}K ${detail.RawCode}`);
451
+ // Map ToneCode to color name if metal colors are available
452
+ if (optionAvailability.metalColors) {
453
+ if (detail.ToneCode === "R")
454
+ options.metalColors.add("Rose");
455
+ else if (detail.ToneCode === "Y")
456
+ options.metalColors.add("Yellow");
457
+ else if (detail.ToneCode === "W")
458
+ options.metalColors.add("White");
459
+ else if (detail.ToneCode === "YRW")
460
+ options.metalColors.add("YELLOW/ROSE/WHITE");
461
+ else if (detail.ToneCode === "YW")
462
+ options.metalColors.add("YELLOW/WHITE");
463
+ else if (detail.ToneCode === "RW")
464
+ options.metalColors.add("ROSE/WHITE");
465
+ else if (detail.ToneCode === "BU")
466
+ options.metalColors.add("BLUE");
467
+ else if (detail.ToneCode === "BL")
468
+ options.metalColors.add("BLACK");
469
+ }
470
+ }
471
+ if (optionAvailability.diamondQualities &&
472
+ detail.RawType === "Diamond") {
473
+ options.diamondQualities.add(`${detail.ToneCode}/${detail.QlyCode}`);
474
+ }
475
+ });
476
+ });
477
+ const optionsArray = [];
478
+ if (optionAvailability.metals && options.metals.size > 0) {
479
+ optionsArray.push({ title: "Metal", values: Array.from(options.metals) });
480
+ }
481
+ if (optionAvailability.metalColors && options.metalColors.size > 0) {
482
+ optionsArray.push({
483
+ title: "Metal Color",
484
+ values: Array.from(options.metalColors),
485
+ });
486
+ }
487
+ if (optionAvailability.diamondQualities &&
488
+ options.diamondQualities.size > 0) {
489
+ optionsArray.push({
490
+ title: "Diamond Quality",
491
+ values: Array.from(options.diamondQualities),
492
+ });
493
+ }
494
+ if (optionAvailability.sizes && options.sizes.size > 0) {
495
+ optionsArray.push({ title: "Size", values: Array.from(options.sizes) });
496
+ }
497
+ return {
498
+ styleId,
499
+ options: optionsArray,
500
+ };
501
+ });
502
+ };
503
+ exports.createProductOptionsStepFromData = createProductOptionsStepFromData;
504
+ const createProductOptionsForPartyStyleId = (partyStyle, existingProduct) => {
505
+ const options = {
506
+ metals: new Set(),
507
+ metalColors: new Set(),
508
+ diamondQualities: new Set(),
509
+ sizes: new Set(),
510
+ };
511
+ // Size
512
+ if (partyStyle.ItemSize)
513
+ options.sizes.add(String(partyStyle.ItemSize));
514
+ // Track if this style has each option type
515
+ let hasMetalOption = false;
516
+ let hasDiamondOption = false;
517
+ partyStyle.PartyStyleMstDetail.forEach((detail) => {
518
+ if (detail.RawType === "Metal" && detail.IsBase) {
519
+ hasMetalOption = true;
520
+ options.metals.add(`${detail.QlyCode}K ${detail.RawCode}`);
521
+ // Map ToneCode to color name
522
+ if (detail.ToneCode === "R")
523
+ options.metalColors.add("Rose");
524
+ else if (detail.ToneCode === "Y")
525
+ options.metalColors.add("Yellow");
526
+ else if (detail.ToneCode === "W")
527
+ options.metalColors.add("White");
528
+ else if (detail.ToneCode === "YRW")
529
+ options.metalColors.add("YELLOW/ROSE/WHITE");
530
+ else if (detail.ToneCode === "YW")
531
+ options.metalColors.add("YELLOW/WHITE");
532
+ else if (detail.ToneCode === "RW")
533
+ options.metalColors.add("ROSE/WHITE");
534
+ else if (detail.ToneCode === "BU")
535
+ options.metalColors.add("BLUE");
536
+ else if (detail.ToneCode === "BL")
537
+ options.metalColors.add("BLACK");
538
+ }
539
+ if (detail.RawType === "Diamond") {
540
+ hasDiamondOption = true;
541
+ options.diamondQualities.add(`${detail.ToneCode}/${detail.QlyCode}`);
542
+ }
543
+ });
544
+ // Prepare result object with only options that exist
545
+ const result = {};
546
+ // Only add options if they exist in the data
547
+ if (hasMetalOption &&
548
+ options.metals.size > 0 &&
549
+ existingProduct.options.find((option) => option.title === "Metal")) {
550
+ result["Metal"] = Array.from(options.metals)[0];
551
+ }
552
+ if (hasMetalOption &&
553
+ options.metalColors.size > 0 &&
554
+ existingProduct.options.find((option) => option.title === "Metal Color")) {
555
+ result["Metal Color"] = Array.from(options.metalColors)[0];
556
+ }
557
+ if (hasDiamondOption &&
558
+ options.diamondQualities.size > 0 &&
559
+ existingProduct.options.find((option) => option.title === "Diamond Quality")) {
560
+ result["Diamond Quality"] = Array.from(options.diamondQualities)[0];
561
+ }
562
+ if (partyStyle.ItemSize &&
563
+ options.sizes.size > 0 &&
564
+ existingProduct.options.find((option) => option.title === "Size")) {
565
+ result["Size"] = Array.from(options.sizes)[0];
566
+ }
567
+ return result;
568
+ };
569
+ exports.createProductOptionsForPartyStyleId = createProductOptionsForPartyStyleId;
570
+ const mergeProductOptions = (currentOptions, filteredOptions) => {
571
+ const mergedOptions = [];
572
+ // Create a map of existing options by title, excluding Default
573
+ const existingOptionsMap = new Map(currentOptions
574
+ .filter((opt) => opt.title !== "Default")
575
+ .map((opt) => [opt.title, opt.values.map((v) => v.value)]));
576
+ // Process all options (both existing and new)
577
+ const allOptions = new Map();
578
+ // Add existing options
579
+ for (const [title, values] of existingOptionsMap.entries()) {
580
+ allOptions.set(title, new Set(values));
581
+ }
582
+ // Add new options and merge values
583
+ for (const filteredOpt of filteredOptions) {
584
+ const existingValues = allOptions.get(filteredOpt.title) || new Set();
585
+ // Add new values to the set
586
+ filteredOpt.values.forEach((value) => existingValues.add(value));
587
+ allOptions.set(filteredOpt.title, existingValues);
588
+ }
589
+ // Convert back to the required format
590
+ for (const [title, values] of allOptions.entries()) {
591
+ mergedOptions.push({
592
+ title,
593
+ values: Array.from(values),
594
+ });
595
+ }
596
+ return mergedOptions;
597
+ };
598
+ exports.mergeProductOptions = mergeProductOptions;
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2hlbHBlcnMvcHJvZHVjdC1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU0Esb0NBTWtCO0FBRVgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFpQixFQUFVLEVBQUU7SUFDdkQsT0FBTyxPQUFPO1NBQ1gsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDVCxXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLDhCQUE4QjtTQUNuRCxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztTQUMxQixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQVJXLFFBQUEsV0FBVyxlQVF0QjtBQUVLLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBYyxFQUFVLEVBQUU7SUFDckQsTUFBTSxTQUFTLEdBQTJCO1FBQ3hDLEVBQUUsRUFBRSxjQUFNLENBQUMsRUFBRTtRQUNiLEVBQUUsRUFBRSxjQUFNLENBQUMsRUFBRTtRQUNiLEVBQUUsRUFBRSxjQUFNLENBQUMsRUFBRTtRQUNiLEVBQUUsRUFBRSxjQUFNLENBQUMsRUFBRTtLQUNkLENBQUM7SUFDRixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxjQUFNLENBQUMsRUFBRSxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQVJXLFFBQUEsWUFBWSxnQkFRdkI7QUFFSyxNQUFNLDZCQUE2QixHQUFHLENBQzNDLFlBQTRELEVBQ3pDLEVBQUU7SUFDckIsTUFBTSxjQUFjLEdBQUcsWUFBWTtTQUNoQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDO1NBQzlDLE1BQU0sQ0FBQyxDQUFDLEdBQUcs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