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

187 lines
5.7 KiB
Python

"""
Конфигурация уведомлений модуля Requests.
Определяет типы уведомлений (verbs), шаблоны сообщений и URL.
"""
# ===== Типы уведомлений (Verbs) =====
class NotificationVerbs:
"""Типы уведомлений для заявлений."""
# Новое заявление (универсальный для всех ролей получателей)
REQUEST_NEW = "request_new"
# Комментарий к заявлению
REQUEST_COMMENT = "request_comment"
# Изменение статуса
REQUEST_APPROVED = "request_approved"
REQUEST_REJECTED = "request_rejected"
REQUEST_STATUS_CHANGED = "request_status_changed"
# ===== Шаблоны сообщений =====
class MessageTemplates:
"""Шаблоны сообщений для уведомлений."""
@staticmethod
def new_request_primary(
author_name: str, request_type: str, comment_preview: str
) -> tuple[str, str]:
"""
Шаблон для основных получателей заявления.
Returns:
tuple: (title, message)
"""
title = "Новое заявление"
message = (
f"{author_name} адресовал вам заявление. "
f'Тип: "{request_type}". {comment_preview}'
)
return title, message
@staticmethod
def new_request_cc(
author_name: str, request_type: str, comment_preview: str
) -> tuple[str, str]:
"""
Шаблон для получателей в копии.
Returns:
tuple: (title, message)
"""
title = "Новое заявление"
message = (
f"{author_name} поставил вас в копию заявления. "
f'Тип: "{request_type}". {comment_preview}'
)
return title, message
@staticmethod
def new_request_approver(
author_name: str, request_type: str, comment_preview: str
) -> tuple[str, str]:
"""
Шаблон для согласующего.
Returns:
tuple: (title, message)
"""
title = "Новое заявление"
message = (
f"{author_name} отправил заявление вам на согласование. "
f'Тип: "{request_type}". {comment_preview}'
)
return title, message
@staticmethod
def new_request_department(
author_name: str, request_type: str, comment_preview: str
) -> tuple[str, str]:
"""
Шаблон для руководителей отдела и обработчиков.
Returns:
tuple: (title, message)
"""
title = "Новое заявление"
message = (
f"{author_name} направил заявление в отдел. "
f'Тип: "{request_type}". {comment_preview}'
)
return title, message
@staticmethod
def comment(
author_name: str,
request_type: str,
employee_name: str,
comment_text: str,
) -> tuple[str, str]:
"""
Шаблон для комментария.
Returns:
tuple: (title, description)
"""
title = f"💬 Новый комментарий к заявлению от {employee_name}"
description = (
f"{author_name} прокомментировал заявление "
f'"{request_type}": {comment_text[:100]}'
)
return title, description
@staticmethod
def status_approved(
employee_name: str, request_type: str, approver_name: str
) -> tuple[str, str]:
"""
Шаблон для одобрения заявления.
Returns:
tuple: (title, message)
"""
title = f"✅ Заявление одобрено: {request_type}"
message = (
f'Заявление от {employee_name} "{request_type}" '
f"одобрено пользователем {approver_name}"
)
return title, message
@staticmethod
def status_rejected(
employee_name: str, request_type: str, approver_name: str
) -> tuple[str, str]:
"""
Шаблон для отклонения заявления.
Returns:
tuple: (title, message)
"""
title = f"❌ Заявление отклонено: {request_type}"
message = (
f'Заявление от {employee_name} "{request_type}" '
f"отклонено пользователем {approver_name}"
)
return title, message
@staticmethod
def status_changed(
employee_name: str,
request_type: str,
old_status: str,
new_status: str,
) -> tuple[str, str]:
"""
Шаблон для изменения статуса.
Returns:
tuple: (title, message)
"""
title = f"🔄 Статус заявления изменен: {request_type}"
message = (
f'Статус заявления от {employee_name} "{request_type}" '
f"изменен: {old_status} → {new_status}"
)
return title, message
# ===== URL для действий =====
class ActionURLs:
"""URL для переходов из уведомлений."""
REQUESTS_LIST = "/requests"
@staticmethod
def request_detail(request_id: int) -> str:
"""URL детальной страницы заявления."""
return f"/requests?request={request_id}"