Initial commit: Django inventory system
This commit is contained in:
160
myproject/docs/README_VARIANTS.md
Normal file
160
myproject/docs/README_VARIANTS.md
Normal file
@@ -0,0 +1,160 @@
|
||||
# Система вариантов товаров - Краткое руководство
|
||||
|
||||
## Что реализовано
|
||||
|
||||
Система позволяет создавать букеты с гибкими заменами компонентов. Каждый букет может иметь свои индивидуальные приоритеты для одной и той же группы товаров.
|
||||
|
||||
## Новые модели
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user