From f55f358e8f106d3b7094234112441dd9e44ba477 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Fri, 2 Jan 2026 15:06:03 +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:=20Sale=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D1=8C=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5?= =?UTF-8?q?=D1=82=20quantity=5Fbase=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=20quantity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit КРИТИЧНО: При создании Sale использовалось неправильное поле! Проблема: - При проведении заказа Sale создавался с reservation.quantity - Это количество в ЕДИНИЦАХ ПРОДАЖИ, а не в базовых! - Пример: 1 ветка списывала 1 банч вместо 0.05 банча Решение: - Строка 410: sale_quantity = reservation.quantity_base (для товаров) - Строка 368: quantity=reservation.quantity_base (для комплектов) - Fallback на .quantity для обратной совместимости Теперь: - Sale.quantity всегда в базовых единицах - FIFO списание корректно - StockBatch уменьшается на правильное количество --- myproject/inventory/signals.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/myproject/inventory/signals.py b/myproject/inventory/signals.py index b5cff78..5113eaf 100644 --- a/myproject/inventory/signals.py +++ b/myproject/inventory/signals.py @@ -365,7 +365,7 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs): sale = SaleProcessor.create_sale( product=reservation.product, warehouse=warehouse, - quantity=reservation.quantity, + quantity=reservation.quantity_base or reservation.quantity, # Используем quantity_base! sale_price=component_sale_price, order=instance, document_number=instance.order_number @@ -373,7 +373,7 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs): sales_created.append(sale) logger.info( f"✓ Sale создан для компонента комплекта '{kit.name}': " - f"{reservation.product.name} - {reservation.quantity} шт." + f"{reservation.product.name} - {reservation.quantity_base or reservation.quantity} шт. (базовых единиц)" ) except ValueError as e: logger.error( @@ -406,8 +406,8 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs): ).exclude(status='converted_to_sale').first() if item_reservation: - # Используем quantity из резерва (уже в базовых единицах) - sale_quantity = item_reservation.quantity + # Используем quantity_base из резерва (всегда в базовых единицах) + sale_quantity = item_reservation.quantity_base or item_reservation.quantity else: # Fallback: используем quantity_in_base_units из OrderItem sale_quantity = item.quantity_in_base_units if item.quantity_in_base_units else Decimal(str(item.quantity))