· last year · Jun 06, 2024, 06:30 AM
1// Stažení konfigurace z API
2if (dataLayer[0]["shoptet"]["pageType"] == "productDetail") {
3 let product_id = dataLayer[0]["shoptet"]["product"]["guid"];
4 const eshop_id = dataLayer[0]["shoptet"]["projectId"];
5
6 fetch("https://shoptet.webotvurci.cz/eshop-endpoints/" + eshop_id + "/product-variants/setting-hash")
7 .then((response) => response.json())
8 .then((response) => {
9 var product_connections_setting = "https://cdn.myshoptet.com/usr/webotvurci.myshoptet.com/user/documents/product-variants/" + eshop_id + "/eshopSetting.json?" + response;
10 fetch(product_connections_setting)
11 .then((response) => response.json())
12 .then((json) => {
13 let products = json.products[product_id];
14 if (products !== undefined) {
15 products.forEach((element) => {
16 let product_config_id = element;
17 let product_config_data = json.configs[product_config_id];
18 WtShowProductInterconnectionsAddonCisBox(product_config_data);
19 });
20 }
21
22 });
23 })
24 .catch((error) => {
25 console.log(error);
26 });
27}
28
29function formatNumber(number) {
30
31 const fixedNumber = number.toFixed(2);
32
33 const formatter = new Intl.NumberFormat('cs-CZ', {
34 minimumFractionDigits: 2,
35 maximumFractionDigits: 2,
36 });
37
38 return formatter.format(fixedNumber).replace('.', ',');
39}
40
41//Hledání ceny v podobných produktech
42function najdiCenuBezDPH(identifier) {
43
44 const element = document.querySelector(`[data-micro-identifier="${identifier}"]`);
45
46 if (!element) {
47 console.log('Element s daným identifikátorem nebyl nalezen.');
48 return null;
49 }
50
51 const cenaBezDPHElement = element.querySelector('.price-additional');
52
53 if (!cenaBezDPHElement) {
54 console.log('Element s cenou bez DPH nebyl nalezen.');
55 return null;
56 }
57
58 var rawPriceText = cenaBezDPHElement.textContent.trim();
59
60 var priceText = rawPriceText.replace(/[^\d,]/g, '').trim();
61
62 var formattedPrice = priceText.replace(',', '.');
63
64 return formattedPrice;
65}
66
67// Zobrazení konfigurace
68function WtShowProductInterconnectionsAddonCisBox(product_config_data) {
69 var productData = product_config_data;
70
71 if (dataLayer[0]["shoptet"]["pageType"] == "productDetail" && typeof productData !== 'undefined') {
72
73 var container;
74 container = document.querySelector(".p-detail-info");
75
76 if (productData.hasOwnDesign === true && productData.type === "list") {
77
78 var customSelectBox = document.createElement('div');
79 customSelectBox.setAttribute('class', `c-product-interconnection-detail-params--custom is-template--${shoptet.design.template.name}`);
80
81 var itemsContainer = document.createElement('table');
82 itemsContainer.setAttribute('class', 'c-product-interconnection-custom--image-select-list-dropdown');
83 // Vytvoření záhlaví tabulky
84 var headerRow = document.createElement('tr');
85 var headers = ["Název produktu", "Počet kusů", "Cena bez DPH", "Cena za kus", "Odkaz"];
86 headers.forEach(headerText => {
87 var header = document.createElement('th');
88 header.textContent = headerText;
89 headerRow.appendChild(header);
90 });
91 itemsContainer.appendChild(headerRow);
92 customSelectBox.appendChild(itemsContainer);
93
94 let product_id = dataLayer[0]["shoptet"]["product"]["guid"];
95
96 for (var key in productData.productsSetting) {
97 var item = document.createElement('tr');
98 item.setAttribute('class', 'c-product-interconnection-custom--image-select-list-dropdown__item');
99 item.dataset.link = productData.productsSetting[key].link;
100
101 var name = productData.productsSetting[key].label;
102 var link = productData.productsSetting[key].link;
103
104 var velikostBaleni;
105 var pocetKusu;
106
107 if (name === "1ks") {
108 velikostBaleni = name;
109 pocetKusu = 1;
110 } else {
111 const casti = name.split("-");
112 velikostBaleni = casti[0].trim();
113
114 pocetKusu = parseInt(casti[1].trim().replace('ks', ''), 10);
115 }
116
117 var printPrice = "";
118 var printPricePerPiece = "";
119 if (key !== product_id) {
120 var cenaBezDPH = parseFloat(najdiCenuBezDPH(key));
121 printPricePerPiece = formatNumber(cenaBezDPH / parseFloat(pocetKusu));
122 printPrice = formatNumber(cenaBezDPH);
123
124 } else {
125
126 var priceElement = document.querySelector('.price-additional');
127 var rawPriceText = priceElement.textContent.trim();
128 var priceText = rawPriceText.replace(/[^\d,]/g, '').trim();
129 var formattedPrice = priceText.replace(',', '.');
130 var priceFloat = parseFloat(formattedPrice);
131 var pricePerPiece = priceFloat / pocetKusu;
132 printPrice = formatNumber(priceFloat);
133 printPricePerPiece = formatNumber(pricePerPiece);
134
135 }
136
137 item.innerHTML = `
138 <td data-label="Název produktu">${velikostBaleni}</td>
139 <td data-label="Počet kusů">${pocetKusu} Ks</td>
140 <td data-label="Cena bez DPH">${printPrice} Kč</td>
141 <td data-label="Cena za kus">${printPricePerPiece} Kč</td>
142 <td data-label="Odkaz"><a href="${link}">Zobrazit</a></td>
143`;
144
145
146 itemsContainer.appendChild(item);
147
148 }
149
150 if (container) {
151 container.parentNode.insertBefore(customSelectBox, container);
152 }
153 }
154 }
155}