203 lines
7.3 KiB
Python
203 lines
7.3 KiB
Python
#!/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()
|