@crystaldesign/web-planner-logic 26.12.0-beta.3 → 26.12.0-beta.31

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 (131) hide show
  1. package/build/cjs/{DivaBoxPlanner-2c699ee3.js → DivaBoxPlanner-484a325e.js} +13 -10
  2. package/build/cjs/{DivaStandardPlanner-3d6a05bc.js → DivaStandardPlanner-6dbf81c3.js} +9 -5
  3. package/build/cjs/{DoorPlanner-adda9c0d.js → DoorPlanner-87fac8b8.js} +2 -2
  4. package/build/cjs/{Host3DSignalR-6914541f.js → Host3DSignalR-2b5a6bae.js} +2 -2
  5. package/build/cjs/{LiviqueWWSHandler-635cffae.js → LiviqueWWSHandler-992fe2a1.js} +2 -2
  6. package/build/cjs/{PfisterWWSHandler-d95419db.js → PfisterWWSHandler-e95029c3.js} +2 -2
  7. package/build/cjs/{PlannerHandler2D-b76ba907.js → PlannerHandler2D-c74ff8ac.js} +5 -272
  8. package/build/cjs/{SeriousBasketHandler-777904e8.js → SeriousBasketHandler-a20bd057.js} +141 -79
  9. package/build/cjs/{ShelfPlanner-5ffd15a2.js → ShelfPlanner-c1de034e.js} +107 -79
  10. package/build/cjs/{StandardWWSHandler-e92acae6.js → StandardWWSHandler-e72d5813.js} +2 -2
  11. package/build/cjs/{index-d516d2b2.js → index-bd35eec6.js} +3150 -976
  12. package/build/cjs/index.js +9 -1
  13. package/build/esm/{DivaBoxPlanner-6f0727a3.js → DivaBoxPlanner-550c74ca.js} +13 -10
  14. package/build/esm/{DivaStandardPlanner-7188da61.js → DivaStandardPlanner-da5556ac.js} +9 -5
  15. package/build/esm/{DoorPlanner-74bcd21d.js → DoorPlanner-2f95bff9.js} +2 -2
  16. package/build/esm/{Host3DSignalR-bb6db8e6.js → Host3DSignalR-7588005e.js} +2 -2
  17. package/build/esm/{LiviqueWWSHandler-c4ba143d.js → LiviqueWWSHandler-22fe4525.js} +2 -2
  18. package/build/esm/{PfisterWWSHandler-41b7b1b7.js → PfisterWWSHandler-cc671647.js} +2 -2
  19. package/build/esm/{PlannerHandler2D-829ffceb.js → PlannerHandler2D-3ae7d185.js} +3 -268
  20. package/build/esm/{SeriousBasketHandler-0bb8ee55.js → SeriousBasketHandler-c8a94b84.js} +141 -79
  21. package/build/esm/{ShelfPlanner-1406888d.js → ShelfPlanner-62c2844a.js} +107 -79
  22. package/build/esm/{StandardWWSHandler-a8045129.js → StandardWWSHandler-f031a067.js} +2 -2
  23. package/build/esm/{index-16a1a540.js → index-ead00f31.js} +3142 -977
  24. package/build/esm/index.js +1 -1
  25. package/build/types/web-planner-logic/src/index.d.ts +10 -0
  26. package/build/types/web-planner-logic/src/index.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts +1 -0
  28. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/interface/Articles/PartListArticleToLoadType.d.ts +3 -0
  30. package/build/types/web-planner-logic/src/interface/Articles/PartListArticleToLoadType.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/interface/ConfiguratorStructureDataType.d.ts +1 -0
  32. package/build/types/web-planner-logic/src/interface/ConfiguratorStructureDataType.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/interface/CoreTypes/index.d.ts +1 -0
  34. package/build/types/web-planner-logic/src/interface/CoreTypes/index.d.ts.map +1 -1
  35. package/build/types/web-planner-logic/src/interface/FunctionTypes/index.d.ts +1 -0
  36. package/build/types/web-planner-logic/src/interface/FunctionTypes/index.d.ts.map +1 -1
  37. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts +2 -1
  38. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts.map +1 -1
  39. package/build/types/web-planner-logic/src/interface/OptionTypes/CatalogOptionDataTypes.d.ts +1 -0
  40. package/build/types/web-planner-logic/src/interface/OptionTypes/CatalogOptionDataTypes.d.ts.map +1 -1
  41. package/build/types/web-planner-logic/src/interface/Planner/DockingPointDataType.d.ts +10 -0
  42. package/build/types/web-planner-logic/src/interface/Planner/DockingPointDataType.d.ts.map +1 -1
  43. package/build/types/web-planner-logic/src/interface/ShelfPlanner/plannerData.d.ts +8 -2
  44. package/build/types/web-planner-logic/src/interface/ShelfPlanner/plannerData.d.ts.map +1 -1
  45. package/build/types/web-planner-logic/src/logic/Article/ArticleOptionState.d.ts +5 -0
  46. package/build/types/web-planner-logic/src/logic/Article/ArticleOptionState.d.ts.map +1 -1
  47. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts +40 -0
  48. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts.map +1 -1
  49. package/build/types/web-planner-logic/src/logic/Article/DivaArticleHandler.d.ts +6 -0
  50. package/build/types/web-planner-logic/src/logic/Article/DivaArticleHandler.d.ts.map +1 -1
  51. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts +2 -0
  52. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts.map +1 -1
  53. package/build/types/web-planner-logic/src/logic/Article/Engine/DivaArticleEngine.d.ts.map +1 -1
  54. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts +17 -1
  55. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts.map +1 -1
  56. package/build/types/web-planner-logic/src/logic/Basket/DivaBasketHandler.d.ts +2 -2
  57. package/build/types/web-planner-logic/src/logic/Basket/DivaBasketHandler.d.ts.map +1 -1
  58. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.d.ts +12 -1
  59. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.d.ts.map +1 -1
  60. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.test.d.ts +2 -0
  61. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.test.d.ts.map +1 -0
  62. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.d.ts +8 -0
  63. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.d.ts.map +1 -0
  64. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.test.d.ts +2 -0
  65. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.test.d.ts.map +1 -0
  66. package/build/types/web-planner-logic/src/logic/ConfigTree/DivaConfigTree.d.ts +10 -0
  67. package/build/types/web-planner-logic/src/logic/ConfigTree/DivaConfigTree.d.ts.map +1 -1
  68. package/build/types/web-planner-logic/src/logic/ConfigTree/DivaConfigTreeHandler.d.ts +40 -1
  69. package/build/types/web-planner-logic/src/logic/ConfigTree/DivaConfigTreeHandler.d.ts.map +1 -1
  70. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts +6 -3
  71. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts.map +1 -1
  72. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.d.ts +7 -1
  73. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.d.ts.map +1 -1
  74. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.test.d.ts +2 -0
  75. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.test.d.ts.map +1 -0
  76. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts +7 -0
  77. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts.map +1 -1
  78. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts +2 -0
  79. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts.map +1 -1
  80. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts +22 -6
  81. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  82. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts.map +1 -1
  83. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts.map +1 -1
  84. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/SVGUtils.d.ts +8 -1
  85. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/SVGUtils.d.ts.map +1 -1
  86. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts +2 -1
  87. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts.map +1 -1
  88. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts.map +1 -1
  89. package/build/types/web-planner-logic/src/model/Articles/Article/DivaCatalogArticle.d.ts.map +1 -1
  90. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts +16 -2
  91. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts.map +1 -1
  92. package/build/types/web-planner-logic/src/model/Articles/CatalogPlannerArticleData.d.ts +6 -0
  93. package/build/types/web-planner-logic/src/model/Articles/CatalogPlannerArticleData.d.ts.map +1 -1
  94. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  95. package/build/types/web-planner-logic/src/model/Options/ArticleOptionData.d.ts +1 -0
  96. package/build/types/web-planner-logic/src/model/Options/ArticleOptionData.d.ts.map +1 -1
  97. package/build/types/web-planner-logic/src/model/Options/ArticleOptionValueData.d.ts.map +1 -1
  98. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts +1 -0
  99. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts.map +1 -1
  100. package/build/types/web-planner-logic/src/model/Planner/PlannerElementData.d.ts.map +1 -1
  101. package/build/types/web-planner-logic/src/model/Properties/propertySchemaRegistry.d.ts +31 -0
  102. package/build/types/web-planner-logic/src/model/Properties/propertySchemaRegistry.d.ts.map +1 -0
  103. package/build/types/web-planner-logic/src/model/Properties/propertyValueCodec.d.ts +34 -0
  104. package/build/types/web-planner-logic/src/model/Properties/propertyValueCodec.d.ts.map +1 -0
  105. package/build/types/web-planner-logic/src/test/accessoryWithoutDocking.test.d.ts +2 -0
  106. package/build/types/web-planner-logic/src/test/accessoryWithoutDocking.test.d.ts.map +1 -0
  107. package/build/types/web-planner-logic/src/test/cloneArticle.test.d.ts +2 -0
  108. package/build/types/web-planner-logic/src/test/cloneArticle.test.d.ts.map +1 -0
  109. package/build/types/web-planner-logic/src/test/configTreeStepArticle.test.d.ts +2 -0
  110. package/build/types/web-planner-logic/src/test/configTreeStepArticle.test.d.ts.map +1 -0
  111. package/build/types/web-planner-logic/src/test/countDockingPoints.test.d.ts +2 -0
  112. package/build/types/web-planner-logic/src/test/countDockingPoints.test.d.ts.map +1 -0
  113. package/build/types/web-planner-logic/src/test/eanFormula.test.d.ts +2 -0
  114. package/build/types/web-planner-logic/src/test/eanFormula.test.d.ts.map +1 -0
  115. package/build/types/web-planner-logic/src/test/fallbackRowWarning.test.d.ts +2 -0
  116. package/build/types/web-planner-logic/src/test/fallbackRowWarning.test.d.ts.map +1 -0
  117. package/build/types/web-planner-logic/src/test/idmOpgParentNames.test.d.ts +2 -0
  118. package/build/types/web-planner-logic/src/test/idmOpgParentNames.test.d.ts.map +1 -0
  119. package/build/types/web-planner-logic/src/test/idmSerieStaleId.test.d.ts +2 -0
  120. package/build/types/web-planner-logic/src/test/idmSerieStaleId.test.d.ts.map +1 -0
  121. package/build/types/web-planner-logic/src/test/mergeOptionGroupConnectedSteps.test.d.ts +2 -0
  122. package/build/types/web-planner-logic/src/test/mergeOptionGroupConnectedSteps.test.d.ts.map +1 -0
  123. package/build/types/web-planner-logic/src/test/partlistChildInit.test.d.ts +2 -0
  124. package/build/types/web-planner-logic/src/test/partlistChildInit.test.d.ts.map +1 -0
  125. package/build/types/web-planner-logic/src/test/propertyEncodingsKnowhow.test.d.ts +2 -0
  126. package/build/types/web-planner-logic/src/test/propertyEncodingsKnowhow.test.d.ts.map +1 -0
  127. package/build/types/web-planner-logic/src/test/propertyValueCodec.test.d.ts +2 -0
  128. package/build/types/web-planner-logic/src/test/propertyValueCodec.test.d.ts.map +1 -0
  129. package/build/types/web-planner-logic/src/test/staticVisibleOptionValues.test.d.ts +2 -0
  130. package/build/types/web-planner-logic/src/test/staticVisibleOptionValues.test.d.ts.map +1 -0
  131. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import { s as summaryHandlerInstance } from './index-16a1a540.js';
