diff --git a/myproject/inventory/templates/inventory/debug_page.html b/myproject/inventory/templates/inventory/debug_page.html
index 19944dd..2381ac3 100644
--- a/myproject/inventory/templates/inventory/debug_page.html
+++ b/myproject/inventory/templates/inventory/debug_page.html
@@ -69,6 +69,11 @@
.status-reserved { background-color: #fff3cd; }
.status-converted { background-color: #d1ecf1; }
.status-released { background-color: #d4edda; }
+ .showcase-available { background-color: #d4edda; }
+ .showcase-in-cart { background-color: #fff3cd; }
+ .showcase-reserved { background-color: #ffeaa7; }
+ .showcase-sold { background-color: #d1ecf1; }
+ .showcase-dismantled { background-color: #f8d7da; }
.inactive-row { background-color: #f8d7da; opacity: 0.7; }
.section-card {
border: 1px solid #dee2e6;
@@ -367,7 +372,92 @@
-
+
+
+
🌺 Витринные экземпляры ShowcaseItem ({{ showcase_items.count }})
+
+ Available: {{ showcase_items_stats.available|default:0 }}
+
+
+ In Cart: {{ showcase_items_stats.in_cart|default:0 }}
+
+
+ Reserved: {{ showcase_items_stats.reserved|default:0 }}
+
+
+ Sold: {{ showcase_items_stats.sold|default:0 }}
+
+
+ Dismantled: {{ showcase_items_stats.dismantled|default:0 }}
+
+
+
+
+
+ | ID |
+ Комплект |
+ Витрина |
+ Статус |
+ Заказ |
+ Продано |
+ Создан |
+ Обновлён |
+
+
+
+ {% for item in showcase_items %}
+
+ | {{ item.id }} |
+
+ {{ item.product_kit.name }}
+ {% if item.product_kit.is_temporary %}
+ TEMP
+ {% endif %}
+ |
+ {{ item.showcase.name }} |
+
+ {% if item.status == 'available' %}
+ Доступен
+ {% elif item.status == 'in_cart' %}
+ В корзине
+ {% elif item.status == 'reserved' %}
+ Зарезервирован
+ {% elif item.status == 'sold' %}
+ Продан
+ {% elif item.status == 'dismantled' %}
+ Разобран
+ {% else %}
+ {{ item.get_status_display }}
+ {% endif %}
+ |
+
+ {% if item.sold_order_item %}
+ {{ item.sold_order_item.order.order_number }}
+ (#{{ item.sold_order_item.id }})
+ {% else %}
+ -
+ {% endif %}
+ |
+
+ {% if item.sold_at %}{{ item.sold_at|date:"d.m.Y H:i:s" }}{% else %}-{% endif %}
+ |
+ {{ item.created_at|date:"d.m.Y H:i" }} |
+ {{ item.updated_at|date:"d.m.Y H:i:s" }} |
+
+ {% empty %}
+ | Нет витринных экземпляров |
+ {% endfor %}
+
+
+
+
💰 Продажи Sale ({{ sales.count }})
diff --git a/myproject/inventory/views/debug_views.py b/myproject/inventory/views/debug_views.py
index fee76a4..3037c85 100644
--- a/myproject/inventory/views/debug_views.py
+++ b/myproject/inventory/views/debug_views.py
@@ -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,