2026-09-07 19:43:48 +03:00

133 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Конфигурация уведомлений для django-scheduler.
Содержит:
- NotificationVerbs - глаголы для уведомлений
- MessageTemplates - шаблоны сообщений
- ActionURLs - URL-адреса действий
- Вспомогательные функции
"""
class NotificationVerbs:
"""Глаголы (verbs) для уведомлений событий календаря."""
EVENT_CREATED = "event_created"
EVENT_CHANGED = "event_changed"
EVENT_CANCELLED = "event_cancelled"
EVENT_REMINDER = "event_reminder" # Для будущей реализации через Celery
class MessageTemplates:
"""Шаблоны сообщений для уведомлений календаря."""
@staticmethod
def event_created(
event_title: str, event_date: str, calendar_name: str = None
) -> str:
"""Шаблон для нового события."""
if calendar_name:
return (
f'Добавлено событие в календарь "{calendar_name}": '
f'"{event_title}" ({event_date})'
)
return f'Добавлено новое событие: "{event_title}" ({event_date})'
@staticmethod
def event_created_title() -> str:
"""Заголовок для нового события."""
return "Новое событие в календаре"
@staticmethod
def event_changed(event_title: str, changes_text: str = None) -> str:
"""Шаблон для изменения события."""
if changes_text:
return f'Событие "{event_title}" изменено. Изменения: {changes_text}'
return f'Событие "{event_title}" изменено'
@staticmethod
def event_changed_title() -> str:
"""Заголовок для изменения события."""
return "Событие изменено"
@staticmethod
def event_cancelled(event_title: str, event_date: str) -> str:
"""Шаблон для отмены события."""
return f'Событие "{event_title}" ({event_date}) отменено'
@staticmethod
def event_cancelled_title() -> str:
"""Заголовок для отмены события."""
return "Событие отменено"
class ActionURLs:
"""URL-адреса для действий с календарем."""
CALENDAR = "/calendar"
@staticmethod
def event_detail(event_id: int) -> str:
"""
Возвращает URL-адрес события.
TODO: реализовать прямые ссылки на конкретные события
"""
return f"/calendar?event={event_id}"
# ===== Константы для полей django-scheduler Event =====
FIELD_NAMES = {
"title": "название",
"start": "время начала",
"end": "время окончания",
"description": "описание",
"end_recurring_period": "окончание повторения",
}
IMPORTANT_FIELDS = ["title", "start", "end", "description"]
def format_datetime(dt) -> str:
"""
Форматирует дату/время в строку.
Args:
dt: Объект datetime
Returns:
str: Отформатированная дата и время (например, "10.03.2026 14:30")
"""
if not dt:
return ""
return dt.strftime("%d.%m.%Y %H:%M")
def format_date(dt) -> str:
"""
Форматирует только дату в строку.
Args:
dt: Объект datetime или date
Returns:
str: Отформатированная дата (например, "10.03.2026")
"""
if not dt:
return ""
return dt.strftime("%d.%m.%Y")
def format_changes(changed_fields: list[str]) -> str:
"""
Форматирует список изменённых полей в текст.
Args:
changed_fields: Список имён полей
Returns:
str: Текстовое описание изменений через запятую
"""
return ", ".join([FIELD_NAMES.get(f, f) for f in changed_fields])