@crystaldesign/web-planner-logic 26.12.0-beta.5 → 26.12.0-beta.6

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 (46) hide show
  1. package/build/cjs/{DivaBoxPlanner-2c699ee3.js → DivaBoxPlanner-e772f6a3.js} +2 -2
  2. package/build/cjs/{DivaStandardPlanner-3d6a05bc.js → DivaStandardPlanner-d6cb5f39.js} +2 -2
  3. package/build/cjs/{DoorPlanner-adda9c0d.js → DoorPlanner-9ea7a6aa.js} +1 -1
  4. package/build/cjs/{Host3DSignalR-6914541f.js → Host3DSignalR-9710fc4e.js} +1 -1
  5. package/build/cjs/{LiviqueWWSHandler-635cffae.js → LiviqueWWSHandler-fbc83326.js} +1 -1
  6. package/build/cjs/{PfisterWWSHandler-d95419db.js → PfisterWWSHandler-1a240ebf.js} +1 -1
  7. package/build/cjs/{PlannerHandler2D-b76ba907.js → PlannerHandler2D-1d75a95f.js} +1 -1
  8. package/build/cjs/{SeriousBasketHandler-777904e8.js → SeriousBasketHandler-f492ea60.js} +157 -77
  9. package/build/cjs/{ShelfPlanner-5ffd15a2.js → ShelfPlanner-65f4da8e.js} +1 -1
  10. package/build/cjs/{StandardWWSHandler-e92acae6.js → StandardWWSHandler-6187c7c9.js} +1 -1
  11. package/build/cjs/{index-d516d2b2.js → index-34ea53f6.js} +58 -11
  12. package/build/cjs/index.js +2 -1
  13. package/build/esm/{DivaBoxPlanner-6f0727a3.js → DivaBoxPlanner-2ba492c3.js} +2 -2
  14. package/build/esm/{DivaStandardPlanner-7188da61.js → DivaStandardPlanner-19e1f3d9.js} +2 -2
  15. package/build/esm/{DoorPlanner-74bcd21d.js → DoorPlanner-dd3a1b18.js} +1 -1
  16. package/build/esm/{Host3DSignalR-bb6db8e6.js → Host3DSignalR-d5d5d7f3.js} +1 -1
  17. package/build/esm/{LiviqueWWSHandler-c4ba143d.js → LiviqueWWSHandler-1634b15e.js} +1 -1
  18. package/build/esm/{PfisterWWSHandler-41b7b1b7.js → PfisterWWSHandler-1ba9df74.js} +1 -1
  19. package/build/esm/{PlannerHandler2D-829ffceb.js → PlannerHandler2D-8b9dbf35.js} +1 -1
  20. package/build/esm/{SeriousBasketHandler-0bb8ee55.js → SeriousBasketHandler-f0ccbf97.js} +157 -77
  21. package/build/esm/{ShelfPlanner-1406888d.js → ShelfPlanner-b7d908ec.js} +1 -1
  22. package/build/esm/{StandardWWSHandler-a8045129.js → StandardWWSHandler-2a205527.js} +1 -1
  23. package/build/esm/{index-16a1a540.js → index-0e729418.js} +58 -12
  24. package/build/esm/index.js +1 -1
  25. package/build/types/web-planner-logic/src/index.d.ts +1 -0
  26. package/build/types/web-planner-logic/src/index.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/OptionTypes/CatalogOptionDataTypes.d.ts +1 -0
  28. package/build/types/web-planner-logic/src/interface/OptionTypes/CatalogOptionDataTypes.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.d.ts +20 -1
  30. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.test.d.ts +2 -0
  32. package/build/types/web-planner-logic/src/logic/Basket/SeriousBasketHandler.test.d.ts.map +1 -0
  33. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.d.ts +8 -0
  34. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.d.ts.map +1 -0
  35. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.test.d.ts +2 -0
  36. package/build/types/web-planner-logic/src/logic/Basket/seriousSetName.test.d.ts.map +1 -0
  37. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.d.ts.map +1 -1
  38. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.test.d.ts +2 -0
  39. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.test.d.ts.map +1 -0
  40. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts +2 -1
  41. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts.map +1 -1
  42. package/build/types/web-planner-logic/src/model/Options/ArticleOptionData.d.ts +1 -0
  43. package/build/types/web-planner-logic/src/model/Options/ArticleOptionData.d.ts.map +1 -1
  44. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts +1 -0
  45. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts.map +1 -1
  46. package/package.json +3 -3
