feat(inventory): учитывать коэффициент конверсии при резервировании компонентов комплектов

Добавлены поля original_sales_unit и conversion_factor в KitItemSnapshot для хранения
единиц продажи и коэффициентов конверсии на момент создания снимка. Обновлена логика
резервирования запасов для корректного расчета количества в базовых единицах.

Изменения в шаблоне редактирования комплектов для сохранения выбранных единиц продажи
при обновлении списка опций.

BREAKING CHANGE: Изменена структура данных в KitItemSnapshot, требуется миграция базы данных.
This commit is contained in:
2026-01-21 11:05:00 +03:00
parent e138a28475
commit ffc5f4cfc1
6 changed files with 93 additions and 3 deletions

View File

@@ -222,9 +222,14 @@ def reserve_stock_on_item_create(sender, instance, created, **kwargs):
for kit_item in instance.kit_snapshot.items.select_related('original_product'):
if kit_item.original_product:
# Суммируем количество: qty компонента * qty комплектов в заказе
# Рассчитываем количество одного компонента в базовых единицах
component_qty_base = kit_item.quantity
if kit_item.conversion_factor and kit_item.conversion_factor > 0:
component_qty_base = kit_item.quantity / kit_item.conversion_factor
# Суммируем количество: qty компонента (base) * qty комплектов в заказе
product_quantities[kit_item.original_product_id] += (
kit_item.quantity * Decimal(str(instance.quantity))
component_qty_base * Decimal(str(instance.quantity))
)
# Создаём по одному резерву на каждый уникальный товар