fix: Улучшения системы ценообразования комплектов
Исправлены 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>
This commit is contained in:
104
TESTING_REPORT.md
Normal file
104
TESTING_REPORT.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# Тестирование системы инвентаризации
|
||||
|
||||
## Статус: ✅ ВСЕ ТЕСТЫ ПРОЙДЕНЫ
|
||||
|
||||
### 1. FIFO Логика ✅
|
||||
|
||||
**Тест:** Создание 3 приходов с разными ценами и списание через FIFO
|
||||
|
||||
**Результат:**
|
||||
- ✅ StockBatches создаются автоматически при Incoming (сигнал)
|
||||
- ✅ Продажа автоматически применяет FIFO (сигнал)
|
||||
- ✅ Распределение по партиям корректно: старые партии списываются первыми
|
||||
- ✅ SaleBatchAllocation корректно отслеживают распределение
|
||||
|
||||
**Примеры:**
|
||||
```
|
||||
Приход 1: 10 шт @ 100
|
||||
Приход 2: 15 шт @ 120
|
||||
Приход 3: 20 шт @ 150
|
||||
|
||||
Продажа 1: 18 шт @ 250
|
||||
→ Allocation: 10 (от batch1) + 8 (от batch2)
|
||||
|
||||
Продажа 2: 20 шт @ 250
|
||||
→ Allocation: 7 (от batch2) + 13 (от batch3)
|
||||
```
|
||||
|
||||
### 2. Сигналы на заказы ✅
|
||||
|
||||
**Тест:** Создание заказа, изменение статуса на "in_delivery"
|
||||
|
||||
**Результат:**
|
||||
- ✅ Заказ создан и содержит товар
|
||||
- ✅ При смене статуса на "in_delivery" автоматически создается Sale
|
||||
- ✅ Sale автоматически обрабатывается с FIFO
|
||||
- ✅ SaleBatchAllocation создаются автоматически
|
||||
|
||||
### 3. Инвентаризация (Reconciliation) ✅
|
||||
|
||||
**Тест:** Физический подсчёт с дефицитом
|
||||
|
||||
**Результат:**
|
||||
- ✅ Inventory создаётся и принимает InventoryLines
|
||||
- ✅ При завершении Inventory (status='completed') автоматически обрабатывается (сигнал)
|
||||
- ✅ Дефицит (разница < 0) автоматически создает WriteOff по FIFO
|
||||
- ✅ Stock коррегируется для совпадения с физическим подсчётом
|
||||
|
||||
**Пример:**
|
||||
```
|
||||
Система имела: 7 шт
|
||||
Физический подсчёт: 5 шт
|
||||
Разница: -2 шт
|
||||
|
||||
Результат:
|
||||
→ WriteOff создан на 2 шт
|
||||
→ Stock уменьшен до 5 шт
|
||||
```
|
||||
|
||||
### 4. Django Admin ✅
|
||||
|
||||
**Проверено:**
|
||||
- ✅ StockBatchAdmin показывает quantity с цветовой кодировкой:
|
||||
- Красный (≤0)
|
||||
- Оранжевый (<10)
|
||||
- Зелёный (≥10)
|
||||
- ✅ SaleAdmin показывает inline SaleBatchAllocations
|
||||
- ✅ Статус обработки Sale отображается с визуальным индикатором
|
||||
- ✅ WriteOffAdmin показывает причины списания
|
||||
|
||||
## Архитектура
|
||||
|
||||
### Модели
|
||||
- **StockBatch**: Партия товара с FIFO датой создания
|
||||
- **Incoming**: Приход → автоматически создает StockBatch (сигнал)
|
||||
- **Sale**: Продажа → автоматически применяет FIFO (сигнал)
|
||||
- **SaleBatchAllocation**: Отслеживание какие батчи использованы в продаже
|
||||
- **Inventory/InventoryLine**: Физический подсчёт
|
||||
- **WriteOff**: Списание при дефиците (автоматическое по FIFO)
|
||||
- **Reservation**: Резервирование при создании заказа
|
||||
|
||||
### Сигналы (Автоматизация)
|
||||
1. **create_stock_batch_on_incoming**: Создает StockBatch при Incoming
|
||||
2. **process_sale_fifo**: Применяет FIFO при создании Sale
|
||||
3. **create_sale_on_order_shipment**: Создает Sale при смене статуса заказа на "in_delivery"
|
||||
4. **reserve_stock_on_order_create**: Резервирует товар при создании заказа
|
||||
5. **process_inventory_reconciliation**: Обрабатывает инвентаризацию при завершении
|
||||
|
||||
## Исправленные ошибки
|
||||
|
||||
1. **Двойной вызов сигнала на Sale**: Использован `update()` вместо `save()` чтобы избежать повторного срабатывания
|
||||
2. **WriteOff не создавался при инвентаризации**: Добавлен сигнал на Inventory
|
||||
3. **StockBatch не создавались при Incoming**: Добавлен сигнал на Incoming
|
||||
|
||||
## Готовность к продакшену
|
||||
|
||||
✅ FIFO логика работает корректно
|
||||
✅ Все основные операции автоматизированы через сигналы
|
||||
✅ Admin интерфейс полностью функционален
|
||||
✅ Данные консистентны между таблицами
|
||||
✅ Система многотенантная (работает в рамках каждого тенанта)
|
||||
|
||||
---
|
||||
|
||||
Дата тестирования: 2025-10-27
|
||||
Reference in New Issue
Block a user