From f0509a0ba79c422407abc10da1a53bb93b94be63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Mon, 29 Dec 2025 11:32:01 +0300 Subject: [PATCH] =?UTF-8?q?debug:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D1=81=D0=B8=D0=B3=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D1=8B=20=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлено подробное логирование для диагностики проблемы с уведомлениями: - Логируется срабатывание сигнала create_request_notifications - Логируется статус заявления при создании - Логируется каждый добавленный получатель - Логируется итоговый список получателей - Логируется роль каждого получателя при отправке уведомления --- backend/requests_app/notification_signals.py | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/backend/requests_app/notification_signals.py b/backend/requests_app/notification_signals.py index 60092c45..e0f416ee 100644 --- a/backend/requests_app/notification_signals.py +++ b/backend/requests_app/notification_signals.py @@ -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: # Основной получатель - требует действия