<script>
(function() {
const partUidsExceptions = ['508492596383'];
let isOurFunctionInstalled = false;
function customTcartCalcPromocode(t) {
if ("object" != typeof window.tcart.promocode) {
delete window.tcart.prodamount_discountsum;
delete window.tcart.prodamount_withdiscount;
return t;
}
if (!(window.tcart.promocode.discountsum > 0 || window.tcart.promocode.discountpercent > 0)) {
console.error("Cart Some error.");
return t;
}
var e = 0,
r = 0,
o = !1,
a = window.tcart.prodamount;
if (window.t_cart__discounts && window.t_cart__discounts.length > 0 && void 0 !== window.tcart.prodamount_withdyndiscount) {
a = window.tcart.prodamount_withdyndiscount;
}
window.tcart.products.forEach((function(t) {
if ("yes" !== t.deleted && 0 !== Object.keys(t).length) {
var n = "",
i = t.price,
c = t.amount,
d = !1,
s = parseInt(t.portion, 10);
if (window.t_cart__discounts && window.t_cart__discounts.length > 0 && void 0 !== t.amount_withdiscount) {
i = t.price_withdiscount;
c = t.amount_withdiscount;
}
if (t.portion) {
i /= s;
d = !0;
window.showdiscountdata && console.log("start price for one portion (" + t.portion + ") - " + i);
}
if (window.tcart.promocode.discountsum > 0) {
n = tcart_ceil(i * (1 - window.tcart.promocode.discountsum / a));
} else if (window.tcart.promocode.discountpercent > 0) {
n = tcart_ceil(i * (1 - window.tcart.promocode.discountpercent / 100));
}
1 * t.quantity != 1 || t.portion || (o = !0);
if (d && (window.showdiscountdata && console.log("For one portion: " + i + " -> " + n), n = tcart_ceil(n * s)));
var l = tcart_ceil(n * t.quantity);
e += tcart_ceil(c - l);
r = tcart_ceil(1 * r + l);
window.showdiscountdata && console.log((d ? i * t.portion : i) + " -> " + n + " = " + e);
}
}));
e = tcart_ceil(e);
if (window.tcart.promocode.discountsum > 0) {
var n = 1 * window.tcart.promocode.discountsum - 1 * e;
window.showdiscountdata && console.log(window.tcart.promocode.discountsum, e, n);
o && n > 0 && (r = tcart_ceil(t - window.tcart.promocode.discountsum), e = window.tcart.promocode.discountsum);
}
const productsList = window.tcart.products;
let exceptionsProductsSumm = 0;
for(let i = 0; i < productsList.length; i++) {
const cartProductPart = productsList[i]['part_uids'] ? productsList[i]['part_uids'].join() : '';
for(let j = 0; j < partUidsExceptions.length; j++) {
if(cartProductPart.includes(partUidsExceptions[j])) {
exceptionsProductsSumm += +productsList[i].amount;
}
}
}
if(window.tcart.promocode != undefined) {
if(window.tcart.promocode.discountpercent != undefined && exceptionsProductsSumm > 0) {
let percent = +window.tcart.promocode.discountpercent;
e = tcart_ceil((t - exceptionsProductsSumm) * percent * 0.01);
r = tcart_ceil(t - e);
}
}
r < 0 && (r = 0);
window.tcart.prodamount_discountsum = e;
window.tcart.prodamount_withdiscount = r;
window.tcart.promocode.prodamount_discountsum = e;
var i = document.querySelector(".t-inputpromocode__wrapper .t706__cartwin-prodamount-price:nth-last-child(2)");
i && (i.innerHTML = e);
return r;
}
function installCustomFunction() {
if (isOurFunctionInstalled) return;
if (window.tcart && typeof window.tcart === 'object') {
console.log('Устанавливаем кастомную функцию расчета промокода');
window._originalTcartCalc = window.tcart__calcPromocode;
window.tcart__calcPromocode = customTcartCalcPromocode;
isOurFunctionInstalled = true;
Object.defineProperty(window, 'tcart__calcPromocode', {
configurable: false,
writable: false,
value: customTcartCalcPromocode
});
return true;
}
return false;
}
if (!installCustomFunction()) {
const intervalId = setInterval(function() {
if (installCustomFunction()) {
clearInterval(intervalId);
}
}, 100);
const observer = new MutationObserver(function(mutations) {
if (window.tcart && typeof window.tcart === 'object') {
installCustomFunction();
}
mutations.forEach(function(mutation) {
if (mutation.type === 'childList') {
mutation.addedNodes.forEach(function(node) {
if (node.nodeName === 'SCRIPT' && node.src && node.src.includes('tcart')) {
setTimeout(installCustomFunction, 100);
}
});
}
});
});
observer.observe(document.documentElement, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['src']
});
let originalDefineProperty = Object.defineProperty;
Object.defineProperty = function(obj, prop, descriptor) {
if (obj === window && prop === 'tcart__calcPromocode' && !isOurFunctionInstalled) {
return originalDefineProperty.call(Object, obj, prop, {
configurable: false,
writable: false,
value: customTcartCalcPromocode
});
}
return originalDefineProperty.call(Object, obj, prop, descriptor);
};
}
document.addEventListener('DOMContentLoaded', function() {
installCustomFunction();
});
window.addEventListener('load', function() {
installCustomFunction();
});
console.log('Скрипт перехвата функции корзины инициализирован');
})();
</script>