Реализация:
- Создан view debug_inventory_page (только для суперюзеров)
- URL: /inventory/debug/
- Компактный дизайн с минимальными отступами и маленьким шрифтом (10-11px)
Функционал:
1. Показывает полную картину инвентаризации на одной странице:
- Заказы (Order) - номер, статус, покупатель, is_returned
- Остатки (Stock) - доступно, зарезервировано, свободно
- Партии (StockBatch) - количество, активность, дата поступления
- Резервы (Reservation) - статус (reserved/converted_to_sale/released), заказ, даты
- Продажи (Sale) - количество, цены, заказ
- Списания (SaleBatchAllocation) - откуда списано, сколько
2. Фильтры:
- По товару (dropdown с названием и SKU)
- По номеру заказа (текстовое поле)
- По складу (dropdown)
- Кнопка 'Применить' и 'Сбросить'
3. UI:
- Цветовая индикация статусов резервов
- Бейджи для ключевых данных
- Компактные таблицы Bootstrap
- Неактивные партии выделены красным
- Ограничение в 100 записей на таблицу для производительности
4. Навигация:
- Ссылка 🔧 Debug в navbar (видна только суперюзерам)
- Красный цвет для видимости
Юзкейс:
Суперюзер принимает товар на склад → оформляет заказ → меняет статусы →
переходит на /inventory/debug/ → видит полную картину всех изменений
Файлы:
- inventory/views/debug_views.py - новый view
- inventory/templates/inventory/debug_page.html - шаблон
- inventory/urls.py - добавлен роут
- templates/navbar.html - добавлена ссылка для суперюзеров
91 lines
6.2 KiB
HTML
91 lines
6.2 KiB
HTML
<!-- navbar.html - Компонент навигационной панели -->
|
||
<style>
|
||
.navbar .dropdown:hover > .dropdown-menu {
|
||
display: block;
|
||
margin-top: 0;
|
||
}
|
||
</style>
|
||
<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
|
||
<div class="container">
|
||
<!-- Кнопка для мобильного вида -->
|
||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
||
aria-controls="navbarNav" aria-expanded="false" aria-label="Переключить навигацию">
|
||
<span class="navbar-toggler-icon"></span>
|
||
</button>
|
||
|
||
<!-- Содержимое навигации -->
|
||
<div class="collapse navbar-collapse" id="navbarNav">
|
||
<ul class="navbar-nav me-auto">
|
||
{% if user.is_authenticated %}
|
||
<!-- Основные ссылки навигации -->
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'products' and request.resolver_match.url_name in 'all-products,product-list,productkit-list,product-detail,product-create,product-update,productkit-detail,productkit-create,productkit-update' %}active{% endif %}" href="{% url 'products:all-products' %}">Товары</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.url_name == 'catalog' %}active{% endif %}" href="{% url 'products:catalog' %}"><i class="bi bi-grid-3x3-gap"></i> Каталог</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'products' and 'configurablekit' in request.resolver_match.url_name %}active{% endif %}" href="{% url 'products:configurablekit-list' %}">Вариативные товары</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'products' and 'variantgroup' in request.resolver_match.url_name %}active{% endif %}" href="{% url 'products:variantgroup-list' %}">Варианты</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'products' and 'tag' in request.resolver_match.url_name %}active{% endif %}" href="{% url 'products:tag-list' %}">Теги</a>
|
||
</li>
|
||
<li class="nav-item dropdown">
|
||
<a class="nav-link dropdown-toggle {% if request.resolver_match.namespace == 'orders' %}active{% endif %}" href="{% url 'orders:order-list' %}" id="ordersDropdown">Заказы</a>
|
||
<ul class="dropdown-menu" aria-labelledby="ordersDropdown">
|
||
<li><a class="dropdown-item" href="{% url 'orders:order-list' %}">Список заказов</a></li>
|
||
<li><hr class="dropdown-divider"></li>
|
||
<li><a class="dropdown-item" href="{% url 'orders:status_list' %}">Статусы заказов</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'customers' %}active{% endif %}" href="{% url 'customers:customer-list' %}">Клиенты</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'pos' %}active{% endif %}" href="{% url 'pos:terminal' %}">Касса</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'inventory' and 'showcase' in request.resolver_match.url_name %}active{% endif %}" href="{% url 'inventory:showcase-list' %}">Витрины</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.namespace == 'inventory' and 'showcase' not in request.resolver_match.url_name and 'debug' not in request.resolver_match.url_name %}active{% endif %}" href="{% url 'inventory:inventory-home' %}">Склад</a>
|
||
</li>
|
||
{% if user.is_superuser %}
|
||
<li class="nav-item">
|
||
<a class="nav-link {% if request.resolver_match.url_name == 'debug_page' %}active{% endif %}" href="{% url 'inventory:debug_page' %}" style="color: #dc3545; font-weight: bold;">🔧 Debug</a>
|
||
</li>
|
||
{% endif %}
|
||
{% endif %}
|
||
</ul>
|
||
|
||
<ul class="navbar-nav align-items-center">
|
||
{% if user.is_authenticated %}
|
||
<!-- Кнопки профиля и выхода для авторизованных пользователей -->
|
||
<li class="nav-item">
|
||
<a class="btn btn-outline-primary me-2" href="{% url 'accounts:profile' %}">Профиль</a>
|
||
</li>
|
||
<li class="nav-item d-flex align-items-center mx-2">
|
||
<span class="navbar-text mb-0">
|
||
({{ user.name|default:user.email }})
|
||
</span>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="btn btn-outline-secondary ms-2" href="{% url 'accounts:logout' %}">Выйти</a>
|
||
</li>
|
||
{% else %}
|
||
<!-- Кнопки входа и регистрации для неавторизованных пользователей -->
|
||
<li class="nav-item">
|
||
<a class="btn btn-outline-primary me-2" href="{% url 'accounts:login' %}">Вход</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<a class="btn btn-outline-secondary" href="{% url 'accounts:register' %}">Регистрация</a>
|
||
</li>
|
||
{% endif %}
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</nav>
|