<script>
(function() {
const partUidsExceptions = ['508492596383'];
let isOurFunctionInstalled = false;
function calculateDiscountWithExceptions(totalAmount, products, promo) {
let exceptionsSum = 0;
const productsList = products || window.tcart?.products || [];
for(let i = 0; i < productsList.length; i++) {
const product = productsList[i];
if ("yes" === product.deleted || 0 === Object.keys(product).length) continue;
const cartProductPart = product['part_uids'] ? product['part_uids'].join() : '';
for(let j = 0; j < partUidsExceptions.length; j++) {
if(cartProductPart.includes(partUidsExceptions[j])) {
exceptionsSum += +product.amount;
break;
}
}
}
if (exceptionsSum > 0) {
if (promo?.discountpercent > 0) {
const percent = +promo.discountpercent;
const discountableAmount = totalAmount - exceptionsSum;
const newDiscount = tcart_ceil(discountableAmount * percent / 100);
const newTotal = tcart_ceil(totalAmount - newDiscount);
return {
discount: newDiscount,
total: newTotal
};
}
if (promo?.discountsum > 0) {
const discountSum = +promo.discountsum;
const discountableAmount = totalAmount - exceptionsSum;
const newDiscount = Math.min(discountSum, discountableAmount);
const newTotal = tcart_ceil(totalAmount - newDiscount);
return {
discount: newDiscount,
total: newTotal
};
}
}
return null;
}
function updateDisplay(discount, total) {
try {
const elements = document.querySelectorAll(".t-inputpromocode__wrapper .t706__cartwin-prodamount-price");
if (elements.length >= 2) {
const lastElement = elements[elements.length - 2];
if (lastElement) {
lastElement.innerHTML = discount;
}
}
const totalElements = document.querySelectorAll(".t706__cartwin-totalamount");
if (totalElements.length > 0 && total !== undefined) {
totalElements.forEach(el => {
if (typeof tcart__showPrice === 'function') {
el.innerHTML = tcart__showPrice(total, "acceptzero");
} else {
el.innerHTML = total;
}
});
}
} catch(e) {}
}
function interceptCartCalculatorPromocode() {
if (!window.CartCalculator || !window.CartCalculator.prototype) {
return false;
}
const proto = window.CartCalculator.prototype;
if (typeof proto._calcPromocode !== 'function') {
return false;
}
if (proto._calcPromocode._intercepted) {
return true;
}
const originalCalcPromocode = proto._calcPromocode;
proto._calcPromocode = function(totalAmount, cartData) {
if (cartData?.promocode) {
const promo = cartData.promocode;
const hasDiscount = promo.discountsum > 0 || promo.discountpercent > 0;
if (hasDiscount) {
const customResult = calculateDiscountWithExceptions(
totalAmount,
cartData.products,
promo
);
if (customResult) {
cartData.prodamount_discountsum = customResult.discount;
cartData.prodamount_withdiscount = customResult.total;
cartData.promocode.prodamount_discountsum = customResult.discount;
if (window.tcart) {
window.tcart.prodamount_discountsum = customResult.discount;
window.tcart.prodamount_withdiscount = customResult.total;
if (window.tcart.promocode) {
window.tcart.promocode.prodamount_discountsum = customResult.discount;
}
}
updateDisplay(customResult.discount, customResult.total);
return customResult.total;
}
}
}
return originalCalcPromocode.call(this, totalAmount, cartData);
};
proto._calcPromocode._intercepted = true;
return true;
}
function interceptCartCalculatorConstructor() {
if (!window.CartCalculator) {
return false;
}
if (window.CartCalculator._intercepted) {
return true;
}
const OriginalCartCalculator = window.CartCalculator;
window.CartCalculator = function(...args) {
const instance = new OriginalCartCalculator(...args);
if (instance && typeof instance._calcPromocode === 'function') {
const originalInstanceCalc = instance._calcPromocode;
instance._calcPromocode = function(totalAmount, cartData) {
if (cartData?.promocode) {
const promo = cartData.promocode;
const hasDiscount = promo.discountsum > 0 || promo.discountpercent > 0;
if (hasDiscount) {
const customResult = calculateDiscountWithExceptions(
totalAmount,
cartData.products,
promo
);
if (customResult) {
cartData.prodamount_discountsum = customResult.discount;
cartData.prodamount_withdiscount = customResult.total;
if (cartData.promocode) {
cartData.promocode.prodamount_discountsum = customResult.discount;
}
if (window.tcart) {
window.tcart.prodamount_discountsum = customResult.discount;
window.tcart.prodamount_withdiscount = customResult.total;
}
updateDisplay(customResult.discount, customResult.total);
return customResult.total;
}
}
}
return originalInstanceCalc.call(this, totalAmount, cartData);
};
instance._calcPromocode._intercepted = true;
}
return instance;
};
Object.assign(window.CartCalculator, OriginalCartCalculator);
window.CartCalculator.prototype = OriginalCartCalculator.prototype;
window.CartCalculator._intercepted = true;
return true;
}
function installCustomFunction() {
if (isOurFunctionInstalled) {
return true;
}
interceptCartCalculatorConstructor();
interceptCartCalculatorPromocode();
isOurFunctionInstalled = true;
setTimeout(function() {
if (window.tcart__updateTotalProductsinCartObj) {
window.tcart__updateTotalProductsinCartObj();
} else if (window.tcart && window.cartCalculator) {
window.cartCalculator.updateProductsData(window.tcart);
}
}, 300);
return true;
}
var attempts = 0;
var maxAttempts = 30;
function tryInstall() {
attempts++;
if (installCustomFunction()) {
return true;
}
if (attempts < maxAttempts) {
setTimeout(tryInstall, 200);
}
return false;
}
setTimeout(tryInstall, 100);
document.addEventListener('DOMContentLoaded', function() { setTimeout(tryInstall, 300); });
window.addEventListener('load', function() { setTimeout(tryInstall, 300); });
})();
</script>