Webotvurci

HeliumKing - B2B JS ukázka

Jun 6th, 2024
495
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Stažení konfigurace z API
  2. if (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.  
  29. function 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
  42. function 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
  68. function 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}</td>
  141.   <td data-label="Cena za kus">${printPricePerPiece}</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. }
Advertisement
Add Comment
Please, Sign In to add comment