From be21b9ca4a7bd5fa08c97fce96b90736bdd26ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Mon, 29 Dec 2025 12:25:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=86=D0=B0=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=B7=D0=B0=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправлено: - Добавлена правильная структура card-header с аватаром 48x48px - Добавлены все необходимые детали: получатели, копия, согласующий - Исправлены стили для badge и card-body - Добавлена корректная форма комментария с emoji picker и auto-expand - Подключены правильные JavaScript компоненты - Исправлен формат дат (d.m.Y H:i) - Добавлена передача can_process в контексте view Добавлено: - Иконки для каждого раздела (получатели, копия, согласующий) - Ссылки на карточки сотрудников - Правильные Badge с subtle цветами - Форма комментария с message-field компонентом --- backend/requests_app/views.py | 13 +- .../requests_app/request_detail.html | 249 +++++++++++++++--- 2 files changed, 220 insertions(+), 42 deletions(-) diff --git a/backend/requests_app/views.py b/backend/requests_app/views.py index 90f7db02..837481e3 100644 --- a/backend/requests_app/views.py +++ b/backend/requests_app/views.py @@ -278,7 +278,18 @@ def my_requests(request): @login_required def request_detail(request, pk): req = get_object_or_404(DETAIL_REQUEST_QS, pk=pk, employee=request.user) - return render(request, "requests_app/request_detail.html", {"request_obj": req}) + + # Проверяем, может ли пользователь обрабатывать заявления + # (является получателем этого заявления или имеет права) + user_can_process = ( + request.user in req.recipients.all() or + can_process_requests(request.user) + ) + + return render(request, "requests_app/request_detail.html", { + "request_obj": req, + "can_process": user_can_process + }) @login_required diff --git a/backend/templates/requests_app/request_detail.html b/backend/templates/requests_app/request_detail.html index 3c4c035a..120a8724 100644 --- a/backend/templates/requests_app/request_detail.html +++ b/backend/templates/requests_app/request_detail.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% load static %} -{% block title %}Заявление #{{ request_obj.id }}{% endblock %} +{% block title %}Заявление #{{ request.id }}{% endblock %} {% block extra_css %} @@ -29,16 +29,20 @@ {# ===== Основная информация о заявлении ===== #}
-
-
- +
+
+ {% if request.employee.avatar %} + Аватар + {% else %} + + {% endif %}
-
- +
+ {{ request_obj.employee.full_name|default:request_obj.employee.display_name }} - + {# статус — бейдж #} {% if request_obj.status == 'pending' %} @@ -55,42 +59,116 @@ Неизвестно {% endif %} + {# тип заявления #} + + {{ request_obj.get_type_display }} +
-
- +
+ {% if request_obj.date_from or request_obj.date_to %} · Период: {{ request_obj.date_from|date:'d.m.Y' }}{% if request_obj.date_to %} — {{ request_obj.date_to|date:'d.m.Y' }}{% endif %} {% endif %}
- {# Отозвать — временно отключено (TODO: добавить в urls_front.py) - {% if request_obj.status == 'pending' and not request_obj.is_final %} - - Отозвать - + {# Кнопки действий #} + {% if can_process and request_obj.status == 'pending' %} +
+ + +
{% endif %} - #} +
+ {# Тема заявления #} {% if request_obj.title %} -
{{ request_obj.title }}
+
+ Тема: +
{{ request_obj.title }}
+
{% endif %} + {# Комментарий сотрудника #}
Комментарий:
{{ request_obj.comment|default:"—"|linebreaksbr }}
+ {# Получатели #} + {% if request_obj.recipients.exists %} +
+ + Получатели: + +
+ {% for recipient in request_obj.recipients.all %} + + {{ recipient.full_name|default:recipient.display_name }} + + {% endfor %} +
+
+ {% endif %} + + {# Копия #} + {% if request_obj.cc_users.exists %} +
+ + В копии: + +
+ {% for cc_user in request_obj.cc_users.all %} + + {{ cc_user.full_name|default:cc_user.display_name }} + + {% endfor %} +
+
+ {% endif %} + + {# Согласующий #} + {% if request_obj.approver %} +
+ + Согласовал: + + + {{ request_obj.approver.full_name|default:request_obj.approver.display_name }} + + {% if request_obj.decided_at %} + + {{ request_obj.decided_at|date:"d.m.Y H:i" }} + + {% endif %} +
+ {% endif %} + + {# Вложение #} {% if request_obj.attachment_url %} - - - Вложение - + {% endif %}
@@ -98,7 +176,7 @@ {# ===== Комментарии ===== #}
-
+
@@ -114,14 +192,14 @@
- {{ c.author.full_name|default:c.author.display_name }} + {{ c.author.full_name|default:c.author.display_name }} · - +
{# удалить — только автору комментария #} {% if c.author.id == request.user.id %} -
+ {% csrf_token %} +
+ + +
+
+ + +