Создан план с 8 этапами разработки: - Этап 1: Анализ существующего кода - Этап 2: Разработка Backend (RequestDetailView, urls) - Этап 3: Разработка Frontend (шаблоны, JS модули, CSS) - Этап 4: Функциональность комментариев - Этап 5: Функциональность изменения статуса - Этап 6: Обновление уведомлений - Этап 7: Тестирование - Этап 8: Документирование Включает: - Подробное описание каждого этапа - Список файлов для создания/изменения - Чек-листы задач - Временные оценки (~4-6 часов) - Перспективы расширения после завершения
13 KiB
План: Создание 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
- Получать также комментарии
- Проверять права доступа пользователя
- Наследоваться от
-
Логика:
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
- Добавить путь:
path('<int:pk>/', RequestDetailView.as_view(), name='request_detail'),
2.3 Обновить уведомления
Файл: backend/requests_app/notification_signals.py
- Обновить URL в уведомлениях:
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 для других сущностей (документы, события)
- ❓ Интеграция с другими системами уведомлений
🚀 Перспективы после завершения
-
Возможное расширение:
- Применить тот же подход к Documents
- Применить к Calendar Events
- Создать universal detail modal component
-
Оптимизации:
- Добавить кэширование через Redis
- Оптимизировать N+1 запросы
- Добавить предварительную загрузку данных
-
Функциональность:
- Добавить экспорт заявления в PDF
- Добавить подписание электронной подписью
- Добавить шаблоны ответов
📊 Чек-лист завершения
- Все файлы созданы
- Все изменения сделаны
- Тесты пройдены
- Документация обновлена
- Code review пройден
- Merged в master
- Развернуто на production
🔄 Git процесс
# Создание ветки
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