From 4e66f0395748c5ef4ee607e79e1fa9df1cd00f2b Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Sun, 30 Nov 2025 22:36:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B7=D0=B5=D1=80=D0=B2=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D1=80=D0=B8=20=D0=B7=D0=B0=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проблема: Резервы не обновлялись в статус 'converted_to_sale' если Sale уже существовали, что приводило к отображению завершенных заказов на странице активных резервов. Решение: Переместил обновление резервов ПЕРЕД проверкой существования Sale. Теперь резервы всегда обновляются при переходе заказа в статус 'completed', независимо от того, были ли уже созданы записи Sale. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- myproject/inventory/signals.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/myproject/inventory/signals.py b/myproject/inventory/signals.py index 3918e8e..185a328 100644 --- a/myproject/inventory/signals.py +++ b/myproject/inventory/signals.py @@ -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