Добавлен расчёт и отображение доступного количества комплектов
- Добавлен метод calculate_available_quantity() в модель ProductKit для точного расчёта максимального количества комплектов на основе свободных остатков компонентов - Обновлён метод check_availability() для использования нового расчёта (обратная совместимость) - Удалён устаревший сервис kit_availability.py Исправлено отображение остатков комплектов: - products_list.html: вместо прочерка показывается количество комплектов - catalog.html: добавлено отображение доступного количества комплектов с цветовой индикацией - POS terminal.js: в карточке товара показывается конкретное количество вместо общего 'В наличии' Обновлены представления: - ProductsListView: аннотирует комплекты атрибутом total_free - CatalogView: рассчитывает доступное количество для каждого комплекта - POS get_products(): убран хардкод, используется реальный расчёт по складу
This commit is contained in:
@@ -78,6 +78,8 @@ class CatalogView(LoginRequiredMixin, TemplateView):
|
||||
if k.id not in kits_dict:
|
||||
k.item_type = 'kit'
|
||||
k.main_photo = k.photos.all()[0] if k.photos.all() else None
|
||||
# Рассчитываем доступное количество комплектов
|
||||
k.total_free = k.calculate_available_quantity()
|
||||
kits_dict[k.id] = k
|
||||
|
||||
# Теперь добавляем все товары, которых еще нет (товары без категорий или не загруженные)
|
||||
@@ -104,6 +106,8 @@ class CatalogView(LoginRequiredMixin, TemplateView):
|
||||
if k.id not in kits_dict:
|
||||
k.item_type = 'kit'
|
||||
k.main_photo = k.photos.all()[0] if k.photos.all() else None
|
||||
# Рассчитываем доступное количество комплектов
|
||||
k.total_free = k.calculate_available_quantity()
|
||||
kits_dict[k.id] = k
|
||||
|
||||
# Объединяем и сортируем
|
||||
|
||||
@@ -347,6 +347,8 @@ class CombinedProductListView(LoginRequiredMixin, ManagerOwnerRequiredMixin, Lis
|
||||
kits_list = list(kits.order_by('-created_at'))
|
||||
for k in kits_list:
|
||||
k.item_type = 'kit'
|
||||
# Рассчитываем доступное количество комплектов (для отображения остатков)
|
||||
k.total_free = k.calculate_available_quantity()
|
||||
|
||||
# Объединяем и сортируем по дате создания
|
||||
combined = sorted(
|
||||
|
||||
Reference in New Issue
Block a user