@@ -5,11 +5,11 @@ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
5
5
  var _createClass = require('@babel/runtime/helpers/createClass');
6
6
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
7
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
- var index = require('./index-d516d2b2.js');
8
+ var index = require('./index-34ea53f6.js');
9
9
  var DivaUtils = require('@crystaldesign/diva-utils');
10
10
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
11
11
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
12
- var PlannerHandler2D = require('./PlannerHandler2D-b76ba907.js');
12
+ var PlannerHandler2D = require('./PlannerHandler2D-1d75a95f.js');
13
13
  require('@babel/runtime/helpers/objectWithoutProperties');
14
14
  require('axios');
15
15
  require('@crystaldesign/basket-model');
@@ -6,10 +6,10 @@ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
6
6
  var _createClass = require('@babel/runtime/helpers/createClass');
7
7
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
8
8
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
9
- var index = require('./index-d516d2b2.js');
9
+ var index = require('./index-34ea53f6.js');
10
10
  var DivaUtils = require('@crystaldesign/diva-utils');
11
11
  var planner2dCore = require('@crystaldesign/planner-2d-core');
12
- var PlannerHandler2D = require('./PlannerHandler2D-b76ba907.js');
12
+ var PlannerHandler2D = require('./PlannerHandler2D-1d75a95f.js');
13
13
  require('@babel/runtime/helpers/slicedToArray');
14
14
  require('@babel/runtime/helpers/objectWithoutProperties');
15
15
  require('axios');
@@ -3,7 +3,7 @@
3
3
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
4
4
  var _createClass = require('@babel/runtime/helpers/createClass');
5
5
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
- require('./index-d516d2b2.js');
6
+ require('./index-34ea53f6.js');
7
7
  var DivaUtils = require('@crystaldesign/diva-utils');
8
8
  require('@babel/runtime/helpers/slicedToArray');
9
9
  require('@babel/runtime/helpers/asyncToGenerator');
@@ -5,7 +5,7 @@ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
5
5
  var _createClass = require('@babel/runtime/helpers/createClass');
6
6
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
7
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
- var index = require('./index-d516d2b2.js');
8
+ var index = require('./index-34ea53f6.js');
9
9
  var DivaUtils = require('@crystaldesign/diva-utils');
10
10
  var signalr = require('@microsoft/signalr');
11
11
  var io = require('socket.io-client');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
4
4
  var _createClass = require('@babel/runtime/helpers/createClass');
5
- require('./index-d516d2b2.js');
5
+ require('./index-34ea53f6.js');
6
6
  require('@babel/runtime/helpers/slicedToArray');
7
7
  require('@babel/runtime/helpers/asyncToGenerator');
8
8
  require('@babel/runtime/helpers/defineProperty');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
4
4
  var _createClass = require('@babel/runtime/helpers/createClass');
5
- var index = require('./index-d516d2b2.js');
5
+ var index = require('./index-34ea53f6.js');
6
6
  var basketModel = require('@crystaldesign/basket-model');
7
7
  var DivaUtils = require('@crystaldesign/diva-utils');
8
8
  require('@babel/runtime/helpers/slicedToArray');
@@ -5,7 +5,7 @@ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
5
5
  var _createClass = require('@babel/runtime/helpers/createClass');
6
6
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
7
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
- var index = require('./index-d516d2b2.js');
8
+ var index = require('./index-34ea53f6.js');
9
9
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
10
10
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
11
11
  var DivaUtils = require('@crystaldesign/diva-utils');
@@ -3,7 +3,7 @@
3
3
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
4
4
  var _createClass = require('@babel/runtime/helpers/createClass');
5
5
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
- var index = require('./index-d516d2b2.js');
6
+ var index = require('./index-34ea53f6.js');
7
7
  var DivaUtils = require('@crystaldesign/diva-utils');
8
8
  require('@babel/runtime/helpers/slicedToArray');
9
9
  require('@babel/runtime/helpers/asyncToGenerator');
@@ -29,23 +29,36 @@ var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
29
29
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
30
30
  var DivaUtils__default = /*#__PURE__*/_interopDefaultLegacy(DivaUtils);
31
31
 
32
+ 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; } } }; }
33
+ 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; } }
34
+ 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; }
35
+
36
+ /** An emitted formatted option that may become the main color: flagged with IS_MAIN_COLOR (explicit) or the API2 OPTBE_BOX fallback */
37
+
32
38
  //Der in einem Set gemergte Optionsbaum
