diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index 28509e9..a74bebe 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -1828,20 +1828,30 @@ document.addEventListener('DOMContentLoaded', function() { console.log('[Order Items] jQuery доступен?', typeof $ !== 'undefined'); console.log('[Order Items] initOrderItemSelect2 доступен?', typeof window.initOrderItemSelect2 === 'function'); console.log('[Order Items] initProductSelect2 доступен?', typeof window.initProductSelect2 === 'function'); - + // Проверяем все зависимости if (typeof $ === 'undefined') { console.log('[Order Items] Ожидание загрузки jQuery...'); setTimeout(initExistingOrderItems, 100); return; } - + if (typeof window.initOrderItemSelect2 !== 'function') { console.log('[Order Items] Ожидание загрузки initOrderItemSelect2 из select2-product-search.js...'); setTimeout(initExistingOrderItems, 100); return; } + // Если есть черновик из POS, ждём пока его поля будут заполнены + {% if draft_items_json %} + if (!window._draftFieldsFilled) { + console.log('[Order Items] ⏳ Ожидание заполнения полей черновика из POS...'); + setTimeout(initExistingOrderItems, 50); + return; + } + console.log('[Order Items] ✅ Поля черновика заполнены, продолжаем инициализацию'); + {% endif %} + // Все зависимости готовы console.log('[Order Items] Все зависимости готовы, запуск инициализации...'); const items = document.querySelectorAll('.select2-order-item'); @@ -1879,46 +1889,21 @@ document.addEventListener('DOMContentLoaded', function() { const kitField = form.querySelector('[name$="-product_kit"]'); const priceField = form.querySelector('[name$="-price"]'); - console.log(`[Order Items] 🔍 Форма ${index}:`); - console.log(` - productField найдено:`, !!productField); - console.log(` - productField.value:`, productField ? productField.value : 'N/A'); - console.log(` - kitField найдено:`, !!kitField); - console.log(` - kitField.value:`, kitField ? kitField.value : 'N/A'); - console.log(` - priceField найдено:`, !!priceField); - console.log(` - priceField.value:`, priceField ? priceField.value : 'N/A'); - // Если есть предзаполненный product или kit, но select пустой const hasProduct = productField && productField.value; const hasKit = kitField && kitField.value; const selectValue = $(selectElement).val(); - console.log(`[Order Items] 🎯 Проверка условий для формы ${index}:`); - console.log(` - hasProduct:`, hasProduct); - console.log(` - hasKit:`, hasKit); - console.log(` - selectValue:`, selectValue); - console.log(` - Нужна загрузка?`, (hasProduct || hasKit) && !selectValue); - if ((hasProduct || hasKit) && !selectValue) { - console.log(`[Order Items] ⚡ НАЙДЕНЫ предзаполненные данные в форме ${index}!`); - // Определяем тип и ID const type = hasProduct ? 'product' : 'kit'; const id = hasProduct ? productField.value : kitField.value; const price = priceField ? priceField.value : ''; - console.log(`[Order Items] 📦 Загрузка товара:`); - console.log(` - Тип: ${type}`); - console.log(` - ID: ${id}`); - console.log(` - Цена: ${price}`); - // Загружаем данные товара через API const apiUrl = '{% url "products:api-search-products-variants" %}'; const requestId = `${type}_${id}`; - console.log(`[Order Items] 🌐 Отправка AJAX запроса:`); - console.log(` - URL: ${apiUrl}`); - console.log(` - ID параметр: ${requestId}`); - $.ajax({ url: apiUrl, type: 'GET', @@ -1927,20 +1912,11 @@ document.addEventListener('DOMContentLoaded', function() { id: requestId }, success: function(data) { - console.log(`[Order Items] ✅ Ответ API получен для формы ${index}:`, data); - if (data.results && data.results.length > 0) { const item = data.results[0]; - console.log(`[Order Items] 📦 Данные товара:`, item); - - // Создаём option с данными товара const optionValue = `${type}_${id}`; const optionText = item.text || item.name || 'Товар'; - console.log(`[Order Items] ➕ Создание option:`); - console.log(` - value: ${optionValue}`); - console.log(` - text: ${optionText}`); - // Добавляем option в select const newOption = new Option(optionText, optionValue, true, true); $(selectElement).append(newOption).trigger('change'); @@ -1948,39 +1924,29 @@ document.addEventListener('DOMContentLoaded', function() { // Сохраняем оригинальную цену if (priceField && item.actual_price) { priceField.dataset.originalPrice = item.actual_price; - console.log(`[Order Items] 💰 Оригинальная цена сохранена: ${item.actual_price}`); } // Если это товар с единицами продажи, загружаем их UI if (type === 'product' && typeof window.loadAndDisplaySalesUnitsFromHidden === 'function') { const form = selectElement.closest('.order-item-form'); + const salesUnitField = form.querySelector('[name$="-sales_unit"]'); const salesUnitId = salesUnitField ? salesUnitField.value : null; if (salesUnitId) { - console.log(`[Order Items] 📏 Загрузка единиц продажи, сохранённая единица: ${salesUnitId}`); window.loadAndDisplaySalesUnitsFromHidden(id, form, item, salesUnitId); } } - console.log(`[Order Items] 🎉 Товар успешно загружен: ${optionText}`); - // Пересчитываем сумму товаров if (typeof window.updateOrderItemsTotal === 'function') { window.updateOrderItemsTotal(); } - } else { - console.warn(`[Order Items] ⚠️ API вернул пустой массив results`); } }, error: function(xhr, status, error) { - console.error(`[Order Items] ❌ Ошибка AJAX запроса для формы ${index}:`); - console.error(` - Status: ${status}`); - console.error(` - Error: ${error}`); - console.error(` - Response:`, xhr.responseText); + console.error(`[Order Items] Ошибка загрузки товара ${requestId}:`, error); } }); - } else { - console.log(`[Order Items] ⏭️ Форма ${index} пропущена (нет данных или select уже заполнен)`); } }); @@ -1994,26 +1960,15 @@ document.addEventListener('DOMContentLoaded', function() { * @param {string} savedSalesUnitId - Сохранённый ID единицы продажи */ window.loadAndDisplaySalesUnitsFromHidden = async function(productId, form, productData, savedSalesUnitId) { - console.log('[Sales Units] Загрузка единиц продажи для товара из черновика:', productId); - - // Проверяем наличие модуля - if (typeof window.SalesUnitsModule === 'undefined') { - console.warn('[Sales Units] SalesUnitsModule не загружен'); - return; - } + if (typeof window.SalesUnitsModule === 'undefined') return; var salesUnitContainer = form.querySelector('.sales-unit-container'); - if (!salesUnitContainer) { - console.warn('[Sales Units] Контейнер .sales-unit-container не найден'); - return; - } + if (!salesUnitContainer) return; - // Показываем индикатор загрузки salesUnitContainer.innerHTML = '