diff --git a/myproject/inventory/signals.py b/myproject/inventory/signals.py index 5bfae3b..2a17b6c 100644 --- a/myproject/inventory/signals.py +++ b/myproject/inventory/signals.py @@ -474,6 +474,34 @@ def rollback_sale_on_status_change(sender, instance, created, **kwargs): f"⚠ Для заказа {instance.order_number} нет резервов в статусе 'converted_to_sale'" ) + # === Возвращаем витринные экземпляры обратно на витрину === + from inventory.models import ShowcaseItem + + # Находим все ShowcaseItem, проданные в рамках этого заказа + showcase_items = ShowcaseItem.objects.filter( + sold_order_item__order=instance, + status='sold' + ) + + showcase_items_count = showcase_items.count() + + if showcase_items_count > 0: + logger.info( + f"🔄 Возвращаем {showcase_items_count} витринных экземпляров обратно на витрину..." + ) + + # Возвращаем каждый экземпляр на витрину + for item in showcase_items: + item.status = 'available' + item.sold_order_item = None + item.sold_at = None + # showcase и product_kit не трогаем - букет остаётся на той же витрине + item.save(update_fields=['status', 'sold_order_item', 'sold_at', 'updated_at']) + + logger.info( + f"✓ {showcase_items_count} витринных экземпляров вернулись на витрину: sold → available" + ) + # === Обновляем is_returned === if is_cancellation: # Сценарий Б: устанавливаем is_returned = True