Files
octopus/myproject/docs/README_VARIANTS.md

161 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Система вариантов товаров - Краткое руководство
## Что реализовано
Система позволяет создавать букеты с гибкими заменами компонентов. Каждый букет может иметь свои индивидуальные приоритеты для одной и той же группы товаров.
## Новые модели
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