Corp/backend/scheduling/README.md
lizerk b0e88e8e8b refactor(backend): migrate calendar_app to scheduling app
- Rename calendar_app → scheduling (integration app for django-scheduler)
- Move schedule_patch.py → scheduling/patch.py with improved logging
- Create scheduling.notifications system for django-scheduler events
- Add scheduling.rules for django-rules integration
- Remove unused calendar_app models and API (not registered in urls)
- Remove backend/api/v1/calendar/ (dead code)
- Remove old tests for calendar_app
- Add comprehensive documentation in scheduling/README.md
- Update settings.py: calendar_app.apps.CalendarAppConfig → scheduling.apps.SchedulingConfig
- Clean api/apps.py: remove schedule_patch import (now in scheduling.apps)

The scheduling app provides:
- Patches for django-scheduler bugs (byweekday fix)
- Notification system for calendar events
- Access rules via django-rules
- Auto-applies on Django startup

Closes integration of django-scheduler for EUSRR calendar system.
2026-03-10 15:21:28 +03:00

4.5 KiB
Raw Blame History

Scheduling App

Приложение для интеграции и расширения django-scheduler в EUSRR.

Содержимое

📦 Основные модули

  • patch.py - Исправление бага django-scheduler с byweekday
  • notifications/ - Система уведомлений для событий календаря
  • rules.py - Правила доступа django-rules для календарей и событий
  • apps.py - Конфигурация приложения (применяет патчи, регистрирует сигналы)

🔧 Патчи

Проблема django-scheduler: При создании повторяющегося события с byweekday=[1, 4] (вторник и пятница), если событие создается в пятницу, django-scheduler неправильно заменяет весь массив на [4], игнорируя вторник.

Решение: Модуль patch.py автоматически применяется при запуске Django и исправляет метод Event._event_params().

🔔 Уведомления

Автоматические уведомления для событий calendar через django signals:

  • Создание события → уведомление всем участникам календаря
  • Изменение события → уведомление при изменении важных полей (название, время, описание)
  • Удаление события → уведомление об отмене

Конфигурация:

  • notifications/config.py - шаблоны сообщений, URL-адреса
  • notifications/handlers.py - бизнес-логика отправки уведомлений
  • notifications/signals.py - Django signals для автоматической обработки

🔐 Права доступа

Интеграция с django-rules для объектных прав доступа:

# В коде
if user.has_perm('can_edit_calendar', calendar):
    # Редактирование разрешено
    
# В шаблонах
{% if request.user|has_rule:'can_edit_event' event %}
  <button>Редактировать</button>
{% endif %}

Правила:

  • can_view_calendar / can_view_event - просмотр
  • can_edit_calendar / can_edit_event - редактирование
  • can_delete_calendar / can_delete_event - удаление

Права проверяются через CalendarRelation из django-scheduler.

Установка

Приложение автоматически активируется при добавлении в INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    'schedule',  # django-scheduler (обязательно перед scheduling)
    'scheduling',  # Интеграция и расширения
    # ...
]

Использование

Отправка уведомлений вручную

from scheduling.notifications.handlers import (
    notify_event_created,
    notify_event_changed,
    notify_event_cancelled
)
from schedule.models import Event

event = Event.objects.get(id=1)

# Создано
notify_event_created(event, creator=request.user)

# Изменено
notify_event_changed(event, changed_fields=['title', 'start'], modifier=request.user)

# Отменено
notify_event_cancelled(event, canceller=request.user)

Передача контекста для уведомлений в ViewSet

class EventViewSet(viewsets.ModelViewSet):
    def perform_create(self, serializer):
        event = serializer.save()
        # Передаем создателя для уведомлений
        event._creator = self.request.user
        event.save()

Зависимости

  • django-scheduler >= 0.12.0
  • django-rules (опционально, для rules.py)
  • django-notifications-hq (для системы уведомлений)

История

Это приложение заменило старое calendar_app, которое содержало самописный календарь. После перехода на django-scheduler, calendar_app был переименован в scheduling и переориентирован на интеграцию, патчи и расширения для django-scheduler.

Дата миграции: 10 марта 2026 г.