From c7bc99398fc33947bc6e7c8e422e86d307416b48 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, 15 Dec 2025 09:54:31 +0300 Subject: [PATCH] refactor: switch equipment_detail from CSR to SSR - Updated equipment_detail view to load data from DB (SSR) - Added select_related and prefetch_related for optimization - Implemented can_manage permission check in view - Removed loadEquipmentDetail() JavaScript API call - Added breadcrumb navigation - Kept action handlers (maintenance, transfer, write-off) - Added department loading for transfer modal - Now consistent with request_detail SSR approach --- backend/procurement/views_frontend.py | 43 +++++++++++++- .../procurement/equipment_detail.html | 57 ++++++++----------- 2 files changed, 63 insertions(+), 37 deletions(-) diff --git a/backend/procurement/views_frontend.py b/backend/procurement/views_frontend.py index d90b006f..4895e2e1 100644 --- a/backend/procurement/views_frontend.py +++ b/backend/procurement/views_frontend.py @@ -195,11 +195,48 @@ def equipment_list(request): def equipment_detail(request, pk): """Детальная страница оборудования. - Данные загружаются через API: - - /api/procurement/equipment/{pk}/ + Загружает данные из БД и передаёт в шаблон. + + Права на управление (can_manage): + - Админы/Staff → любое оборудование + - Начальник отдела → оборудование своего отдела + - Ответственный за оборудование → своё оборудование """ + from django.shortcuts import get_object_or_404 + from procurement.models import Equipment + + equipment = get_object_or_404( + Equipment.objects.select_related( + 'department', + 'department__head', + 'category', + 'responsible_person', + 'procurement_item', + 'procurement_item__request' + ).prefetch_related( + 'maintenance_records', + 'transfer_logs__from_department', + 'transfer_logs__to_department', + 'transfer_logs__from_person', + 'transfer_logs__to_person' + ), + pk=pk + ) + + user = request.user + + # Проверяем права на управление + can_manage = False + if user.is_superuser or user.is_staff: + can_manage = True + elif equipment.department and equipment.department.head == user: + can_manage = True + elif equipment.responsible_person == user: + can_manage = True + return render(request, 'procurement/equipment_detail.html', { - 'equipment_id': pk, + 'equipment': equipment, + 'can_manage': can_manage, }) diff --git a/backend/templates/procurement/equipment_detail.html b/backend/templates/procurement/equipment_detail.html index 8e785b33..e308bc6c 100644 --- a/backend/templates/procurement/equipment_detail.html +++ b/backend/templates/procurement/equipment_detail.html @@ -347,44 +347,33 @@ {% block extra_js %}