115 lines
4.0 KiB
Python
115 lines
4.0 KiB
Python
"""
|
||
Конфигурация уведомлений для модуля 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) -> str:
|
||
"""Шаблон для нового документа на ознакомление."""
|
||
return (
|
||
f'{uploader_name} загрузил документ "{document_title}". '
|
||
f'Требуется ознакомление.'
|
||
)
|
||
|
||
@staticmethod
|
||
def document_ready_title() -> str:
|
||
"""Заголовок для нового документа."""
|
||
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 'Администратор'
|