<!--КОД ДЛЯ ОПТОВОЙ ПРОДАЖИ-->

<script>
const sizeLabel = 'Выберите формат упаковки';

document.addEventListener("DOMContentLoaded", function() {
    
    
    (function () {
        
        let snippetSearchRepeat = 0;
        let tistore = setInterval(function() {
                const productListNum = document.querySelector('.t-store__product-snippet');
                if(productListNum) {
                    if(productListNum.hasAttribute("data-product-url")){
                        clearInterval(tistore);
                        сalculateProductsTotal();
                    };
                };
                snippetSearchRepeat++;
                if(snippetSearchRepeat>50) clearInterval(tistore);
        }, 100);   
        
        
        const gridCont = document.querySelectorAll(".js-store-grid-cont");
        gridCont.forEach(function (el, index) {
            el.addEventListener('tStoreRendered',function(e) {
                сalculateProductsTotal();
            });    
        });
        
        
        const singleProducts = document.querySelectorAll(".js-product-single");
        singleProducts.forEach(function (el, index) {
            el.addEventListener('tStoreSingleProductsLoaded',function(e) {
                сalculateProductsTotal();
            });    
        });
        
        
        //Изменяем начальное кол-во товара в поле ввода
        function сalculateProductsTotal(){
            const inputs = document.querySelectorAll('input.t-store__prod__quantity-input');
            inputs.forEach(input => {
              input.classList.add('input-color-transparent');
            });
            
            
            setTimeout(function(){

                const gridRelevantCont = document.querySelectorAll(".t-store__relevants-grid-cont");
                gridRelevantCont.forEach(function (el, index) {
                    el.addEventListener('tStoreRendered',function(e) {
                        сalculateProductsTotal();
                    });    
                });
                
                const product = document.querySelectorAll(".js-product");
                product.forEach(function (el, index) {
                    
                    //Получаем выбранное кол-во из нашего выпадающего списка
                    const optionsName = el.querySelectorAll('.js-product-option-name');
                    const targetElement = Array.from(optionsName).find(element => {
                      return element.textContent.trim() === sizeLabel;
                    });
                    let step = 1;
                    if(targetElement){
                        const optionWrapper = targetElement.closest('.js-product-option');
                        let size = optionWrapper.querySelector('select').value;
                        size = size.replace(/\D/g, '');
                        size = parseInt(size, 10);
                        if (!isNaN(size) && size > 0) {
                            step = size;
                        };
                    };
                    
                    
                    const input = el.querySelector('.t-store__prod__quantity-input');
                    if (input) {
                        const currentValue = parseInt(input.value) || 0;
                        input.value = step;
                        input.dispatchEvent(new Event('change', { bubbles: true }));
                        createTotalWrapper(el);
                    };
                });
                
                
                
                inputs.forEach(input => {
                  input.classList.remove('input-color-transparent');
                });
                
            }, 300); 
               
        };
        
        //При открытии карточки товара
        document.addEventListener('click', function(event) { 
            if(event.target.closest('a[href*="/tproduct/"]')) сalculateProductsTotal();
            if(event.target.closest('a[href^="#order"]')) сalculateProductsTotal();
        });
        
        //При изменении опций
        document.addEventListener('change', function(event) { 
            if(event.target.closest('.js-product-controls-wrapper')) сalculateProductsTotal();
        });
        
        // Округляем до 2 знаков, затем убираем .00 если они есть
        function formatNumber(num) {
            const rounded = Math.round(num * 100) / 100;
            return rounded % 1 === 0 ? rounded.toString() : rounded.toFixed(2);
        };
        
        
        //Формируем сууму по кол-ву в карточках, где требуется показать такой расчёт
        function createTotalWrapper(product){
            const input = product.querySelector('.t-store__prod__quantity-input');
            if (input) {
                const quant = +input.value;
                const priceWrapper = product.querySelector('.js-store-price-wrapper');
                const price = +priceWrapper.querySelector('.js-product-price').getAttribute('data-product-price-def');
                const total = formatNumber(price*quant);
                
                
                const currency = product.querySelector('div[class*="_price-currency"]').textContent;
                const totalLabel = price+' x '+quant+' = '+total+' '+currency;
                priceWrapper.setAttribute('data-total-label',  totalLabel);
                priceWrapper.classList.add('t-text');
                window.dispatchEvent(new Event('resize', { bubbles: true }));
            };
            
        };
        
        
        
        
        //отслеживаем нажатие по кнопкам + и - в товарных карточках
        document.addEventListener('click', function(event) {
            //Отслеживаем клик по +
            const plusWrapper = event.target.closest('.t-store__prod__quantity__plus-wrapper');
            if (plusWrapper) {
                event.stopImmediatePropagation();
                event.preventDefault();
                let step = 1;
                const product = plusWrapper.closest('.js-product');
                
                
                // const sizeOption = product.querySelector('.js-product-edition-option[data-edition-option-id="'+sizeLabel+'"]');
                // if(sizeOption){
                //     let size = sizeOption.querySelector('select').value;
                //     size = size.replace(/\D/g, '');
                //     size = parseInt(size, 10);
                //     if (!isNaN(size) && size > 0) {
                //         step = size;
                //     };
                // };
                
                
                //Получаем выбранное кол-во из нашего выпадающего списка
                const optionsName = product.querySelectorAll('.js-product-option-name');
                const targetElement = Array.from(optionsName).find(element => {
                    return element.textContent.trim() === sizeLabel;
                });
                if(targetElement){
                    const optionWrapper = targetElement.closest('.js-product-option');
                    let size = optionWrapper.querySelector('select').value;
                    size = size.replace(/\D/g, '');
                    size = parseInt(size, 10);
                    if (!isNaN(size) && size > 0) {
                        step = size;
                    };
                };
                
                
                
                
                const input = plusWrapper.closest('.t-store__prod__quantity').querySelector('.t-store__prod__quantity-input');
                if (input) {
                    const currentValue = parseInt(input.value) || 0;
                    input.value = currentValue + step;
                    input.dispatchEvent(new Event('change', { bubbles: true }));
                    createTotalWrapper(product);
                }
            };
            
            //Отслеживаем клик по -
            const minusWrapper = event.target.closest('.t-store__prod__quantity__minus-wrapper');
            if (minusWrapper) {
                event.stopImmediatePropagation();
                event.preventDefault();
                let step = 1;
                const product = minusWrapper.closest('.js-product');
                
                
                // const sizeOption = product.querySelector('.js-product-edition-option[data-edition-option-id="'+sizeLabel+'"]');
                // if(sizeOption){
                //     let size = sizeOption.querySelector('select').value;
                //     size = size.replace(/\D/g, '');
                //     size = parseInt(size, 10);
                //     if (!isNaN(size) && size > 0) {
                //         step = size;
                //     };
                // };
                
                
                //Получаем выбранное кол-во из нашего выпадающего списка
                const optionsName = product.querySelectorAll('.js-product-option-name');
                const targetElement = Array.from(optionsName).find(element => {
                    return element.textContent.trim() === sizeLabel;
                });
                if(targetElement){
                    const optionWrapper = targetElement.closest('.js-product-option');
                    let size = optionWrapper.querySelector('select').value;
                    size = size.replace(/\D/g, '');
                    size = parseInt(size, 10);
                    if (!isNaN(size) && size > 0) {
                        step = size;
                    };
                };
                
                
                
                const input = minusWrapper.closest('.t-store__prod__quantity').querySelector('.t-store__prod__quantity-input');
                if (input) {
                    const currentValue = parseInt(input.value) || 0;
                    if((+input.value)>step){
                        input.value = currentValue - step;
                    };
                    
                    
                    input.dispatchEvent(new Event('change', { bubbles: true }));
                    createTotalWrapper(product);
                }
            }
            
        }, true); 
        
        
        //Дожидаемся корзину
        t_onReady(function() {
            setTimeout(function() {
                t_onFuncLoad('tcart__init',function() {
                    changeCartFunction();
                });
            },200);    
        });
        
        
        function changeCartFunction(){
            
            //Кнопка + в корзине
            const originalFunctionCartPlus = tcart__product__plus;
            tcart__product__plus = function(t) {
                let e = t.closest(".t706__product"),
                    r = e.getAttribute("data-cart-product-i");
                    
                let step = 1;
                const titleOption = e.querySelector('.t706__product-title__option');
                if(titleOption){
                    const options = titleOption.querySelectorAll('div');
                    for(let i=0; i<options.length;i++){
                        let optionText = options[i].textContent;
                        if(optionText.includes(sizeLabel)){
                            optionText = optionText.replace(/\D/g, '');
                            optionText = parseInt(optionText, 10);
                            if (!isNaN(optionText) && optionText > 0) {
                                step = optionText;
                            };
                        };
                    };
                };
                
                if ((window.tcart.products[r] || (tcart__syncProductsObject__LStoObj(), null != window.tcart.products[r])) && 
                    (window.tcart.products[r].quantity > 0 && 
                     void 0 !== window.tcart.products[r].inv && 
                     window.tcart.products[r].inv > 0 && 
                     window.tcart.products[r].inv == window.tcart.products[r].quantity)) {
                    alert(tcart_dict("limitReached"));
                } 
                else {
                    
                    window.tcart.products[r].quantity += step;
                    
                    window.tcart.products[r].amount = window.tcart.products[r].price * window.tcart.products[r].quantity;
                    window.tcart.products[r].amount = tcart__roundPrice(window.tcart.products[r].amount);
                    e.querySelector(".t706__product-quantity").innerHTML = window.tcart.products[r].quantity;
                    
                    if ("y" === window.tcart.products[r].single && void 0 !== window.tcart.products[r].portion) {
                        e.querySelector(".t706__product-portion").innerHTML = tcart__showWeight(
                            window.tcart.products[r].quantity * window.tcart.products[r].portion, 
                            window.tcart.products[r].unit
                        );
                    }
                    
                    if (window.tcart.products[r].amount > 0) {
                        e.querySelector(".t706__product-amount").innerHTML = tcart__showPrice(window.tcart.products[r].amount);
                    } else {
                        e.querySelector(".t706__product-amount").innerHTML = "";
                    }
                    tcart__updateTotalProductsinCartObj();
                    tcart__reDrawCartIcon();
                    tcart__reDrawTotal();
                    tcart__saveLocalObj();
                }
            };
            
            
            //Кнопка  - в корзине
            const originalFunctionCartMinus = tcart__product__minus;
            tcart__product__minus = function(t) {
                var e = t.closest(".t706__product"),
                    r = e.getAttribute("data-cart-product-i");
                
                
                let step = 1;
                const titleOption = e.querySelector('.t706__product-title__option');
                if(titleOption){
                    const options = titleOption.querySelectorAll('div');
                    for(let i=0; i<options.length;i++){
                        let optionText = options[i].textContent;
                        if(optionText.includes(sizeLabel)){
                            optionText = optionText.replace(/\D/g, '');
                            optionText = parseInt(optionText, 10);
                            if (!isNaN(optionText) && optionText > 0) {
                                step = optionText;
                            };
                        };
                    };
                };
                
                
                (window.tcart.products[r] || (tcart__syncProductsObject__LStoObj(), 
                null != window.tcart.products[r])) && (
                    window.tcart.products[r].quantity > 0 && (window.tcart.products[r].quantity-=step),
                    window.tcart.products[r].amount = tcart__roundPrice(
                        window.tcart.products[r].price * window.tcart.products[r].quantity
                    ),
                    
                    window.tcart.products[r].amount > 0 && (
                        e.querySelector(".t706__product-amount").innerHTML = tcart__showPrice(
                            window.tcart.products[r].amount
                        )
                    ),
                    
                    window.tcart.products[r].amount > 0 && 
                    "y" === window.tcart.products[r].single && 
                    void 0 !== window.tcart.products[r].portion && (
                        e.querySelector(".t706__product-portion").innerHTML = tcart__showWeight(
                            window.tcart.products[r].quantity * window.tcart.products[r].portion, 
                            window.tcart.products[r].unit
                        )
                    ),
                    
                    e.querySelector(".t706__product-quantity").innerHTML = window.tcart.products[r].quantity,
                    0 == window.tcart.products[r].quantity && tcart__product__del(t),
                    tcart__updateTotalProductsinCartObj(),
                    tcart__reDrawCartIcon(),
                    tcart__reDrawTotal(),
                    tcart__saveLocalObj()
                )
            };
            
            
            
            
            
            
            

        };
 
    })();    
});    
</script>

