Исправлено: снятие блокировок корзины при отмене заказа с витринным комплектом

This commit is contained in:
2025-12-08 18:22:37 +03:00
parent 5b03a95b5a
commit 5f1c982bf7

View File

@@ -456,13 +456,18 @@ def rollback_sale_on_status_change(sender, instance, created, **kwargs):
if showcase_count > 0:
for reservation in showcase_kit_reservations:
reservation.status = 'reserved'
# Очищаем блокировки корзины при отмене заказа
reservation.order_item = None
reservation.cart_lock_expires_at = None
reservation.locked_by_user = None
reservation.cart_session_id = None
# Не трогаем showcase и product_kit - они остаются привязанными
# converted_at оставляем (для истории)
reservation.save(update_fields=['status'])
reservation.save(update_fields=['status', 'order_item', 'cart_lock_expires_at', 'locked_by_user', 'cart_session_id'])
logger.info(
f"✓ Обновлено {showcase_count} резервов витринных комплектов: "
f"converted_to_sale → reserved (возвращены на витрину)"
f"converted_to_sale → reserved (возвращены на витрину, блокировки сняты)"
)
else:
logger.warning(
@@ -588,8 +593,16 @@ def release_reservations_on_cancellation(sender, instance, created, **kwargs):
)
if showcase_count > 0:
# Для витринных комплектов очищаем блокировки корзины
for reservation in showcase_kit_reservations:
reservation.order_item = None
reservation.cart_lock_expires_at = None
reservation.locked_by_user = None
reservation.cart_session_id = None
reservation.save(update_fields=['order_item', 'cart_lock_expires_at', 'locked_by_user', 'cart_session_id'])
logger.info(
f" Найдено {showcase_count} резервов витринных комплектов - остаются в reserved (на витрине)"
f" Найдено {showcase_count} резервов витринных комплектов - остаются в reserved (на витрине, блокировки сняты)"
)
if normal_count == 0 and showcase_count == 0:
@@ -728,10 +741,13 @@ def release_stock_on_order_delete(sender, instance, **kwargs):
res.released_at = timezone.now()
res.save()
# Витринные комплекты остаются зарезервированными, но отвязываем их от заказа
# Витринные комплекты остаются зарезервированными, но отвязываем их от заказа и снимаем блокировки
for res in showcase_reservations:
res.order_item = None
res.save(update_fields=['order_item'])
res.cart_lock_expires_at = None
res.locked_by_user = None
res.cart_session_id = None
res.save(update_fields=['order_item', 'cart_lock_expires_at', 'locked_by_user', 'cart_session_id'])
transaction.on_commit(release_reservations)