fix(inventory): учитывать скидку при расчёте цены продажи

Внесены изменения в SaleProcessor и сигнал создания продажи для корректного
расчёта цены с учётом скидки на товар. Теперь при наличии discount_amount
производится пересчёт цены за единицу товара с учётом скидки перед
конвертацией в базовые единицы измерения.

Это исправляет ошибку, при которой скидка не учитывалась в итоговой цене продажи.
This commit is contained in:
2026-01-20 23:20:55 +03:00
parent 9cd3796527
commit 0938878e67
2 changed files with 17 additions and 4 deletions

View File

@@ -480,11 +480,18 @@ def create_sale_on_order_completion(sender, instance, created, **kwargs):
f"Используем quantity_in_base_units: {sale_quantity}"
)
# Цена за единицу с учётом скидки
if item.discount_amount and item.quantity > 0:
subtotal = Decimal(str(item.price)) * Decimal(str(item.quantity))
price_with_discount = (subtotal - Decimal(str(item.discount_amount))) / Decimal(str(item.quantity))
else:
price_with_discount = Decimal(str(item.price))
# Пересчитываем цену в базовые единицы
if item.sales_unit and item.conversion_factor_snapshot:
base_price = Decimal(str(item.price)) * item.conversion_factor_snapshot
base_price = price_with_discount * item.conversion_factor_snapshot
else:
base_price = Decimal(str(item.price))
base_price = price_with_discount
# Создаем Sale (с автоматическим FIFO-списанием)
sale = SaleProcessor.create_sale(