Расширена debug страница для отслеживания статусов ShowcaseItem

- inventory/templates/inventory/debug_page.html: добавлена секция ShowcaseItem
  * Таблица с полями: ID, Название, Статус, OrderItem, Locked By
  * Цветовые индикаторы статусов (available/in_cart/reserved/sold)
  * Ссылки на связанные OrderItem
- inventory/views/debug_views.py: добавлены данные ShowcaseItem в контекст
  * showcase_items queryset с select_related для оптимизации
  * Статистика по статусам ShowcaseItem
- Инструмент для тестирования lifecycle витринных букетов
This commit is contained in:
2026-01-05 01:38:59 +03:00
parent d148df2149
commit 7cab70e8b0
2 changed files with 112 additions and 2 deletions

View File

@@ -7,7 +7,8 @@ from django.shortcuts import render
from django.db.models import Q, Sum, Count
from inventory.models import (
StockBatch, Stock, Reservation, Sale, SaleBatchAllocation, WriteOff,
WriteOffDocument, WriteOffDocumentItem, IncomingDocument, IncomingDocumentItem
WriteOffDocument, WriteOffDocumentItem, IncomingDocument, IncomingDocumentItem,
ShowcaseItem
)
from orders.models import Order
from products.models import Product
@@ -51,6 +52,11 @@ def debug_inventory_page(request):
incoming_documents = IncomingDocument.objects.select_related('warehouse', 'created_by', 'confirmed_by').order_by('-date', '-created_at')
incoming_document_items = IncomingDocumentItem.objects.select_related('product', 'document__warehouse').order_by('-id')
orders = Order.objects.prefetch_related('items').order_by('-created_at')
# Витринные экземпляры
showcase_items = ShowcaseItem.objects.select_related(
'product_kit', 'showcase', 'sold_order_item__order'
).order_by('-updated_at')
# Применяем фильтры
if product_id:
@@ -91,6 +97,8 @@ def debug_inventory_page(request):
allocations = allocations.filter(sale__order=order)
# Фильтруем только этот заказ в таблице заказов
orders = orders.filter(id=order.id)
# Фильтруем витринные экземпляры по заказу
showcase_items = showcase_items.filter(sold_order_item__order=order)
else:
order = None
@@ -120,6 +128,16 @@ def debug_inventory_page(request):
incoming_documents = incoming_documents[:50]
incoming_document_items = incoming_document_items[:100]
orders = orders[:50]
showcase_items = showcase_items[:100]
# Статистика по статусам ShowcaseItem
showcase_items_stats = ShowcaseItem.objects.aggregate(
available=Count('id', filter=Q(status='available')),
in_cart=Count('id', filter=Q(status='in_cart')),
reserved=Count('id', filter=Q(status='reserved')),
sold=Count('id', filter=Q(status='sold')),
dismantled=Count('id', filter=Q(status='dismantled')),
)
# Списки для фильтров
products = Product.objects.filter(archived_at__isnull=True).order_by('name')[:200]
@@ -137,6 +155,8 @@ def debug_inventory_page(request):
'incoming_documents': incoming_documents,
'incoming_document_items': incoming_document_items,
'orders': orders,
'showcase_items': showcase_items,
'showcase_items_stats': showcase_items_stats,
'products': products,
'warehouses': warehouses,
'selected_product': product,