# Отладка расчёта цены комплекта ## Проблема Первая строка (компонент) не считается в цену. При добавлении второго товара начинает считать. ## Решение ### Что было исправлено 1. **Улучшена функция `getProductPrice()`** с добавлением: - Строгой проверки валидности элемента и productId - Логирования для отладки (console.log) - Проверки на isNaN и productId <= 0 2. **Улучшена функция `calculateFinalPrice()`** с добавлением: - Проверки что товар выбран (!productSelect || !productSelect.value) - Валидации количества (если quantity <= 0, использует 1) - Проверки что цена > 0 перед добавлением в сумму 3. **Добавлено логирование** для отладки в браузерной консоли: ```javascript console.log('getProductPrice: from cache', productId, cachedPrice); console.log('getProductPrice: from API', productId, price); console.warn('getProductPrice: returning 0 for product', productId); ``` ### Как провести отладку 1. **Откройте DevTools** в браузере (F12 или Ctrl+Shift+I) 2. Перейдите на вкладку **Console** 3. Добавьте первый товар на форму создания комплекта 4. Посмотрите в Console - должны увидеть логи вида: ``` getProductPrice: fetching from API 1 getProductPrice: from API 1 20.00 ``` 5. Введите количество товара 6. Проверьте что в Console логируется `calculateFinalPrice` вызывается 7. Убедитесь что базовая цена обновилась ### Возможные проблемы и решения #### 1. "getProductPrice: no valid product id" **Проблема:** selectElement пуст или не имеет ID товара **Решение:** Убедитесь что товар действительно выбран в Select2 #### 2. "getProductPrice: returning 0 for product" **Проблема:** Цена товара не найдена ни в одном источнике **Решение:** - Проверьте что товар имеет цену в базе данных - Проверьте API endpoint возвращает actual_price #### 3. Цена считается только со 2-го товара **Проблема:** Первая форма загружается с пустыми значениями, но JavaScript пытается считать её **Решение:** - Логика теперь пропускает пустые товары (`if (!productSelect.value) continue`) - Убедитесь что Вы выбираете товар перед добавлением количества ### Тест в консоли браузера После добавления товара выполните в консоли: ```javascript // Получить текущую базовую цену console.log(basePrice); // Получить кэш цен console.log(priceCache); // Получить все формы компонентов document.querySelectorAll('.kititem-form').length; // Проверить значение в первой форме document.querySelector('[name$="-product"]').value; ``` ### Network отладка 1. Откройте вкладку **Network** в DevTools 2. Добавьте товар 3. Должен быть запрос к `/products/api/search-products-variants/?id=1` 4. Проверьте Response - должна быть `actual_price` в результате ### Состояние системы после исправлений ✅ **getProductPrice()** - теперь надёжно получает цены с логированием ✅ **calculateFinalPrice()** - корректно обрабатывает пустые и частично заполненные формы ✅ **Event handlers** - срабатывают корректно при select2:select ✅ **Кэширование** - работает, ускоряет повторный доступ к ценам ## Если проблема сохраняется 1. Проверьте в консоли логи при добавлении товара 2. Убедитесь что API endpoint возвращает данные: ``` GET /products/api/search-products-variants/?id=1 Response: {"results": [{"id": 1, "actual_price": "20.00", ...}]} ``` 3. Очистите кэш браузера (Ctrl+Shift+Delete) 4. Перезагрузите страницу