From 676cfad401ee33677d3689492d0bc995345fa4c0 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Fri, 2 Jan 2026 18:41:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B5=D0=B4=D0=B8=D0=BD=D0=B8=D1=86?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлена функция loadAndDisplaySalesUnitsFromHidden для загрузки UI единиц продажи из черновика - При загрузке товара из черновика теперь автоматически отображается и устанавливается сохранённая единица продажи - Теперь при открытии отложенного заказа с 0.3 кг корректно отображается килограмм, а не базовая единица --- .../orders/templates/orders/order_form.html | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index dedf67e..28509e9 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -1951,6 +1951,17 @@ document.addEventListener('DOMContentLoaded', function() { console.log(`[Order Items] 💰 Оригинальная цена сохранена: ${item.actual_price}`); } + // Если это товар с единицами продажи, загружаем их UI + if (type === 'product' && typeof window.loadAndDisplaySalesUnitsFromHidden === 'function') { + const form = selectElement.closest('.order-item-form'); + const salesUnitId = salesUnitField ? salesUnitField.value : null; + + if (salesUnitId) { + console.log(`[Order Items] 📏 Загрузка единиц продажи, сохранённая единица: ${salesUnitId}`); + window.loadAndDisplaySalesUnitsFromHidden(id, form, item, salesUnitId); + } + } + console.log(`[Order Items] 🎉 Товар успешно загружен: ${optionText}`); // Пересчитываем сумму товаров @@ -1975,6 +1986,87 @@ document.addEventListener('DOMContentLoaded', function() { console.log('[Order Items] Инициализация всех существующих элементов завершена'); + /** + * Загружает и отображает единицы продажи для товара из черновика + * @param {string} productId - ID товара + * @param {HTMLElement} form - Элемент формы + * @param {Object} productData - Данные товара + * @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; + } + + var salesUnitContainer = form.querySelector('.sales-unit-container'); + if (!salesUnitContainer) { + console.warn('[Sales Units] Контейнер .sales-unit-container не найден'); + return; + } + + // Показываем индикатор загрузки + salesUnitContainer.innerHTML = '
Загрузка...
'; + salesUnitContainer.style.display = 'block'; + + try { + // Загружаем единицы через API + const result = await window.SalesUnitsModule.fetchSalesUnits(productId); + if (!result.success || !result.sales_units || result.sales_units.length === 0) { + salesUnitContainer.style.display = 'none'; + return; + } + + const salesUnits = result.sales_units; + console.log('[Sales Units] Загружено единиц:', salesUnits.length); + + // Создаем select с единицами + var selectHtml = window.SalesUnitsModule.createSalesUnitSelect(salesUnits); + salesUnitContainer.innerHTML = ` + + ${selectHtml} +
+ `; + salesUnitContainer.style.display = 'block'; + + // Находим созданный select и скрытое поле + var salesUnitSelect = salesUnitContainer.querySelector('.sales-unit-selector'); + var hiddenSalesUnitField = form.querySelector('[name$="-sales_unit"]'); + + if (salesUnitSelect && hiddenSalesUnitField) { + // Синхронизируем visible select с hidden field + salesUnitSelect.addEventListener('change', function() { + hiddenSalesUnitField.value = salesUnitSelect.value; + }); + + // Инициализируем обработчики + window.SalesUnitsModule.initializeSalesUnitHandlers(form); + + // Устанавливаем сохранённую единицу + if (savedSalesUnitId) { + salesUnitSelect.value = savedSalesUnitId; + hiddenSalesUnitField.value = savedSalesUnitId; + salesUnitSelect.dispatchEvent(new Event('change')); + console.log('[Sales Units] Установлена сохранённая единица:', savedSalesUnitId); + } else { + // Устанавливаем дефолтную единицу + const defaultUnit = salesUnits.find(u => u.is_default); + if (defaultUnit) { + salesUnitSelect.value = defaultUnit.id; + hiddenSalesUnitField.value = defaultUnit.id; + salesUnitSelect.dispatchEvent(new Event('change')); + } + } + } + } catch (error) { + console.error('[Sales Units] Ошибка загрузки:', error); + salesUnitContainer.innerHTML = 'Ошибка загрузки единиц продажи'; + } + }; + // Переинициализация для форм, которые могут быть добавлены позже // Используем MutationObserver для отслеживания новых форм if (typeof MutationObserver !== 'undefined') {