03794356d0a978919dc70cdebf1ccee32f071281
Проблема: - Прямой переход cancelled → completed вызывал race condition между сигналами - Сигналы срабатывали в непредсказуемом порядке - ShowcaseItem и Reservation не успевали корректно обработаться - Букеты оставались в неправильном статусе Решение ПОД КАПОТОМ: - orders/models/order.py: Order.save() теперь перехватывает прямой переход cancelled → completed - Автоматически разбивает на два последовательных шага: 1. cancelled → draft: reserve_stock_on_uncancellation возвращает резервы и букеты в reserved 2. draft → completed: create_sale_on_order_completion корректно финализирует в sold - Каждый шаг вызывает super().save() в отдельной транзакции - Сигналы срабатывают последовательно в правильном порядке Преимущества: - Пользователь не замечает промежуточный переход (происходит мгновенно) - Не нужны сложные проверки порядка срабатывания сигналов - Гарантируется корректная работа всех существующих сигналов - Решение элегантное и не требует изменений в сигналах Flow теперь гарантированно работает: cancelled → draft → completed: Шаг 1: ShowcaseItem available → reserved ✅ Шаг 2: ShowcaseItem reserved → sold ✅ Шаг 1: Reservation order_item=None → привязаны ✅ Шаг 2: Sale создаются, резервы converted_to_sale ✅
Description
No description provided
Languages
Python
57%
HTML
32%
JavaScript
9.5%
CSS
1.1%
Shell
0.4%