SECURITY: Защита критичных полей системных статусов от редактирования

Заблокировал изменение полей is_positive_end и is_negative_end для
системных статусов заказов, так как эти флаги используются в сигналах
inventory для управления резервированием и списанием товаров со склада.

Что изменено:
- OrderStatusForm: Добавлена блокировка (disabled=True) для полей
  is_positive_end и is_negative_end при редактировании системных статусов
- status_form.html: Заменено информационное предупреждение на красное
  с детальным описанием заблокированных полей и их влияния на систему

Почему это критично:
Эти флаги проверяются в 3 сигналах inventory/signals.py:
1. rollback_sale_on_status_change - откатывает продажи при уходе от 'completed'
2. release_reservations_on_cancellation - освобождает резервы при отмене
3. reserve_stock_on_uncancellation - резервирует при восстановлении заказа

Случайное изменение флагов может привести к:
- Неправильному освобождению резервов товара
- Двойному резервированию
- Блокировке товара навсегда
- Списанию товара для отмененных заказов

Разрешено редактировать для системных статусов: name, label, color, description

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-03 01:07:15 +03:00
parent eaa0b5bd3c
commit dcfb76121d
2 changed files with 19 additions and 2 deletions

View File

@@ -420,6 +420,17 @@ class OrderStatusForm(forms.ModelForm):
self.fields['code'].widget.attrs['readonly'] = True
self.fields['code'].help_text = "Код системного статуса нельзя менять"
# КРИТИЧНО: Блокируем изменение флагов is_positive_end и is_negative_end
# Эти флаги используются в сигналах для управления резервами и списаниями
# Изменение может привести к:
# - Неправильному освобождению резервов
# - Двойному резервированию товара
# - Блокировке товара навсегда
self.fields['is_positive_end'].disabled = True
self.fields['is_negative_end'].disabled = True
self.fields['is_positive_end'].help_text = "Нельзя изменять для системных статусов (влияет на резервирование)"
self.fields['is_negative_end'].help_text = "Нельзя изменять для системных статусов (влияет на резервирование)"
# === ВРЕМЕННЫЕ КОМПЛЕКТЫ ===