Приложение Tasks, системы Карта Успеха — различия между версиями
Материал из m6a
								
												
				Vshpagin (обсуждение | вклад)  (→Task)  | 
				Vshpagin (обсуждение | вклад)   (→CopyTaskForm)  | 
				||
| (не показаны 3 промежуточные версии этого же участника) | |||
| Строка 14: | Строка 14: | ||
=== Методы модели ===  | === Методы модели ===  | ||
| − | + |   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)  | ||
== Функциональность ==  | == Функциональность ==  | ||
| Строка 39: | Строка 51: | ||
== URL маршруты ==  | == 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 ===  | === TaskForm ===  | ||
| − | + |   class TaskForm(forms.ModelForm):  | |
| − | + |     fields = ['project', 'name', 'description', 'deadline']  | |
| − | + |     labels = {  | |
| − | + |         'name': 'Название',  | |
| − | + |         'project': 'Проект',  | |
| − | + |         'description': 'Описание',  | |
| − | + |         'deadline': 'Срок',  | |
| + |     }  | ||
=== 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` - после сохранения
 - Обновление прогресса проекта
 - Автоматический расчет процентов
 
Особенности реализации
Управление прогрессом
- Автоматический расчет
 - Обновление связанных проектов
 - Отслеживание мероприятий
 
Отслеживание времени
- Дедлайны
 - Длительность мероприятий
 - Копирование задач
 
Дополнительные поля
- Описание
 - Связь с проектом
 - Процент завершенности