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:
parent
aeaee621cc
commit
08853d42cb
326
docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md
Normal file
326
docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user