Исправлено обновление резервов при завершении заказа
Проблема: Резервы не обновлялись в статус 'converted_to_sale' если Sale уже существовали, что приводило к отображению завершенных заказов на странице активных резервов. Решение: Переместил обновление резервов ПЕРЕД проверкой существования Sale. Теперь резервы всегда обновляются при переходе заказа в статус 'completed', независимо от того, были ли уже созданы записи Sale. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -71,9 +71,21 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs):
|
||||
if not instance.status or instance.status.code != 'completed':
|
||||
return # Только для статуса 'completed'
|
||||
|
||||
# Сначала обновляем резервы (независимо от наличия Sale)
|
||||
# Это важно для случаев, когда Sale уже созданы, но резервы не обновлены
|
||||
for item in instance.items.all():
|
||||
reservations = Reservation.objects.filter(
|
||||
order_item=item,
|
||||
status='reserved'
|
||||
)
|
||||
for res in reservations:
|
||||
res.status = 'converted_to_sale'
|
||||
res.converted_at = timezone.now()
|
||||
res.save()
|
||||
|
||||
# Защита от повторного списания: проверяем, не созданы ли уже Sale для этого заказа
|
||||
if Sale.objects.filter(order=instance).exists():
|
||||
return # Продажи уже созданы, выходим
|
||||
return # Продажи уже созданы, резервы обновлены, выходим
|
||||
|
||||
# Определяем склад (используем склад самовывоза из заказа или первый активный)
|
||||
warehouse = instance.pickup_warehouse or Warehouse.objects.filter(is_active=True).first()
|
||||
@@ -81,7 +93,7 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs):
|
||||
if not warehouse:
|
||||
return
|
||||
|
||||
# Для каждого товара в заказе
|
||||
# Для каждого товара в заказе создаем Sale
|
||||
for item in instance.items.all():
|
||||
# Определяем товар
|
||||
product = item.product if item.product else item.product_kit
|
||||
@@ -100,17 +112,6 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs):
|
||||
document_number=instance.order_number
|
||||
)
|
||||
|
||||
# Обновляем резерв
|
||||
reservations = Reservation.objects.filter(
|
||||
order_item=item,
|
||||
status='reserved'
|
||||
)
|
||||
|
||||
for res in reservations:
|
||||
res.status = 'converted_to_sale'
|
||||
res.converted_at = timezone.now()
|
||||
res.save()
|
||||
|
||||
except ValueError as e:
|
||||
# Логируем ошибку, но не прерываем процесс
|
||||
import logging
|
||||
|
||||
Reference in New Issue
Block a user