Реализована логика резервирования витринных букетов через сигналы
- 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:
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user