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

@@ -0,0 +1,25 @@
# Generated by Django 5.0.10 on 2026-01-21 07:27
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orders', '0003_order_summary'),
('products', '0001_add_sales_unit_to_kititem'),
]
operations = [
migrations.AddField(
model_name='kititemsnapshot',
name='conversion_factor',
field=models.DecimalField(blank=True, decimal_places=6, help_text='Сколько единиц продажи в 1 базовой единице товара', max_digits=15, null=True, verbose_name='Коэффициент конверсии'),
),
migrations.AddField(
model_name='kititemsnapshot',
name='original_sales_unit',
field=models.ForeignKey(blank=True, help_text='Единица продажи на момент создания снимка', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='kit_item_snapshots', to='products.productsalesunit', verbose_name='Единица продажи'),
),
]

View File

@@ -140,6 +140,25 @@ class KitItemSnapshot(models.Model):
verbose_name="Группа вариантов"
)
original_sales_unit = models.ForeignKey(
'products.ProductSalesUnit',
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='kit_item_snapshots',
verbose_name="Единица продажи",
help_text="Единица продажи на момент создания снимка"
)
conversion_factor = models.DecimalField(
max_digits=15,
decimal_places=6,
null=True,
blank=True,
verbose_name="Коэффициент конверсии",
help_text="Сколько единиц продажи в 1 базовой единице товара"
)
quantity = models.DecimalField(
max_digits=10,
decimal_places=3,