<style>

*{
    user-select:none;
}

.input-color-transparent{
    color:transparent;
}    

.t706__cartwin-content {
    max-width: 800px;
}

.js-product .t-product__option-select {
    padding: 8px 30px 8px 14px;
    outline: none;
}

.t-store .t-store__grid-cont .t-product__option-variants {
    width: 100%;
    max-width: none;
}

.js-product .t-product__option-variants:after {
    top: 0px;
}


input.t-store__prod__quantity-input {
    pointer-events: none;
    min-width: 45px;
}



.js-store-price-wrapper:after {
    content: attr(data-total-label);
    display: block;
}

.t1002__product-amount {
    display: none;
}

span.t706__product-quantity {
    pointer-events: none;
}


.t-store__card__textwrapper {
    display: flex;
    flex-direction: column;
}

.js-store-price-wrapper.t-store__card__price-wrapper {
    margin-top: auto;
}

.t-store__card__wrap_all {
    border-radius: 20px;
    overflow: hidden;
}

.t-store .t-store__card__wrap_all .store__card__wrap_txt-and-opts {
    padding-bottom: 10px;
}


.t-store .t-store__grid-cont .t-product__option-variants {
    width: 100%;
    max-width: none;
}

.t-store .t-store__card__wrap_all .t-store__card__btns-wrapper {
    width: 100%;
}

.t-store__card__btns-wrapper.js-store-buttons-wrapper.t-store__card__btns-wrapper--quantity {
    display: flex;
    flex-wrap: wrap;
}

.t-store .t-store__grid-cont a.js-store-prod-btn.t-store__card__btn.t-btn {
    flex-basis: 100%;
}

.t-store .t-store__grid-cont .t-store__prod__quantity {
    flex-grow: 1;
    display: flex;
}

.t-store .t-store__grid-cont input.t-store__prod__quantity-input {
    flex-grow: 1;
}


</style>
Made on
Tilda