/** * Class to display product labeling and pacing options */ class PandaCalculator { positions = {}; productInfo; productPrice; constructor(productInfo) { this.productInfo = productInfo; this.productPrice = calculatorScriptVariables.productInfo.productBaseInfo.price; this.#decodeLabeling(); } init(optionDiv, technologyDiv, imageDiv, totalPrice) { document.querySelector("#attributes").innerHTML = this.#drawAttributes(); document.querySelector(optionDiv).innerHTML = this.#drawPositionSelect(); this.#updatePrice(totalPrice); document.querySelector("#select_options").addEventListener("change", () => { document.querySelector(technologyDiv).innerHTML = this.#drawTechnologySelect(); // this.#updatePrice(totalPrice); document.querySelector("#select_technology").addEventListener("change", () => { if (document.querySelector("#select_technology").value != "brak") { document.querySelector(imageDiv).innerHTML = this.#getImage(); let value = this.#getSelectedOptions(); if (value) { let maxColors = value.max_colors; let dimensions = { "width": value.max_width, "height": value.max_height, "radius": value.max_radius } ; this.#getColorNumber(maxColors); this.#showDemission(dimensions); this.#updatePrice(totalPrice); const colorInput = document.querySelector("#color_number_input"); if (colorInput) { colorInput.addEventListener("change", () => { this.#updatePrice(totalPrice); }); } } } }) }) document.querySelector("#quantity").addEventListener("change", (event) => { this.#updatePrice(totalPrice); }) //this.#updatePriceDefaultBDI(); } #updatePrice(totalPrice) { let sumPrice = this.#getPricingTable(); document.querySelector(totalPrice).innerHTML = sumPrice; document.getElementsByName("total_price")[0].value = sumPrice; // document.getElementsByName("product_price")[0].value = this.productPrice; } #decodeLabeling() { this.productInfo.labeling.forEach(element => { this.positions[element.name] = this.positions[element.name] ? this.positions[element.name].concat(element) : [element] }); } #drawPositionSelect() { var html = ""; return html; } #drawTechnologySelect() { var html = ""; var positionKey = document.querySelector("#select_options").value; if (positionKey != "brak") { html += "

Technologia znakowania

"; html += ""; } return html; } #drawAttributes() { let html = ""; const attributes = this.productInfo.productBaseInfo.attributes || {}; if (Object.keys(attributes).length === 0) { return html; } Object.keys(attributes).forEach(key => { html += ``; }); return html; } #getImage() { var value = this.#getSelectedOptions(); if (value.image) { var html = ""; return html; } return ""; } #getPricingTable() { let quantity = document.querySelector("#quantity").value ? document.querySelector("#quantity").value : 1; let productPrice = this.#getBulkPrice(parseFloat(this.productPrice), quantity); document.getElementsByName("product_price")[0].value = productPrice; document.querySelector("#product_price").innerHTML = productPrice; var unitPrice = 0; var setupCost = 0; if (document.querySelector("#select_options") && document.querySelector("#select_technology")) { let value = this.#getSelectedOptions(); // console.log(value); var colorNumber = document.querySelector("#color_number_input") ? document.querySelector("#color_number_input").value : 1; // console.log(colorNumber); // console.log(value); if (value.max_colors == 0 && Object.keys(value.pricing)[0] == "fullcolour") { colorNumber = "fullcolour"; } if (value.pricing && value.pricing[colorNumber]) { var unitPrice = value.pricing[colorNumber].unit_price var setupCost = value.pricing[colorNumber].setup_cost value.pricing[colorNumber].forEach((element) => { if ( parseInt(element.quantity_from) <= parseInt(quantity) && parseInt(element.quantity_to) >= parseInt(quantity) ) { unitPrice = element.unit_price setupCost = element.setup_cost } }) } } document.querySelector("#price").innerHTML = unitPrice; document.querySelector("#setup_price").innerHTML = setupCost; document.getElementsByName("labeling_price")[0].value = unitPrice; document.getElementsByName("setup_price")[0].value = setupCost; let sum = (parseFloat(productPrice) * quantity) + (parseFloat(unitPrice) * quantity) + parseFloat(setupCost); return Math.round(sum * 100) / 100; } #getSelectedOptions() { var positionKey = document.querySelector("#select_options").value; var technologyKey = document.querySelector("#select_technology").value; // console.log(technologyKey); // console.log(positionKey); if (technologyKey != "brak") { var position = this.positions[positionKey]; for (let index = 0; index < position.length; index++) { if (position[index].technology == technologyKey) { var value = position[index] } } return value; } return null; } #getColorNumber(maxColor) { if (maxColor != 0) { var html = `"; } else { var html = `"; } document.querySelector("#color_number").innerHTML = html; } #showDemission(dimensions) { let demission = ""; if (dimensions.radius == "0") { demission += dimensions.width + "mm x " + dimensions.height + "mm"; } else { demission += dimensions.radius + "mm"; } document.querySelector("#dimensions_name").innerHTML = "Wymiary nadruku:"; document.querySelector("#dimensions").innerHTML = demission; } #updatePriceDefaultBDI() { let currencySymbol = document.querySelector('.woocommerce-Price-currencySymbol').innerHTML; let priceBox = document.querySelector('.woocommerce-Price-amount'); priceBox.innerHTML = " 0.00"; } #getBulkPrice(price, quantity) { var newPrice = price; if (price < 5) { if (quantity >= 1 && quantity <= 9) { newPrice = price + price * 0.36; } else if (quantity >= 10 && quantity <= 249) { newPrice = price - price * 0.31; } else if (quantity >= 250 && quantity <= 999) { newPrice = price - price * 0.37; } else if (quantity >= 1000 && quantity <= 4999) { newPrice = price - price * 0.42; } else if (quantity >= 5000) { newPrice = price - price * 0.47; } } else { if (quantity >= 1 && quantity <= 9) { newPrice = price; } else if (quantity >= 10 && quantity <= 99) { newPrice = price - price * 0.31; } else if (quantity >= 100 && quantity <= 249) { newPrice = price - price * 0.37; } else if (quantity >= 250 && quantity <= 999) { newPrice = price - price * 0.42; } else if (quantity >= 1000) { newPrice = price - price * 0.47; } } newPrice = Math.round(newPrice * 100) / 100; return newPrice; } } class ShowInformation { constructor() { let base = calculatorScriptVariables.productInfo.productBaseInfo let price = base.price; //let currencySymbol = document.querySelector(".woocommerce-Price-currencySymbol").innerHTML; //document.querySelector("bdi").innerHTML = price + currencySymbol; console.log(calculatorScriptVariables.productInfo) const invent = calculatorScriptVariables.productInfo.inventory const attributes = document.getElementById("select_attributes_color") if(!attributes) { if(invent.length == 0) { document.getElementById("stock").innerHTML = "Ilość w magazynie " + 0 + " szt." document.getElementById("add_to_cart_button").disabled = true; document.getElementById("add_to_cart_button").value = "Niedostępne"; document.getElementById("add_to_cart_button").classList.add("unavailable"); } invent.forEach(inv => { if(inv.type === "central_stock") { document.getElementById("stock").innerHTML = "Ilość w magazynie " + inv.amount + " szt." if (inv.amount < 50) { document.getElementById("add_to_cart_button").disabled = true; document.getElementById("add_to_cart_button").value = "Niedostępne"; document.getElementById("add_to_cart_button").classList.add("unavailable"); } else { document.getElementById("add_to_cart_button").disabled = false; document.getElementById("add_to_cart_button").value = "Dodaj do koszyka"; document.getElementById("add_to_cart_button").classList.remove("unavailable"); } } }) } else { const color = attributes.value; const selectedColor = calculatorScriptVariables.productInfo.productBaseInfo.attributes.color.find(c => { return c.attributes === color; }); const sku = selectedColor.image.split('/').at(-1).split('.')[0] const invent = calculatorScriptVariables.productInfo.inventory invent.forEach(inv => { if(inv.type === "central_stock" && inv.sku == sku) { document.getElementById("stock").innerHTML = "Ilość w magazynie " + inv.amount + " szt." if (inv.amount < 50) { document.getElementById("add_to_cart_button").disabled = true; document.getElementById("add_to_cart_button").value = "Niedostępne"; document.getElementById("add_to_cart_button").classList.add("unavailable"); } else { document.getElementById("add_to_cart_button").disabled = false; document.getElementById("add_to_cart_button").value = "Dodaj do koszyka"; document.getElementById("add_to_cart_button").classList.remove("unavailable"); } } }) } const gallery = document.querySelector(".single-product__images"); const images = calculatorScriptVariables.productInfo.productBaseInfo.images if(images) { images.forEach(img => { const url = img.url; const imageElement = document.createElement("img"); imageElement.src = url; imageElement.alt = "Obraz produktu"; imageElement.classList.add("product-image"); imageElement.addEventListener("click", () => { const thumbnail = document.querySelector(".single-product__thumbnails img"); thumbnail.src = url; }) gallery.appendChild(imageElement); }); jQuery(function($) { $('.single-product__images').slick({ slidesToShow: images.length, slidesToScroll: 1, arrows: true, infinite: true, adaptiveHeight: false, draggable: false, swipe: false, prevArrow: '', nextArrow: '', }); }); } const photo = base.primary_img; if (photo) { const thumbnailContainer = document.querySelector(".single-product__thumbnails"); const img = document.createElement("img"); img.src = photo; img.alt = "Podgląd produktu"; img.style.borderRadius = "8px"; thumbnailContainer.appendChild(img); } const nameDiv = document.getElementById("product-name") const infoCard = document.querySelector(".product-info-card__header h2") nameDiv.innerHTML = infoCard.innerHTML const selectColor = document.getElementById("select_attributes_color") if(selectColor) { selectColor.addEventListener("change", this.colorChanged) } } colorChanged(e) { const color = e.target.value; const selectedColor = calculatorScriptVariables.productInfo.productBaseInfo.attributes.color.find(c => { return c.attributes === color; }); if (!selectedColor) { console.warn("Nie znaleziono koloru:", color); return; } const img = document.createElement("img"); img.src = selectedColor.image; img.alt = "Podgląd produktu"; img.style.borderRadius = "8px"; const photoContainer = document.getElementById("attributes-photo"); photoContainer.innerHTML = ""; photoContainer.appendChild(img); const sku = selectedColor.image.split('/').at(-1).split('.')[0] const invent = calculatorScriptVariables.productInfo.inventory invent.forEach(inv => { if(inv.type === "central_stock" && inv.sku == sku) { document.getElementById("stock").innerHTML = "Ilość w magazynie " + inv.amount + " szt." if (inv.amount < 50) { document.getElementById("add_to_cart_button").disabled = true; document.getElementById("add_to_cart_button").value = "Niedostępne"; document.getElementById("add_to_cart_button").classList.add("unavailable"); } else { document.getElementById("add_to_cart_button").disabled = false; document.getElementById("add_to_cart_button").value = "Dodaj do koszyka"; document.getElementById("add_to_cart_button").classList.remove("unavailable"); } } }) } } document.addEventListener("DOMContentLoaded", function () { var productCalculator = new PandaCalculator(calculatorScriptVariables.productInfo); productCalculator.init("#options", "#technology", "#select_image", '#total_price'); var information = new ShowInformation(); });