Cleanup pos/views.py: removed unused QuerySet and Prefetch from pos_terminal, removed unused showcase_items_api endpoint
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user