Приложение Tasks, системы Карта Успеха — различия между версиями

Материал из m6a
Перейти к: навигация, поиск
(Новая страница: «== Общее описание == Приложение `tasks` отвечает за управление задачами в системе "Карта успе…»)
 
(CopyTaskForm)
 
(не показаны 4 промежуточные версии этого же участника)
Строка 5: Строка 5:
  
 
=== Task ===
 
=== Task ===
* (Опишите поля модели `Task`, например:
+
  class Task(models.Model):
** `id` - Integer (Primary Key)
+
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='tasks')
** `project` - ForeignKey (связь с моделью Project)
+
    project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='tasks')
** `name` - CharField (название задачи)
+
    name = models.CharField(max_length=100)
** `description` - TextField (описание)
+
    description = models.TextField(blank=True)
** `deadline` - DateField (дата завершения)
+
    deadline = models.DateTimeField(null=True, blank=True)
** `completion_percentage` - IntegerField (процент завершенности, от 0 до 100)
+
    completion_percentage = models.IntegerField(default=0)
)
+
  
 
=== Методы модели ===
 
=== Методы модели ===
* (Опишите методы модели `Task`, например:
+
  def clean(self):
** `clean()` - Валидация модели
+
    """Валидация процента завершенности."""
** `calculate_progress()` - Расчет прогресса задачи на основе мероприятий
+
    if not (0 <= self.completion_percentage <= 100):
)
+
        raise ValidationError('Процент завершенности должен быть между 0 и 100.')
 +
 
 +
  def save(self, *args, **kwargs):
 +
    """Автоматический расчет процента завершенности."""
 +
    self.clean()
 +
    activities = self.activities.all()
 +
    total_activities = activities.count()
 +
    if total_activities > 0:
 +
        completed_activities = activities.filter(is_completed=True).count()
 +
        self.completion_percentage = int((completed_activities / total_activities) * 100)
 +
    else:
 +
        self.completion_percentage = 0
 +
    super().save(*args, **kwargs)
  
 
== Функциональность ==
 
== Функциональность ==
Строка 40: Строка 51:
  
 
== URL маршруты ==
 
== URL маршруты ==
* (Перечислите URL маршруты приложения и их соответствие представлениям, например:
+
  /tasks/
** `/tasks/` - Список задач
+
  ├── ''                    # Список задач
** `/tasks/<int:pk>/` - Детали задачи
+
  ├── '<int:pk>/'          # Детали задачи
** `/tasks/create/` - Создание задачи
+
  ├── 'create/<int:project_id>/'  # Создание
** `/tasks/<int:pk>/update/` - Редактирование задачи
+
  ├── '<int:pk>/update/'  # Обновление
** `/tasks/<int:pk>/delete/` - Удаление задачи
+
  ├── '<int:pk>/delete/'  # Удаление
** `/tasks/<int:pk>/copy/` - Копирование задачи
+
  ├── 'update_task_completion/<int:pk>/'  # Обновление прогресса
)
+
  └── 'task_create_repeating/<int:task_id>/'  # Копирование задачи
  
 
== Формы ==
 
== Формы ==
  
 
=== TaskForm ===
 
=== TaskForm ===
* (Опишите поля формы `TaskForm`, например:
+
  class TaskForm(forms.ModelForm):
** `name` - CharField (поле для ввода названия)
+
    fields = ['project', 'name', 'description', 'deadline']
** `description` - TextField (поле для ввода описания)
+
    labels = {
** `project` - ForeignKey (выбор проекта)
+
        'name': 'Название',
** `deadline` - DateField (поле для ввода даты завершения)
+
        'project': 'Проект',
** `completion_percentage` - IntegerField (поле для ввода процента завершенности)
+
        'description': 'Описание',
)
+
        'deadline': 'Срок',
 +
    }
  
 
=== CopyTaskForm ===
 
=== CopyTaskForm ===
* (Опишите поля формы `CopyTaskForm`, необходимые для копирования задачи)
+
  class CopyTaskForm(forms.Form):
 +
    start_date = forms.DateField(label="Начальная дата")
 +
    end_date = forms.DateField(label="Конечная дата")
  
 
