@crystaldesign/web-planner-logic 26.8.0-beta.2 → 26.8.0-beta.20

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 (49) hide show
  1. package/build/cjs/{DivaBoxPlanner-2e378a1a.js → DivaBoxPlanner-16d920f2.js} +68 -58
  2. package/build/cjs/{DivaStandardPlanner-0a6e8f4a.js → DivaStandardPlanner-b4e89cab.js} +2 -2
  3. package/build/cjs/{DoorPlanner-0ebcb060.js → DoorPlanner-1438da9c.js} +1 -1
  4. package/build/cjs/{Host3DSignalR-653cebc1.js → Host3DSignalR-530ac879.js} +1 -1
  5. package/build/cjs/{LiviqueWWSHandler-9259293e.js → LiviqueWWSHandler-e865b385.js} +1 -1
  6. package/build/cjs/{PfisterWWSHandler-26c807f9.js → PfisterWWSHandler-d85f9680.js} +10 -1
  7. package/build/cjs/{PlannerHandler2D-1b28c82a.js → PlannerHandler2D-62352f6b.js} +24 -9
  8. package/build/cjs/{SeriousBasketHandler-e3f8040a.js → SeriousBasketHandler-1dc4eb5a.js} +1 -1
  9. package/build/cjs/{ShelfPlanner-58edfc01.js → ShelfPlanner-9df60123.js} +1 -1
  10. package/build/cjs/{StandardWWSHandler-6faba9e9.js → StandardWWSHandler-77bbb1fb.js} +1 -1
  11. package/build/cjs/{index-c1566d30.js → index-65181912.js} +213 -162
  12. package/build/cjs/index.js +1 -1
  13. package/build/esm/{DivaBoxPlanner-e8f7c4cd.js → DivaBoxPlanner-210c2ceb.js} +68 -58
  14. package/build/esm/{DivaStandardPlanner-21c4c0ca.js → DivaStandardPlanner-d82eb446.js} +2 -2
  15. package/build/esm/{DoorPlanner-a4e3a380.js → DoorPlanner-97f65d89.js} +1 -1
  16. package/build/esm/{Host3DSignalR-ed1240f2.js → Host3DSignalR-06b4d30b.js} +1 -1
  17. package/build/esm/{LiviqueWWSHandler-fc0597c3.js → LiviqueWWSHandler-b488cf8e.js} +1 -1
  18. package/build/esm/{PfisterWWSHandler-a92fb5ca.js → PfisterWWSHandler-9b820585.js} +10 -1
  19. package/build/esm/{PlannerHandler2D-c52912b0.js → PlannerHandler2D-d8217417.js} +24 -9
  20. package/build/esm/{SeriousBasketHandler-18db24f8.js → SeriousBasketHandler-342998a5.js} +1 -1
  21. package/build/esm/{ShelfPlanner-354da88b.js → ShelfPlanner-e66b37ab.js} +1 -1
  22. package/build/esm/{StandardWWSHandler-46f9434e.js → StandardWWSHandler-1d9ae8f7.js} +1 -1
  23. package/build/esm/{index-18f1d8c6.js → index-d51f2804.js} +213 -162
  24. package/build/esm/index.js +1 -1
  25. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts +1 -0
  26. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts +1 -0
  28. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts +1 -0
  30. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/logic/Article/Engine/DivaArticleEngine.d.ts.map +1 -1
  32. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/logic/Basket/PfisterWWSHandler.d.ts.map +1 -1
  34. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.d.ts +1 -0
  35. package/build/types/web-planner-logic/src/logic/ConfigTree/SummaryHandler.d.ts.map +1 -1
  36. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts +5 -0
  37. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts.map +1 -1
  38. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  39. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/BoxPlannerGrid.d.ts +1 -0
  40. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/BoxPlannerGrid.d.ts.map +1 -1
  41. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts.map +1 -1
  42. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/DockingPointHandler.d.ts.map +1 -1
  43. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts +1 -0
  44. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts.map +1 -1
  45. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts.map +1 -1
  46. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts +9 -0
  47. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  48. package/build/types/web-planner-logic/src/model/Catalog/DivaCatalogData.d.ts.map +1 -1
  49. package/package.json +2 -2
@@ -487,6 +487,10 @@ var DivaApiHandler = /*#__PURE__*/function () {
487
487
  }
488
488
  return saveAsProduct;
489
489
  }()
