Corp/docs/in-progress/REQUESTS_DETAIL_VIEW_PLAN.md

13 KiB
Raw Blame History

План: Создание 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 для других сущностей (документы, события)
  • ❓ Интеграция с другими системами уведомлений

🚀 Перспективы после завершения

  1. Возможное расширение:

    • Применить тот же подход к Documents
    • Применить к Calendar Events
    • Создать universal detail modal component
  2. Оптимизации:

    • Добавить кэширование через Redis
    • Оптимизировать N+1 запросы
    • Добавить предварительную загрузку данных
  3. Функциональность:

    • Добавить экспорт заявления в 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