Проблема:
- При отмене заказа (cancelled) ShowcaseItem переходил в 'available'
- При возврате из cancelled в нейтральный статус (draft/pending) резервы привязывались обратно
- НО ShowcaseItem оставался в 'available', что позволяло добавить букет в другой заказ
- Итог: один физический букет в двух заказах
Решение:
- inventory/signals.py: в сигнале reserve_stock_on_uncancellation добавлена логика
- При переходе cancelled → нейтральный:
* Находим ShowcaseItem витринных комплектов в статусе 'available'
* Вызываем return_to_reserved(order_item) для каждого экземпляра
* ShowcaseItem: available → reserved (привязан к OrderItem)
- Теперь букет корректно возвращается в резерв и недоступен на витрине
Lifecycle при откате отмены:
1. cancelled: ShowcaseItem = available, резервы отвязаны
2. cancelled → draft/pending: ShowcaseItem = reserved, резервы привязаны
3. Букет остаётся за заказом, защищён от двойной продажи