Приложение Activities, системы Карта Успеха
Материал из m6a
Содержание
Общее описание
Приложение `activities` отвечает за управление мероприятиями (активностями) в системе "Карта успеха". Каждое мероприятие связано с задачей и имеет определенную продолжительность и временные интервалы.
Модель данных
Activity
class Activity(models.Model):
INTERVAL_CHOICES = [
('not_important', 'Не важно'),
('morning', 'Утро'),
('afternoon', 'День'),
('evening', 'Вечер'),
('night', 'Ночь'),
]
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='activities')
task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='activities')
name = models.CharField(max_length=100)
description = models.TextField(blank=True)
start_time = models.DateTimeField(null=True, blank=True)
duration = models.DurationField(default=timedelta(minutes=30))
is_completed = models.BooleanField(default=False)
depends_on = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)
lead_time = models.DurationField(default=timedelta(days=1))
interval = models.CharField(max_length=20, choices=INTERVAL_CHOICES)
ActivityManager
class ActivityManager(models.Manager):
def total_duration_for_date(self, date):
start_of_day = timezone.make_aware(timezone.datetime.combine(date, timezone.datetime.min.time()))
end_of_day = timezone.make_aware(timezone.datetime.combine(date, timezone.datetime.max.time()))
return self.filter(start_time__range=(start_of_day, end_of_day)).aggregate(total=Sum('duration'))['total']
Функциональность
Основные операции
- Создание мероприятий
- Редактирование мероприятий
- Удаление мероприятий
- Просмотр списка мероприятий
- Просмотр деталей мероприятия
Управление временем
- Планирование мероприятий
- Фильтрация по времени
- Расчет длительности
- Управление интервалами
Дополнительные функции
- Зависимости между мероприятиями
- Массовое обновление интервалов
- Календарное представление
- Планировщик мероприятий
URL маршруты
/activities/ ├── # Список мероприятий ├── '<int:pk>/' # Детали мероприятия ├── 'create/<int:task_id>/' # Создание ├── '<int:pk>/update/' # Обновление ├── '<int:pk>/delete/' # Удаление ├── 'calendar/' # Календарь ├── 'schedule/' # Планировщик └── 'update_interval/' # Обновление интервалов
Формы
ActivityForm
class ActivityForm(forms.ModelForm):
DURATION_CHOICES = [
('0:05:00', '5 минут'),
('0:10:00', '10 минут'),
# ... другие варианты длительности
]
LEAD_TIME_CHOICES = [
('0:30:00', '30 минут'),
('1:00:00', '1 час'),
# ... другие варианты времени
]
INTERVAL_CHOICES = [
('not_important', 'Не важно'),
('morning', 'Утро'),
# ... другие интервалы
]
Шаблоны
Основные шаблоны
- `activity_list.html` - список мероприятий
- `activity_detail.html` - детали мероприятия
- `activity_form.html` - форма создания/редактирования
- `update_interval.html` - форма обновления интервалов
Особенности шаблонов
- Фильтрация мероприятий
- Отображение длительности
- Управление зависимостями
- Навигация по хлебным крошкам
Тестирование
Модульные тесты
- Создание мероприятия
- Валидация времени
- Расчет длительности
- Управление зависимостями
Проверяемые аспекты
- Корректность данных
- Ограничения модели
- Валидация полей
- Связи с задачами
Безопасность
Защита
- Декоратор `@login_required`
- Валидация данных
- Проверка прав доступа
- CSRF защита
Валидация
- Проверка времени
- Валидация длительности
- Обязательные поля
- Форматы данных
Интеграция
С другими приложениями
- Связь с задачами
- Связь с ресурсами
- Интеграция с пользователями
Сигналы
- `post_save` - после сохранения
- Обновление прогресса задачи
- Расчет длительности мероприятия
Особенности реализации
Управление временем
- Планировщик мероприятий
- Фильтрация по времени
- Расчет длительности
- Управление интервалами
Отслеживание зависимостей
- Ведущие мероприятия
- Время на подготовку
- Связи между мероприятиями
- Обновление статусов
Дополнительные поля
- Описание
- Интервал времени
- Длительность
- Статус выполнения