Исправлено: Sale теперь использует quantity_base вместо quantity
КРИТИЧНО: При создании 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 уменьшается на правильное количество
This commit is contained in:
@@ -365,7 +365,7 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs):
|
|||||||
sale = SaleProcessor.create_sale(
|
sale = SaleProcessor.create_sale(
|
||||||
product=reservation.product,
|
product=reservation.product,
|
||||||
warehouse=warehouse,
|
warehouse=warehouse,
|
||||||
quantity=reservation.quantity,
|
quantity=reservation.quantity_base or reservation.quantity, # Используем quantity_base!
|
||||||
sale_price=component_sale_price,
|
sale_price=component_sale_price,
|
||||||
order=instance,
|
order=instance,
|
||||||
document_number=instance.order_number
|
document_number=instance.order_number
|
||||||
@@ -373,7 +373,7 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs):
|
|||||||
sales_created.append(sale)
|
sales_created.append(sale)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"✓ Sale создан для компонента комплекта '{kit.name}': "
|
f"✓ Sale создан для компонента комплекта '{kit.name}': "
|
||||||
f"{reservation.product.name} - {reservation.quantity} шт."
|
f"{reservation.product.name} - {reservation.quantity_base or reservation.quantity} шт. (базовых единиц)"
|
||||||
)
|
)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
logger.error(
|
logger.error(
|
||||||
@@ -406,8 +406,8 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs):
|
|||||||
).exclude(status='converted_to_sale').first()
|
).exclude(status='converted_to_sale').first()
|
||||||
|
|
||||||
if item_reservation:
|
if item_reservation:
|
||||||
# Используем quantity из резерва (уже в базовых единицах)
|
# Используем quantity_base из резерва (всегда в базовых единицах)
|
||||||
sale_quantity = item_reservation.quantity
|
sale_quantity = item_reservation.quantity_base or item_reservation.quantity
|
||||||
else:
|
else:
|
||||||
# Fallback: используем quantity_in_base_units из OrderItem
|
# Fallback: используем quantity_in_base_units из OrderItem
|
||||||
sale_quantity = item.quantity_in_base_units if item.quantity_in_base_units else Decimal(str(item.quantity))
|
sale_quantity = item.quantity_in_base_units if item.quantity_in_base_units else Decimal(str(item.quantity))
|
||||||
|
|||||||
Reference in New Issue
Block a user