== Шаблоны ==
 
== Шаблоны ==

Текущая версия на 14:13, 30 марта 2025

Общее описание

Приложение `tasks` отвечает за управление задачами в системе "Карта успеха". Каждая задача связана с проектом и содержит набор мероприятий для её выполнения.

Модель данных

Task

 class Task(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='tasks')
   project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='tasks')
   name = models.CharField(max_length=100)
   description = models.TextField(blank=True)
   deadline = models.DateTimeField(null=True, blank=True)
   completion_percentage = models.IntegerField(default=0)

Методы модели

 def clean(self):
   """Валидация процента завершенности."""
   if not (0 <= self.completion_percentage <= 100):
       raise ValidationError('Процент завершенности должен быть между 0 и 100.')
 def save(self, *args, **kwargs):
   """Автоматический расчет процента завершенности."""
   self.clean()
   activities = self.activities.all()
   total_activities = activities.count()
   if total_activities > 0:
       completed_activities = activities.filter(is_completed=True).count()
       self.completion_percentage = int((completed_activities / total_activities) * 100)
   else:
       self.completion_percentage = 0
   super().save(*args, **kwargs)

Функциональность

Основные операции

  • Создание задач
  • Редактирование задач
  • Удаление задач
  • Просмотр списка задач
  • Просмотр деталей задачи

Управление статусом

  • Фильтрация задач (срочные, активные, просроченные)
  • Отслеживание прогресса
  • Копирование задач

Дополнительные функции

  • Расчет длительности мероприятий
  • Управление мероприятиями
  • Автоматическое обновление прогресса

URL маршруты

 /tasks/
 ├──                     # Список задач
 ├── '<int:pk>/'          # Детали задачи
 ├── 'create/<int:project_id>/'  # Создание
 ├── '<int:pk>/update/'   # Обновление
 ├── '<int:pk>/delete/'   # Удаление
 ├── 'update_task_completion/<int:pk>/'  # Обновление прогресса
 └── 'task_create_repeating/<int:task_id>/'  # Копирование задачи

Формы

TaskForm

 class TaskForm(forms.ModelForm):
   fields = ['project', 'name', 'description', 'deadline']
   labels = {
       'name': 'Название',
       'project': 'Проект',
       'description': 'Описание',
       'deadline': 'Срок',
   }

CopyTaskForm

 class CopyTaskForm(forms.Form):
   start_date = forms.DateField(label="Начальная дата")
   end_date = forms.DateField(label="Конечная дата")

Шаблоны

Основные шаблоны

  • `task_list.html` - список задач
  • `task_detail.html` - детали задачи
  • `task_form.html` - форма создания/редактирования
  • `task_copy_form.html` - форма копирования задачи

Особенности шаблонов

  • Фильтрация задач
  • Отображение прогресса
  • Управление мероприятиями
  • Навигация по хлебным крошкам

Тестирование

Модульные тесты

  • Создание задачи
  • Валидация процента завершенности
  • Расчет прогресса
  • Копирование задач

Проверяемые аспекты

  • Корректность данных
  • Ограничения модели
  • Валидация полей
  • Связи с проектами

Безопасность

Защита

  • Декоратор `@login_required`
  • Валидация данных
  • Проверка прав доступа
  • CSRF защита

Валидация

  • Проверка процентов
  • Валидация дат
  • Обязательные поля
  • Форматы данных

Интеграция

С другими приложениями

  • Связь с проектами
  • Связь с мероприятиями
  • Интеграция с пользователями

Сигналы

  • `post_save` - после сохранения
  • Обновление прогресса проекта
  • Автоматический расчет процентов

Особенности реализации

Управление прогрессом

  • Автоматический расчет
  • Обновление связанных проектов
  • Отслеживание мероприятий

Отслеживание времени

  • Дедлайны
  • Длительность мероприятий
  • Копирование задач

Дополнительные поля

  • Описание
  • Связь с проектом
  • Процент завершенности