Изменения:
- Удалена функция create_temporary_kit из myproject/orders/views.py
- Перенесена в новый сервис myproject/products/services/kit_service.py
- Добавлен API endpoint products:api-temporary-kit-create для создания временных комплектов
- Обновлены URL-ы соответственно
Преимущества:
- Логика временных комплектов теперь находится в соответствующем приложении (products)
- Упрощена архитектура orders приложения
- Сервис может быть переиспользован в других контекстах
- Лучшее разделение ответственности между приложениями
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Views (products/views/productkit_views.py):
- ProductKitMakePermanentView: view для преобразования временного комплекта
* Доступен только для временных комплектов (is_temporary=True)
* Позволяет отредактировать название, описание, категории, теги, цену
* Вызывает метод make_permanent() модели
* Перенаправляет на детальную страницу комплекта после успеха
URLs (products/urls.py):
- /products/kits/<pk>/make-permanent/ - страница преобразования
Templates:
- productkit_make_permanent.html: форма преобразования с составом и ценой
- order_detail.html: добавлена кнопка "Сделать постоянным" для временных комплектов
Теперь флорист может:
1. Увидеть временный комплект в заказе с badge "Временный"
2. Нажать "Сделать постоянным"
3. Отредактировать название, добавить категории
4. Сохранить - комплект появится в каталоге
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Views:
- ProductKitListView: фильтр is_temporary=False
- CombinedProductListView: фильтр is_temporary=False для комплектов
- API search: фильтр is_temporary=False в поиске и популярных
Admin:
- Добавлен фильтр по is_temporary
- Добавлено отображение статуса временного комплекта в списке
- Добавлена ссылка на заказ для временных комплектов
- Добавлен раздел "Временный комплект" в fieldsets
Теперь временные комплекты не показываются в общем каталоге,
но доступны в админке и по прямой ссылке (для заказов).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
При редактировании комплекта поля корректировки цены остаются пустыми,
хотя в БД сохранены корректные значения (price_adjustment_type и value).
Исправлено:
1. Добавлен вызов validateSingleAdjustment() после заполнения полей
- Это отключает остальные поля и помечает валидные
- Реализует логику одного заполненного поля
2. Добавлено логирование в консоль браузера для отладки:
- Показывает какие значения загружены из БД
- Помогает выявить проблемы
Теперь при редактировании:
- Если есть сохранённая корректировка, она отображается
- Остальные поля автоматически отключаются
- Пересчитывается финальная цена
Файл: products/templates/products/productkit_edit.html
Был вызов KitValidator.validate_pricing_method_availability() который
пытался получить атрибут cost_calculation_info - это часть старой
системы ценообразования которая была заменена на новую.
Новая система не требует этой сложной валидации так как просто
вычисляет цену как сумму actual_price компонентов + опциональная корректировка.
Файл: products/views/productkit_views.py
Исправлены 4 проблемы:
1. Расчёт цены первого товара - улучшена валидация в getProductPrice и calculateFinalPrice
2. Отображение actual_price в Select2 вместо обычной цены
3. Количество по умолчанию = 1 для новых форм компонентов
4. Auto-select текста при клике на поле количества для удобства редактирования
Изменённые файлы:
- products/forms.py: добавлен __init__ в KitItemForm для quantity.initial = 1
- products/templates/includes/select2-product-init.html: обновлена formatSelectResult
- products/templates/productkit_create.html: добавлен focus handler для auto-select
- products/templates/productkit_edit.html: добавлен focus handler для auto-select
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
ПРОБЛЕМА:
При создании комплекта с несколькими товарами сохранялся только первый товар.
ПРИЧИНЫ И РЕШЕНИЯ:
1. Неправильный префикс в JavaScript (productkit_create.html)
- Динамически добавляемые формы создавались с префиксом kititem_set-
- Django ожидает префикс kititem-
- ИСПРАВЛЕНО: изменены все name атрибуты с kititem_set- на kititem-
2. NULL constraint для quantity (models.py)
- Поле KitItem.quantity было NOT NULL
- Пустые формы пытались сохраняться с NULL
- ИСПРАВЛЕНО: добавлены null=True, blank=True к полю quantity
3. Неправильная валидация пустых форм (forms.py)
- Не было логики для обработки пустых компонентов
- ИСПРАВЛЕНО: пустые формы получают quantity=None, заполненные требуют quantity>0
4. Неправильный порядок сохранения (productkit_views.py)
- Формсет не имел правильного prefixсе
- ИСПРАВЛЕНО: явно установлен prefix='kititem' везде (get_context_data, form_valid)
✅ РЕЗУЛЬТАТ: Теперь можно создавать комплекты с неограниченным количеством товаров
🧪 ТЕСТИРОВАНО:
- Комплект 0 товаров ✓
- Комплект 1 товар ✓
- Комплект 3 товара ✓
🤖 Generated with Claude Code
Реализован современный двухэтапный подход к созданию комплектов:
**Шаг 1: Создание базовой информации** (productkit_create.html)
- Упрощённая форма только с базовой информацией
- Название, описание, категории, теги
- Фотографии с предпросмотром
- Настройки ценообразования
- Чистый современный UI с breadcrumbs
- Прогрессивное раскрытие (collapsible секции)
**Шаг 2: Добавление товаров** (productkit_edit.html)
- Автоматический redirect после создания
- Работа с товарами через существующий функционал
- Улучшенный заголовок с указанием шага
**Изменения в коде:**
- ProductKitCreateView: упрощён, убраны formsets
- ProductKitUpdateView: использует новый шаблон
- productkit_form.html → productkit_edit.html
- Новый шаблон productkit_create.html
**Преимущества:**
✅ Простая и надёжная логика сохранения
✅ Нет проблем с disabled полями в formsets
✅ Понятный UX с чёткими шагами
✅ Современный дизайн с иконками Bootstrap
✅ Предпросмотр фото перед загрузкой
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>