Files
octopus/TESTING_WRITEOFF_IMPROVEMENTS.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

229 lines
9.6 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.
# Тестирование улучшений WriteOff UI
## Краткая инструкция тестирования
### Подготовка
1. Убедитесь что у вас есть актуальные данные:
- Склад (Warehouse)
- Товар (Product)
- Партия товара (StockBatch) с остатком > 0
2. Откройте страницу: `http://grach.localhost:8000/inventory/writeoffs/create/`
---
## Тест 1: Информация об остатке партии
**Шаги:**
1. Выберите партию из dropdown "Партия"
2. **Ожидаемый результат:**
- Под dropdown появляется серый блок:
```
📋 Остаток в партии: X шт
```
- Где X это количество в выбранной партии
**Проверка:**
- ✅ Блок информации появляется при выборе
- ✅ Блок исчезает если выбрать пустое значение
- ✅ Количество обновляется при смене партии
---
## Тест 2: Реал-тайм предупреждение при превышении
**Шаги:**
1. Выберите партию (например, с остатком 5 шт)
2. Введите в поле "Количество" число МЕНЬШЕ остатка (например, 3)
3. **Ожидаемый результат:** Никаких предупреждений
**Шаги 2:**
1. Введите в поле "Количество" число БОЛЬШЕ остатка (например, 10)
2. **Ожидаемый результат:**
```
⚠️ Внимание! Вы пытаетесь списать 10 шт,
а в партии только 5 шт.
Недостаток: 5 шт.
```
**Проверка:**
- ✅ Предупреждение НЕ появляется при quantity <= batch.quantity
- ✅ Предупреждение ПОЯВЛЯЕТСЯ при quantity > batch.quantity
- ✅ Предупреждение обновляется в реал-тайме при каждом вводе
- ✅ Правильно рассчитывается недостаток (shortage)
---
## Тест 3: Отправка валидных данных
**Шаги:**
1. Выберите партию (остаток = 5 шт)
2. Введите количество = 3 (меньше остатка)
3. Выберите причину (например, "damage")
4. Нажмите кнопку "Сохранить"
**Ожидаемый результат:**
- ✅ Форма отправляется успешно
- ✅ Перенаправляется на список списаний
- ✅ Появляется зеленое сообщение об успехе
- ✅ Остаток в партии уменьшился на 3 (стал 2)
---
## Тест 4: Отправка невалидных данных (количество > остатка)
**Шаги:**
1. Выберите партию (остаток = 5 шт)
2. Введите количество = 10 (больше остатка)
3. Нажмите кнопку "Сохранить"
**Ожидаемый результат:**
- ✅ Форма НЕ отправляется
- ✅ На странице появляется красный alert:
```
❌ Ошибка:
Невозможно списать 10 шт из партии,
где только 5 шт.
Недостаток: 5 шт.
```
- ✅ Пользователь остается на форме
- ✅ Данные в полях сохраняются (он может отредактировать)
- ✅ Остаток в партии не изменился (остался 5)
---
## Тест 5: Отключенный JavaScript (браузерная консоль)
Если JavaScript отключен:
**Шаги:**
1. Откройте DevTools (F12)
2. Отключите JavaScript
3. Обновите страницу
4. Заполните форму с quantity > batch.quantity
5. Нажмите "Сохранить"
**Ожидаемый результат:**
- ✅ Реал-тайм валидация не работает (это ок - это просто nice-to-have)
- ✅ Форма отправляется на сервер
- ✅ Django form validation ловит ошибку
- ✅ На странице появляется красный alert с ошибкой
- ✅ Остаток в партии не изменился (данные защищены)
---
## Тест 6: Граничные случаи
### Граничный случай 1: Количество = остатку
**Шаги:**
1. Партия имеет остаток = 5 шт
2. Введите количество = 5
3. **Ожидаемый результат:**
- ✅ Никаких предупреждений (это валидное значение)
- ✅ Форма отправляется успешно
- ✅ Партия полностью списывается (остаток = 0)
- ✅ Партия деактивируется (is_active = False)
### Граничный случай 2: Очень малое количество
**Шаги:**
1. Введите количество = 0.001 (если поддерживается)
2. **Ожидаемый результат:**
- ✅ Форма отправляется
- ✅ Остаток уменьшается на 0.001
- ✅ Все работает корректно
### Граничный случай 3: Дробные числа
**Шаги:**
1. Партия имеет остаток = 5.5 шт
2. Введите количество = 5.6
3. **Ожидаемый результат:**
- ✅ Появляется предупреждение о превышении
- ✅ Недостаток = 0.1 шт (правильный расчет)
---
## Проверочный лист
### Общие проверки
- [ ] JavaScript выполняется без ошибок (проверить консоль F12)
- [ ] Стили Bootstrap применены правильно
- [ ] Все иконки (⚠️, ❌, 📋) отображаются корректно
- [ ] Alert блоки имеют правильные цвета (красный для ошибок, желтый для warning)
- [ ] Кнопка закрытия alert работает
### Функциональные проверки
- [ ] Информация об остатке появляется при выборе партии
- [ ] Предупреждение появляется при quantity > batch.quantity
- [ ] Ошибка валидации отображается красиво
- [ ] Форма не отправляется при невалидных данных
- [ ] При валидных данных форма отправляется и остаток уменьшается
### Граничные случаи
- [ ] Количество = остатку работает правильно
- [ ] Дробные количества поддерживаются
- [ ] Партия деактивируется когда количество <= 0
- [ ] JavaScript отключение не ломает functionality (только UX)
---
## Логирование для отладки
Если что-то не работает, проверьте:
1. **Консоль браузера (F12 → Console)**
- Ошибки JavaScript
- Логи из скрипта
2. **Django логи**
- Ошибки валидации
- Ошибки в сохранении модели
3. **Network tab (F12 → Network)**
- Проверить POST запросы
- Ответ сервера (200, 400, 500 и т.д.)
---
## Быстрая проверка
Самый быстрый способ проверить что все работает:
```bash
# 1. Откройте форму
# http://grach.localhost:8000/inventory/writeoffs/create/
# 2. Выберите партию - должна появиться информация об остатке
# 3. Введите количество больше остатка - должно появиться предупреждение
# 4. Нажмите сохранить - должна появиться ошибка
# 5. Поправьте количество на меньшее - предупреждение исчезнет
# 6. Нажмите сохранить - форма отправится успешно
```
---
## Известные ограничения
1. **Форматирование дробных чисел:** JavaScript использует `.toFixed(3)` для недостатка, может быть 0.100 вместо 0.1
- Это не критично, просто визуально
2. **Локализация запятой/точки:** Код поддерживает оба варианта в regex но может быть проблемы с разными локалями
- Проверьте что в вашей локали правильно парсятся дробные числа
3. **Старые браузеры:** Код использует `addEventListener` и `querySelector` - не поддерживается IE11
- Но IE11 давно не поддерживается, это нормально
---
## Что дальше?
Если тестирование прошло успешно:
1.Все остатки партий уменьшаются правильно
2. ✅ Никакие отрицательные значения не создаются
3. ✅ UI четкий и понятный
То система готова к использованию!