121 lines
4.3 KiB
Python
Raw 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.

"""
Конфигурация уведомлений для модуля Documents.
Содержит:
- NotificationVerbs - глаголы для уведомлений
- MessageTemplates - шаблоны сообщений
- ActionURLs - URL-адреса действий
"""
from django.conf import settings
class NotificationVerbs:
"""Глаголы (verbs) для уведомлений documents."""
DOCUMENT_READY = 'document_ready'
DOCUMENT_SIGNED_ALL = 'document_signed_all'
DOCUMENT_COMMENT = 'document_comment'
DOCUMENT_COMMENT_REPLY = 'document_comment_reply'
class MessageTemplates:
"""Шаблоны сообщений для уведомлений documents."""
@staticmethod
def document_ready(
uploader_name: str,
document_title: str,
acknowledgement_required: bool = True,
) -> str:
"""Шаблон для нового документа."""
message = f'{uploader_name} загрузил документ "{document_title}".'
if acknowledgement_required:
return f"{message} Требуется ознакомление."
return message
@staticmethod
def document_ready_title(acknowledgement_required: bool = True) -> str:
"""Заголовок для нового документа."""
if not acknowledgement_required:
return 'Новый документ'
return 'Новый документ на ознакомление'
@staticmethod
def all_acknowledged(document_title: str) -> str:
"""Шаблон для завершения ознакомления всеми."""
return f'Все сотрудники ознакомились с документом "{document_title}"'
@staticmethod
def all_acknowledged_title() -> str:
"""Заголовок для завершения ознакомления."""
return 'Все ознакомились с документом'
@staticmethod
def comment(author_name: str, document_title: str) -> str:
"""Шаблон для нового комментария к документу."""
return (
f'{author_name} оставил комментарий '
f'к вашему документу "{document_title}"'
)
@staticmethod
def comment_title() -> str:
"""Заголовок для комментария к документу."""
return 'Новый комментарий к документу'
@staticmethod
def comment_reply(author_name: str, document_title: str) -> str:
"""Шаблон для ответа на комментарий."""
return (
f'{author_name} ответил на ваш '
f'комментарий к документу "{document_title}"'
)
@staticmethod
def comment_reply_title() -> str:
"""Заголовок для ответа на комментарий."""
return 'Ответ на ваш комментарий'
class ActionURLs:
"""URL-адреса для действий с документами."""
DOCUMENTS = '/documents'
@staticmethod
def document_detail(document_id: int) -> str:
"""
Возвращает URL-адрес документа.
TODO: реализовать прямые ссылки на конкретные документы
"""
return f'/documents?document={document_id}'
# ===== Константы =====
def get_bulk_threshold() -> int:
"""
Возвращает порог для определения массовой рассылки.
Returns:
int: Количество получателей, начиная с которого используется bulk режим
"""
return getattr(settings, 'NOTIFICATION_BULK_THRESHOLD', 10)
def get_uploader_name(uploaded_by) -> str:
"""
Возвращает имя загрузившего документ пользователя.
Args:
uploaded_by: Объект Employee или None
Returns:
str: Полное имя или 'Администратор'
"""
if uploaded_by:
return uploaded_by.get_full_name() or uploaded_by.username
return 'Администратор'