#!/usr/bin/env python """ Скрипт для создания тестовых уведомлений в реальном времени. Используйте этот скрипт для проверки работы системы уведомлений. """ import os import sys import django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eusrr_backend.settings") django.setup() from django.contrib.auth import get_user_model from notifications.signals import notify Employee = get_user_model() print("\n" + "=" * 70) print(" ГЕНЕРАТОР ТЕСТОВЫХ УВЕДОМЛЕНИЙ") print("=" * 70 + "\n") # Получить первого активного пользователя user = Employee.objects.filter(is_active=True).first() if not user: print("[ERROR] Нет активных пользователей в системе!") sys.exit(1) print(f"Получатель: {user.get_full_name()} ({user.email})\n") # Меню print("Выберите тип уведомления для генерации:") print() print("1. Новое сообщение в чате") print("2. Новый документ") print("3. Одобрена заявка") print("4. Новое событие в календаре") print("5. Новая публикация") print("6. Системное уведомление") print("7. Создать 5 разных уведомлений") print("0. Выход") print() choice = input("Ваш выбор: ").strip() if choice == "0": print("Выход.") sys.exit(0) if choice == "1": # Новое сообщение в чате notify.send( sender=None, recipient=user, verb="chat_new_message", description="Иван Иванов: Всем привет! Напоминаю о собрании в 15:00", action_url="/communications/chat/1/", data={ "title": 'Новое сообщение в чате "Общий"', "chat_id": 1, "message_id": 123, }, ) print("[OK] Уведомление отправлено: chat_new_message") elif choice == "2": # Новый документ notify.send( sender=None, recipient=user, verb="document_ready", description='Администратор загрузил документ "Правила внутреннего распорядка 2025". Требуется ознакомление до 25.11.2025', action_url="/documents/5/", data={ "title": "Новый документ на ознакомление", "document_id": 5, "deadline": "2025-11-25", }, ) print("[OK] Уведомление отправлено: document_ready") elif choice == "3": # Одобрена заявка notify.send( sender=None, recipient=user, verb="request_approved", description="Ваша заявка на отпуск с 01.12.2025 по 14.12.2025 одобрена руководителем Петр Петров", action_url="/requests/10/", data={"title": "Заявка одобрена", "request_id": 10, "approver_id": 2}, ) print("[OK] Уведомление отправлено: request_approved") elif choice == "4": # Новое событие notify.send( sender=None, recipient=user, verb="event_created", description='Добавлено событие "Новогодний корпоратив" на 28.12.2025 18:00. Место: Ресторан "Прага"', action_url="/calendar/events/15/", data={ "title": "Новое событие: Корпоратив", "event_id": 15, "event_date": "2025-12-28", }, ) print("[OK] Уведомление отправлено: event_created") elif choice == "5": # Новая публикация notify.send( sender=None, recipient=user, verb="feed_new_post", description='Алексей Сидоров опубликовал: "Подведение итогов года. Наши достижения и планы на 2026..."', action_url="/feed/posts/42/", data={"title": "Новая публикация от CEO", "post_id": 42, "author_id": 1}, ) print("[OK] Уведомление отправлено: feed_new_post") elif choice == "6": # Системное notify.send( sender=None, recipient=user, verb="system_announcement", description="Планируется обслуживание системы 25.11.2025 с 02:00 до 04:00. Возможны кратковременные перерывы в работе.", action_url="/announcements/3/", data={ "title": "Системное обслуживание", "maintenance_date": "2025-11-25", "duration_hours": 2, }, ) print("[OK] Уведомление отправлено: system_announcement") elif choice == "7": # Создать несколько разных items = [ ( "chat_new_message", "Сообщение от Мария Смирнова", "Можете подойти в кабинет?", "/communications/chat/2/", ), ( "request_comment", "Комментарий к заявке", 'HR отдел добавил комментарий: "Необходимо приложить справку"', "/requests/8/", ), ( "chat_mention", "Вас упомянул Олег Иванов", f"@{user.email} посмотри пожалуйста этот документ", "/communications/chat/3/", ), ( "event_changed", "Событие изменено", "Время планерки перенесено с 14:00 на 15:30", "/calendar/events/20/", ), ( "feed_post_comment", "Комментарий к вашей публикации", "Анна Петрова прокомментировала ваш пост", "/feed/posts/30/", ), ] for verb, title, description, url in items: notify.send( sender=None, recipient=user, verb=verb, description=description, action_url=url, data={"title": title}, ) print(f"[OK] Отправлено {len(items)} уведомлений:") for verb, title, *_ in items: print(f" - {verb}: {title}") else: print("[ERROR] Неверный выбор") sys.exit(1) print() print("=" * 70) print(" ГОТОВО! Проверьте уведомления в интерфейсе") print("=" * 70) print() print("Откройте: http://localhost:9000/") print("- Колокольчик в navbar должен показать новое уведомление") print("- Должен прийти WebSocket с обновлением") print("- Должно сработать браузерное уведомление (если разрешено)") print("- Должен воспроизвестись звук (если включен)") print()