161 lines
6.2 KiB
Markdown
161 lines
6.2 KiB
Markdown
# Система вариантов товаров - Краткое руководство
|
||
|
||
## Что реализовано
|
||
|
||
Система позволяет создавать букеты с гибкими заменами компонентов. Каждый букет может иметь свои индивидуальные приоритеты для одной и той же группы товаров.
|
||
|
||
## Новые модели
|
||
|
||
1. **ProductVariantGroup** - группа взаимозаменяемых товаров
|
||
2. **KitItemPriority** - приоритеты товаров для конкретной позиции букета
|
||
|
||
## Изменения в существующих моделях
|
||
|
||
1. **Product** - добавлено поле `variant_groups` (M2M)
|
||
2. **KitItem** - добавлены поля `variant_group`, `notes`
|
||
3. **ProductKit** - добавлены методы проверки доступности и расчета цен
|
||
|
||
## Быстрый старт
|
||
|
||
### 1. Запуск демо
|
||
|
||
```bash
|
||
python manage.py demo_variants
|
||
```
|
||
|
||
Это создаст демонстрационные данные и покажет работу системы.
|
||
|
||
### 2. Создание группы вариантов через админку
|
||
|
||
1. Откройте `/admin/`
|
||
2. Перейдите в "Группы вариантов"
|
||
3. Создайте новую группу (например, "Роза красная Freedom")
|
||
4. Откройте товары и добавьте их в группу через поле "Группы вариантов"
|
||
|
||
### 3. Создание букета с вариантами
|
||
|
||
1. Создайте новый комплект
|
||
2. Добавьте позицию:
|
||
- Либо укажите конкретный товар (без замен)
|
||
- Либо укажите группу вариантов (с заменами)
|
||
3. Откройте позицию и настройте приоритеты в разделе "Приоритеты вариантов"
|
||
|
||
## API для разработчиков
|
||
|
||
### Проверка доступности букета
|
||
|
||
```python
|
||
from products.models import ProductKit
|
||
from products.utils.stock_manager import StockManager
|
||
|
||
kit = ProductKit.objects.get(name="Мой букет")
|
||
stock_manager = StockManager()
|
||
|
||
if kit.check_availability(stock_manager):
|
||
print("Букет доступен!")
|
||
price = kit.calculate_price_with_substitutions(stock_manager)
|
||
print(f"Цена: {price}")
|
||
```
|
||
|
||
### Получение лучшего товара для позиции
|
||
|
||
```python
|
||
from products.models import KitItem
|
||
from products.utils.stock_manager import StockManager
|
||
|
||
kit_item = KitItem.objects.get(id=1)
|
||
stock_manager = StockManager()
|
||
|
||
best_product = kit_item.get_best_available_product(stock_manager)
|
||
if best_product:
|
||
print(f"Используем: {best_product.name}")
|
||
```
|
||
|
||
## Файлы документации
|
||
|
||
- [product_variants_guide.md](product_variants_guide.md) - подробное руководство
|
||
- [example_usage.py](example_usage.py) - примеры кода
|
||
|
||
## Интеграция со складом
|
||
|
||
Текущая версия использует заглушку `StockManager`. Для интеграции с реальной системой складского учета:
|
||
|
||
1. Откройте `products/utils/stock_manager.py`
|
||
2. Реализуйте методы:
|
||
- `check_stock(product, quantity)` - проверка остатков
|
||
- `get_available_quantity(product)` - получение доступного количества
|
||
- `reserve_stock(product, quantity, order_id)` - резервирование
|
||
- `release_stock(product, quantity, order_id)` - освобождение
|
||
|
||
## Основные возможности
|
||
|
||
- ✅ Создание групп взаимозаменяемых товаров
|
||
- ✅ Один товар может быть в нескольких группах
|
||
- ✅ Индивидуальные приоритеты для каждого букета
|
||
- ✅ Проверка доступности с учетом замен
|
||
- ✅ Расчет цены с учетом фактически доступных товаров
|
||
- ✅ Валидация данных
|
||
- ✅ Django Admin интерфейс
|
||
- ✅ Документация и примеры
|
||
|
||
## Примеры использования
|
||
|
||
### Премиум букет
|
||
|
||
```
|
||
Позиция: Роза Freedom (группа вариантов) - 15 шт
|
||
Приоритеты:
|
||
0. Роза 70см (200 руб/шт) - первый выбор
|
||
1. Роза 60см (150 руб/шт)
|
||
2. Роза 50см (100 руб/шт)
|
||
|
||
Цена: 15 × 200 = 3000 руб
|
||
```
|
||
|
||
### Эконом букет
|
||
|
||
```
|
||
Позиция: Роза Freedom (группа вариантов) - 15 шт
|
||
Приоритеты:
|
||
0. Роза 50см (100 руб/шт) - первый выбор
|
||
1. Роза 60см (150 руб/шт)
|
||
2. Роза 70см (200 руб/шт)
|
||
|
||
Цена: 15 × 100 = 1500 руб
|
||
```
|
||
|
||
Та же группа товаров, но разные приоритеты и разная цена!
|
||
|
||
## Структура файлов
|
||
|
||
```
|
||
products/
|
||
├── models.py # Модели (обновлено)
|
||
├── admin.py # Админка (обновлено)
|
||
├── utils/
|
||
│ └── stock_manager.py # Менеджер остатков (новый)
|
||
├── management/
|
||
│ └── commands/
|
||
│ └── demo_variants.py # Демонстрация (новая)
|
||
└── migrations/
|
||
└── 0004_productvariantgroup_... # Миграция (новая)
|
||
|
||
docs/
|
||
├── README_VARIANTS.md # Это руководство
|
||
├── product_variants_guide.md # Подробная документация
|
||
└── example_usage.py # Примеры кода
|
||
```
|
||
|
||
## Поддержка
|
||
|
||
Для получения помощи:
|
||
1. Прочитайте [product_variants_guide.md](product_variants_guide.md)
|
||
2. Изучите примеры в [example_usage.py](example_usage.py)
|
||
3. Запустите `python manage.py demo_variants`
|
||
4. Обратитесь к разработчикам
|
||
|
||
---
|
||
|
||
**Версия**: 1.0
|
||
**Дата**: 2025-10-21
|