33
- var MAIN_COLOR_OPTIONCODEX = 'OPTBE_BOX'; // this field indicates the the main Color. This main color is used in the PDF
39
+ // API2 fallback for the main color used in the PDF; catalogs mark it explicitly with the option property IS_MAIN_COLOR
40
+ var MAIN_COLOR_OPTIONCODEX = 'OPTBE_BOX';
34
41
  var StandardWWSHandler = /*#__PURE__*/function () {
35
42
  function StandardWWSHandler() {
36
43
  _classCallCheck__default["default"](this, StandardWWSHandler);
37
- _defineProperty__default["default"](this, "mainColorFound", false);
44
+ _defineProperty__default["default"](this, "mainColorCandidates", []);
38
45
  }
39
46
  return _createClass__default["default"](StandardWWSHandler, [{
40
47
  key: "repairWWSFlags",
41
48
  value: function repairWWSFlags(articles, orderLines) {
42
49
  return orderLines;
43
50
  }
51
+ /**
52
+ * Builds the part list for the Serious PDF. Components are collected at any partlist depth: intermediate articles that
53
+ * only bundle further components without a price of their own (IDM "Hülsen") are not listed themselves, a priced parent
54
+ * (e.g. an IDM Vorzugskombi header) is listed with its own price next to its components, and the options of a component
55
+ * are looked up on its direct parent, which is the set article itself for flat (API2) partlists.
56
+ */
44
57
  }, {
45
58
  key: "getWWSData",
46
59
  value: function getWWSData(basket, set, orderSet, orderlines) {
47
60
  var _this = this;
48
- this.mainColorFound = false;
61
+ this.mainColorCandidates = [];
49
62
  var pos = set.CatalogData.summaryTabGroupPosition;
50
63
  var isIDM = set.CatalogData.isIDMFormat;
51
64
  var partListOrderLines = [];
@@ -61,10 +74,12 @@ var StandardWWSHandler = /*#__PURE__*/function () {
61
74
  var articles = set.getDivaArticles();
62
75
  var groupedPartlistArticles = [];
63
76
  var usedOptionCodexes = [];
77
+ // set articles plus the parents of nested components, so catalog tab group codices resolve for both
78
+ var tabGroupLookupArticles = Object.values(articles);
64
79
  var posNr = 1;
65
80
  for (var iKey in articles) {
66
81
  var article = articles[iKey];
67
- var partlistArticles = articles[iKey].partlistArticles;
82
+ var partlistArticles = this.getPartlistComponents(article);
68
83
  var partlistArticlesWithTabGroup = [];
69
84
  groupedPartlistArticles.push({
70
85
  article: article,
@@ -72,52 +87,65 @@ var StandardWWSHandler = /*#__PURE__*/function () {
72
87
  partlistArticles: [],
73
88
  letOthesMatch: true
74
89
  });
75
- var _loop = function _loop() {
76
- var _partlistArticle$cata, _article$getArticleOp, _article$getArticleOp2;
77
- var partlistArticle = partlistArticles[key];
78
- var preDefinedPosNr = (_partlistArticle$cata = partlistArticle.catalogArticle.orderPosNr) !== null && _partlistArticle$cata !== void 0 ? _partlistArticle$cata : null;
79
- 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;
80
- if (preDefinedPosNr !== null) {
81
- var existingentry = !preDefinedPosNr.endsWith(';') && groupedPartlistArticles.find(function (group) {
82
- return (group.posNr == Number(preDefinedPosNr) || group.groupKey == preDefinedPosNr) && group.letOthesMatch;
83
- });
84
- if (existingentry) {
85
- existingentry.partlistArticles.push({
86
- article: partlistArticle,
87
- tabGroup: tabGroup
90
+ var _iterator = _createForOfIteratorHelper(partlistArticles),
91
+ _step;
92
+ try {
93
+ var _loop = function _loop() {
94
+ var _partlistArticle$part, _partlistArticle$cata, _optionArticle$getArt, _optionArticle$getArt2;
95
+ var partlistArticle = _step.value;
96
+ var optionArticle = (_partlistArticle$part = partlistArticle.partListParentArticle) !== null && _partlistArticle$part !== void 0 ? _partlistArticle$part : article;
97
+ if (!tabGroupLookupArticles.includes(optionArticle)) tabGroupLookupArticles.push(optionArticle);
98
+ var preDefinedPosNr = (_partlistArticle$cata = partlistArticle.catalogArticle.orderPosNr) !== null && _partlistArticle$cata !== void 0 ? _partlistArticle$cata : null;
99
+ 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;
100
+ if (preDefinedPosNr !== null) {
101
+ var existingentry = !preDefinedPosNr.endsWith(';') && groupedPartlistArticles.find(function (group) {
102
+ return (group.posNr == Number(preDefinedPosNr) || group.groupKey == preDefinedPosNr) && group.letOthesMatch;
88
103
  });
89
- } else {
90
- var letOthesMatch = true;
91
- var newPosNr = Number(preDefinedPosNr);
92
- if (isNaN(newPosNr)) {
93
- newPosNr = posNr;
94
- letOthesMatch = false;
95
- do {
96
- newPosNr++;
97
- } while (groupedPartlistArticles.find(function (group) {
98
- return group.posNr == newPosNr;
99
- }));
100
- }
101
- groupedPartlistArticles.push({
102
- article: article,
103
- posNr: newPosNr,
104
- letOthesMatch: letOthesMatch,
105
- partlistArticles: [{
104
+ if (existingentry) {
105
+ existingentry.partlistArticles.push({
106
106
  article: partlistArticle,
107
- tabGroup: tabGroup
108
- }],
109
- groupKey: preDefinedPosNr
107
+ tabGroup: tabGroup,
108
+ optionArticle: optionArticle
109
+ });
110
+ } else {
111
+ var letOthesMatch = true;
112
+ var newPosNr = Number(preDefinedPosNr);
113
+ if (isNaN(newPosNr)) {
114
+ newPosNr = posNr;
115
+ letOthesMatch = false;
116
+ do {
117
+ newPosNr++;
118
+ } while (groupedPartlistArticles.find(function (group) {
119
+ return group.posNr == newPosNr;
120
+ }));
121
+ }
122
+ groupedPartlistArticles.push({
123
+ article: article,
124
+ posNr: newPosNr,
125
+ letOthesMatch: letOthesMatch,
126
+ partlistArticles: [{
127
+ article: partlistArticle,
128
+ tabGroup: tabGroup,
129
+ optionArticle: optionArticle
130
+ }],
131
+ groupKey: preDefinedPosNr
132
+ });
133
+ }
134
+ } else {
135
+ partlistArticlesWithTabGroup.push({
136
+ article: partlistArticle,
137
+ tabGroup: tabGroup,
138
+ optionArticle: optionArticle
110
139
  });
111
140
  }
112
- } else {
113
- partlistArticlesWithTabGroup.push({
114
- article: partlistArticle,
115
- tabGroup: tabGroup
116
- });
141
+ };
142
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
143
+ _loop();
117
144
  }
118
- };
119
- for (var key in partlistArticles) {
120
- _loop();
145
+ } catch (err) {
146
+ _iterator.e(err);
147
+ } finally {
148
+ _iterator.f();
121
149
  }
122
150
  groupedPartlistArticles.find(function (group) {
123
151
  return group.posNr === posNr;
@@ -129,23 +157,25 @@ var StandardWWSHandler = /*#__PURE__*/function () {
129
157
  }));
130
158
  }
131
159
  if (pos) this.sort(pos, groupedPartlistArticles);
132
- var _loop2 = function _loop2() {
160
+ for (var _i = 0; _i < groupedPartlistArticles.length; _i++) {
133
161
  var group = groupedPartlistArticles[_i];
134
- var article = group.article;
135
162
  var posNrCount = 1;
136
163
 
137
164
  //get count of tabgroupOption - articles within each tabgroup
138
- var _loop4 = function _loop4() {
139
- var _article$getArticleOp3, _article$getArticleOp4;
140
- var partListArticle = group.partlistArticles[j].article;
141
- 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;
165
+ var _loop2 = function _loop2() {
166
+ var _optionArticle$getArt3, _optionArticle$getArt4;
167
+ var _group$partlistArticl = group.partlistArticles[j],
168
+ partListArticle = _group$partlistArticl.article,
169
+ optionArticle = _group$partlistArticl.optionArticle;
170
+ 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;
142
171
  var fountEntry = partListOrderLines.find(function (item) {
143
172
  var _item$FormattedOption, _item$FormattedOption2, _this$getFormattedOpt;
144
- 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);
173
+ 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);
145
174
  });
175
+ var unitPrice = _this.unitPrice(partListArticle);
146
176
  if (fountEntry) {
147
177
  fountEntry.Quantity = fountEntry.Quantity + partListArticle.quantity;
148
- fountEntry.FormattedPrice = DivaUtils__default["default"].formatPrice(partListArticle.price * fountEntry.Quantity);
178
+ fountEntry.FormattedPrice = DivaUtils__default["default"].formatPrice(unitPrice * fountEntry.Quantity);
149
179
  } else {
150
180
  var colorCodices = [];
151
181
  if (tabGroup && tabGroup !== 'Aktion' /* Aktion delete in 2024 */ && tabGroup !== 'BOX_AF_PARIS' || firstItem) {
@@ -154,14 +184,14 @@ var StandardWWSHandler = /*#__PURE__*/function () {
154
184
  finalPosNr = _this$getFinalPosNr.finalPosNr,
155
185
  newPosNrCount = _this$getFinalPosNr.newPosNrCount;
156
186
  posNrCount = newPosNrCount;
157
- var formattedOptions = _this.getFormattedOptions(partListArticle, article, colorCodices, finalPosNr, usedOptionCodexes);
187
+ var formattedOptions = _this.getFormattedOptions(partListArticle, optionArticle, colorCodices, finalPosNr, usedOptionCodexes);
158
188
  partListOrderLines.push({
159
189
  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,
160
190
  ColorCodices: colorCodices,
161
191
  FormattedOptions: formattedOptions,
162
- FormattedPrice: DivaUtils__default["default"].formatPrice(partListArticle.price * partListArticle.quantity),
192
+ FormattedPrice: DivaUtils__default["default"].formatPrice(unitPrice * partListArticle.quantity),
163
193
  PosNr: finalPosNr,
164
- Price: typeof partListArticle.price === 'number' ? partListArticle.price : parseFloat(partListArticle.price),
194
+ Price: unitPrice,
165
195
  Quantity: partListArticle.quantity,
166
196
  TabGroup: tabGroup !== null && tabGroup !== void 0 ? tabGroup : ' ',
167
197
  Name: partListArticle.name,
@@ -173,9 +203,9 @@ var StandardWWSHandler = /*#__PURE__*/function () {
173
203
  formattedOptions: [],
174
204
  ArticleNr: (_partListArticle$conf3 = partListArticle.configArticleCodex) !== null && _partListArticle$conf3 !== void 0 ? _partListArticle$conf3 : partListArticle.articleCodex,
175
205
  ColorCodices: [],
176
- FormattedPrice: DivaUtils__default["default"].formatPrice(partListArticle.price * partListArticle.quantity),
206
+ FormattedPrice: DivaUtils__default["default"].formatPrice(unitPrice * partListArticle.quantity),
177
207
  PosNr: group.posNr + '.00',
178
- Price: partListArticle.price,
208
+ Price: unitPrice,
179
209
  Quantity: partListArticle.quantity,
180
210
  TabGroup: 'SetArtikel',
181
211
  Name: (_basket$SetName = basket.SetName) !== null && _basket$SetName !== void 0 ? _basket$SetName : partListArticle.name
@@ -184,11 +214,8 @@ var StandardWWSHandler = /*#__PURE__*/function () {
184
214
  }
185
215
  };
186
216
  for (var j = 0; j < group.partlistArticles.length; j++) {
187
- _loop4();
217
+ _loop2();
188
218
  }
189
- };
190
- for (var _i = 0; _i < groupedPartlistArticles.length; _i++) {
191
- _loop2();
192
219
  }
193
220
  for (var _i2 = 0; _i2 < partListOrderLines.length; _i2++) {
194
221
  if (partListOrderLines[_i2].TabGroup && !partListGroups.includes(partListOrderLines[_i2].TabGroup)) {
@@ -199,7 +226,7 @@ var StandardWWSHandler = /*#__PURE__*/function () {
199
226
  var partListOrderLinesSorted = [];
200
227
  var _loop3 = function _loop3() {
201
228
  var _DivaSummaryHandler$g;
202
- var p = (_DivaSummaryHandler$g = index.summaryHandlerInstance.getTabgroupByOptionCodex(pos[_i3], Object.values(articles))) !== null && _DivaSummaryHandler$g !== void 0 ? _DivaSummaryHandler$g : pos[_i3];
229
+ var p = (_DivaSummaryHandler$g = index.summaryHandlerInstance.getTabgroupByOptionCodex(pos[_i3], tabGroupLookupArticles)) !== null && _DivaSummaryHandler$g !== void 0 ? _DivaSummaryHandler$g : pos[_i3];
203
230
  while (partListOrderLines.find(function (orderline) {
204
231
  return orderline.TabGroup === p;
205
232
  })) {
@@ -226,11 +253,46 @@ var StandardWWSHandler = /*#__PURE__*/function () {
226
253
  return posA - posB;
227
254
  });
228
255
  if (firstItem) partListOrderLines.unshift(firstItem);
256
+ this.markMainColor();
229
257
  return {
230
258
  PartListOrderLines: partListOrderLines,
231
259
  PartListGroups: partListGroups
232
260
  };
233
261
  }
262
+
263
+ /**
264
+ * Components at any partlist depth. Articles that only bundle further components without a price of their own (IDM
265
+ * "Hülsen") are left out, also when the current configuration loads none of their components (e.g. no mattress chosen):
266
+ * an empty Hülse is not a part. A partlist parent with a price of its own stays a part, so its price is not lost.
267
+ */
268
+ }, {
269
+ key: "getPartlistComponents",
270
+ value: function getPartlistComponents(article) {
271
+ return Object.values(article.getRecursivePartlistArticles()).filter(function (partlistArticle) {
272
+ return !partlistArticle.hasPartlistArticle || partlistArticle.mainPrice > 0;
273
+ });
274
+ }
275
+
276
+ /** Unit price of a part: a partlist parent contributes only its own price, its components are listed themselves. */
277
+ }, {
278
+ key: "unitPrice",
279
+ value: function unitPrice(partListArticle) {
280
+ return partListArticle.hasPartlistArticle ? partListArticle.mainPrice : partListArticle.price;
281
+ }
282
+
283
+ /**
284
+ * The first emitted option flagged with IS_MAIN_COLOR is the main color of the part list; without one, the first emitted
285
+ * OPTBE_BOX option (API2 fallback) is. Decided after all lines exist, so only options that really appear can be chosen.
286
+ */
287
+ }, {
288
+ key: "markMainColor",
289
+ value: function markMainColor() {
290
+ var _this$mainColorCandid;
291
+ var mainColor = (_this$mainColorCandid = this.mainColorCandidates.find(function (candidate) {
292
+ return candidate.explicit;
293
+ })) !== null && _this$mainColorCandid !== void 0 ? _this$mainColorCandid : this.mainColorCandidates[0];
294
+ if (mainColor) mainColor.option.IsMainColor = true;
295
+ }
234
296
  }, {
235
297
  key: "getFinalPosNr",
236
298
  value: function getFinalPosNr(group, posNrCount, partListArticle, firstItem) {
@@ -239,7 +301,8 @@ var StandardWWSHandler = /*#__PURE__*/function () {
239
301
  //betriebsanleitung soll diese PosNr haben
240
302
  finalPosNr = '1.99';
241
303
  } else if (group.partlistArticles.length > 1) {
242
- finalPosNr = (group.posNr + Number((posNrCount / 100).toFixed(2))).toString();
304
+ // string formatting: float arithmetic yields "1.1" for the 10th and "1.1400000000000001" for the 14th position
305
+ finalPosNr = "".concat(group.posNr, ".").concat(String(posNrCount).padStart(2, '0'));
243
306
  posNrCount++;
244
307
  } else {
245
308
  finalPosNr = (group.posNr + '.00').toString();
@@ -257,14 +320,27 @@ var StandardWWSHandler = /*#__PURE__*/function () {
257
320
  for (var i = 0; i < groupedPartlistArticles.length; i++) {
258
321
  var partlistArticlesSorted = [];
259
322
  var article = groupedPartlistArticles[i];
323
+ var lookupArticles = [article.article];
324
+ var _iterator2 = _createForOfIteratorHelper(article.partlistArticles),
325
+ _step2;
326
+ try {
327
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
328
+ var entry = _step2.value;
329
+ if (!lookupArticles.includes(entry.optionArticle)) lookupArticles.push(entry.optionArticle);
330
+ }
331
+ } catch (err) {
332
+ _iterator2.e(err);
333
+ } finally {
334
+ _iterator2.f();
335
+ }
260
336
  for (var j = 0; j < pos.length; j++) {
261
337
  var _DivaSummaryHandler$g2;
262
338
  var indexesOf = [];
263
- var p = (_DivaSummaryHandler$g2 = index.summaryHandlerInstance.getTabgroupByOptionCodex(pos[j], [article.article])) !== null && _DivaSummaryHandler$g2 !== void 0 ? _DivaSummaryHandler$g2 : pos[j];
339
+ var p = (_DivaSummaryHandler$g2 = index.summaryHandlerInstance.getTabgroupByOptionCodex(pos[j], lookupArticles)) !== null && _DivaSummaryHandler$g2 !== void 0 ? _DivaSummaryHandler$g2 : pos[j];
264
340
  for (var m = 0; m < article.partlistArticles.length; m++) {
265
- var _article$article$getA, _article$article$getA2;
341
+ var _partListArticle$opti, _partListArticle$opti2;
266
342
  var partListArticle = article.partlistArticles[m];
267
- 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;
343
+ 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;
268
344
  if (tabGroup == p) {
269
345
  indexesOf.push(m);
270
346
  }
@@ -288,26 +364,30 @@ var StandardWWSHandler = /*#__PURE__*/function () {
288
364
  var optionStates = index.summaryHandlerInstance.getOptionCodexesOfTabGroupForSummary(article, partListArticle, usedOptionCodexes, finalPosNr == '');
289
365
  for (var i = 0; i < optionStates.length; i++) {
290
366
  var optionState = optionStates[i];
291
- if (optionState.optionCodex.startsWith('OPTBE_') || optionState.optionCodex.startsWith('OPTAB_') || optionState.option.addToWWS) {
367
+ if (optionState.optionCodex.startsWith('OPTBE_') || optionState.optionCodex.startsWith('OPTAB_') || optionState.option.addToWWS || optionState.option.isMainColor) {
292
368
  var _optionState$vCodex;
293
369
  var coloCodex = (_optionState$vCodex = optionState.vCodex) !== null && _optionState$vCodex !== void 0 ? _optionState$vCodex : optionState.valCodex;
294
370
  if (coloCodex) {
295
371
  var _optionState$val$grou, _optionState$val, _article$getMergesToO;
296
372
  colorCodices.push(coloCodex);
297
- var isMainColor = false;
298
- if (!this.mainColorFound && optionState.optionCodex == MAIN_COLOR_OPTIONCODEX) {
299
- isMainColor = true;
300
- this.mainColorFound = true;
301
- }
302
373
  //IDM has no group name on the value itself: there the Bezugsgruppe is its own feature, merged into this one only for the view
303
374
  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;
304
- formattedOptions.push({
375
+ var formattedOption = {
305
376
  PosNr: finalPosNr,
306
377
  Text: (groupName ? groupName + ' ' : '') + optionState.valName,
307
378
  Title: optionState.optionOrigName,
308
379
  Codex: optionState.vCodex && optionState.vCodex !== optionState.valName ? optionState.vCodex : '',
309
- IsMainColor: isMainColor
310
- });
380
+ IsMainColor: false
381
+ };
382
+ formattedOptions.push(formattedOption);
383
+ // only options of real lines can become the main color; the dedupe probe (empty PosNr) discards its result
384
+ var explicit = !!optionState.option.isMainColor;
385
+ if (finalPosNr !== '' && (explicit || optionState.optionCodex == MAIN_COLOR_OPTIONCODEX)) {
386
+ this.mainColorCandidates.push({
387
+ option: formattedOption,
388
+ explicit: explicit
389
+ });
390
+ }
311
391
  }
312
392
  }
313
393
  }
@@ -6,7 +6,7 @@ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
6
6
  var _createClass = require('@babel/runtime/helpers/createClass');
7
7
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
8
8
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
9
- var index = require('./index-d516d2b2.js');
9
+ var index = require('./index-34ea53f6.js');
10
10
  var DivaUtils = require('@crystaldesign/diva-utils');
11
11
  require('@babel/runtime/helpers/slicedToArray');
12
12
  require('@babel/runtime/helpers/objectWithoutProperties');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
4
4
  var _createClass = require('@babel/runtime/helpers/createClass');
5
- require('./index-d516d2b2.js');
5
+ require('./index-34ea53f6.js');
6
6
  require('@babel/runtime/helpers/slicedToArray');
7
7
  require('@babel/runtime/helpers/asyncToGenerator');
8
8
  require('@babel/runtime/helpers/defineProperty');