Исправлено: снятие блокировок корзины при отмене заказа с витринным комплектом
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user