Конкретно пересмотрел логику работы. Легаси вынесена в архив
All checks were successful
Deploy MES Core / deploy (push) Successful in 13s

This commit is contained in:
2026-04-13 07:36:57 +03:00
parent 86215c9fa8
commit 28537447f8
80 changed files with 10246 additions and 684 deletions

View File

@@ -0,0 +1,60 @@
{% if can_add_to_deal %}
<button type="button" class="btn btn-outline-accent btn-sm" data-bs-toggle="modal" data-bs-target="#addToDealModal{{ entity.id }}">
Добавить в сделку
</button>
<div class="modal fade" id="addToDealModal{{ entity.id }}" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg">
<form method="post" action="{% url 'deal_item_upsert' %}" class="modal-content border-secondary">
{% csrf_token %}
<input type="hidden" name="entity_id" value="{{ entity.id }}">
<input type="hidden" name="next" value="{{ request.get_full_path }}">
<div class="modal-header border-secondary">
<h5 class="modal-title">Добавить в сделку</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
</div>
<div class="modal-body">
<div class="row g-2">
<div class="col-md-8">
<label class="form-label">Сделка (Зашла)</label>
<select class="form-select bg-body text-body border-secondary" name="deal_id" required {% if not deals_for_add %}disabled{% endif %}>
{% if deals_for_add %}
{% for d in deals_for_add %}
<option value="{{ d.id }}">{{ d.number }}{% if d.company %} ({{ d.company }}){% endif %}</option>
{% endfor %}
{% else %}
<option value="">Нет сделок в статусе «Зашла»</option>
{% endif %}
</select>
{% if not deals_for_add %}
<div class="form-text text-danger">Нечего добавить: нет сделок в статусе «Зашла».</div>
{% endif %}
</div>
<div class="col-md-4">
<label class="form-label">Кол-во, шт</label>
<input class="form-control bg-body text-body border-secondary" type="number" name="quantity" value="1" min="1" required>
</div>
<div class="col-md-6">
<label class="form-label">Отгрузка (опц.)</label>
<input class="form-control bg-body text-body border-secondary" type="date" name="due_date">
</div>
<div class="col-md-6">
<label class="form-label">Компонент</label>
<input class="form-control bg-body text-body border-secondary" value="{{ entity }}" disabled>
</div>
</div>
</div>
<div class="modal-footer border-secondary">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="submit" class="btn btn-outline-accent">Добавить</button>
</div>
</form>
</div>
</div>
{% endif %}

View File

@@ -1,61 +0,0 @@
<nav class="navbar navbar-expand-lg border-bottom shadow-sm">
<div class="container-fluid">
<a class="navbar-brand fw-bold text-accent" href="/">
<i class="bi bi-gear-fill me-2"></i>ShiftFlow
</a>
<button class="navbar-toggler text-light border-secondary" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon" style="filter: invert(1);"></span>
</button>
<div class="collapse navbar-collapse">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'items_list' %}active{% endif %}" href="{% url 'registry' %}">Реестр</a>
</li>
{% if user_role in 'admin,technologist' %}
<li class="nav-item"><a class="nav-link" href="#">Планирование</a></li>
{% endif %}
{% if user_role in 'admin,technologist,master,operator' %}
<li class="nav-item"><a class="nav-link" href="#">Закрытие</a></li>
{% endif %}
{% if user_role in 'admin,technologist,clerk' %}
<li class="nav-item"><a class="nav-link" href="#">Списание</a></li>
{% endif %}
</ul>
<div class="d-flex align-items-center gap-3">
<span class="badge bg-secondary opacity-75 px-3 py-2 fw-normal">
<i class="bi bi-person-circle me-1"></i>
{% if user_role == 'admin' %}Админ
{% elif user_role == 'technologist' %}Технолог
{% elif user_role == 'master' %}Мастер
{% elif user_role == 'operator' %}Оператор
{% elif user_role == 'clerk' %}Учетчик
{% endif %}
({{ request.user.username|upper }})
</span>
{% if user_role == 'admin' %}
<a href="/admin/" class="btn btn-link text-decoration-none text-reset p-0" title="Админка">
<i class="bi bi-shield-lock fs-5"></i>
</a>
{% endif %}
<button class="btn btn-link text-reset p-0" onclick="toggleTheme()" title="Сменить тему">
<i id="theme-icon" class="bi fs-5"></i>
</button>
<form action="{% url 'logout' %}" method="post" class="d-inline">
{% csrf_token %}
<button type="submit" class="btn btn-link text-danger p-0 ms-2" title="Выйти">
<i class="bi bi-box-arrow-right fs-5"></i>
</button>
</form>
</div>
</div>
</div>
</nav>

