Files
octopus/TESTING_REPORT.md
Andrey Smakotin 6c8af5ab2c 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>
2025-11-02 19:04:03 +03:00

4.9 KiB
Raw Blame History

Тестирование системы инвентаризации

Статус: ВСЕ ТЕСТЫ ПРОЙДЕНЫ

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