Cleanup pos/views.py: removed unused QuerySet and Prefetch from pos_terminal, removed unused showcase_items_api endpoint

This commit is contained in:
2025-11-17 15:18:41 +03:00
parent cfae2fb5fb
commit 3a24631d93
2 changed files with 2 additions and 97 deletions

View File

@@ -155,12 +155,9 @@ def get_showcase_kits_for_pos():
def pos_terminal(request):
"""
Tablet-friendly POS screen prototype.
Shows categories and all items (products + kits) for quick tap-to-add.
Оптимизировано: убрана стартовая загрузка витрин, только thumbnail фото.
Товары загружаются прогрессивно через API при клике на категорию.
Работает только с одним выбранным складом.
"""
from products.models import ProductPhoto, ProductKitPhoto
# Получаем текущий склад для POS
current_warehouse = get_pos_warehouse(request)
@@ -178,57 +175,8 @@ def pos_terminal(request):
}
return render(request, 'pos/terminal.html', context)
# Загружаем только категории
categories_qs = ProductCategory.objects.filter(is_active=True)
# Prefetch для первого фото товаров
first_product_photo = Prefetch(
'photos',
queryset=ProductPhoto.objects.order_by('order')[:1],
to_attr='first_photo_list'
)
# Подзапросы для аннотации остатков по текущему складу
stock_available_subquery = Stock.objects.filter(
product=OuterRef('pk'),
warehouse=current_warehouse
).values('quantity_available')[:1]
stock_reserved_subquery = Stock.objects.filter(
product=OuterRef('pk'),
warehouse=current_warehouse
).values('quantity_reserved')[:1]
# Показываем все товары, не только in_stock
# Аннотируем остатками и резервами с текущего склада
products_qs = Product.objects.all().annotate(
available_qty=Coalesce(
Subquery(stock_available_subquery, output_field=DecimalField()),
Decimal('0'),
output_field=DecimalField()
),
reserved_qty=Coalesce(
Subquery(stock_reserved_subquery, output_field=DecimalField()),
Decimal('0'),
output_field=DecimalField()
)
).prefetch_related(
'categories',
first_product_photo
)
# Prefetch для первого фото комплектов
first_kit_photo = Prefetch(
'photos',
queryset=ProductKitPhoto.objects.order_by('order')[:1],
to_attr='first_photo_list'
)
# Показываем все комплекты (кроме временных)
kits_qs = ProductKit.objects.filter(is_temporary=False).prefetch_related(
'categories',
first_kit_photo
)
categories = [{'id': c.id, 'name': c.name} for c in categories_qs]
# Список всех активных складов для модалки выбора
@@ -276,48 +224,6 @@ def set_warehouse(request, warehouse_id):
}, status=404)
@login_required
@require_http_methods(["GET"])
def showcase_items_api(request):
"""
API endpoint для получения витринных букетов.
Возвращает комплекты, зарезервированные на активных витринах.
"""
# Получаем все активные резервы на витринах
showcase_reservations = Reservation.objects.filter(
showcase__isnull=False,
showcase__is_active=True,
status='reserved'
).select_related('showcase', 'product').prefetch_related('product__photos')
# Группируем по витринам
showcases_dict = {}
for res in showcase_reservations:
showcase_id = res.showcase.id
if showcase_id not in showcases_dict:
showcases_dict[showcase_id] = {
'id': showcase_id,
'name': res.showcase.name,
'warehouse': res.showcase.warehouse.name,
'items': []
}
# Добавляем товар в список
showcases_dict[showcase_id]['items'].append({
'product_id': res.product.id,
'product_name': res.product.name,
'quantity': str(res.quantity),
'image': res.product.photos.first().get_thumbnail_url() if res.product.photos.exists() else None,
})
showcases_list = list(showcases_dict.values())
return JsonResponse({
'success': True,
'showcases': showcases_list
})
@login_required
@require_http_methods(["GET"])
def get_showcases_api(request):