View File

@@ -14,11 +14,24 @@
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'registry' %}active{% endif %}" href="{% url 'registry' %}">Реестр</a>
</li>
{% if user_role in 'admin,supply,observer,clerk,prod_head,director' %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'procurement' %}active{% endif %}" href="{% url 'procurement' %}">Снабжение</a>
</li>
{% endif %}
{% if user_role in 'admin,technologist,master,clerk,observer' %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'planning' or request.resolver_match.url_name == 'planning_deal' %}active{% endif %}" href="{% url 'planning' %}">Сделки</a>
</li>
{% if user_role in 'admin,technologist,master,clerk' %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'planning_stages' %}active{% endif %}" href="{% url 'planning_stages' %}">План</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'customers' or request.resolver_match.url_name == 'customer_deals' %}active{% endif %}" href="{% url 'customers' %}">Заказчик</a>
</li>
@@ -27,24 +40,51 @@
</li>
{% endif %}
{% if user_role in 'admin,technologist,observer' or request.user.is_superuser %}
{% if user_role in 'admin,technologist,master,clerk,observer,prod_head,director' %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'products' %}active{% endif %}" href="{% url 'products' %}">Изделия</a>
<a class="nav-link {% if request.resolver_match.url_name == 'directories' or request.resolver_match.url_name == 'materials_catalog' or request.resolver_match.url_name == 'material_categories_catalog' or request.resolver_match.url_name == 'steel_grades_catalog' or request.resolver_match.url_name == 'supply_catalog' or request.resolver_match.url_name == 'locations_catalog' or request.resolver_match.url_name == 'workshops_catalog' or request.resolver_match.url_name == 'workshop_detail' or request.resolver_match.url_name == 'machines_catalog' %}active{% endif %}" href="{% url 'directories' %}">Справочники</a>
</li>
{% endif %}
{% if user_role in 'admin,master,operator,observer' %}
{% if user_role == 'admin' or user_role == 'technologist' or user_role == 'observer' or request.user.is_superuser %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'closing' %}active{% endif %}" href="{% url 'closing' %}">Закрытие</a>
<a class="nav-link {% if request.resolver_match.url_name == 'products' or request.resolver_match.url_name == 'product_detail' or request.resolver_match.url_name == 'product_info' %}active{% endif %}" href="{% url 'products' %}">Изделия</a>
</li>
{% endif %}
{% if user_role in 'admin,clerk,observer' %}
{% if user_role in 'admin,master,operator,prod_head' %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'closing_workitems' or request.resolver_match.url_name == 'closing' %}active{% endif %}" href="{% url 'closing_workitems' %}">Закрытие</a>
</li>
{% endif %}
{% if user_role in 'admin,clerk,observer,prod_head,director' %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'writeoffs' %}active{% endif %}" href="{% url 'writeoffs' %}">Списание</a>
</li>
{% endif %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle {% if request.resolver_match.url_name == 'legacy_registry' or request.resolver_match.url_name == 'legacy_closing' %}active{% endif %}" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Архив
</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="{% url 'legacy_registry' %}">Архив / Реестр</a>
</li>
{% if user_role in 'admin,master,operator,prod_head' %}
<li>
<a class="dropdown-item" href="{% url 'legacy_closing' %}">Архив / Закрытие</a>
</li>
{% endif %}
{% if user_role in 'admin,clerk,observer,prod_head,director' %}
<li>
<a class="dropdown-item" href="{% url 'legacy_writeoffs' %}">Архив / Списание</a>
</li>
{% endif %}
</ul>
</li>
{% if user_role == 'admin' %}
<li class="nav-item">
<a class="nav-link {% if request.resolver_match.url_name == 'maintenance' %}active{% endif %}" href="{% url 'maintenance' %}">Обслуживание сервера</a>