chore: добавлен подробный план для разработки detail view заявлений

Создан план с 8 этапами разработки:
- Этап 1: Анализ существующего кода
- Этап 2: Разработка Backend (RequestDetailView, urls)
- Этап 3: Разработка Frontend (шаблоны, JS модули, CSS)
- Этап 4: Функциональность комментариев
- Этап 5: Функциональность изменения статуса
- Этап 6: Обновление уведомлений
- Этап 7: Тестирование
- Этап 8: Документирование

Включает:
- Подробное описание каждого этапа
- Список файлов для создания/изменения
- Чек-листы задач
- Временные оценки (~4-6 часов)
- Перспективы расширения после завершения
This commit is contained in:
Игорь Надеин 2025-12-26 14:41:02 +03:00
parent a2500ee377
commit 769dcae724

View File

@ -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('<int:pk>/', 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