Добавлена валидация и логирование для продажи витринных комплектов в POS
Проблема: Продолжает возникать ошибка 'Один из экземпляров уже был продан' при попытке продажи витринных букетов. Изменения для диагностики: 1. Добавлена валидация showcase_item_ids ПЕРЕД передачей в sell_showcase_items 2. Проверка что все экземпляры имеют status='in_cart' и locked_by_user=текущий 3. Фильтр по статусу исключает уже проданные/разобранные экземпляры 4. Добавлено детальное логирование: - Запрошенные showcase_item_ids - Количество найденных заблокированных экземпляров - Недостающие IDs если не все найдены Улучшенное сообщение об ошибке: Вместо 'уже был продан' теперь 'уже не заблокированы на вас' с просьбой обновить страницу - более понятно для пользователя. Логи помогут выявить: - Передаются ли дубликаты в showcase_item_ids - Истекают ли блокировки до момента продажи - Меняется ли статус экземпляров между добавлением в корзину и checkout
This commit is contained in:
@@ -1468,9 +1468,26 @@ def pos_checkout(request):
|
|||||||
|
|
||||||
# Продаём экземпляры через ShowcaseManager
|
# Продаём экземпляры через ShowcaseManager
|
||||||
if showcase_item_ids:
|
if showcase_item_ids:
|
||||||
|
# Логируем для отладки
|
||||||
|
logger.info(f'POS Checkout: попытка продать showcase_item_ids={showcase_item_ids}')
|
||||||
|
|
||||||
|
# Проверяем что все экземпляры заблокированы на текущего пользователя
|
||||||
showcase_items = list(ShowcaseItem.objects.filter(
|
showcase_items = list(ShowcaseItem.objects.filter(
|
||||||
id__in=showcase_item_ids
|
id__in=showcase_item_ids,
|
||||||
|
status='in_cart',
|
||||||
|
locked_by_user=request.user
|
||||||
))
|
))
|
||||||
|
|
||||||
|
logger.info(f'POS Checkout: найдено {len(showcase_items)} заблокированных экземпляров из {len(showcase_item_ids)} запрошенных')
|
||||||
|
|
||||||
|
if len(showcase_items) != len(showcase_item_ids):
|
||||||
|
# Не все экземпляры доступны
|
||||||
|
missing_ids = set(showcase_item_ids) - set(item.id for item in showcase_items)
|
||||||
|
logger.warning(f'POS Checkout: недоступные showcase_item_ids={missing_ids}')
|
||||||
|
raise ValidationError(
|
||||||
|
f'Некоторые экземпляры букета уже не заблокированы на вас. '
|
||||||
|
f'Обновите страницу и попробуйте снова.'
|
||||||
|
)
|
||||||
|
|
||||||
if showcase_items:
|
if showcase_items:
|
||||||
result = ShowcaseManager.sell_showcase_items(showcase_items, order_item)
|
result = ShowcaseManager.sell_showcase_items(showcase_items, order_item)
|
||||||
|
|||||||
Reference in New Issue
Block a user