Добавлена валидация и логирование для продажи витринных комплектов в 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,10 +1468,27 @@ def pos_checkout(request):
|
||||
|
||||
# Продаём экземпляры через ShowcaseManager
|
||||
if showcase_item_ids:
|
||||
# Логируем для отладки
|
||||
logger.info(f'POS Checkout: попытка продать showcase_item_ids={showcase_item_ids}')
|
||||
|
||||
# Проверяем что все экземпляры заблокированы на текущего пользователя
|
||||
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:
|
||||
result = ShowcaseManager.sell_showcase_items(showcase_items, order_item)
|
||||
if not result['success']:
|
||||
|
||||
Reference in New Issue
Block a user