4
+ import { s as summaryHandlerInstance } from './index-ead00f31.js';
5
5
  import DivaUtils from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
7
7
  import '@babel/runtime/helpers/asyncToGenerator';
@@ -9,6 +9,7 @@ import '@babel/runtime/regenerator';
9
9
  import '@babel/runtime/helpers/objectWithoutProperties';
10
10
  import '@babel/runtime/helpers/toConsumableArray';
11
11
  import 'axios';
12
+ import '@crystaldesign/planner-2d-core';
12
13
  import '@crystaldesign/basket-model';
13
14
  import '@babel/runtime/helpers/typeof';
14
15
  import 'fast-xml-parser';
@@ -18,25 +19,37 @@ import '@babel/runtime/helpers/inherits';
18
19
  import '@babel/runtime/helpers/wrapNativeSuper';
19
20
  import '@crystaldesign/basket-handler';
20
21
  import 'socket.io-client';
21
- import '@crystaldesign/planner-2d-core';
22
+
23
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
24
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26
+
27
+ /** An emitted formatted option that may become the main color: flagged with IS_MAIN_COLOR (explicit) or the API2 OPTBE_BOX fallback */
22
28
 
23
29
  //Der in einem Set gemergte Optionsbaum
24
- var MAIN_COLOR_OPTIONCODEX = 'OPTBE_BOX'; // this field indicates the the main Color. This main color is used in the PDF
30
+ // API2 fallback for the main color used in the PDF; catalogs mark it explicitly with the option property IS_MAIN_COLOR
31
+ var MAIN_COLOR_OPTIONCODEX = 'OPTBE_BOX';
25
32
  var StandardWWSHandler = /*#__PURE__*/function () {
26
33
  function StandardWWSHandler() {
27
34
  _classCallCheck(this, StandardWWSHandler);
28
- _defineProperty(this, "mainColorFound", false);
35
+ _defineProperty(this, "mainColorCandidates", []);
29
36
  }
30
37
  return _createClass(StandardWWSHandler, [{
31
38
  key: "repairWWSFlags",
32
39
  value: function repairWWSFlags(articles, orderLines) {
33
40
  return orderLines;
34
41
  }
42
+ /**
43
+ * Builds the part list for the Serious PDF. Components are collected at any partlist depth: intermediate articles that
44
+ * only bundle further components without a price of their own (IDM "Hülsen") are not listed themselves, a priced parent
45
+ * (e.g. an IDM Vorzugskombi header) is listed with its own price next to its components, and the options of a component
46
+ * are looked up on its direct parent, which is the set article itself for flat (API2) partlists.
47
+ */
35
48
  }, {
36
49
  key: "getWWSData",
37
50
  value: function getWWSData(basket, set, orderSet, orderlines) {
38
51
  var _this = this;
39
- this.mainColorFound = false;
52
+ this.mainColorCandidates = [];
40
53
  var pos = set.CatalogData.summaryTabGroupPosition;
41
54
  var isIDM = set.CatalogData.isIDMFormat;
42
55
  var partListOrderLines = [];
@@ -52,10 +65,12 @@ var StandardWWSHandler = /*#__PURE__*/function () {
52
65
  var articles = set.getDivaArticles();
53
66
  var groupedPartlistArticles = [];
54
67
  var usedOptionCodexes = [];
68
+ // set articles plus the parents of nested components, so catalog tab group codices resolve for both
69
+ var tabGroupLookupArticles = Object.values(articles);
55
70
  var posNr = 1;
56
71
  for (var iKey in articles) {
57
72
  var article = articles[iKey];
58
- var partlistArticles = articles[iKey].partlistArticles;
73
+ var partlistArticles = summaryHandlerInstance.getPartlistComponents(article);
59
74
  var partlistArticlesWithTabGroup = [];
60
75
  groupedPartlistArticles.push({
61
76
  article: article,
@@ -63,52 +78,65 @@ var StandardWWSHandler = /*#__PURE__*/function () {
63
78
  partlistArticles: [],
64
79
  letOthesMatch: true
65
80
  });
66
- var _loop = function _loop() {
67
- var _partlistArticle$cata, _article$getArticleOp, _article$getArticleOp2;
68
- var partlistArticle = partlistArticles[key];
69
- var preDefinedPosNr = (_partlistArticle$cata = partlistArticle.catalogArticle.orderPosNr) !== null && _partlistArticle$cata !== void 0 ? _partlistArticle$cata : null;
70
- var tabGroup = (_article$getArticleOp = (_article$getArticleOp2 = article.getArticleOptionState((!isIDM ? 'OPT' : '') + partlistArticle.tabGroup)) === null || _article$getArticleOp2 === void 0 ? void 0 : _article$getArticleOp2.optionTabGroup) !== null && _article$getArticleOp !== void 0 ? _article$getArticleOp : partlistArticle.tabGroup;
71
- if (preDefinedPosNr !== null) {
72
- var existingentry = !preDefinedPosNr.endsWith(';') && groupedPartlistArticles.find(function (group) {
73
- return (group.posNr == Number(preDefinedPosNr) || group.groupKey == preDefinedPosNr) && group.letOthesMatch;
74
- });
75
- if (existingentry) {
76
- existingentry.partlistArticles.push({
77
- article: partlistArticle,
78
- tabGroup: tabGroup
81
+ var _iterator = _createForOfIteratorHelper(partlistArticles),
82
+ _step;
83
+ try {
84
+ var _loop = function _loop() {
85
+ var _partlistArticle$part, _partlistArticle$cata, _optionArticle$getArt, _optionArticle$getArt2;
86
+ var partlistArticle = _step.value;
87
+ var optionArticle = (_partlistArticle$part = partlistArticle.partListParentArticle) !== null && _partlistArticle$part !== void 0 ? _partlistArticle$part : article;
88
+ if (!tabGroupLookupArticles.includes(optionArticle)) tabGroupLookupArticles.push(optionArticle);
89
+ var preDefinedPosNr = (_partlistArticle$cata = partlistArticle.catalogArticle.orderPosNr) !== null && _partlistArticle$cata !== void 0 ? _partlistArticle$cata : null;
90
+ var tabGroup = (_optionArticle$getArt = (_optionArticle$getArt2 = optionArticle.getArticleOptionState((!isIDM ? 'OPT' : '') + partlistArticle.tabGroup)) === null || _optionArticle$getArt2 === void 0 ? void 0 : _optionArticle$getArt2.optionTabGroup) !== null && _optionArticle$getArt !== void 0 ? _optionArticle$getArt : partlistArticle.tabGroup;
91
+ if (preDefinedPosNr !== null) {
92
+ var existingentry = !preDefinedPosNr.endsWith(';') && groupedPartlistArticles.find(function (group) {
93
+ return (group.posNr == Number(preDefinedPosNr) || group.groupKey == preDefinedPosNr) && group.letOthesMatch;
79
94
  });
80
- } else {
81
- var letOthesMatch = true;
82
- var newPosNr = Number(preDefinedPosNr);
83
- if (isNaN(newPosNr)) {
84
- newPosNr = posNr;
85
- letOthesMatch = false;
86
- do {
87
- newPosNr++;
88
- } while (groupedPartlistArticles.find(function (group) {
89
- return group.posNr == newPosNr;
90
- }));
91
- }
92
- groupedPartlistArticles.push({
93
- article: article,
94
- posNr: newPosNr,
95
- letOthesMatch: letOthesMatch,
96
- partlistArticles: [{
95
+ if (existingentry) {
96
+ existingentry.partlistArticles.push({
97
97
  article: partlistArticle,
98
- tabGroup: tabGroup
99
- }],
100
- groupKey: preDefinedPosNr
98
+ tabGroup: tabGroup,
99
+ optionArticle: optionArticle
100
+ });
101
+ } else {
102
+ var letOthesMatch = true;
103
+ var newPosNr = Number(preDefinedPosNr);
104
+ if (isNaN(newPosNr)) {
105
+ newPosNr = posNr;
106
+ letOthesMatch = false;
107
+ do {
108
+ newPosNr++;
109
+ } while (groupedPartlistArticles.find(function (group) {
110
+ return group.posNr == newPosNr;
111
+ }));
112
+ }
113
+ groupedPartlistArticles.push({
114
+ article: article,
115
+ posNr: newPosNr,
116
+ letOthesMatch: letOthesMatch,
117
+ partlistArticles: [{
118
+ article: partlistArticle,
119
+ tabGroup: tabGroup,
120
+ optionArticle: optionArticle
121
+ }],
122
+ groupKey: preDefinedPosNr
123
+ });
124
+ }
125
+ } else {
126
+ partlistArticlesWithTabGroup.push({
127
+ article: partlistArticle,
128
+ tabGroup: tabGroup,
129
+ optionArticle: optionArticle
101
130
  });
102
131
  }
103
- } else {
104
- partlistArticlesWithTabGroup.push({
105
- article: partlistArticle,
106
- tabGroup: tabGroup
107
- });
132
+ };
133
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
134
+ _loop();
108
135
  }
109
- };
110
- for (var key in partlistArticles) {
111
- _loop();
136
+ } catch (err) {
137
+ _iterator.e(err);
138
+ } finally {
139
+ _iterator.f();
112
140
  }
113
141
  groupedPartlistArticles.find(function (group) {
114
142
  return group.posNr === posNr;
@@ -120,23 +148,25 @@ var StandardWWSHandler = /*#__PURE__*/function () {
120
148
  }));
121
149
  }
122
150
  if (pos) this.sort(pos, groupedPartlistArticles);
123
- var _loop2 = function _loop2() {
151
+ for (var _i = 0; _i < groupedPartlistArticles.length; _i++) {
124
152
  var group = groupedPartlistArticles[_i];
125
- var article = group.article;
126
153
  var posNrCount = 1;
127
154
 
128
155
  //get count of tabgroupOption - articles within each tabgroup
129
- var _loop4 = function _loop4() {
130
- var _article$getArticleOp3, _article$getArticleOp4;
131
- var partListArticle = group.partlistArticles[j].article;
132
- var tabGroup = (_article$getArticleOp3 = (_article$getArticleOp4 = article.getArticleOptionState((!isIDM ? 'OPT' : '') + partListArticle.tabGroup)) === null || _article$getArticleOp4 === void 0 ? void 0 : _article$getArticleOp4.optionTabGroup) !== null && _article$getArticleOp3 !== void 0 ? _article$getArticleOp3 : partListArticle.tabGroup;
156
+ var _loop2 = function _loop2() {
157
+ var _optionArticle$getArt3, _optionArticle$getArt4;
158
+ var _group$partlistArticl = group.partlistArticles[j],
159
+ partListArticle = _group$partlistArticl.article,
160
+ optionArticle = _group$partlistArticl.optionArticle;
161
+ var tabGroup = (_optionArticle$getArt3 = (_optionArticle$getArt4 = optionArticle.getArticleOptionState((!isIDM ? 'OPT' : '') + partListArticle.tabGroup)) === null || _optionArticle$getArt4 === void 0 ? void 0 : _optionArticle$getArt4.optionTabGroup) !== null && _optionArticle$getArt3 !== void 0 ? _optionArticle$getArt3 : partListArticle.tabGroup;
133
162
  var fountEntry = partListOrderLines.find(function (item) {
134
163
  var _item$FormattedOption, _item$FormattedOption2, _this$getFormattedOpt;
135
- return item.Name == partListArticle.name && item.ArticleNr == partListArticle.configArticleCodex && ((_item$FormattedOption = item.FormattedOptions) === null || _item$FormattedOption === void 0 ? void 0 : _item$FormattedOption[0]) && ((_item$FormattedOption2 = item.FormattedOptions) === null || _item$FormattedOption2 === void 0 ? void 0 : _item$FormattedOption2[0].Title) == ((_this$getFormattedOpt = _this.getFormattedOptions(partListArticle, article, [], '', usedOptionCodexes)) === null || _this$getFormattedOpt === void 0 ? void 0 : _this$getFormattedOpt[0].Title);
164
+ return item.Name == partListArticle.name && item.ArticleNr == partListArticle.configArticleCodex && ((_item$FormattedOption = item.FormattedOptions) === null || _item$FormattedOption === void 0 ? void 0 : _item$FormattedOption[0]) && ((_item$FormattedOption2 = item.FormattedOptions) === null || _item$FormattedOption2 === void 0 ? void 0 : _item$FormattedOption2[0].Title) == ((_this$getFormattedOpt = _this.getFormattedOptions(partListArticle, optionArticle, [], '', usedOptionCodexes)) === null || _this$getFormattedOpt === void 0 ? void 0 : _this$getFormattedOpt[0].Title);
136
165
  });
166
+ var unitPrice = summaryHandlerInstance.getPartlistUnitPrice(partListArticle);
137
167
  if (fountEntry) {
138
168
  fountEntry.Quantity = fountEntry.Quantity + partListArticle.quantity;
139
- fountEntry.FormattedPrice = DivaUtils.formatPrice(partListArticle.price * fountEntry.Quantity);
169
+ fountEntry.FormattedPrice = DivaUtils.formatPrice(unitPrice * fountEntry.Quantity);
140
170
  } else {
141
171
  var colorCodices = [];
142
172
  if (tabGroup && tabGroup !== 'Aktion' /* Aktion delete in 2024 */ && tabGroup !== 'BOX_AF_PARIS' || firstItem) {
@@ -145,14 +175,14 @@ var StandardWWSHandler = /*#__PURE__*/function () {
145
175
  finalPosNr = _this$getFinalPosNr.finalPosNr,
146
176
  newPosNrCount = _this$getFinalPosNr.newPosNrCount;
147
177
  posNrCount = newPosNrCount;
148
- var formattedOptions = _this.getFormattedOptions(partListArticle, article, colorCodices, finalPosNr, usedOptionCodexes);
178
+ var formattedOptions = _this.getFormattedOptions(partListArticle, optionArticle, colorCodices, finalPosNr, usedOptionCodexes);
149
179
  partListOrderLines.push({
150
180
  ArticleNr: (_partListArticle$conf = partListArticle.configArticleCodex) !== null && _partListArticle$conf !== void 0 && _partListArticle$conf.startsWith('HIDE_CODEX') ? '' : (_partListArticle$conf2 = partListArticle.configArticleCodex) !== null && _partListArticle$conf2 !== void 0 ? _partListArticle$conf2 : partListArticle.articleCodex,
151
181
  ColorCodices: colorCodices,
152
182
  FormattedOptions: formattedOptions,
153
- FormattedPrice: DivaUtils.formatPrice(partListArticle.price * partListArticle.quantity),
183
+ FormattedPrice: DivaUtils.formatPrice(unitPrice * partListArticle.quantity),
154
184
  PosNr: finalPosNr,
155
- Price: typeof partListArticle.price === 'number' ? partListArticle.price : parseFloat(partListArticle.price),
185
+ Price: unitPrice,
156
186
  Quantity: partListArticle.quantity,
157
187
  TabGroup: tabGroup !== null && tabGroup !== void 0 ? tabGroup : ' ',
158
188
  Name: partListArticle.name,
@@ -164,9 +194,9 @@ var StandardWWSHandler = /*#__PURE__*/function () {
164
194
  formattedOptions: [],
165
195
  ArticleNr: (_partListArticle$conf3 = partListArticle.configArticleCodex) !== null && _partListArticle$conf3 !== void 0 ? _partListArticle$conf3 : partListArticle.articleCodex,
166
196
  ColorCodices: [],
167
- FormattedPrice: DivaUtils.formatPrice(partListArticle.price * partListArticle.quantity),
197
+ FormattedPrice: DivaUtils.formatPrice(unitPrice * partListArticle.quantity),
168
198
  PosNr: group.posNr + '.00',
169
- Price: partListArticle.price,
199
+ Price: unitPrice,
170
200
  Quantity: partListArticle.quantity,
171
201
  TabGroup: 'SetArtikel',
172
202
  Name: (_basket$SetName = basket.SetName) !== null && _basket$SetName !== void 0 ? _basket$SetName : partListArticle.name
@@ -175,11 +205,8 @@ var StandardWWSHandler = /*#__PURE__*/function () {
175
205
  }
176
206
  };
177
207
  for (var j = 0; j < group.partlistArticles.length; j++) {
178
- _loop4();
208
+ _loop2();
179
209
  }
180
- };
181
- for (var _i = 0; _i < groupedPartlistArticles.length; _i++) {
182
- _loop2();
183
210
  }
184
211
  for (var _i2 = 0; _i2 < partListOrderLines.length; _i2++) {
185
212
  if (partListOrderLines[_i2].TabGroup && !partListGroups.includes(partListOrderLines[_i2].TabGroup)) {
@@ -190,7 +217,7 @@ var StandardWWSHandler = /*#__PURE__*/function () {
190
217
  var partListOrderLinesSorted = [];
191
218
  var _loop3 = function _loop3() {
192
219
  var _DivaSummaryHandler$g;
193
- var p = (_DivaSummaryHandler$g = summaryHandlerInstance.getTabgroupByOptionCodex(pos[_i3], Object.values(articles))) !== null && _DivaSummaryHandler$g !== void 0 ? _DivaSummaryHandler$g : pos[_i3];
220
+ var p = (_DivaSummaryHandler$g = summaryHandlerInstance.getTabgroupByOptionCodex(pos[_i3], tabGroupLookupArticles)) !== null && _DivaSummaryHandler$g !== void 0 ? _DivaSummaryHandler$g : pos[_i3];
194
221
  while (partListOrderLines.find(function (orderline) {
195
222
  return orderline.TabGroup === p;
196
223
  })) {
@@ -217,11 +244,26 @@ var StandardWWSHandler = /*#__PURE__*/function () {
217
244
  return posA - posB;
218
245
  });
219
246
  if (firstItem) partListOrderLines.unshift(firstItem);
247
+ this.markMainColor();
220
248
  return {
221
249
  PartListOrderLines: partListOrderLines,
222
250
  PartListGroups: partListGroups
223
251
  };
224
252
  }
253
+
254
+ /**
255
+ * The first emitted option flagged with IS_MAIN_COLOR is the main color of the part list; without one, the first emitted
256
+ * OPTBE_BOX option (API2 fallback) is. Decided after all lines exist, so only options that really appear can be chosen.
257
+ */
258
+ }, {
259
+ key: "markMainColor",
260
+ value: function markMainColor() {
261
+ var _this$mainColorCandid;
262
+ var mainColor = (_this$mainColorCandid = this.mainColorCandidates.find(function (candidate) {
263
+ return candidate.explicit;
264
+ })) !== null && _this$mainColorCandid !== void 0 ? _this$mainColorCandid : this.mainColorCandidates[0];
265
+ if (mainColor) mainColor.option.IsMainColor = true;
266
+ }
225
267
  }, {
226
268
  key: "getFinalPosNr",
227
269
  value: function getFinalPosNr(group, posNrCount, partListArticle, firstItem) {
@@ -230,7 +272,8 @@ var StandardWWSHandler = /*#__PURE__*/function () {
230
272
  //betriebsanleitung soll diese PosNr haben
231
273
  finalPosNr = '1.99';
232
274
  } else if (group.partlistArticles.length > 1) {
233
- finalPosNr = (group.posNr + Number((posNrCount / 100).toFixed(2))).toString();
275
+ // string formatting: float arithmetic yields "1.1" for the 10th and "1.1400000000000001" for the 14th position
276
+ finalPosNr = "".concat(group.posNr, ".").concat(String(posNrCount).padStart(2, '0'));
234
277
  posNrCount++;
235
278
  } else {
236
279
  finalPosNr = (group.posNr + '.00').toString();
@@ -248,14 +291,27 @@ var StandardWWSHandler = /*#__PURE__*/function () {
248
291
  for (var i = 0; i < groupedPartlistArticles.length; i++) {
249
292
  var partlistArticlesSorted = [];
250
293
  var article = groupedPartlistArticles[i];
294
+ var lookupArticles = [article.article];
295
+ var _iterator2 = _createForOfIteratorHelper(article.partlistArticles),
296
+ _step2;
297
+ try {
298
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
299
+ var entry = _step2.value;
300
+ if (!lookupArticles.includes(entry.optionArticle)) lookupArticles.push(entry.optionArticle);
301
+ }
302
+ } catch (err) {
303
+ _iterator2.e(err);
304
+ } finally {
305
+ _iterator2.f();
306
+ }
251
307
  for (var j = 0; j < pos.length; j++) {
252
308
  var _DivaSummaryHandler$g2;
253
309
  var indexesOf = [];
254
- var p = (_DivaSummaryHandler$g2 = summaryHandlerInstance.getTabgroupByOptionCodex(pos[j], [article.article])) !== null && _DivaSummaryHandler$g2 !== void 0 ? _DivaSummaryHandler$g2 : pos[j];
310
+ var p = (_DivaSummaryHandler$g2 = summaryHandlerInstance.getTabgroupByOptionCodex(pos[j], lookupArticles)) !== null && _DivaSummaryHandler$g2 !== void 0 ? _DivaSummaryHandler$g2 : pos[j];
255
311
  for (var m = 0; m < article.partlistArticles.length; m++) {
256
- var _article$article$getA, _article$article$getA2;
312
+ var _partListArticle$opti, _partListArticle$opti2;
257
313
  var partListArticle = article.partlistArticles[m];
258
- var tabGroup = (_article$article$getA = (_article$article$getA2 = article.article.getArticleOptionState((!partListArticle.article.CatalogData.isIDMFormat ? 'OPT' : '') + partListArticle.tabGroup)) === null || _article$article$getA2 === void 0 ? void 0 : _article$article$getA2.optionTabGroup) !== null && _article$article$getA !== void 0 ? _article$article$getA : partListArticle.tabGroup;
314
+ var tabGroup = (_partListArticle$opti = (_partListArticle$opti2 = partListArticle.optionArticle.getArticleOptionState((!partListArticle.article.CatalogData.isIDMFormat ? 'OPT' : '') + partListArticle.tabGroup)) === null || _partListArticle$opti2 === void 0 ? void 0 : _partListArticle$opti2.optionTabGroup) !== null && _partListArticle$opti !== void 0 ? _partListArticle$opti : partListArticle.tabGroup;
259
315
  if (tabGroup == p) {
260
316
  indexesOf.push(m);
261
317
  }
@@ -279,26 +335,32 @@ var StandardWWSHandler = /*#__PURE__*/function () {
279
335
  var optionStates = summaryHandlerInstance.getOptionCodexesOfTabGroupForSummary(article, partListArticle, usedOptionCodexes, finalPosNr == '');
280
336
  for (var i = 0; i < optionStates.length; i++) {
281
337
  var optionState = optionStates[i];
282
- if (optionState.optionCodex.startsWith('OPTBE_') || optionState.optionCodex.startsWith('OPTAB_') || optionState.option.addToWWS) {
338
+ if (optionState.optionCodex.startsWith('OPTBE_') || optionState.optionCodex.startsWith('OPTAB_') || optionState.option.addToWWS || optionState.option.isMainColor) {
283
339
  var _optionState$vCodex;
284
340
  var coloCodex = (_optionState$vCodex = optionState.vCodex) !== null && _optionState$vCodex !== void 0 ? _optionState$vCodex : optionState.valCodex;
285
341
  if (coloCodex) {
286
342
  var _optionState$val$grou, _optionState$val, _article$getMergesToO;
287
343
  colorCodices.push(coloCodex);
288
- var isMainColor = false;
289
- if (!this.mainColorFound && optionState.optionCodex == MAIN_COLOR_OPTIONCODEX) {
290
- isMainColor = true;
291
- this.mainColorFound = true;
292
- }
293
344
  //IDM has no group name on the value itself: there the Bezugsgruppe is its own feature, merged into this one only for the view
294
345
  var groupName = (_optionState$val$grou = (_optionState$val = optionState.val) === null || _optionState$val === void 0 ? void 0 : _optionState$val.groupName) !== null && _optionState$val$grou !== void 0 ? _optionState$val$grou : (_article$getMergesToO = article.getMergesToOPGParentOps(optionState.optionCodex)) === null || _article$getMergesToO === void 0 ? void 0 : _article$getMergesToO.valName;
295
- formattedOptions.push({
346
+ // API2 carries the fabric number as VCodex; IDM values have none, there the option key is the fabric number ("0_227_1" → "0-227-1")
347
+ var codex = optionState.vCodex && optionState.vCodex !== optionState.valName ? optionState.vCodex : article.CatalogData.isIDMFormat ? summaryHandlerInstance.getDisplayCodex(optionState) : '';
348
+ var formattedOption = {
296
349
  PosNr: finalPosNr,
297
350
  Text: (groupName ? groupName + ' ' : '') + optionState.valName,
298
351
  Title: optionState.optionOrigName,
299
- Codex: optionState.vCodex && optionState.vCodex !== optionState.valName ? optionState.vCodex : '',
300
- IsMainColor: isMainColor
301
- });
352
+ Codex: codex,
353
+ IsMainColor: false
354
+ };
355
+ formattedOptions.push(formattedOption);
356
+ // only options of real lines can become the main color; the dedupe probe (empty PosNr) discards its result
357
+ var explicit = !!optionState.option.isMainColor;
358
+ if (finalPosNr !== '' && (explicit || optionState.optionCodex == MAIN_COLOR_OPTIONCODEX)) {
359
+ this.mainColorCandidates.push({
360
+ option: formattedOption,
361
+ explicit: explicit
362
+ });
363
+ }
302
364
  }
303
365
  }
304
366
  }