debug: добавлено логирование в сигналы уведомлений

Добавлено подробное логирование для диагностики проблемы с уведомлениями:
- Логируется срабатывание сигнала create_request_notifications
- Логируется статус заявления при создании
- Логируется каждый добавленный получатель
- Логируется итоговый список получателей
- Логируется роль каждого получателя при отправке уведомления
This commit is contained in:
Игорь Надеин 2025-12-29 11:32:01 +03:00
parent 5429184d0c
commit f0509a0ba7

View File

@ -30,8 +30,17 @@ def create_request_notifications(sender, instance, created, **kwargs):
"""
request_obj = instance
# Логирование для отладки
import logging
logger = logging.getLogger(__name__)
logger.info(
f"[SIGNAL] create_request_notifications: created={created}, "
f"status={request_obj.status}, id={request_obj.id}"
)
if created and request_obj.status != "draft":
# Новая заявка - уведомляем ответственных
logger.info(f"[SIGNAL] Вызываем notify_new_request для заявления #{request_obj.id}")
notify_new_request(request_obj)
elif not created:
# Проверяем изменение статуса через сохраненный атрибут _old_status
@ -147,15 +156,20 @@ def notify_new_request(request_obj):
При sent_to_all_department=True отправляет всем сотрудникам отделов
"""
import logging
logger = logging.getLogger(__name__)
recipients_set = set()
# 1. Основные получатели
for recipient in request_obj.recipients.filter(is_active=True):
recipients_set.add(recipient)
logger.info(f"[notify_new_request] Добавлен основной получатель: {recipient.username}")
# 2. Копия (CC)
for cc_user in request_obj.cc_users.filter(is_active=True):
recipients_set.add(cc_user)
logger.info(f"[notify_new_request] Добавлен CC: {cc_user.username}")
# 3. Если sent_to_all_department - все сотрудники отделов
if request_obj.sent_to_all_department:
@ -204,6 +218,13 @@ def notify_new_request(request_obj):
recipients_set.update(dept_processors)
# Логирование итогового списка получателей
logger.info(
f"[notify_new_request] Всего получателей для заявления #{request_obj.id}: {len(recipients_set)}"
)
for r in recipients_set:
logger.info(f" - {r.username} (ID: {r.id})")
# Определяем тип уведомления для каждого получателя
author_name = request_obj.employee.get_full_name() or request_obj.employee.username
request_type = request_obj.get_type_display()
@ -215,6 +236,11 @@ def notify_new_request(request_obj):
is_cc = request_obj.cc_users.filter(id=recipient.id).exists()
is_approver = request_obj.approver_id == recipient.id
logger.info(
f"[notify_new_request] Отправка уведомления для {recipient.username}: "
f"primary={is_primary}, cc={is_cc}, approver={is_approver}"
)
# Формируем заголовок и сообщение с учетом роли
if is_primary:
# Основной получатель - требует действия