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

Материал из m6a
Перейти к: навигация, поиск
(Activity)
(ActivityForm)
 
(не показаны 3 промежуточные версии этого же участника)
Строка 13: Строка 13:
 
         ('night', 'Ночь'),
 
         ('night', 'Ночь'),
 
     ]
 
     ]
 
 
     user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='activities')
 
     user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='activities')
 
     task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='activities')
 
     task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name='activities')
Строка 26: Строка 25:
  
 
=== ActivityManager ===
 
=== ActivityManager ===
* (Опишите пользовательский менеджер для модели `Activity`, если он используется, например:
+
  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']
  
 
== Функциональность ==
 
== Функциональность ==
Строка 52: Строка 53:
  
 
== URL маршруты ==
 
== URL маршруты ==
* (Перечислите URL маршруты приложения и их соответствие представлениям, например:
+
  /activities/
** `/activities/` - Список мероприятий
+
  ├── ''                    # Список мероприятий
** `/activities/<int:pk>/` - Детали мероприятия
+
  ├── '<int:pk>/'          # Детали мероприятия
** `/activities/create/` - Создание мероприятия
+
  ├── 'create/<int:task_id>/'  # Создание
** `/activities/<int:pk>/update/` - Редактирование мероприятия
+
  ├── '<int:pk>/update/'  # Обновление
** `/activities/<int:pk>/delete/` - Удаление мероприятия
+
  ├── '<int:pk>/delete/'  # Удаление
** `/activities/calendar/` - Календарное представление мероприятий
+
  ├── 'calendar/'          # Календарь
)
+
  ├── 'schedule/'          # Планировщик
 +
  └── 'update_interval/'  # Обновление интервалов
  
 
== Формы ==
 
== Формы ==
  
 
=== ActivityForm ===
 
=== ActivityForm ===
* (Опишите поля формы `ActivityForm`, например:
+
  class ActivityForm(forms.ModelForm):
** `name` - CharField (поле для ввода названия)
+
    DURATION_CHOICES = [
** `description` - TextField (поле для ввода описания)
+
        ('0:05:00', '5 минут'),
** `task` - ForeignKey (выбор задачи)
+
        ('0:10:00', '10 минут'),
** `start_time` - DateTimeField (поле для ввода времени начала)
+
        # ... другие варианты длительности
** `end_time` - DateTimeField (поле для ввода времени окончания)
+
    ]
** `duration` - IntegerField (поле для ввода длительности)
+
 
)
+
    LEAD_TIME_CHOICES = [
 +
        ('0:30:00', '30 минут'),
 +
        ('1:00:00', '1 час'),
 +
        # ... другие варианты времени
 +
    ]
 +
 
 +
    INTERVAL_CHOICES = [
 +
        ('not_important', 'Не важно'),
 +
        ('morning', 'Утро'),
 +
        # ... другие интервалы
 +
    ]
  
 
== Шаблоны ==
 
== Шаблоны ==

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

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

Приложение `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` - после сохранения
  • Обновление прогресса задачи
  • Расчет длительности мероприятия

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

Управление временем

  • Планировщик мероприятий
  • Фильтрация по времени
  • Расчет длительности
  • Управление интервалами

Отслеживание зависимостей

  • Ведущие мероприятия
  • Время на подготовку
  • Связи между мероприятиями
  • Обновление статусов

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

  • Описание
  • Интервал времени
  • Длительность
  • Статус выполнения