From 769dcae7240f2b463bbc2f31b6750a1011a26d83 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: Fri, 26 Dec 2025 14:41:02 +0300 Subject: [PATCH] =?UTF-8?q?chore:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=BE=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BB=D0=B0=D0=BD=20=D0=B4=D0=BB=D1=8F=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20detail?= =?UTF-8?q?=20view=20=D0=B7=D0=B0=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Создан план с 8 этапами разработки: - Этап 1: Анализ существующего кода - Этап 2: Разработка Backend (RequestDetailView, urls) - Этап 3: Разработка Frontend (шаблоны, JS модули, CSS) - Этап 4: Функциональность комментариев - Этап 5: Функциональность изменения статуса - Этап 6: Обновление уведомлений - Этап 7: Тестирование - Этап 8: Документирование Включает: - Подробное описание каждого этапа - Список файлов для создания/изменения - Чек-листы задач - Временные оценки (~4-6 часов) - Перспективы расширения после завершения --- docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md | 326 ++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md diff --git a/docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md b/docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md new file mode 100644 index 00000000..91c43adb --- /dev/null +++ b/docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md @@ -0,0 +1,326 @@ +# План: Создание Detail View для заявлений + +**Статус:** 🔨 В разработке +**Приоритет:** Высокий +**Сложность:** Средняя +**Время:** ~4-6 часов +**Ветка:** `feature/requests-detail-view` + +--- + +## 📋 Описание задачи + +Создать frontend view для отдельного просмотра заявления через модальное окно на странице списка заявлений. Это позволит: +- Кликать по ссылкам в уведомлениях и попадать на конкретное заявление +- Просматривать полную информацию о заявлении +- Взаимодействовать с заявлением (комментарии, изменение статуса) +- Улучшить UX приложения + +--- + +## 🎯 Этапы разработки + +### Этап 1: Анализ существующего кода (30 мин) + +#### 1.1 Изучить существующую структуру +- [ ] Изучить `RequestsView` в `views_front.py` - как загружаются заявления +- [ ] Посмотреть, как работают функции `request_comments()` и `request_comment_add()` +- [ ] Найти существующий шаблон `requests_list.html` +- [ ] Посмотреть, как реализованы модальные окна в других местах проекта + +#### 1.2 Понять API структуру +- [ ] Изучить `/api/v1/requests/{id}/` эндпоинт в `requests_app/views.py` +- [ ] Посмотреть, какие поля возвращает API для заявления +- [ ] Проверить разрешения и аутентификацию для API + +#### 1.3 Документировать текущее состояние +- [ ] Создать файл `REQUESTS_DETAIL_ANALYSIS.md` с выводами + +--- + +### Этап 2: Разработка Backend (1.5 часа) + +#### 2.1 Создать или обновить view +**Файл:** `backend/requests_app/views_front.py` + +- [ ] Добавить `RequestDetailView` класс + - Наследоваться от `LoginRequiredMixin, TemplateView` + - Загружать данные о заявлении через API + - Получать также комментарии + - Проверять права доступа пользователя + +- [ ] Логика: + ```python + class RequestDetailView(LoginRequiredMixin, TemplateView): + template_name = 'requests/request_detail.html' + + def get_context_data(self, **kwargs): + # 1. Получить ID заявления из URL + # 2. Загрузить данные через API + # 3. Проверить права доступа + # 4. Загрузить комментарии + # 5. Загрузить список статусов для dropdown + # 6. Вернуть в контекст + pass + ``` + +#### 2.2 Обновить URLs +**Файл:** `backend/requests_app/urls_front.py` + +- [ ] Добавить путь: + ```python + path('/', RequestDetailView.as_view(), name='request_detail'), + ``` + +#### 2.3 Обновить уведомления +**Файл:** `backend/requests_app/notification_signals.py` + +- [ ] Обновить URL в уведомлениях: + ```python + action_url=f'/requests/{request_obj.id}/' + ``` + +--- + +### Этап 3: Разработка Frontend (2-3 часа) + +#### 3.1 Создать HTML шаблон +**Файл:** `backend/templates/requests/request_detail.html` + +- [ ] Структура: + - Header с информацией о заявлении + - Основная информация: + - Номер/название + - Статус + - Дата создания + - Автор + - Получатели + - Отделы + - Согласующий + - Вкладки: + - Описание + - История изменений + - Комментарии + - Панель действий (кнопки): + - Обработать/Одобрить/Отклонить (в зависимости от статуса) + - Вернуться к списку + +#### 3.2 Создать JS модуль для модального окна +**Файл:** `backend/static/js/modules/requestDetail.js` + +- [ ] Функции: + - `openRequestModal(requestId)` - открыть модальное окно + - `loadRequestData(requestId)` - загрузить данные через AJAX (опционально) + - `handleStatusChange(requestId, newStatus)` - изменить статус + - `closeRequestModal()` - закрыть модальное окно + +#### 3.3 Интегрировать с существующей страницей списка +**Файл:** `backend/templates/requests/requests_list.html` + +- [ ] Добавить обработчик клика по строкам таблицы +- [ ] При клике на заявление: + - Открыть модальное окно + - Загрузить данные заявления +- [ ] Добавить элементы модального окна в HTML + +#### 3.4 Добавить CSS для модального окна +**Файл:** `backend/static/css/requests_modal.css` или обновить существующий + +- [ ] Стили для: + - Модального окна + - Вкладок + - Комментариев + - Кнопок действий + +--- + +### Этап 4: Функциональность комментариев (1 час) + +#### 4.1 Обновить функцию добавления комментариев +**Файл:** `backend/requests_app/views_front.py` + +- [ ] Убедиться, что `request_comment_add()` работает через AJAX +- [ ] Возвращает JSON ответ +- [ ] Обновить список комментариев после добавления + +#### 4.2 Создать JS для работы с комментариями +**Файл:** `backend/static/js/modules/requestComments.js` + +- [ ] Функции: + - `loadComments(requestId)` - загрузить комментарии + - `addComment(requestId, text)` - добавить комментарий + - `deleteComment(commentId)` - удалить комментарий (если права) + - `renderComments(comments)` - отрисовать список + +--- + +### Этап 5: Функциональность изменения статуса (1 час) + +#### 5.1 Создать view для изменения статуса +**Файл:** `backend/requests_app/views_front.py` + +- [ ] Функция `request_status_change()` если её нет +- [ ] Проверять права доступа +- [ ] Возвращать JSON ответ + +#### 5.2 Обновить API эндпоинт +**Файл:** `backend/api/v1/requests/views.py` + +- [ ] Проверить, есть ли action для изменения статуса +- [ ] Убедиться, что работает через PATCH + +#### 5.3 Создать JS для работы со статусом +**Файл:** `backend/static/js/modules/requestStatus.js` + +- [ ] Функции: + - `changeStatus(requestId, newStatus)` - изменить статус + - `getAvailableStatuses(currentStatus)` - получить доступные переходы + +--- + +### Этап 6: Обновление уведомлений (30 мин) + +#### 6.1 Обновить все сигналы уведомлений +**Файл:** `backend/requests_app/notification_signals.py` + +- [ ] Найти все места, где генерируется `action_url` +- [ ] Заменить на `/requests/{request_obj.id}/` +- [ ] Строки: 122, 231, 315 + +#### 6.2 Обновить отчет об аудите +**Файл:** `backend/docs/reports/NOTIFICATION_URLS_AUDIT.md` + +- [ ] Обновить статус для requests +- [ ] Добавить информацию о новом detail view + +--- + +### Этап 7: Тестирование (1-2 часа) + +#### 7.1 Ручное тестирование +- [ ] Тестировать открытие заявления из списка +- [ ] Тестировать открытие по прямой ссылке (`/requests/{id}/`) +- [ ] Тестировать открытие из уведомления +- [ ] Тестировать добавление комментариев +- [ ] Тестировать изменение статуса +- [ ] Тестировать разные роли пользователей +- [ ] Тестировать на мобильных устройствах + +#### 7.2 Проверка прав доступа +- [ ] Пользователь может видеть только свои заявления +- [ ] Ответственный может видеть назначенные заявления +- [ ] Администратор может видеть все заявления +- [ ] Проверить CSRF токен + +#### 7.3 Проверка производительности +- [ ] Нет N+1 запросов +- [ ] Кэширование где нужно +- [ ] Время загрузки приемлемо + +--- + +### Этап 8: Документирование (30 мин) + +#### 8.1 Обновить документацию +**Файл:** `backend/docs/guides/` или создать новый + +- [ ] Создать `REQUESTS_DETAIL_VIEW_GUIDE.md` +- [ ] Описать структуру +- [ ] Документировать JS модули +- [ ] Примеры использования + +#### 8.2 Обновить основной README +**Файл:** `README.md` + +- [ ] Добавить информацию о новой функции +- [ ] Обновить скриншоты (если есть) + +--- + +## 📁 Файлы для создания/изменения + +### Создать новые файлы: +``` +backend/templates/requests/request_detail.html # Шаблон детального просмотра +backend/static/js/modules/requestDetail.js # Логика модального окна +backend/static/js/modules/requestComments.js # Работа с комментариями +backend/static/js/modules/requestStatus.js # Изменение статуса +backend/static/css/requests_modal.css # Стили модального окна +backend/docs/guides/REQUESTS_DETAIL_VIEW_GUIDE.md # Документация +docs/in-progress/REQUESTS_DETAIL_ANALYSIS.md # Анализ на этапе 1 +``` + +### Изменить существующие файлы: +``` +backend/requests_app/views_front.py # Добавить RequestDetailView +backend/requests_app/urls_front.py # Добавить маршрут +backend/requests_app/notification_signals.py # Обновить action_url +backend/docs/reports/NOTIFICATION_URLS_AUDIT.md # Обновить статус +``` + +--- + +## 🔗 Зависимости + +### От чего зависит эта задача: +- ✅ Существующая структура views +- ✅ API эндпоинты уже есть +- ✅ Модальные окна уже используются в проекте + +### Что от этой задачи зависит: +- ❓ Возможное улучшение UX для других сущностей (документы, события) +- ❓ Интеграция с другими системами уведомлений + +--- + +## 🚀 Перспективы после завершения + +1. **Возможное расширение:** + - Применить тот же подход к Documents + - Применить к Calendar Events + - Создать universal detail modal component + +2. **Оптимизации:** + - Добавить кэширование через Redis + - Оптимизировать N+1 запросы + - Добавить предварительную загрузку данных + +3. **Функциональность:** + - Добавить экспорт заявления в PDF + - Добавить подписание электронной подписью + - Добавить шаблоны ответов + +--- + +## 📊 Чек-лист завершения + +- [ ] Все файлы созданы +- [ ] Все изменения сделаны +- [ ] Тесты пройдены +- [ ] Документация обновлена +- [ ] Code review пройден +- [ ] Merged в master +- [ ] Развернуто на production + +--- + +## 🔄 Git процесс + +```bash +# Создание ветки +git checkout -b feature/requests-detail-view + +# После завершения каждого этапа +git add . +git commit -m "feat: requests detail view - stage N: description" + +# После полного завершения +git push origin feature/requests-detail-view +# Создать Pull Request на GitHub +``` + +--- + +**Дата создания плана:** 26 декабря 2025 г. +**Автор:** GitHub Copilot +**Контакт:** Igor Nadein