Initial commit: Django inventory system

This commit is contained in:
2025-10-22 01:11:06 +03:00
commit d78c43d9a9
93 changed files with 9204 additions and 0 deletions

View 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