diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index 141407a..150c79b 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -1394,13 +1394,14 @@ document.addEventListener('DOMContentLoaded', function() { toggleRecipientFields(); // === РАСЧЁТ ИТОГОВОЙ СУММЫ ТОВАРОВ === - function calculateOrderItemsTotal() { + // Вычисление суммы по всем видимым позициям + function calculateTotal() { const visibleForms = Array.from(document.querySelectorAll('.order-item-form')) .filter(form => !form.classList.contains('deleted')); let total = 0; - visibleForms.forEach((form, index) => { + visibleForms.forEach((form) => { const quantityField = form.querySelector('[name$="-quantity"]'); const priceField = form.querySelector('[name$="-price"]'); @@ -1415,8 +1416,9 @@ document.addEventListener('DOMContentLoaded', function() { return total; } - function updateOrderItemsTotal() { - const total = calculateOrderItemsTotal(); + // Обновление отображения суммы в DOM + function updateTotalDisplay() { + const total = calculateTotal(); const totalElement = document.getElementById('order-items-total-value'); if (totalElement) { @@ -1424,8 +1426,10 @@ document.addEventListener('DOMContentLoaded', function() { } } - // Делаем функцию глобальной для вызова из других скриптов - window.updateOrderItemsTotal = updateOrderItemsTotal; + // Публичная функция для вызова из других скриптов (черновики, AJAX) + window.updateOrderItemsTotal = function() { + updateTotalDisplay(); + }; // Функция для инициализации отслеживания изменения цены function initPriceTracking(form) { @@ -1466,11 +1470,11 @@ document.addEventListener('DOMContentLoaded', function() { } // Добавляем слушатели для обновления итоговой суммы - priceField.addEventListener('input', updateOrderItemsTotal); + priceField.addEventListener('input', updateTotalDisplay); const quantityField = form.querySelector('[name$="-quantity"]'); if (quantityField) { - quantityField.addEventListener('input', updateOrderItemsTotal); + quantityField.addEventListener('input', updateTotalDisplay); } } @@ -1512,7 +1516,7 @@ document.addEventListener('DOMContentLoaded', function() { removeForm(newForm); }); - updateOrderItemsTotal(); + updateTotalDisplay(); return newForm; } @@ -1530,13 +1534,13 @@ document.addEventListener('DOMContentLoaded', function() { deleteCheckbox.checked = true; form.classList.add('deleted'); form.style.display = 'none'; - updateOrderItemsTotal(); + updateTotalDisplay(); if (typeof window.orderAutosave !== 'undefined' && window.orderAutosave.scheduleAutosave) { window.orderAutosave.scheduleAutosave(); } } else { form.remove(); - updateOrderItemsTotal(); + updateTotalDisplay(); } } @@ -1557,7 +1561,7 @@ document.addEventListener('DOMContentLoaded', function() { } // Инициализируем итоговую сумму - updateOrderItemsTotal(); + updateTotalDisplay(); // Валидация перед отправкой document.getElementById('order-form').addEventListener('submit', function(e) { @@ -2241,22 +2245,8 @@ if (!document.getElementById('notification-styles')) { console.log(`[Order Items] 🎉 Товар успешно загружен: ${optionText}`); // Пересчитываем сумму товаров - console.log('[Order Items] 📊 Попытка пересчёта суммы...'); - console.log('[Order Items] updateOrderItemsTotal доступен?', typeof updateOrderItemsTotal); - if (typeof updateOrderItemsTotal === 'function') { - console.log('[Order Items] ✅ Вызов updateOrderItemsTotal()'); - updateOrderItemsTotal(); - } else { - console.warn('[Order Items] ⚠️ updateOrderItemsTotal не найдена! Попытка найти позже...'); - // Попробуем позже - setTimeout(() => { - if (typeof updateOrderItemsTotal === 'function') { - console.log('[Order Items] ✅ Вызов updateOrderItemsTotal() (повторная попытка)'); - updateOrderItemsTotal(); - } else { - console.error('[Order Items] ❌ updateOrderItemsTotal так и не найдена!'); - } - }, 500); + if (typeof window.updateOrderItemsTotal === 'function') { + window.updateOrderItemsTotal(); } } else { console.warn(`[Order Items] ⚠️ API вернул пустой массив results`);