490
+ /**
491
+ * to run service on localhost
492
+ * diva3dRenderGroup :MYCCMEDIA
493
+ */
490
494
  }, {
491
495
  key: "initalizeWebConfigData",
492
496
  value: function initalizeWebConfigData(plannerConfig) {
@@ -1174,6 +1178,11 @@ var DivaApiHandler = /*#__PURE__*/function () {
1174
1178
  value: function getIDMDecisions(packageId, decisions) {
1175
1179
  return this.idmPrefix + (this.isSeller ? '/packages/' : '/catalogs/') + packageId + '/decisions' + '?decisionNos=' + decisions.join(';') + (this.smSupplierNr ? '&supplierNo=' + this.smSupplierNr : '');
1176
1180
  }
1181
+ }, {
1182
+ key: "getIDMDecisionsQueryUrl",
1183
+ value: function getIDMDecisionsQueryUrl(packageId) {
1184
+ return this.idmPrefix + (this.isSeller ? '/packages/' : '/catalogs/') + packageId + '/decisions/query' + (this.smSupplierNr ? '?supplierNo=' + this.smSupplierNr : '');
1185
+ }
1177
1186
  }, {
1178
1187
  key: "getIDMDetailInfos",
1179
1188
  value: function getIDMDetailInfos(packageId, detailinfos) {
@@ -16892,6 +16901,9 @@ var CatalogArticleData = /*#__PURE__*/function () {
16892
16901
  case 'ACCESSOIRE_POS_PRIO':
16893
16902
  this._catalogArticle.accPosPrio = Number(prop.Value);
16894
16903
  break;
16904
+ case 'ADD_AS_ZKAT':
16905
+ this._catalogArticle.addAsZKAT = prop.Value === 'true' || prop.Value === '1';
16906
+ break;
16895
16907
  case 'HEIGHTGRIDUSED':
16896
16908
  this._catalogArticle.heightGridUsed = Number(prop.Value);
16897
16909
  break;
@@ -17353,6 +17365,11 @@ var CatalogArticleData = /*#__PURE__*/function () {
17353
17365
  get: function get() {
17354
17366
  return this._catalogArticle.accPosPrio;
17355
17367
  }
17368
+ }, {
17369
+ key: "addAsZKAT",
17370
+ get: function get() {
17371
+ return this._catalogArticle.addAsZKAT;
17372
+ }
17356
17373
  }, {
17357
17374
  key: "overwriteParentWidth",
17358
17375
  get: function get() {
@@ -18000,18 +18017,18 @@ function getCatalogOptionValueDataType(codex, jsonOPV, catalogData) {
18000
18017
  }
18001
18018
  function initCatalogPlannerArticleView$1(catalogData, catPlanArticle, catalogProps, plannerPaletteViewInfo) {
18002
18019
  //Hier muss es dann reingespeichert werden catalogPlannerArticlesView;
18003
- var getFilterType = function getFilterType(hasArticleRelation, AVLFilter, AVRFilter, catalogProps) {
18020
+ var getFilterType = function getFilterType(hasArticleRelation, hasAVL, hasAVR, catalogProps) {
18004
18021
  var ret;
18005
18022
  if (hasArticleRelation) {
18006
18023
  if (!catalogProps.showAllItemsInPlanner && !catalogProps.showAccOnDpOnly) plannerPaletteViewInfo.filterType['Accessoire'] = true;
18007
18024
  ret = 'Accessoire';
18008
- } else if (AVLFilter.length > 0 && AVRFilter.length > 0) {
18025
+ } else if (hasAVL && hasAVR) {
18009
18026
  if (!catalogProps.showAllItemsInPlanner) plannerPaletteViewInfo.filterType['DockLR'] = true;
18010
18027
  ret = 'DockLR';
18011
- } else if (AVLFilter.length > 0) {
18028
+ } else if (hasAVL) {
18012
18029
  if (!catalogProps.showAllItemsInPlanner) plannerPaletteViewInfo.filterType['DockR'] = true;
18013
18030
  ret = 'DockR';
18014
- } else if (AVRFilter.length > 0) {
18031
+ } else if (hasAVR) {
18015
18032
  if (!catalogProps.showAllItemsInPlanner) plannerPaletteViewInfo.filterType['DockL'] = true;
18016
18033
  ret = 'DockL';
18017
18034
  } else {
@@ -18105,12 +18122,9 @@ function initCatalogPlannerArticleView$1(catalogData, catPlanArticle, catalogPro
18105
18122
  if (catalogProps.diva3dPlanerShowArticleAsSvg && topSvg.SVG) {
18106
18123
  image = getSVGUrl(topSvg.SVG, mediaUrl);
18107
18124
  }
18108
- if (topSvg.HasAVL && catPlanArticle.avlFilter.length == 0) {
18109
- catPlanArticle.avlFilter = ['ALWAYS_DOCKABLE'];
18110
- }
18111
- if (topSvg.HasAVR && catPlanArticle.avrFilter.length == 0) {
18112
- catPlanArticle.avrFilter = ['ALWAYS_DOCKABLE'];
18113
- }
18125
+
18126
+ // An empty AVL/AVR filter means "no connector restriction" and is treated as a match by the
18127
+ // docking/palette comparison (see checkDPFilterDoMatch / checkDPAV*FilterDoMatch). No sentinel needed.
18114
18128
 
18115
18129
  //Wäre für Rofl Benz gedacht um die Information zu speichern welche Artikel in welcher Ausrichtung ausmultipliziert werden
18116
18130
  if (topSvg.JsFormula.includes('202_LI')) {
@@ -18118,7 +18132,7 @@ function initCatalogPlannerArticleView$1(catalogData, catPlanArticle, catalogPro
18118
18132
  } else if (topSvg.JsFormula.includes('202_RE')) {
18119
18133
  elementName = elementName + ' (Rechts)';
18120
18134
  }
18121
- var filterType = getFilterType(catPlanArticle.isArticleRelation, topSvg.HasAVL ? catPlanArticle.avlFilter : [], topSvg.HasAVR ? catPlanArticle.avrFilter : [], catalogProps);
18135
+ var filterType = getFilterType(catPlanArticle.isArticleRelation, !!topSvg.HasAVL, !!topSvg.HasAVR, catalogProps);
18122
18136
  catPlanArticle.filterType = filterType;
18123
18137
  //ausmultiplizierte Elemente (über meherere SVGs)
18124
18138
  var catPlanArtView = {
@@ -18171,7 +18185,7 @@ function initCatalogPlannerArticleView$1(catalogData, catPlanArticle, catalogPro
18171
18185
  }
18172
18186
  if (!catPlanArticle.hasTopSvgsWithFormula || catPlanArticle.topSvgsWithFormula.length == 1) {
18173
18187
  var _catalogArticle$artic2;
18174
- var _filterType = getFilterType(catPlanArticle.isArticleRelation, catPlanArticle.topHasAVL ? catPlanArticle.avlFilter : [], catPlanArticle.topHasAVR ? catPlanArticle.avrFilter : [], catalogProps);
18188
+ var _filterType = getFilterType(catPlanArticle.isArticleRelation, !!catPlanArticle.topHasAVL, !!catPlanArticle.topHasAVR, catalogProps);
18175
18189
  catPlanArticle.filterType = _filterType;
18176
18190
  //Artikelbild ist abh�ngig von DIVA3DPlanerShowArticleAsSvg das SVG des Elements
18177
18191
  if (catalogProps.diva3dPlanerShowArticleAsSvg && (catPlanArticle.hasTopSvg || catPlanArticle.hasTopSvgsWithFormula)) {
@@ -19714,7 +19728,15 @@ function _loadMoreFromIDMArticles() {
19714
19728
  }).map(function (a) {
19715
19729
  return a.featureClassRefNo;
19716
19730
  })));
19717
- promises = [set.api.getDataCache(set.api.getIDMFeatureClass(set.CatalogData.accountGuid, toLoadFeatureClassRefNo), undefined, undefined, 'enricher'), toLoadPFGroups.length ? set.api.getDataCache(set.api.getIDMPriceFeatureGroups(set.CatalogData.accountGuid, toLoadPFGroups), undefined, undefined, 'enricher') : undefined, toLoadDecisionIds.length ? set.api.getDataCache(set.api.getIDMDecisions(set.CatalogData.accountGuid, toLoadDecisionIds), undefined, undefined, 'enricher') : undefined];
19731
+ promises = [set.api.getDataCache(set.api.getIDMFeatureClass(set.CatalogData.accountGuid, toLoadFeatureClassRefNo), undefined, undefined, 'enricher'), toLoadPFGroups.length ? set.api.getDataCache(set.api.getIDMPriceFeatureGroups(set.CatalogData.accountGuid, toLoadPFGroups), undefined, undefined, 'enricher') : undefined, toLoadDecisionIds.length ? function () {
19732
+ var getUrl = set.api.getIDMDecisions(set.CatalogData.accountGuid, toLoadDecisionIds);
19733
+ if (getUrl.length > 2000) {
19734
+ return set.api.getDataCache(set.api.getIDMDecisionsQueryUrl(set.CatalogData.accountGuid), undefined, undefined, 'enricher', 'POST', {
19735
+ decisionNos: toLoadDecisionIds.join(';')
19736
+ });
19737
+ }
19738
+ return set.api.getDataCache(getUrl, undefined, undefined, 'enricher');
19739
+ }() : undefined];
19718
19740
  _context5.next = 16;
19719
19741
  return Promise.all(promises);
19720
19742
  case 16:
@@ -20675,6 +20697,8 @@ var DivaCatalogData = /*#__PURE__*/function () {
20675
20697
  //
20676
20698
  ignoreLayerAVNAVS: false,
20677
20699
  //
20700
+ ignoreDockingNumber: false,
20701
+ // ignoriert die Nummern-Regel beim Andocken (z.B. AVU1 darf an AVO2). Die Nummer dient dann nur der Identifikation, nicht als Zuordnungsschlüssel.
20678
20702
  checkCollisionForDifferentLayers: [],
20679
20703
  //
20680
20704
 
@@ -21220,6 +21244,24 @@ var DivaCatalogData = /*#__PURE__*/function () {
21220
21244
  return _ret;
21221
21245
  }
21222
21246
  }
21247
+
21248
+ /**
21249
+ * Default dock filter applied when nothing is selected (e.g. after a deselect or when adding a new element).
21250
+ * When completeness warnings are hidden, any element may start a planning, so every dock type the catalog
21251
+ * actually has is shown. Otherwise the catalog's configured start filter (startFilterParams / available
21252
+ * start types) is used.
21253
+ */
21254
+ }, {
21255
+ key: "defaultDockFilter",
21256
+ get: function get() {
21257
+ if (this.doHideCompletenessWarning) {
21258
+ var filterType = this.plannerPaletteViewInfo.filterType;
21259
+ return Object.keys(filterType).filter(function (key) {
21260
+ return filterType[key];
21261
+ });
21262
+ }
21263
+ return this.getStartFilter;
21264
+ }
21223
21265
  }, {
21224
21266
  key: "dontHideOption",
21225
21267
  get: function get() {
@@ -21709,6 +21751,7 @@ var DivaCatalogData = /*#__PURE__*/function () {
21709
21751
  ignoreLayerAVC: this.catalogProps.ignoreLayerAVC,
21710
21752
  ignoreLayerAVOAVU: this.catalogProps.ignoreLayerAVOAVU,
21711
21753
  ignoreLayerAVNAVS: this.catalogProps.ignoreLayerAVNAVS,
21754
+ ignoreDockingNumber: this.catalogProps.ignoreDockingNumber,
21712
21755
  showAccOnDpOnly: this.catalogProps.showAccOnDpOnly,
21713
21756
  dockAccOnAvoOnly: this.catalogProps.dockAccOnAvoOnly,
21714
21757
  hideAccessoriesInPlanner: this.catalogProps.accessorieStepAsPlanner,
@@ -21868,6 +21911,9 @@ var DivaCatalogData = /*#__PURE__*/function () {
21868
21911
  case 'IGNORELAYERAVNAVS':
21869
21912
  _this4.catalogProps.ignoreLayerAVNAVS = item.Value == '1';
21870
21913
  break;
21914
+ case 'IGNOREDOCKINGNUMBER':
21915
+ _this4.catalogProps.ignoreDockingNumber = item.Value == '1';
21916
+ break;
21871
21917
  case 'CHECK_COLLISION_DIFFERENT_LAYERS':
21872
21918
  _this4.catalogProps.checkCollisionForDifferentLayers = item.Value.split(';').map(function (t) {
21873
21919
  return parseInt(t);
@@ -22324,11 +22370,12 @@ var DivaCatalogHandler = /*#__PURE__*/function () {
22324
22370
  key: "loadDivaCatalog",
22325
22371
  value: function () {
22326
22372
  var _loadDivaCatalog = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(state, catalogCodex, orderSet) {
22373
+ var _orderSet$OrderLines;
22327
22374
  var promises, _yield$Promise$all, _yield$Promise$all2, catalogApiData, catalogArticleListData, catalogArticlePlannerListData, additionalModelInfos, mask, _state$catalogMask, catalogData;
22328
22375
  return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
22329
22376
  while (1) switch (_context2.prev = _context2.next) {
22330
22377
  case 0:
22331
- promises = [state.api.getDataCache(state.api.getCatalogDataQS(catalogCodex), state.api.getCatalogDataCacheKey(catalogCodex), orderSet.AccountSessionGUID), state.api.getDataCache(state.api.getJsonArticleListQS(catalogCodex), state.api.getJsonArticleListCacheKey(catalogCodex), orderSet.AccountSessionGUID), state.api.getDataCache(state.api.getJsonPlannerElementsQS(catalogCodex), state.api.getJsonPlannerElementsCacheKey(catalogCodex), orderSet.AccountSessionGUID)].concat([this.loadAdditionalModelInfos(state, orderSet.AccountGUID, orderSet.CatalogGUID)], _toConsumableArray__default["default"](state.onlyRunLogic ? [] : _toConsumableArray__default["default"](new Map(orderSet.OrderLines.filter(function (ol) {
22378
+ promises = [state.api.getDataCache(state.api.getCatalogDataQS(catalogCodex), state.api.getCatalogDataCacheKey(catalogCodex), orderSet.AccountSessionGUID), state.api.getDataCache(state.api.getJsonArticleListQS(catalogCodex), state.api.getJsonArticleListCacheKey(catalogCodex), orderSet.AccountSessionGUID), state.api.getDataCache(state.api.getJsonPlannerElementsQS(catalogCodex), state.api.getJsonPlannerElementsCacheKey(catalogCodex), orderSet.AccountSessionGUID)].concat([this.loadAdditionalModelInfos(state, orderSet.AccountGUID, orderSet.CatalogGUID)], _toConsumableArray__default["default"](state.onlyRunLogic ? [] : _toConsumableArray__default["default"](new Map(((_orderSet$OrderLines = orderSet.OrderLines) !== null && _orderSet$OrderLines !== void 0 ? _orderSet$OrderLines : []).filter(function (ol) {
22332
22379
  var _ol$VariantBasketData;
22333
22380
  return ((_ol$VariantBasketData = ol.VariantBasketDatas) === null || _ol$VariantBasketData === void 0 ? void 0 : _ol$VariantBasketData.length) && ol.ArticleType === 'OPTIONTREE';
22334
22381
  }).map(function (os) {
@@ -23534,45 +23581,19 @@ var DivaEngine = /*#__PURE__*/function () {
23534
23581
  value: function updateIDMSpecificFeature(ops) {
23535
23582
  var _ops$option$idmVarian, _ops$option$idmVarian2, _ops$option$idmVarian3, _ops$option$idmVarian4, _ops$option$idmVarian5;
23536
23583
  if (!this.article.parentHasSameOption(ops.optionCodex)) return;
23584
+ // The OPV codex embeds the option codex as a prefix: "OPV<body>_<connector>" (e.g. "OPV1090_CT500"),
23585
+ // while ops.optionCodex is "OPT<body>". Strip that prefix so the filter holds the bare connector codex.
23586
+ var toConnectorCodex = function toConnectorCodex(value) {
23587
+ var prefix = 'OPV' + ops.optionCodex.substring(3) + '_';
23588
+ return value.codex.startsWith(prefix) ? value.codex.substring(prefix.length) : value.codex;
23589
+ };
23537
23590
  if ([90, 1090].includes((_ops$option$idmVarian = ops.option.idmVariantenArt) !== null && _ops$option$idmVarian !== void 0 ? _ops$option$idmVarian : 0)) {
23538
23591
  //R (Anschlusstyp R) - AVR
23539
- var newAVRFilter = [],
23540
- visibleOPVs = ops.visibleOptionValues;
23541
- var _iterator5 = _createForOfIteratorHelper$c(visibleOPVs),
23542
- _step5;
23543
- try {
23544
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
23545
- var _step5$value = _slicedToArray__default["default"](_step5.value, 2),
23546
- key = _step5$value[0],
23547
- value = _step5$value[1];
23548
- newAVRFilter.push(value.codex.substring(3));
23549
- }
23550
- } catch (err) {
23551
- _iterator5.e(err);
23552
- } finally {
23553
- _iterator5.f();
23554
- }
23555
- this.article.newPossibleAVRFilters = newAVRFilter;
23592
+ this.article.newPossibleAVRFilters = Array.from(ops.visibleOptionValues.values()).map(toConnectorCodex);
23556
23593
  }
23557
23594
  if ([89, 1089].includes((_ops$option$idmVarian2 = ops.option.idmVariantenArt) !== null && _ops$option$idmVarian2 !== void 0 ? _ops$option$idmVarian2 : 0)) {
23558
23595
  //L (Anschlusstyp L) - AVL
23559
- var newAVLFilter = [],
23560
- _visibleOPVs = ops.visibleOptionValues;
23561
- var _iterator6 = _createForOfIteratorHelper$c(_visibleOPVs),
23562
- _step6;
23563
- try {
23564
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
23565
- var _step6$value = _slicedToArray__default["default"](_step6.value, 2),
23566
- _key = _step6$value[0],
23567
- _value = _step6$value[1];
23568
- newAVLFilter.push(_value.codex.substring(3));
23569
- }
23570
- } catch (err) {
23571
- _iterator6.e(err);
23572
- } finally {
23573
- _iterator6.f();
23574
- }
23575
- this.article.newPossibleAVLFilters = newAVLFilter;
23596
+ this.article.newPossibleAVLFilters = Array.from(ops.visibleOptionValues.values()).map(toConnectorCodex);
23576
23597
  }
23577
23598
  //beim article abspeichern. Das Planungselement kann es sich per Funktion von dort dann holen
23578
23599
  if ([97, 1097].includes((_ops$option$idmVarian3 = ops.option.idmVariantenArt) !== null && _ops$option$idmVarian3 !== void 0 ? _ops$option$idmVarian3 : 0)) {
@@ -23801,18 +23822,18 @@ var DivaEngine = /*#__PURE__*/function () {
23801
23822
  myDecisions[_i].disableHistory = [];
23802
23823
  myDecisions[_i].activeCombination = undefined;
23803
23824
  }
23804
- var _iterator7 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
23805
- _step7;
23825
+ var _iterator5 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
23826
+ _step5;
23806
23827
  try {
23807
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
23808
- var ops = _step7.value;
23828
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
23829
+ var ops = _step5.value;
23809
23830
  ops.updateVisibleOptionValues(ops.option.articleOptionValues);
23810
23831
  ops.definedBySetFeatureFixed = false;
23811
23832
  }
23812
23833
  } catch (err) {
23813
- _iterator7.e(err);
23834
+ _iterator5.e(err);
23814
23835
  } finally {
23815
- _iterator7.f();
23836
+ _iterator5.f();
23816
23837
  }
23817
23838
  this.catalogDecisionsByNumber = new Map(this.article.catalogArticle.articleDecisions.map(function (d) {
23818
23839
  return [d.Number, d];
@@ -23943,11 +23964,11 @@ var DivaEngine = /*#__PURE__*/function () {
23943
23964
  key: "updateIDMSpecificFeatures",
23944
23965
  value: function updateIDMSpecificFeatures() {
23945
23966
  //updaten idm planner specific options
23946
- var _iterator8 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
23947
- _step8;
23967
+ var _iterator6 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
23968
+ _step6;
23948
23969
  try {
23949
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
23950
- var ops = _step8.value;
23970
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
23971
+ var ops = _step6.value;
23951
23972
  //when an option has no decisions the first visible optionValue has to be selected per default
23952
23973
  if (ops.val === undefined && ops.visibleCount && !this.article.CatalogData.useDiomexConfigLogic) {
23953
23974
  this.assignOptionValue(ops.optionCodex, ops.visibleOPVKeys[0]);
@@ -23968,9 +23989,9 @@ var DivaEngine = /*#__PURE__*/function () {
23968
23989
  }
23969
23990
  }
23970
23991
  } catch (err) {
23971
- _iterator8.e(err);
23992
+ _iterator6.e(err);
23972
23993
  } finally {
23973
- _iterator8.f();
23994
+ _iterator6.f();
23974
23995
  }
23975
23996
  }
23976
23997
  }, {
@@ -24204,21 +24225,21 @@ var DivaEngine = /*#__PURE__*/function () {
24204
24225
  var negatedValues = new Set(myDoc.Row[OPT].map(function (v) {
24205
24226
  return v.slice(1);
24206
24227
  })); // remove the '!' from the value
24207
- var _iterator9 = _createForOfIteratorHelper$c(ops.visibleOptionValues),
24208
- _step9;
24228
+ var _iterator7 = _createForOfIteratorHelper$c(ops.visibleOptionValues),
24229
+ _step7;
24209
24230
  try {
24210
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
24211
- var _step9$value = _slicedToArray__default["default"](_step9.value, 2),
24212
- opvKey = _step9$value[0],
24213
- _opv = _step9$value[1];
24231
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
24232
+ var _step7$value = _slicedToArray__default["default"](_step7.value, 2),
24233
+ opvKey = _step7$value[0],
24234
+ _opv = _step7$value[1];
24214
24235
  if (!negatedValues.has(opvKey)) {
24215
24236
  validOPVs[OPT].set(opvKey, _opv);
24216
24237
  }
24217
24238
  }
24218
24239
  } catch (err) {
24219
- _iterator9.e(err);
24240
+ _iterator7.e(err);
24220
24241
  } finally {
24221
- _iterator9.f();
24242
+ _iterator7.f();
24222
24243
  }
24223
24244
  } else {
24224
24245
  validOPVs[OPT] = new Map(ops.visibleOptionValues);
@@ -24346,11 +24367,11 @@ var DivaEngine = /*#__PURE__*/function () {
24346
24367
  }, {
24347
24368
  key: "evalShowOnlyWhenHasPrice",
24348
24369
  value: function evalShowOnlyWhenHasPrice() {
24349
- var _iterator10 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
24350
- _step10;
24370
+ var _iterator8 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
24371
+ _step8;
24351
24372
  try {
24352
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
24353
- var ops = _step10.value;
24373
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
24374
+ var ops = _step8.value;
24354
24375
  for (var jKey in ops.visibleOptionValues) {
24355
24376
  var opv = ops.visibleOptionValues.get(jKey);
24356
24377
  if (opv.showOnlyWhenHasPrice && opv.price == 0) {
@@ -24362,9 +24383,9 @@ var DivaEngine = /*#__PURE__*/function () {
24362
24383
  }
24363
24384
  }
24364
24385
  } catch (err) {
24365
- _iterator10.e(err);
24386
+ _iterator8.e(err);
24366
24387
  } finally {
24367
- _iterator10.f();
24388
+ _iterator8.f();
24368
24389
  }
24369
24390
  }
24370
24391
 
@@ -24838,12 +24859,12 @@ var DivaEngine = /*#__PURE__*/function () {
24838
24859
  }
24839
24860
 
24840
24861
  //mengen und größenabhängige Preisberechungn.
24841
- var _iterator11 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
24842
- _step11;
24862
+ var _iterator9 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
24863
+ _step9;
24843
24864
  try {
24844
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
24865
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
24845
24866
  var _ops$addToMeasure;
24846
- var ops = _step11.value;
24867
+ var ops = _step9.value;
24847
24868
  var OP = ops.optionCodex;
24848
24869
  var mUnit = ops.measureUnit;
24849
24870
  var pUnit = ops.priceUnit;
@@ -24926,15 +24947,15 @@ var DivaEngine = /*#__PURE__*/function () {
24926
24947
  }
24927
24948
  //jetzt nochmal prozentuelle Preise mit TargetOption berechnen
24928
24949
  } catch (err) {
24929
- _iterator11.e(err);
24950
+ _iterator9.e(err);
24930
24951
  } finally {
24931
- _iterator11.f();
24952
+ _iterator9.f();
24932
24953
  }
24933
- var _iterator12 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
24934
- _step12;
24954
+ var _iterator10 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
24955
+ _step10;
24935
24956
  try {
24936
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
24937
- var _ops4 = _step12.value;
24957
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
24958
+ var _ops4 = _step10.value;
24938
24959
  var targetPPGPrefixes = _ops4.targetPPGPrefixes;
24939
24960
  if (!targetPPGPrefixes) continue;
24940
24961
  var _loop7 = function _loop7() {
@@ -24954,9 +24975,9 @@ var DivaEngine = /*#__PURE__*/function () {
24954
24975
  }
24955
24976
  }
24956
24977
  } catch (err) {
24957
- _iterator12.e(err);
24978
+ _iterator10.e(err);
24958
24979
  } finally {
24959
- _iterator12.f();
24980
+ _iterator10.f();
24960
24981
  }
24961
24982
  for (var _i5 = 0; _i5 < this.article.priceRefs.length; _i5++) {
24962
24983
  var basePriceRef = this.article.priceRefs[_i5];
@@ -24968,19 +24989,19 @@ var DivaEngine = /*#__PURE__*/function () {
24968
24989
  return item.PPG && item.PPG.split('_')[0] == targetPrefix;
24969
24990
  });
24970
24991
  if (!priceRef) {
24971
- var _iterator13 = _createForOfIteratorHelper$c(_this5.article.articleOptionStates.values()),
24972
- _step13;
24992
+ var _iterator11 = _createForOfIteratorHelper$c(_this5.article.articleOptionStates.values()),
24993
+ _step11;
24973
24994
  try {
24974
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
24975
- var ops = _step13.value;
24995
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
24996
+ var ops = _step11.value;
24976
24997
  if (ops.ppg && ops.ppg.split('_')[0] == targetPrefix) {
24977
24998
  myArtOpv = ops;
24978
24999
  }
24979
25000
  }
24980
25001
  } catch (err) {
24981
- _iterator13.e(err);
25002
+ _iterator11.e(err);
24982
25003
  } finally {
24983
- _iterator13.f();
25004
+ _iterator11.f();
24984
25005
  }
24985
25006
  }
24986
25007
 
@@ -25006,36 +25027,36 @@ var DivaEngine = /*#__PURE__*/function () {
25006
25027
  myArticleBasePrice += priceRef.Price ? DivaUtils__default["default"].decimalAdjust('round', (_priceRef$calcPrice = priceRef.calcPrice) !== null && _priceRef$calcPrice !== void 0 ? _priceRef$calcPrice : priceRef.Price, digits) : 0.0;
25007
25028
  }
25008
25029
  var articleUsedCalcPrice = myArticleBasePrice;
25009
- var _iterator14 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25010
- _step14;
25030
+ var _iterator12 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25031
+ _step12;
25011
25032
  try {
25012
- for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
25013
- var tmpOps = _step14.value;
25033
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
25034
+ var tmpOps = _step12.value;
25014
25035
  articleUsedCalcPrice = this.getOptionPrice(articleUsedCalcPrice, tmpOps.option, digits);
25015
25036
  }
25016
25037
 
25017
25038
  //jetzt nochmal prozentuelle Preise mit GLOBAL tarbetoption berechnen
25018
25039
  /* TODO ABklären mit Franz - ops hat nie die Optionen - targetPPGPrefixes - ich glaube hier sollte article.priceRefs durchlaufen werden. */
25019
25040
  } catch (err) {
25020
- _iterator14.e(err);
25041
+ _iterator12.e(err);
25021
25042
  } finally {
25022
- _iterator14.f();
25043
+ _iterator12.f();
25023
25044
  }
25024
- var _iterator15 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25025
- _step15;
25045
+ var _iterator13 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25046
+ _step13;
25026
25047
  try {
25027
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
25048
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
25028
25049
  var _ops5$targetPPGPrefix, _ops5$targetPPGPrefix2;
25029
- var _ops5 = _step15.value;
25050
+ var _ops5 = _step13.value;
25030
25051
  var targetOption = (_ops5$targetPPGPrefix = (_ops5$targetPPGPrefix2 = _ops5.targetPPGPrefixes) === null || _ops5$targetPPGPrefix2 === void 0 ? void 0 : _ops5$targetPPGPrefix2[0]) !== null && _ops5$targetPPGPrefix !== void 0 ? _ops5$targetPPGPrefix : _ops5.targetOption;
25031
25052
  if (_ops5.isPercentage && targetOption == 'GLOBAL') {
25032
25053
  articleUsedCalcPrice = articleUsedCalcPrice * (1 + _ops5.calcPrice);
25033
25054
  }
25034
25055
  }
25035
25056
  } catch (err) {
25036
- _iterator15.e(err);
25057
+ _iterator13.e(err);
25037
25058
  } finally {
25038
- _iterator15.f();
25059
+ _iterator13.f();
25039
25060
  }
25040
25061
  for (var _i7 = 0; _i7 < this.article.priceRefs.length; _i7++) {
25041
25062
  var _priceRef = this.article.priceRefs[_i7];
@@ -25177,11 +25198,11 @@ var DivaEngine = /*#__PURE__*/function () {
25177
25198
  if (a[i].trim() != '') {
25178
25199
  var searchOpt = 'OPT' + a[i].trim();
25179
25200
  //Optionsbaum des Artikels durchsuchen
25180
- var _iterator16 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25181
- _step16;
25201
+ var _iterator14 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25202
+ _step14;
25182
25203
  try {
25183
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
25184
- var _ops6 = _step16.value;
25204
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
25205
+ var _ops6 = _step14.value;
25185
25206
  if (_ops6.ocd == searchOpt || _ops6.optionCodex == searchOpt) {
25186
25207
  if (_ops6 && _ops6.price > 0) {
25187
25208
  myPercBasePrice += _ops6.price * _ops6.quantity;
@@ -25190,9 +25211,9 @@ var DivaEngine = /*#__PURE__*/function () {
25190
25211
  }
25191
25212
  }
25192
25213
  } catch (err) {
25193
- _iterator16.e(err);
25214
+ _iterator14.e(err);
25194
25215
  } finally {
25195
- _iterator16.f();
25216
+ _iterator14.f();
25196
25217
  }
25197
25218
  }
25198
25219
  }
@@ -25238,18 +25259,18 @@ var DivaEngine = /*#__PURE__*/function () {
25238
25259
  }
25239
25260
 
25240
25261
  // this functions updates the images of OPVs that depend on rules
25241
- var _iterator17 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25242
- _step17;
25262
+ var _iterator15 = _createForOfIteratorHelper$c(this.article.articleOptionStates.values()),
25263
+ _step15;
25243
25264
  try {
25244
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
25245
- var ops = _step17.value;
25246
- var _iterator18 = _createForOfIteratorHelper$c(ops.visibleOptionValues),
25247
- _step18;
25265
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
25266
+ var ops = _step15.value;
25267
+ var _iterator16 = _createForOfIteratorHelper$c(ops.visibleOptionValues),
25268
+ _step16;
25248
25269
  try {
25249
- for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
25250
- var _step18$value = _slicedToArray__default["default"](_step18.value, 2),
25251
- jKey = _step18$value[0],
25252
- opv = _step18$value[1];
25270
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
25271
+ var _step16$value = _slicedToArray__default["default"](_step16.value, 2),
25272
+ jKey = _step16$value[0],
25273
+ opv = _step16$value[1];
25253
25274
  if (opv.images) {
25254
25275
  var imageFound = false;
25255
25276
  for (var _i10 = 0; _i10 < opv.images.length; _i10++) {
@@ -25268,18 +25289,18 @@ var DivaEngine = /*#__PURE__*/function () {
25268
25289
  }
25269
25290
  }
25270
25291
  } catch (err) {
25271
- _iterator18.e(err);
25292
+ _iterator16.e(err);
25272
25293
  } finally {
25273
- _iterator18.f();
25294
+ _iterator16.f();
25274
25295
  }
25275
25296
  }
25276
25297
 
25277
25298
  // this function calculates an Svg to the current configuration if neccessary (SVG Tausch)
25278
25299
  // if the Article has no SVG Tausch nothing is done
25279
25300
  } catch (err) {
25280
- _iterator17.e(err);
25301
+ _iterator15.e(err);
25281
25302
  } finally {
25282
- _iterator17.f();
25303
+ _iterator15.f();
25283
25304
  }
25284
25305
  var newSVGFile = null;
25285
25306
  var svgChangedViaSvgTausch = false;
@@ -25910,7 +25931,7 @@ var IDMEngine = /*#__PURE__*/function () {
25910
25931
  } else if (!_ops4.valCodex) {
25911
25932
  LOG$g.warn('evalSetFeature(featureRef) decision ' + decision.decisionNo + ': referenced source feature ' + action.featureRef.featureNo + ' has no selected value (valCodex undefined) - target feature ' + action.featureNo + ' will NOT be set (price relevant)');
25912
25933
  } else if (!targetHasSourceValue) {
25913
- LOG$g.warn('evalSetFeature(featureRef) decision ' + decision.decisionNo + ': target feature ' + action.featureNo + " does not have source feature " + action.featureRef.featureNo + "'s value '" + _ops4.valCodex + "' among its visible option values - assignOptionValue will be a no-op (price relevant). Target visible values: " + (targetOps ? Array.from(targetOps.visibleOptionValues.keys()).join(', ') : '<no target>'));
25934
+ LOG$g.warn('evalSetFeature(featureRef) decision ' + decision.decisionNo + ': target feature ' + action.featureNo + ' does not have source feature ' + action.featureRef.featureNo + "'s value '" + _ops4.valCodex + "' among its visible option values - assignOptionValue will be a no-op (price relevant). Target visible values: " + (targetOps ? Array.from(targetOps.visibleOptionValues.keys()).join(', ') : '<no target>'));
25914
25935
  }
25915
25936
  if (_ops4 !== null && _ops4 !== void 0 && _ops4.valCodex) this.assignOptionValue(action.featureNo.toString(), _ops4.valCodex, isFixed ? 'fix' : 'set');
25916
25937
  } else if (action.optionRef) {
@@ -26506,13 +26527,18 @@ var IDMEngine = /*#__PURE__*/function () {
26506
26527
  value: function updateIDMSpecificFeature(myArtOPS) {
26507
26528
  var _myArtOPS$option$idmV, _myArtOPS$option$idmV2, _myArtOPS$option$idmV3, _myArtOPS$option$idmV4, _myArtOPS$option$idmV5;
26508
26529
  if (!this.article.parentHasSameOption(myArtOPS.optionCodex)) return;
26530
+ // The OPV key embeds the option codex as a prefix: "<optionCodex>_<connector>" (e.g. "1089_CT20").
26531
+ // Strip the codex AND the separator so the filter holds the bare connector codex ("CT20").
26532
+ var toConnectorCodex = function toConnectorCodex(key) {
26533
+ return key.startsWith(myArtOPS.optionCodex + '_') ? key.substring(myArtOPS.optionCodex.length + 1) : key;
26534
+ };
26509
26535
  if ([90, 1090].includes((_myArtOPS$option$idmV = myArtOPS.option.idmVariantenArt) !== null && _myArtOPS$option$idmV !== void 0 ? _myArtOPS$option$idmV : 0)) {
26510
26536
  //R (Anschlusstyp R) - AVR
26511
- this.article.newPossibleAVRFilters = myArtOPS.visibleOPVKeys;
26537
+ this.article.newPossibleAVRFilters = myArtOPS.visibleOPVKeys.map(toConnectorCodex);
26512
26538
  }
26513
26539
  if ([89, 1089].includes((_myArtOPS$option$idmV2 = myArtOPS.option.idmVariantenArt) !== null && _myArtOPS$option$idmV2 !== void 0 ? _myArtOPS$option$idmV2 : 0)) {
26514
26540
  //L (Anschlusstyp L) - AVL
26515
- this.article.newPossibleAVLFilters = myArtOPS.visibleOPVKeys;
26541
+ this.article.newPossibleAVLFilters = myArtOPS.visibleOPVKeys.map(toConnectorCodex);
26516
26542
  }
26517
26543
  if ([97, 1097].includes((_myArtOPS$option$idmV3 = myArtOPS.option.idmVariantenArt) !== null && _myArtOPS$option$idmV3 !== void 0 ? _myArtOPS$option$idmV3 : 0)) {
26518
26544
  try {
@@ -27951,6 +27977,11 @@ var DivaArticle = /*#__PURE__*/function () {
27951
27977
  get: function get() {
27952
27978
  return this.catalogArticle.bundleRules;
27953
27979
  }
27980
+ }, {
27981
+ key: "addAsZKAT",
27982
+ get: function get() {
27983
+ return this.catalogArticle.addAsZKAT;
27984
+ }
27954
27985
  }, {
27955
27986
  key: "hasPartlistArticleVisibleInTree",
27956
27987
  get: function get() {
@@ -29555,7 +29586,7 @@ var DivaArticle = /*#__PURE__*/function () {
29555
29586
  break;
29556
29587
  }
29557
29588
  _context.next = 4;
29558
- return Promise.resolve().then(function () { return require('./ShelfPlanner-58edfc01.js'); });
29589
+ return Promise.resolve().then(function () { return require('./ShelfPlanner-9df60123.js'); });
29559
29590
  case 4:
29560
29591
  _yield$import = _context.sent;
29561
29592
  ShelfPlanner = _yield$import["default"];
@@ -33289,7 +33320,7 @@ var SummaryHandler = /*#__PURE__*/function () {
33289
33320
  }
33290
33321
  }, {
33291
33322
  key: "getSummaryItemsofArticle",
33292
- value: function getSummaryItemsofArticle(article, set, summaryTabItems, baseArticlesCount, summaryForBasket) {
33323
+ value: function getSummaryItemsofArticle(article, set, summaryTabItems, baseArticlesCount, summaryForBasket, parentArticle) {
33293
33324
  var _iterator2 = _createForOfIteratorHelper$7(article.articleOptionStates.values()),
33294
33325
  _step2;
33295
33326
  try {
@@ -33297,6 +33328,12 @@ var SummaryHandler = /*#__PURE__*/function () {
33297
33328
  var ops = _step2.value;
33298
33329
  if (ops.visibleInSummary(article, summaryForBasket)) {
33299
33330
  var _set$configTree$getCo, _set$hiddenConfigTree;
33331
+ //for accessoires only render an option if it differs from the parent article's selection
33332
+ if (parentArticle) {
33333
+ var _parentOps$val, _ops$val;
33334
+ var parentOps = parentArticle.getArticleOptionState(ops.optionCodex);
33335
+ if (parentOps && ((_parentOps$val = parentOps.val) === null || _parentOps$val === void 0 ? void 0 : _parentOps$val.codex) === ((_ops$val = ops.val) === null || _ops$val === void 0 ? void 0 : _ops$val.codex)) continue;
33336
+ }
33300
33337
  var tabGroupCodex = void 0;
33301
33338
  var tabGroupTitel = void 0;
33302
33339
  if (ops.optionTabGroup) {
@@ -33313,9 +33350,9 @@ var SummaryHandler = /*#__PURE__*/function () {
33313
33350
  var itemsInTabGroup = summaryTabItems[tabGroupCodex].summaryItems;
33314
33351
  var itemImage = ops.val.image ? set.CatalogData.getCatImageURL(ops.val.image, '') : undefined;
33315
33352
  if (configStep && itemsInTabGroup) {
33316
- var _ops$val, _this$getAdditionalPr;
33353
+ var _ops$val2, _this$getAdditionalPr;
33317
33354
  var sameOPVAndOPTDoAlreadyExist = false;
33318
- var configStepKeyToUse = configStep.key + ((_ops$val = ops.val) === null || _ops$val === void 0 ? void 0 : _ops$val.codex);
33355
+ var configStepKeyToUse = configStep.key + ((_ops$val2 = ops.val) === null || _ops$val2 === void 0 ? void 0 : _ops$val2.codex);
33319
33356
  var posNr = configStep === null || configStep === void 0 ? void 0 : configStep.posNr;
33320
33357
  if (configStep !== null && configStep !== void 0 && configStep.accessoireArticleCodex && article.relatedToBasketId) {
33321
33358
  var _set$configTree$getCo2, _set$configTree$getCo3, _set$hiddenConfigTree2;
@@ -33336,7 +33373,7 @@ var SummaryHandler = /*#__PURE__*/function () {
33336
33373
  var rabatt = set.getCurrentDisountPercentage();
33337
33374
  var price = rabatt ? DivaUtils__default["default"].roundPrice(bruttoPrice * ((100 - rabatt) / 100), 1, 2) : bruttoPrice;
33338
33375
  if (!sameOPVAndOPTDoAlreadyExist) {
33339
- var _ops$val$contentItemI, _ops$val2, _ops$val3;
33376
+ var _ops$val$contentItemI, _ops$val3, _ops$val4;
33340
33377
  itemsInTabGroup[configStepKeyToUse] = {
33341
33378
  title: ops.optionName,
33342
33379
  title_locales: ops.optionName_locales,
@@ -33350,7 +33387,7 @@ var SummaryHandler = /*#__PURE__*/function () {
33350
33387
  image: itemImage,
33351
33388
  isDefined: ops.isDefined,
33352
33389
  setId: set.getSetId(),
33353
- contentItemId: (_ops$val$contentItemI = (_ops$val2 = ops.val) === null || _ops$val2 === void 0 ? void 0 : _ops$val2.contentItemId) !== null && _ops$val$contentItemI !== void 0 ? _ops$val$contentItemI : (_ops$val3 = ops.val) === null || _ops$val3 === void 0 ? void 0 : _ops$val3.groupContentItemId,
33390
+ contentItemId: (_ops$val$contentItemI = (_ops$val3 = ops.val) === null || _ops$val3 === void 0 ? void 0 : _ops$val3.contentItemId) !== null && _ops$val$contentItemI !== void 0 ? _ops$val$contentItemI : (_ops$val4 = ops.val) === null || _ops$val4 === void 0 ? void 0 : _ops$val4.groupContentItemId,
33354
33391
  optionContentItemId: ops.option.contentItemId,
33355
33392
  includesAllPosNrs: baseArticlesCount <= 1
33356
33393
  };
@@ -33404,7 +33441,7 @@ var SummaryHandler = /*#__PURE__*/function () {
33404
33441
  } else {
33405
33442
  var _set$i18n$t2, _set$i18n2, _accessoire$catalogAr, _accessoire$catalogAr2, _accessoire$catalogAr3;
33406
33443
  var summaryItems = {};
33407
- this.getSummaryItemsofArticle(accessoire, set, summaryItems, 0, summaryForBasket);
33444
+ this.getSummaryItemsofArticle(accessoire, set, summaryItems, 0, summaryForBasket, article);
33408
33445
  this.addAccessoires([accessoire], summaryItems, set, articlesPosNrs, baseArticlesCount, summaryForBasket);
33409
33446
  tabGroup.summaryItems[entryKey] = {
33410
33447
  title: accessoire.name,
@@ -33681,14 +33718,26 @@ var SummaryHandler = /*#__PURE__*/function () {
33681
33718
  counter++;
33682
33719
  SummaryInfo.push(new basketModel.GroupsData(GroupDataInitParams));
33683
33720
  for (var jKey in mySummaryObejct.summaryItems) {
33684
- var _mySummaryItem$title_, _mySummaryItem$descri, _mySummaryItem$target;
33685
- var mySummaryItem = mySummaryObejct.summaryItems[jKey];
33686
- SummaryInfo[SummaryInfo.length - 1].Group.addItem(mySummaryItem.title, (_mySummaryItem$title_ = mySummaryItem.title_locales) !== null && _mySummaryItem$title_ !== void 0 ? _mySummaryItem$title_ : {}, DivaUtils__default["default"].stripTags(mySummaryItem.description), DivaUtils__default["default"].stripTagsFromDict((_mySummaryItem$descri = mySummaryItem.description_locales) !== null && _mySummaryItem$descri !== void 0 ? _mySummaryItem$descri : {}), (_mySummaryItem$target = mySummaryItem.targetArticlePosNrs) !== null && _mySummaryItem$target !== void 0 ? _mySummaryItem$target : [], SummaryInfo[SummaryInfo.length - 1].Group.GroupID, mySummaryItem.image);
33721
+ this.addSummaryItemToGroup(SummaryInfo[SummaryInfo.length - 1].Group, mySummaryObejct.summaryItems[jKey]);
33687
33722
  }
33688
33723
  }
33689
33724
  }
33690
33725
  return SummaryInfo;
33691
33726
  }
33727
+ }, {
33728
+ key: "addSummaryItemToGroup",
33729
+ value: function addSummaryItemToGroup(group, summaryItem) {
33730
+ //tab-group shells only structure the nested config; skip them so they don't become empty property lines
33731
+ if (!summaryItem.isTabGroup) {
33732
+ var _summaryItem$title_lo, _summaryItem$descript, _summaryItem$targetAr4;
33733
+ group.addItem(summaryItem.title, (_summaryItem$title_lo = summaryItem.title_locales) !== null && _summaryItem$title_lo !== void 0 ? _summaryItem$title_lo : {}, DivaUtils__default["default"].stripTags(summaryItem.description), DivaUtils__default["default"].stripTagsFromDict((_summaryItem$descript = summaryItem.description_locales) !== null && _summaryItem$descript !== void 0 ? _summaryItem$descript : {}), (_summaryItem$targetAr4 = summaryItem.targetArticlePosNrs) !== null && _summaryItem$targetAr4 !== void 0 ? _summaryItem$targetAr4 : [], group.GroupID, summaryItem.image);
33734
+ }
33735
+
33736
+ //nested config (e.g. accessory option values like a custom color) is kept flat in the same group
33737
+ for (var _key7 in summaryItem.summaryItems) {
33738
+ this.addSummaryItemToGroup(group, summaryItem.summaryItems[_key7]);
33739
+ }
33740
+ }
33692
33741
  }, {
33693
33742
  key: "getSummaryType",
33694
33743
  value: function getSummaryType(set) {
@@ -33719,8 +33768,8 @@ var SummaryHandler = /*#__PURE__*/function () {
33719
33768
  }
33720
33769
  };
33721
33770
  }
33722
- for (var _key7 in elementGroups) {
33723
- var group = elementGroups[_key7];
33771
+ for (var _key8 in elementGroups) {
33772
+ var group = elementGroups[_key8];
33724
33773
  ret.push({
33725
33774
  items: this.buildSummaryItems(this.getArticlesPosNr(group.articles), set, summaryForBasket),
33726
33775
  price: this.getArticlesPrice(group.articles),
@@ -33737,10 +33786,10 @@ var SummaryHandler = /*#__PURE__*/function () {
33737
33786
  var groupedArticles = setHandlerInstance.getDockedGroupedArticles(set);
33738
33787
  var retGroups = {};
33739
33788
  var articlesCodexesOnIndex = {};
33740
- for (var _key8 in groupedArticles) {
33741
- var basketId = groupedArticles[_key8][Object.keys(groupedArticles[_key8])[0]].basketId;
33789
+ for (var _key9 in groupedArticles) {
33790
+ var basketId = groupedArticles[_key9][Object.keys(groupedArticles[_key9])[0]].basketId;
33742
33791
  retGroups[basketId] = {
33743
- articles: groupedArticles[_key8],
33792
+ articles: groupedArticles[_key9],
33744
33793
  quantity: 1
33745
33794
  };
33746
33795
  }
@@ -33755,12 +33804,12 @@ var SummaryHandler = /*#__PURE__*/function () {
33755
33804
  articlesCodexesOnIndex[articleCodex].push(i);
33756
33805
  }
33757
33806
  }
33758
- for (var _key9 in articlesCodexesOnIndex) {
33759
- if (articlesCodexesOnIndex[_key9].length > 1) {
33807
+ for (var _key10 in articlesCodexesOnIndex) {
33808
+ if (articlesCodexesOnIndex[_key10].length > 1) {
33760
33809
  //group the single groups by the aricleCodex
33761
33810
  var articles = [];
33762
- for (var _i4 = 0; _i4 < articlesCodexesOnIndex[_key9].length; _i4++) {
33763
- var _group = groupedArticles[articlesCodexesOnIndex[_key9][_i4]];
33811
+ for (var _i4 = 0; _i4 < articlesCodexesOnIndex[_key10].length; _i4++) {
33812
+ var _group = groupedArticles[articlesCodexesOnIndex[_key10][_i4]];
33764
33813
  articles.push({
33765
33814
  article: _group[Object.keys(_group)[0]]
33766
33815
  });
@@ -33805,11 +33854,11 @@ var SummaryHandler = /*#__PURE__*/function () {
33805
33854
  var isIDM = article.CatalogData.isIDMFormat;
33806
33855
  var tabGroups = [];
33807
33856
  for (var basketId in article.partlistArticles) {
33808
- var _ops$val4;
33857
+ var _ops$val5;
33809
33858
  var partlistArticle = article.partlistArticles[basketId];
33810
33859
  if (!partlistArticle.tabGroup) continue;
33811
33860
  var ops = article.getArticleOptionState((!isIDM ? 'OPT' : '') + partlistArticle.tabGroup);
33812
- if (ops && !ops.isInvisible && (ops.selectionmode != 0 || (ops.visibleCount > 1 || ops.isFreeText) && article.set.api.showSelectionModeZero()) && ops.isDoShow && !((_ops$val4 = ops.val) !== null && _ops$val4 !== void 0 && _ops$val4.isNotRelevant) && ops !== null && ops !== void 0 && ops.optionTabGroup) {
33861
+ if (ops && !ops.isInvisible && (ops.selectionmode != 0 || (ops.visibleCount > 1 || ops.isFreeText) && article.set.api.showSelectionModeZero()) && ops.isDoShow && !((_ops$val5 = ops.val) !== null && _ops$val5 !== void 0 && _ops$val5.isNotRelevant) && ops !== null && ops !== void 0 && ops.optionTabGroup) {
33813
33862
  tabGroups.push({
33814
33863
  optionCodex: ops.optionCodex,
33815
33864
  tabGroup: ops.optionTabGroup
@@ -34045,8 +34094,8 @@ var SummaryHandler = /*#__PURE__*/function () {
34045
34094
  key: "getArticlesPrice",
34046
34095
  value: function getArticlesPrice(articles) {
34047
34096
  var price = 0;
34048
- for (var _key10 in articles) {
34049
- price = price + articles[_key10].price * articles[_key10].quantity;
34097
+ for (var _key11 in articles) {
34098
+ price = price + articles[_key11].price * articles[_key11].quantity;
34050
34099
  }
34051
34100
  return price;
34052
34101
  }
@@ -37559,7 +37608,7 @@ var DivaSet = /*#__PURE__*/function () {
37559
37608
  break;
37560
37609
  }
37561
37610
  _context5.next = 3;
37562
- return Promise.resolve().then(function () { return require('./DoorPlanner-0ebcb060.js'); });
37611
+ return Promise.resolve().then(function () { return require('./DoorPlanner-1438da9c.js'); });
37563
37612
  case 3:
37564
37613
  _yield$import = _context5.sent;
37565
37614
  DoorPlanner = _yield$import["default"];
@@ -43033,7 +43082,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
43033
43082
  break;
43034
43083
  case 3:
43035
43084
  _context12.next = 5;
43036
- return Promise.resolve().then(function () { return require('./PfisterWWSHandler-26c807f9.js'); });
43085
+ return Promise.resolve().then(function () { return require('./PfisterWWSHandler-d85f9680.js'); });
43037
43086
  case 5:
43038
43087
  _yield$import = _context12.sent;
43039
43088
  PfisterWWSHandler = _yield$import["default"];
@@ -43041,7 +43090,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
43041
43090
  return _context12.abrupt("break", 27);
43042
43091
  case 9:
43043
43092
  _context12.next = 11;
43044
- return Promise.resolve().then(function () { return require('./LiviqueWWSHandler-9259293e.js'); });
43093
+ return Promise.resolve().then(function () { return require('./LiviqueWWSHandler-e865b385.js'); });
43045
43094
  case 11:
43046
43095
  _yield$import2 = _context12.sent;
43047
43096
  LiviqueWWSHandler = _yield$import2["default"];
@@ -43049,7 +43098,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
43049
43098
  return _context12.abrupt("break", 27);
43050
43099
  case 15:
43051
43100
  _context12.next = 17;
43052
- return Promise.resolve().then(function () { return require('./SeriousBasketHandler-e3f8040a.js'); });
43101
+ return Promise.resolve().then(function () { return require('./SeriousBasketHandler-1dc4eb5a.js'); });
43053
43102
  case 17:
43054
43103
  _yield$import3 = _context12.sent;
43055
43104
  SeriousWWSHandler = _yield$import3["default"];
@@ -43057,7 +43106,7 @@ var DivaBasketHandler = /*#__PURE__*/function () {
43057
43106
  return _context12.abrupt("break", 27);
43058
43107
  case 21:
43059
43108
  _context12.next = 23;
43060
- return Promise.resolve().then(function () { return require('./StandardWWSHandler-6faba9e9.js'); });
43109
+ return Promise.resolve().then(function () { return require('./StandardWWSHandler-77bbb1fb.js'); });
43061
43110
  case 23:
43062
43111
  _yield$import4 = _context12.sent;
43063
43112
  StandardWWSHandler = _yield$import4["default"];
@@ -44481,7 +44530,7 @@ var PlannerHandler3D = /*#__PURE__*/function () {
44481
44530
  while (1) switch (_context3.prev = _context3.next) {
44482
44531
  case 0:
44483
44532
  _context3.next = 2;
44484
- return Promise.resolve().then(function () { return require('./Host3DSignalR-653cebc1.js'); });
44533
+ return Promise.resolve().then(function () { return require('./Host3DSignalR-530ac879.js'); });
44485
44534
  case 2:
44486
44535
  _yield$import = _context3.sent;
44487
44536
  Host3DSignalR = _yield$import["default"];
@@ -46167,7 +46216,7 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
46167
46216
  break;
46168
46217
  case 8:
46169
46218
  _context5.next = 10;
46170
- return Promise.resolve().then(function () { return require('./DivaStandardPlanner-0a6e8f4a.js'); });
46219
+ return Promise.resolve().then(function () { return require('./DivaStandardPlanner-b4e89cab.js'); });
46171
46220
  case 10:
46172
46221
  _yield$import = _context5.sent;
46173
46222
  DivaStandardPlanner = _yield$import["default"];
@@ -46178,7 +46227,7 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
46178
46227
  return _context5.abrupt("break", 21);
46179
46228
  case 15:
46180
46229
  _context5.next = 17;
46181
- return Promise.resolve().then(function () { return require('./DivaBoxPlanner-2e378a1a.js'); });
46230
+ return Promise.resolve().then(function () { return require('./DivaBoxPlanner-16d920f2.js'); });
46182
46231
  case 17:
46183
46232
  _yield$import2 = _context5.sent;
46184
46233
  DivaBoxPlanner = _yield$import2["default"];
@@ -48141,12 +48190,14 @@ var DivaWebPlanner = /*#__PURE__*/function () {
48141
48190
  case 12:
48142
48191
  loadSuccessful = _context14.sent;
48143
48192
  if (this.plannerConfig.configuratorSessionId) {
48144
- //force new configurator session id - Landingpage case
48193
+ // ID forced from outside (Landingpage, PDP, Planung-ändern)
48145
48194
  DivaUtils__default["default"].businessMetrics.setConfiguratorSessionId(this.plannerConfig.configuratorSessionId);
48146
- } else {
48147
- // Only create a new configurator session if we don't already have one. This keeps the analytics
48148
- // session stable across re-inits (e.g. switching products inside the same catalog).
48195
+ } else if (cache !== undefined) {
48196
+ // Re-init with cache (Variant Select): keep existing session stable
48149
48197
  DivaUtils__default["default"].businessMetrics.setConfiguratorSessionId(undefined, true);
48198
+ } else {
48199
+ // Fresh start (new catalog, archive basket, etc.): always new UUID
48200
+ DivaUtils__default["default"].businessMetrics.setConfiguratorSessionId();
48150
48201
  }
48151
48202
  if (!loadSuccessful) {
48152
48203
  _context14.next = 31;