Исправлено: 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(
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user