Исправлено: снятие блокировок корзины при отмене заказа с витринным комплектом
This commit is contained in:
@@ -456,13 +456,18 @@ def rollback_sale_on_status_change(sender, instance, created, **kwargs):
|
|||||||
if showcase_count > 0:
|
if showcase_count > 0:
|
||||||
for reservation in showcase_kit_reservations:
|
for reservation in showcase_kit_reservations:
|
||||||
reservation.status = 'reserved'
|
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 - они остаются привязанными
|
# Не трогаем showcase и product_kit - они остаются привязанными
|
||||||
# converted_at оставляем (для истории)
|
# 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(
|
logger.info(
|
||||||
f"✓ Обновлено {showcase_count} резервов витринных комплектов: "
|
f"✓ Обновлено {showcase_count} резервов витринных комплектов: "
|
||||||
f"converted_to_sale → reserved (возвращены на витрину)"
|
f"converted_to_sale → reserved (возвращены на витрину, блокировки сняты)"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
@@ -588,8 +593,16 @@ def release_reservations_on_cancellation(sender, instance, created, **kwargs):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if showcase_count > 0:
|
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(
|
logger.info(
|
||||||
f"ℹ️ Найдено {showcase_count} резервов витринных комплектов - остаются в reserved (на витрине)"
|
f"ℹ️ Найдено {showcase_count} резервов витринных комплектов - остаются в reserved (на витрине, блокировки сняты)"
|
||||||
)
|
)
|
||||||
|
|
||||||
if normal_count == 0 and showcase_count == 0:
|
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.released_at = timezone.now()
|
||||||
res.save()
|
res.save()
|
||||||
|
|
||||||
# Витринные комплекты остаются зарезервированными, но отвязываем их от заказа
|
# Витринные комплекты остаются зарезервированными, но отвязываем их от заказа и снимаем блокировки
|
||||||
for res in showcase_reservations:
|
for res in showcase_reservations:
|
||||||
res.order_item = None
|
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)
|
transaction.on_commit(release_reservations)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user