Реализована логика резервирования витринных букетов через сигналы

- inventory/signals.py: обработчик изменения статуса Order
  * При смене статуса на 'завершён' (is_positive_end=True): reserved → sold
  * При смене на 'отменён' (is_negative_end=True): reserved → available
- inventory/services/showcase_manager.py: метод reserve_for_order()
  * Переводит ShowcaseItem: in_cart → reserved
  * Создаёт жёсткую связь с OrderItem
  * Автоматическое управление статусами через сигналы
- Транзакционная безопасность через @transaction.atomic
This commit is contained in:
2026-01-05 01:38:14 +03:00
parent 24a64edc82
commit dd37931f5e
2 changed files with 87 additions and 5 deletions

View File

@@ -397,10 +397,11 @@ class ShowcaseManager:
}
# Берём только актуальные экземпляры на витрине
# (available, in_cart, reserved — все физически присутствующие)
active_items = ShowcaseItem.objects.filter(
showcase=showcase,
product_kit=product_kit,
status__in=['available', 'in_cart'],
status__in=['available', 'in_cart', 'reserved'],
)
item_count = active_items.count()
@@ -488,7 +489,7 @@ class ShowcaseManager:
active_items = ShowcaseItem.objects.filter(
showcase=showcase,
product_kit=product_kit,
status__in=['available', 'in_cart'],
status__in=['available', 'in_cart', 'reserved'],
)
if not active_items.exists():