var propTransInfo = [];
|
var fittingInfo = [];
|
var preActions = JSON.parse(dh_TempGetJSONData("PreActions", "[]"));
|
|
function KataPage(rawData, kataPageId, autoCollapse) {
|
var self = this;
|
this.modules = [];
|
this.id = kataPageId;
|
this.catConfig = {};
|
this.modProgProperties = [];
|
this.dimMapping = [];
|
this.defindedModules = JSON.parse(dh_TempGetJSONData("definedModules", "[]"));
|
this.modLanguage = dh_language_get();
|
this.autoCollapse = autoCollapse;
|
DoSyncFPSAction("ArticleEquipmentObserverAction", { reset: 1 });
|
|
if (rawData) {
|
var tmpProgCatConfig = JSON.parse(dh_TempGetJSONData("CatConfig", "[]"));
|
tmpProgCatConfig.forEach(function (config) {
|
if (config[0] === kataPageId) {
|
if (self.catConfig[config[3]] === undefined) {
|
self.catConfig[config[3]] = [];
|
}
|
self.catConfig[config[3]].push(new CatConfig(config[0], config[1].split("#"), config[2], config[3], config[4]));
|
}
|
});
|
try {
|
if (kataPageId !== "ACCESSOIRES") {
|
propTransInfo = JSON.parse(dh_TempGetJSONData("PropTransInfo"), []);
|
fittingInfo = JSON.parse(dh_TempGetJSONData("FittingInfo"), []);
|
self.dimMapping = JSON.parse(dh_TempGetJSONData("DimensionsMapping"), []);
|
}
|
} catch (e) {
|
|
}
|
|
var selectedProgGroup = dh_TempGetJSONData("currentManuCat", "");
|
var blacklist = dh_TempGetJSONData("blackListVzPos", "[]");
|
var separatelist = dh_TempGetJSONData("separationInfo", "[]");
|
var pdfInfo = JSON.parse(dh_TempGetJSONData("PdfInfo", "[]"));
|
|
if (blacklist.length > 0 && typeof blacklist === "string") {
|
blacklist = JSON.parse(blacklist);
|
}
|
if (separatelist.length > 0 && typeof separatelist === "string") {
|
separatelist = JSON.parse(separatelist);
|
}
|
try {
|
rawData.Modules.forEach(function (module) {
|
var mod;
|
switch (module.templ) {
|
case "ACCESSOIRES":
|
mod = new ModuleAccessoires();
|
mod.template = module.templ;
|
self.initMod(mod, module);
|
self.prepareModuleDataAccessoires(mod, module);
|
break;
|
case "ACCESSOIRES_ROOMPLANNING":
|
mod = new ModuleAccessoiresRoomPlanning();
|
mod.template = module.templ;
|
self.initMod(mod, module);
|
self.prepareModuleDataAccessoires(mod, module);
|
break;
|
case "EQUIPMENT":
|
mod = new ModuleEquipment();
|
mod.template = module.temp;
|
self.initMod(mod, module);
|
self.prepareModuleDataEquipment(mod, module);
|
break;
|
case "WEBCAB": // PH [2023|March|21]
|
mod = new ModuleWebCab(module);
|
mod.template = module.templ;
|
self.initMod(mod, module);
|
self.prepareModuleData(mod, module, { // PH [2023|May|26]
|
selectedProgGroup: selectedProgGroup,
|
blacklist: blacklist,
|
separatelist: separatelist
|
});
|
break;
|
case "CONFIGURATOR": // LL [2025|April|07]
|
mod = new ModuleConfiguratorUi(module, kataPageId);
|
mod.template = module.templ;
|
self.initMod(mod, module);
|
self.prepareModuleData(mod, module, {
|
selectedProgGroup: selectedProgGroup,
|
blacklist: blacklist,
|
separatelist: separatelist
|
});
|
break;
|
default:
|
mod = new ModuleStandard({ "DimensionsMapping": self.dimMapping });
|
mod.template = module.templ;
|
mod.dimensions = [];
|
mod.dimensionValueButton = {};
|
mod.dimensionValueButtonGrouped = {};
|
self.initMod(mod, module);
|
if (self.catConfig[mod.id]) {
|
mod.catConfig = self.catConfig[mod.id];
|
}
|
pdfInfo.forEach(function (info) {
|
if (info.mod === mod.id || info.mod === "*") {
|
mod.pdfFile = info.pdf;
|
}
|
});
|
timeline(Date.now(), " Start PrePareData");
|
self.prepareModuleData(mod, module, {
|
selectedProgGroup: selectedProgGroup,
|
blacklist: blacklist,
|
separatelist: separatelist
|
});
|
timeline(Date.now(), " End PrePareData");
|
mod.endLessScroll = mod.articles.length > 20 && rawData.Modules.length === 1 && !mod.cfg["noEndlessScroll"];
|
mod.articlesToShow = [];
|
mod.currentScrollIndex = 0;
|
mod.singleArticlePage = mod.articles.length === 1;
|
|
mod.setEquipmentCache();
|
|
setDimensionsData(mod, self);
|
|
}
|
|
function setDimensionsData(mod, katapage) {
|
var dimText = {
|
de: { H: "H", B: "B", T: "T" },
|
en: { H: "H", B: "W", T: "D" },
|
fr: { H: "H", B: "L", T: "P" },
|
nl: { H: "H", B: "B", T: "D" }
|
};
|
|
var labelH = "";
|
var labelB = "";
|
var labelT = "";
|
|
try {
|
// labelH = dimText[self.modLanguage].H;
|
// labelB = dimText[self.modLanguage].B;
|
// labelT = dimText[self.modLanguage].T;
|
labelH = dh_text_global("fv.generickatatree.h");
|
labelB = dh_text_global("fv.generickatatree.b");
|
labelT = dh_text_global("fv.generickatatree.t");
|
} catch (e) {
|
labelH = "H";
|
labelB = "B";
|
labelT = "T";
|
}
|
|
mod.dimensions.push({
|
id: "zMax",
|
idShort: "z",
|
label: labelH,
|
name: mod.labelTextH,
|
property: "zMax",
|
displayProperty: "zMaxDisplay",
|
show: mod.showDimension("zMax", mod.articles) && mod.cfg["DimensionsToHide"].indexOf('z') < 0,
|
order: mod.cfg["dimensionOrder"].indexOf('H'),
|
dhtodoParameter: "v7"
|
});
|
mod.dimensions.push({
|
id: "xMax",
|
idShort: "x",
|
label: labelB,
|
name: mod.labelTextB,
|
property: "xMax",
|
displayProperty: "xMaxDisplay",
|
show: mod.showDimension("xMax", mod.articles) && mod.cfg["DimensionsToHide"].indexOf('x') < 0,
|
order: mod.cfg["dimensionOrder"].indexOf('B'),
|
dhtodoParameter: "v5"
|
});
|
mod.dimensions.push({
|
id: "yMax",
|
idShort: "y",
|
label: labelT,
|
name: mod.labelTextT,
|
property: "yMax",
|
displayProperty: "yMaxDisplay",
|
show: mod.showDimension("yMax", mod.articles) && mod.cfg["DimensionsToHide"].indexOf('y') < 0,
|
order: mod.cfg["dimensionOrder"].indexOf('T'),
|
dhtodoParameter: "v6"
|
});
|
|
mod.dimensions.sort(function (a, b) {
|
return a.order - b.order;
|
});
|
}
|
|
var found = self.defindedModules.find(function (cat) {
|
return cat.id === module.moduleId.replace("mod_", "dhcat_");
|
});
|
|
if (found) {
|
mod.order = found.order;
|
}
|
|
if (module.templ === "EQUIPMENT") {
|
mod.distinctPriorities = [];
|
mod.distinctPriorities.push(10000);
|
} else {
|
mod.distinctPriorities = ArticleCategory.getDistinctPriorities(mod.moduleFilterCategories);
|
dh_front_display(3);
|
}
|
|
if (mod.articles.length > 0 || mod.additionalArticles.length > 0 || ((mod.propTrans && mod.propTrans.length > 0) || (mod.fittings && mod.fittings.length > 0))) {
|
self.modules.push(mod);
|
}
|
if (mod.articles.length === 0 && (kataPageId === "search" || kataPageId === "dhcat_configurator")) {
|
self.modules.push(mod);
|
}
|
});
|
} catch (e) {
|
|
}
|
|
|
if (self.modules.length === 1) {
|
self.modules[0].singlePageModule = true;
|
}
|
|
self.modules.sort(function (a, b) {
|
return a.order - b.order;
|
});
|
}
|
|
/* currentEquipmentMap wird im article-list-builder.js definiert. */
|
window.currentEquipmentMap = DoSyncFPSAction("ArticleEquipmentObserverAction", { respond: 1 });
|
}
|
|
KataPage.prototype.initMod = function (mod, module) {
|
var userVal = JSON.parse(module.UserVal);
|
|
mod.index = module.Index;
|
mod.id = module.moduleId;
|
mod.moduleFilterCategories = [];
|
mod.articles = [];
|
mod.filteredArticles = [];
|
mod.propTrans = [];
|
mod.fittings = [];
|
mod.cfg = [];
|
mod.catConfig = [];
|
mod.catConfigGlobal = [];
|
mod.singleArticlePage = false;
|
mod.additionalArticles = [];
|
mod.order = 0;
|
mod.titel = module.ModuleCaption;
|
|
mod.labelTextH = module.labelTextH;
|
mod.labelTextB = module.labelTextB;
|
mod.labelTextT = module.labelTextT;
|
mod.infoText = module.infoText;
|
|
mod.modProg = module.modProg;
|
mod.modManu = module.modManu;
|
|
this.setModuleConfig(mod, userVal);
|
|
};
|
|
KataPage.prototype.setModuleConfig = function (mod, userVal) {
|
if (userVal.articleView && userVal.articleView === "vertical") {
|
userVal.articleView = ""; // Von "vertical" auf "longText" setzen, falls der Wert "vertical" als ArticleView noch in alten Konfigurationen hinterelgt ist
|
}
|
mod.cfg["articleView"] = userVal.articleView || "";
|
mod.cfg["sortArticleByArtNo"] = userVal.sortArticleByArtNo || false;
|
mod.cfg["sortArticleByDimension"] = userVal.sortArticleByDimension || "zMax";
|
mod.cfg["sortArticleByDimensionAscending"] = userVal.sortArticleByDimensionAscending === undefined ? true : userVal.sortArticleByDimensionAscending;
|
mod.cfg["resetFittingInPO"] = userVal.resetFittingInPO === undefined ? true : userVal.resetFittingInPO;
|
mod.cfg["forceAutoGenImages"] = userVal.forceAutoGenImages === undefined ? false : userVal.forceAutoGenImages;
|
mod.cfg["useDbSort"] = userVal.useDbSort === undefined ? false : userVal.useDbSort;
|
mod.cfg["showArticleNumber"] = userVal.showArticleNumber === undefined ? true : userVal.showArticleNumber;
|
mod.cfg["showArticleText"] = userVal.showArticleText === undefined ? false : userVal.showArticleText;
|
mod.cfg["showDimensions"] = userVal.showDimensions === undefined ? true : userVal.showDimensions;
|
mod.cfg["showArtInfoText"] = userVal.showArtInfoText === undefined ? true : userVal.showArtInfoText;
|
mod.cfg["showArticlesPropTrans"] = userVal.showArticlesPropTrans === undefined ? true : userVal.showArticlesPropTrans;
|
mod.cfg["showArticleFittings"] = userVal.showArticleFittings === undefined ? true : userVal.showArticleFittings;
|
// mod.cfg["showAdditionalImage"] = userVal.showAdditionalImage === undefined ? false : userVal.showAdditionalImage;
|
|
|
mod.cfg["ArtPropsToHide"] = userVal.ArtPropsToHide || [];
|
mod.cfg["ArtPropsToShow"] = userVal.ArtPropsToShow || [];
|
mod.cfg["ignoreVzPos"] = userVal.ignoreVzPos || false;
|
mod.cfg["CategoriesToHide"] = userVal.categoriesToHide || [];
|
mod.cfg["CategoriePriosToHide"] = userVal.categoriePriosToHide || [];
|
mod.cfg["DimensionsToHide"] = userVal.DimensionsToHide || [];
|
mod.cfg["DimensionsShowAll"] = userVal.DimensionsShowAll === undefined ? true : userVal.DimensionsShowAll;
|
mod.cfg["hideArticleImg"] = userVal.hideArticleImg === undefined ? false : userVal.hideArticleImg;
|
mod.cfg["hideArticleCount"] = userVal.hideArticleCount === undefined ? false : userVal.hideArticleCount;
|
mod.cfg["hideCategorieFilter"] = userVal.hideCategorieFilter === undefined ? false : userVal.hideCategorieFilter;
|
mod.cfg["hideDimensionFilter"] = userVal.hideDimensionFilter === undefined ? false : userVal.hideDimensionFilter;
|
mod.cfg["showTooltip"] = userVal.showTooltip === undefined ? true : userVal.showTooltip;
|
mod.cfg["showTooltipAsArtInfoText"] = userVal.showTooltipAsArtInfoText === undefined ? false : userVal.showTooltipAsArtInfoText;
|
mod.cfg["hideProgPropertyButton"] = userVal.hideProgPropertyButton === undefined ? false : userVal.hideProgPropertyButton;
|
mod.cfg["showShopCartArticleNumber"] = userVal.showShopCartArticleNumber || false;
|
mod.cfg["showArticleTransferToGlobal"] = userVal.showArticleTransferToGlobal || false;
|
|
mod.cfg["handleGlobalDimensionFilter"] = userVal.handleGlobalDimensionFilter === undefined ? true : userVal.handleGlobalDimensionFilter;
|
mod.cfg["ArtNoToReplace"] = userVal.ArtNoToReplace || [];
|
mod.cfg["replaceStringInArtNo"] = userVal.replaceStringInArtNo || "";
|
mod.cfg["valueCountLimit"] = userVal.valueCountLimit || 18;
|
mod.cfg["valueGroupSize"] = userVal.valueGroupSize || 100;
|
mod.cfg["valueGroupBtnHide"] = userVal.valueGroupBtnHide || false;
|
mod.cfg["artPropVarsListSize"] = userVal.artPropVarsListSize || 1;
|
|
mod.cfg["noEndlessScroll"] = userVal.noEndlessScroll || false;
|
mod.cfg["showAdditionalArtText"] = userVal.showAdditionalArtText === undefined ? false : userVal.showAdditionalArtText;
|
mod.cfg["infoText"] = userVal.infoText || "";
|
mod.cfg["ausfCenterShowMenu"] = userVal.ausfCenterShowMenu === undefined ? true : userVal.ausfCenterShowMenu;
|
mod.cfg["ausfCenterShowBgButton"] = (dh_TempGetJSONData("ausfCenterShowBgButton") === "True") && (userVal.ausfCenterShowBgButton === undefined ? true : userVal.ausfCenterShowBgButton);
|
mod.cfg["singleRowDimText"] = userVal.singleRowDimText || false;
|
mod.cfg["showFirstArtNoAsModTitle"] = userVal.showFirstArtNoAsModTitle === undefined ? false : userVal.showFirstArtNoAsModTitle;
|
mod.cfg["showSingleModuleCaption"] = userVal.showSingleModuleCaption === undefined ? false : userVal.showSingleModuleCaption;
|
mod.cfg["threeRowDimText"] = userVal.threeRowDimText === undefined ? false : userVal.threeRowDimText;
|
mod.cfg["useComboBoxForArtPropCategory"] = userVal.useComboBoxForArtPropCategory === undefined ? [] : userVal.useComboBoxForArtPropCategory;
|
mod.cfg["preSelectedFilters"] = userVal.preSelectedFilters === undefined ? {} : userVal.preSelectedFilters;
|
|
mod.cfg["hideDimValuesByCategories"] = userVal.hideDimValuesByCategories === undefined ? [] : userVal.hideDimValuesByCategories;
|
|
mod.cfg["labelTextHeight"] = userVal.labelTextHeight || "";
|
mod.cfg["labelTextWidth"] = userVal.labelTextWidth || "";
|
mod.cfg["labelTextDepth"] = userVal.labelTextDepth || "";
|
|
//Für Form1 unter dem PLUS
|
mod.cfg["showArtPropsWithNoneEquipmentCategories"] = userVal.showArtPropsWithNoneEquipmentCategories || false;
|
|
//kategorien die deaktiviert sind werden ausgeblendet, wenn alle Kategorien in einer Priorität deaktiviert sind verschwindet die gesamte Ebene
|
mod.cfg["hideDisabledCategoriesInHigherPrio"] = userVal.hideDisabledCategoriesInHigherPrio === undefined ? false : userVal.hideDisabledCategoriesInHigherPrio;
|
|
//Ab dieser Priorität werden die nächst höheren Prioritäten erst dann sichtbar wenn die vorherige Priorität durch selektieren einer Kategorien aktiviet werden
|
mod.cfg["lastVisiblePrioWithoutActivation"] = userVal.lastVisiblePrioWithoutActivation || 0;
|
|
// Ticket #54590(Option von Fitting komplett leer machen)
|
mod.cfg["removeFittingAll"] = userVal.removeFittingAll === undefined ? false : userVal.removeFittingAll;
|
|
mod.cfg["verticalArtPropDataVars"] = userVal.verticalArtPropDataVars === undefined ? false : userVal.verticalArtPropDataVars;
|
|
//Country.als für HBT-Sortierung benutzen
|
var countryInfo = FurnplanCommunicationService.GetCountryInfo();
|
if (countryInfo && countryInfo.currentDimensionsorder) {
|
// Erst aus country.dht ziehen
|
mod.cfg["dimensionOrder"] = countryInfo.currentDimensionsorder;
|
} else {
|
// Wenn Fehler dann auf Standard HBT zurückspringen
|
mod.cfg["dimensionOrder"] = "HBT";
|
}
|
if (userVal.dimensionOrder !== undefined) {
|
// Datenanleger kann wenn gewünscht die Einstellung per katapagemodules.dht überschreiben
|
mod.cfg["dimensionOrder"] = userVal.dimensionOrder;
|
}
|
|
//MODUL WEBCAB
|
mod.cfg["CabDivider"] = userVal.CabDivider;
|
|
mod.cfg["limiteImgHeightShowroom"] = userVal.limiteImgHeightShowroom === undefined ? 0 : userVal.limiteImgHeightShowroom;
|
|
//MODUL CONFIGURATOR
|
mod.cfg["formElements"] = userVal.formElements || [];
|
mod.cfg["placeButtonText"] = userVal.placeButtonText || "";
|
|
};
|
|
|
KataPage.prototype.prepareModuleDataEquipment = function (mod, module) {
|
//Erstelle anhand von FittingInfo(PROG_fi.dht) eine Liste von Fittingartikelnummern die keine mehrfachen JavaScriptAufrufnummer enthält
|
//Im Prinzip wird eine Liste aller Javascriptaufrufnummer angezeigt in der für jedes Element der Anzeige die erste passende Artikelnummer angezigt wird
|
|
module.Articles[0].forEach(function (equipment) {
|
var tmpArticleDhCats = equipment.ArtCategories;
|
var tmpArticleInfoText = equipment.ArtInfoCategories;
|
|
var tmpArtCats = [];
|
var tmpArtInfoCats = [];
|
|
tmpArticleDhCats.forEach(function (tmpCat) {
|
var foundCategory = definedEquipmentCategories.find(function (cat) {
|
return cat.id === tmpCat;
|
});
|
if (foundCategory) tmpArtCats.push(foundCategory);
|
});
|
|
tmpArticleInfoText.forEach(function (tmpCat) {
|
var foundCategory = definedArtInfoTextCategories.find(function (cat) {
|
return cat.id === tmpCat;
|
});
|
if (foundCategory) tmpArtInfoCats.push(foundCategory);
|
});
|
|
var add = false;
|
|
var imgPath = equipment.imgName; // Path from C++ ExtCore->getImagePath()
|
if (equipment.InsertType === "P") {
|
var p = new ArticlePropertyTrans(equipment.PT_ID);
|
p.imgPath = equipment.imgName;
|
p.text = equipment.textID;
|
p.artText = equipment.artText;
|
p.artNo = equipment.ArtNr;
|
p.hideDelete = equipment.hideDelete;
|
p.hideFront = equipment.hideFront;
|
p.ptm = equipment.ptm;
|
var foundP = propTransInfo.find(function (pti) {
|
return p.id === pti.id;
|
});
|
if (foundP) {
|
p.ptm = foundP.ptm;
|
p.controls = foundP.controls.map(function (control) {
|
return new ArticlePropertyTransControl(control);
|
});
|
}
|
p.artCategories = tmpArtCats;
|
p.artInfoTexts = tmpArtInfoCats;
|
add = true;
|
mod.articles.push(p);
|
} else if (equipment.InsertType === "A") {
|
var f = new ArticleFitting(equipment.ArtNr);
|
f.text = equipment.artText;
|
f.imgPath = equipment.imgName;
|
f.jsAN = equipment.jsAN;
|
f.hideInsert = equipment.hideInsert;
|
f.hideDelete = equipment.hideDelete;
|
f.hideMove = equipment.hideMove;
|
f.hideRefresh = equipment.hideRefresh;
|
f.hideFront = equipment.hideFront;
|
f.artPropVars = equipment.artPropVars;
|
f.controls = new ArticleFittingControl(equipment.artPropVars, equipment.ArtNr);
|
f.artCategories = tmpArtCats;
|
f.artInfoTexts = tmpArtInfoCats;
|
add = true;
|
mod.articles.push(f);
|
} else if (equipment.InsertType === "S") {
|
var s = new ArticleShoppingCart(equipment.ArtNr, imgPath);
|
s.artCategories = tmpArtCats;
|
s.artInfoTexts = tmpArtInfoCats;
|
s.notClickable = equipment.NotClickable;
|
add = true;
|
mod.articles.push(s);
|
} else if (equipment.InsertType === "O") {
|
var o = new ArticleOptionalItem(equipment.ArtNr, imgPath);
|
o.artCategories = [];
|
o.artInfoTexts = tmpArtInfoCats;
|
add = true;
|
mod.articles.push(o);
|
}
|
if (add) {
|
tmpArtCats.forEach(function (category) {
|
if (mod.moduleFilterCategories.indexOf(category) < 0) {
|
mod.moduleFilterCategories.push(category);
|
}
|
});
|
|
}
|
mod.moduleFilterCategories.sort(function (a, b) {
|
return a.order - b.order;
|
});
|
});
|
};
|
|
KataPage.prototype.prepareModuleData = function (mod, module, options) {
|
var self = this;
|
var selectedProgGroup = options.selectedProgGroup || "";
|
// var articlesWithHinge = [];
|
var blacklist = options.blacklist || [];
|
var separatelist = options.separatelist || [];
|
|
mod.catConfigGlobal = mod.catConfig.filter(function (cfg) {
|
return cfg.defaultArt === ""
|
});
|
|
mod.catConfig = mod.catConfig.filter(function (cfg) {
|
return cfg.defaultArt !== ""
|
});
|
|
// Performance: einmalig O(1)-Lookups/Mengen aufbauen statt je Artikel/Equipment linear zu suchen.
|
var propTransInfoByArtNo = buildIndexMap(propTransInfo, "artNo"); // ersetzt propTransInfo.find() je PropTrans-Artikel
|
var categoriesToHide = mod.cfg["CategoriesToHide"] || [];
|
var categoriesToHideSet = {}; // ersetzt CategoriesToHide.indexOf()
|
for (var chIdx = 0; chIdx < categoriesToHide.length; chIdx++) {
|
categoriesToHideSet["$" + categoriesToHide[chIdx]] = true;
|
}
|
var equipSeen = {}; // ersetzt equipmentArtNumbersOnPage.indexOf() (O(n^2) -> O(n))
|
for (var eqIdx = 0; eqIdx < mod.equipmentArtNumbersOnPage.length; eqIdx++) {
|
equipSeen["$" + mod.equipmentArtNumbersOnPage[eqIdx]] = true;
|
}
|
timeline(Date.now(), "Start PrePareDataArticlesForEach");
|
module.Articles[0].forEach(function (article, index) {
|
// if (index == 0 || index == 1) {
|
if ((mod.cfg["ignoreVzPos"] === false) || (mod.cfg["ignoreVzPos"] && blacklist.indexOf(article.ArtNr) < 0)) {
|
var art = new Article(article, ArticleType.NORMAL, mod, selectedProgGroup, separatelist);
|
if (article.subHingeArticleObj) {
|
art.subHingeArticle = new Article(article.subHingeArticleObj, ArticleType.NORMAL, mod, selectedProgGroup, separatelist);
|
art.hasHinge = true;
|
}
|
|
var add = true;
|
if (mod.catConfig.length > 0) {
|
art.progProperties = mod.catConfig.filter(function (cfg) {
|
return cfg.defaultArt === art.artNo;
|
});
|
if (art.progProperties && art.progProperties.length > 0) {
|
mod.defaultConfiguratorArt = art;
|
mod.defaultConfiguratorArt.isDefaultConfiguratorArt = true;
|
}
|
}
|
if (add && !art.hideArticle) {
|
art.artCategories.forEach(function (category) {
|
if ((category.priority === 10 || category.priority === 100) && art.isFitting()) {
|
art.showFittingControls = true;
|
}
|
if ((category.priority === 10 || category.priority === 100) && art.isPropTrans()) {
|
|
var foundP = propTransInfoByArtNo["$" + art.artNo];
|
if (foundP) {
|
art.ptId = foundP.id;
|
art.showPropTransControls = true;
|
}
|
}
|
if (category.priority >= 1000 && mod.moduleFilterCategories.indexOf(category) < 0) {
|
if (!categoriesToHideSet["$" + category.id]) {
|
mod.moduleFilterCategories.push(category);
|
}
|
}
|
});
|
mod.articles.push(art);
|
// Alle Artikelnummern von Fittings auf der Katapage in eindeutige Liste packen
|
art.artFittings.forEach(function (f, index) {
|
if (!f.hideFittingbyAN) {
|
if (!equipSeen["$" + f.artNoFitting]) {
|
equipSeen["$" + f.artNoFitting] = true;
|
mod.equipmentArtNumbersOnPage.push(f.artNoFitting);
|
}
|
}
|
});
|
// Alle Artikelnummern von Eigenschaftsübertragungen auf der Katapage in eindeutige Liste packen
|
art.artPropTrans.forEach(function (pt, index) {
|
if (pt.artNo !== "") {
|
if (!equipSeen["$" + pt.artNo]) {
|
equipSeen["$" + pt.artNo] = true;
|
mod.equipmentArtNumbersOnPage.push(pt.artNo);
|
}
|
}
|
});
|
// Alle Artikelnummern von Warenkorbartikeln auf der Katapage in eindeutige Liste packen
|
art.artShoppingCartArticles.forEach(function (sc, index) {
|
if (!equipSeen["$" + sc.artNo]) {
|
equipSeen["$" + sc.artNo] = true;
|
mod.equipmentArtNumbersOnPage.push(sc.artNo);
|
}
|
});
|
// Alle Artikelnummern von PO-Artikeln auf der Katapage in eindeutige Liste packen
|
art.artPoEquipment.forEach(function (poe, index) {
|
if (!equipSeen["$" + poe.artNo]) {
|
equipSeen["$" + poe.artNo] = true;
|
mod.equipmentArtNumbersOnPage.push(poe.artNo);
|
}
|
});
|
}
|
}
|
});
|
timeline(Date.now(), "Stop PrePareDataArticlesForEach");
|
|
var articleModes = {};
|
mod.articles.forEach(function (article) {
|
var searchMode = getArticleObserverSearchMode(article, 1);
|
articleModes[article.artNo] = searchMode;
|
if (article.subHingeArticle) {
|
articleModes[article.subHingeArticle.artNo] = searchMode;
|
}
|
});
|
|
|
|
DoSyncFPSAction("ArticleEquipmentObserverAction", {
|
isWhitelist: mod.cfg["ArtPropsToShow"].length > 0,
|
filterList: mod.cfg["ArtPropsToShow"].length > 0 ? mod.cfg["ArtPropsToShow"] : mod.cfg["ArtPropsToHide"],
|
articleModes: articleModes
|
});
|
|
|
if (mod.cfg["sortArticleByArtNo"]) {
|
mod.articles.sort(function (b, a) {
|
if (b.artNo > a.artNo) {
|
return 1;
|
} else {
|
return -1;
|
}
|
});
|
} else {
|
if (!mod.cfg["useDbSort"]) {
|
if (mod.cfg["sortArticleByDimensionAscending"]) {
|
mod.articles.sort(function (a, b) {
|
return a[mod.cfg["sortArticleByDimension"] + "Raw"] - b[mod.cfg["sortArticleByDimension"] + "Raw"];
|
});
|
} else {
|
mod.articles.sort(function (a, b) {
|
return b[mod.cfg["sortArticleByDimension"] + "Raw"] - a[mod.cfg["sortArticleByDimension"] + "Raw"];
|
});
|
}
|
}
|
}
|
|
mod.filteredArticles = mod.articles.slice();
|
mod.moduleFilterCategories.sort(function (a, b) {
|
return a.order - b.order;
|
});
|
|
};
|
|
KataPage.prototype.prepareModuleDataAccessoires = function (mod, module) {
|
// definedAccessoiresCategories.forEach(function (category) {
|
// mod.moduleFilterCategories.push(category);
|
// });
|
|
module.Articles[0].forEach(function (article) {
|
|
var art = new Article(article, ArticleType.ACCESS, mod, "", []);
|
|
var tmpArticleDhAcces = article.ArtAccessCategories;
|
tmpArticleDhAcces.forEach(function (tmpCat) {
|
var foundCategory = definedAccessoiresCategories.find(function (cat) {
|
return cat.id === tmpCat;
|
});
|
if (foundCategory) art.artCategories.push(foundCategory);
|
});
|
if (tmpArticleDhAcces.length === art.artCategories.length) {
|
mod.articles.push(art);
|
art.artCategories.forEach(function (category) {
|
if (mod.moduleFilterCategories.indexOf(category) < 0) {
|
mod.moduleFilterCategories.push(category);
|
}
|
});
|
}
|
});
|
};
|
|
KataPage.prototype.preSelectFilter = function (mod) {
|
//Vorselektierung von Maßen, z.B. bei MAB
|
if (Object.keys(mod.cfg["preSelectedFilters"]).length > 0) {
|
//Wenn voreingestellte Werte zur Maßfilterung in den katapagemodules.dht hinterlegt sind
|
Object.keys(mod.cfg["preSelectedFilters"]).forEach(function (dimension) {
|
if (mod.dimensionValueButton[dimension]) {
|
//Für X,Y,Z die Button-Gruuppen durchgehen
|
mod.dimensionValueButton[dimension].forEach(function (btn) {
|
//Alle Buttons der Grupep druchlaufen
|
if (mod.cfg["preSelectedFilters"][dimension].indexOf(btn.attr("data-value")) > -1) {
|
//Die Button dessen "data-value" in den preSelectedFilters hinterlegt sind anwählen bzw simuliert anklicken
|
btn.trigger("click", ["simulated"]);
|
}
|
})
|
}
|
//Wenn es viele Maße in einer Filterdimension gibt, dann können diese gruppiert werden, diese Gruppe müssen dann ausgeklappt
|
//werden wenn es preSelectedFilter gibt.
|
//"dimensionValueButtonGrouped" wird in "mod-standard->buildFilter" gefüllt.
|
if (mod.dimensionValueButtonGrouped[dimension]) {
|
//Alle Grupperiungsfilter-Button durchlaufen
|
var filterGroupButtons = mod.dimensionValueButtonGrouped[dimension];
|
//Die Gruppierungsbutton einer Dimension durchlaufen
|
filterGroupButtons.forEach(function (btn) {
|
var triggerBtn = false;
|
//Jeder Gruppierungsbutton hat an seinem Objekt ein Array("dimValues") angehangen das die "data-values" der Button in der Gruppe enthält
|
btn.dimValues.forEach(function (value) {
|
//Wenn einer der Werte in den preSelectedFilter hinterlegt ist, dann muss die Gruppe ausgeklappt werden
|
if (mod.cfg["preSelectedFilters"][dimension].indexOf(value) > -1) {
|
triggerBtn = true;
|
}
|
})
|
if (triggerBtn) {
|
//Simulierten Klick auf den Grupperiungsbutton auslösen damit Gruppe sich öffnet
|
btn.trigger("click");
|
}
|
});
|
}
|
})
|
}
|
}
|
|
KataPage.prototype.buildAccessoiresCategory = function (category) {
|
var container = $("#kataPage");
|
if (this.modules.length > 0) {
|
container.append(this.modules[0].loadCategoryArticles(category, true));
|
}
|
}
|
|
KataPage.prototype.build = function () {
|
var self = this;
|
var container = $("#kataPage");
|
|
if (this.modules.length > 0) {
|
this.modules.forEach(function (mod, index) {
|
var modTitel = $('<button class="accordion"></button>');
|
var modContentContainer = $('<div class="panel"></div>');
|
if (mod.articles.length === 1 && mod.cfg["showFirstArtNoAsModTitle"]) {
|
//Wenn es nur einen Artikel in dem Modul gibt und der Schalter "showFirstArtNoAsModTitle" gesetzt ist dann wir der Artikeltext des Artikels im Accordion als Modultitel benutzt
|
mod.titel = mod.articles[0].getArtText();
|
}
|
|
modTitel.html(mod.titel);
|
|
modTitel.on("click", function () {
|
if (self.autoCollapse === "True") {
|
//Wenn ein Modul geöffnet wird dann alle anderen Module schließen
|
$(".accordion").removeClass("active");
|
$(".accordion").next().css("display", "none");
|
}
|
//Titel organe machen
|
$(this).toggleClass("active");
|
var panel = $(this).next();
|
//Panel Sichtbarkeit umschalten
|
if (panel.css("display") === "block") {
|
panel.css("display", "none");
|
} else {
|
panel.css("display", "block");
|
}
|
if (self.modules.length > 1 && !mod.isLoaded) {
|
modContentContainer.append(mod.build());
|
if ((mod.singleArticlePage && mod.template === "STANDARD") || mod.defaultConfiguratorArt) {
|
mod.openArtProp();
|
mod.openArtProgProperties();
|
}
|
self.preSelectFilter(mod);
|
mod.isLoaded = true;
|
}
|
});
|
|
container.append(modTitel);
|
if (self.modules.length === 1 && !mod.cfg["showSingleModuleCaption"]) {
|
//Wenn es nur ein Modul gibt und der Schalter "showSingleModuleCaption" gesetzt ist dann den Modultitel doch anzeigen
|
modTitel.hide();
|
}
|
|
if (mod.singlePageModule) {
|
modContentContainer.css("display", "block");
|
modTitel.addClass("active");
|
}
|
if (self.modules.length === 1) {
|
modContentContainer.append(mod.build());
|
mod.isLoaded = true;
|
}
|
container.append(modContentContainer);
|
|
self.preSelectFilter(mod);
|
})
|
}
|
|
|
};
|
|
|
|
|
/**
|
* Stellt den Suchmodus (Flag) eines Artikels fuer das dynamische Zubehoer ein.
|
* @param {string} article
|
* @param {1|2} baseMode
|
* @returns {number}
|
*/
|
function getArticleObserverSearchMode(article, baseMode) {
|
// NOTE: &1 = simple search -> hat zubehoer: ja/nein
|
var searchMode = baseMode || 1;
|
if (article.artCategories.indexOf('dhcat_zubehoernichtanzeigen') !== -1) {
|
// NOTE: 0 = nichts machen
|
searchMode = 0;
|
} else {
|
// INFO: Wenn dem Artikel festes Zubehör zugewiesen ist.
|
if (article.artShoppingCartArticles.length || article.artPoEquipment.length) {
|
// NOTE: &4 = article search -> wenn artikel da, immer zubehoer anzeigen, durch statisches zubehoer wie warenkorb
|
searchMode |= 4;
|
}
|
|
// INFO: Wenn Fitting als Hauptobjekt (Sonderverhalten z.B. bei Peka)
|
if (article.insertType === "A") {
|
// NOTE: &16 = Zu diesem Fitting Artikel auch Zubehoer ermitteln
|
searchMode |= 16;
|
}
|
// INFO: Nur wenn das Modul keine Konfiguration oder allgemeine Ausführungen mitbringt
|
else if (article.mod.catConfig.length === 0 && article.mod.catConfigGlobal.length === 0) {
|
// NOTE: &8 = auch ausfuehrungen abfragen
|
searchMode |= 8;
|
}
|
}
|
return searchMode;
|
}
|
|