signals.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import os
  2. from django.conf import settings
  3. from django.contrib.auth import get_user_model
  4. from django.contrib.auth.hashers import make_password
  5. from django.contrib.auth.models import Group
  6. from django.db import models
  7. from django.db.models.signals import post_migrate
  8. from django.dispatch import receiver
  9. from tickets.models import TicketList
  10. User = get_user_model()
  11. @receiver(post_migrate)
  12. def create_initial_groups(sender, **kwargs):
  13. groups = [
  14. ('METASERVICE-ADMIN', 21),
  15. ('METASERVICE-SUPERVISOR', 22),
  16. ('METASERVICE-SUPPORT', 23),
  17. ('METASERVICE-TECHSUPPORT', 24),
  18. ('PARTNER-ADMIN', 31),
  19. ('PARTNER-SUPERVISOR', 32),
  20. ('PARTNER-SUPPORT', 33),
  21. ('PARTNER-TECHSUPPORT', 34),
  22. ('PROVIDER', 41),
  23. ('CLIENT', 51),
  24. ('GUEST', 61),
  25. ('TEST', 99)
  26. ]
  27. for name, pk in groups:
  28. group, created = Group.objects.get_or_create(name=name, defaults={'pk': pk})
  29. if not created:
  30. print(f"Group {name} already exists.")
  31. @receiver(post_migrate)
  32. def create_test_users(sender, **kwargs):
  33. """
  34. Создает тестовых пользователей, но только если установочный скрипт был запущен с параметром --test-users
  35. или была задана переменная окружения TEST_USERS=true.
  36. """
  37. if os.getenv('TEST_USERS') == 'true':
  38. password = make_password("sharix-open-test")
  39. test_group = Group.objects.get(pk=99)
  40. # Группа, в которой надо создать пользователя и их количество
  41. test_users = [
  42. ('METASERVICE-ADMIN', 1),
  43. ('METASERVICE-SUPERVISOR', 3),
  44. ('METASERVICE-SUPPORT', 3),
  45. ('METASERVICE-TECHSUPPORT', 3),
  46. ('PARTNER-ADMIN', 1),
  47. ('PARTNER-SUPERVISOR', 3),
  48. ('PARTNER-SUPPORT', 3),
  49. ('PARTNER-TECHSUPPORT', 3),
  50. ('PROVIDER', 3),
  51. ('CLIENT', 3),
  52. ('GUEST', 3)
  53. ]
  54. for test_user in test_users:
  55. group_name = test_user[0]
  56. group = Group.objects.get(name=group_name)
  57. for i in range(1, test_user[1] + 1):
  58. user, created = User.objects.get_or_create(
  59. phone_number=f"{group.pk}0{i}",
  60. defaults={
  61. 'last_name': i,
  62. 'first_name': group_name,
  63. 'email': f"test-{group_name.lower()}-{i}@domain.org",
  64. 'username': f"test-{group_name.lower()}-{i}",
  65. 'middle_name': "Test",
  66. 'password': password
  67. }
  68. )
  69. if created:
  70. user.groups.add(
  71. test_group,
  72. group
  73. )
  74. print(f"Test user created: {user}")
  75. @receiver(post_migrate)
  76. def create_initial_ticket_lists(sender, **kwargs):
  77. if sender.name == 'tickets':
  78. ticket_data = [
  79. # METASERVICE
  80. (2101, 'Активация партнеров (NEG_REQUEST)', 'METASERVICE-ADMIN'),
  81. (2102, 'Права в сервисе (ACCESS_REQUEST)', 'METASERVICE-ADMIN'),
  82. (2103, 'Проверка документов (ST_REQUEST)', 'METASERVICE-ADMIN'),
  83. (2201, 'Активность пользователей (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  84. (2202, 'Оперативный доступ (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  85. (2203, 'Оперативный доступ экстра (ACCESS_REQUEST)', 'METASERVICE-SUPERVISOR'),
  86. (2204, 'Права сервиса (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  87. (2205, 'Проверка документов (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  88. (2301, 'Входящие обычные заявки (ST_REQUEST)', 'METASERVICE-SUPPORT'),
  89. (2302, 'Заявки на услуги сервиса (SERVICE_REQUEST)', 'METASERVICE-SUPPORT'),
  90. (2401, 'Входящие технические заявки (ST_REQUEST)', 'METASERVICE-TECHSUPPORT'),
  91. # PARTNER
  92. (3101, 'Документы исполнителей (ST_REQUEST)', 'PARTNER-ADMIN'),
  93. (3102, 'Документы ресурсов (ST_REQUEST)', 'PARTNER-ADMIN'),
  94. (3103, 'Права в партнерке (ACCESS_REQUEST)', 'PARTNER-ADMIN'),
  95. (3201, 'Активность внутри партнера (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  96. (3202, 'Документы исполнителей (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  97. (3203, 'Документы ресурсов (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  98. (3204, 'Доступ внутри партнера (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  99. (3205, 'Оперативный доступ (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  100. (3206, 'Оперативный доступ экстра (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  101. (3207, 'Ручное подтверждение заявок (ACCESS-REQUEST)', 'PARTNER-SUPERVISOR'),
  102. (3401, 'Входящие технические заявки (ST_REQUEST)', 'PARTNER-TECHSUPPORT'),
  103. ]
  104. for pk, name, group_name in ticket_data:
  105. group = Group.objects.get(name=group_name)
  106. # Проверяем существование тикета с таким же name и group
  107. ticket_exists = TicketList.objects.filter(group=group, name=name).exists()
  108. if not ticket_exists:
  109. TicketList.objects.create(pk=pk, name=name, group=group)
  110. # Откючаем тестовых пользователей (если такие есть), если DEBUG=False и наоброт
  111. try:
  112. if Group.objects.filter(name="TEST").exists():
  113. test_group = Group.objects.get(name="TEST")
  114. users_in_test_group = User.objects.filter(groups=test_group)
  115. if users_in_test_group:
  116. users_in_test_group.update(is_active=settings.DEBUG)
  117. except:
  118. print("Test user validation is not available. Models have not been created yet")