From dcfb76121d0a018caede683a41c9b9964082aed8 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Wed, 3 Dec 2025 01:07:15 +0300 Subject: [PATCH] =?UTF-8?q?SECURITY:=20=D0=97=D0=B0=D1=89=D0=B8=D1=82?= =?UTF-8?q?=D0=B0=20=D0=BA=D1=80=D0=B8=D1=82=D0=B8=D1=87=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20=D1=81=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=BD=D1=8B=D1=85=20=D1=81=D1=82=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=20=D0=BE=D1=82=20=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Заблокировал изменение полей 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 --- myproject/orders/forms.py | 11 +++++++++++ myproject/orders/templates/orders/status_form.html | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/myproject/orders/forms.py b/myproject/orders/forms.py index 75516d5..839ff2f 100644 --- a/myproject/orders/forms.py +++ b/myproject/orders/forms.py @@ -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 = "Нельзя изменять для системных статусов (влияет на резервирование)" + # === ВРЕМЕННЫЕ КОМПЛЕКТЫ === diff --git a/myproject/orders/templates/orders/status_form.html b/myproject/orders/templates/orders/status_form.html index 474fe22..ed0c905 100644 --- a/myproject/orders/templates/orders/status_form.html +++ b/myproject/orders/templates/orders/status_form.html @@ -15,8 +15,14 @@ {% endif %} {% if is_system %} -
- Это системный статус. Некоторые поля не могут быть изменены. +
+ + ВНИМАНИЕ! Это системный статус, используемый в бизнес-логике системы. +
    +
  • Код статуса — заблокирован (используется в коде для проверок)
  • +
  • Положительный/Отрицательный исход — заблокированы (управляют резервированием и списанием товаров со склада)
  • +
  • Разрешено изменять: название, метку, цвет и описание
  • +
{% endif %}