signals.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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 Ticket, TicketList
  10. from datetime import datetime
  11. from core.settings_vars import GENERATE_TEST_USERS
  12. User = get_user_model()
  13. @receiver(post_migrate)
  14. def create_initial_groups(sender, **kwargs):
  15. groups = [
  16. ('METASERVICE-ADMIN', 21),
  17. ('METASERVICE-SUPERVISOR', 22),
  18. ('METASERVICE-SUPPORT', 23),
  19. ('METASERVICE-TECHSUPPORT', 24),
  20. ('PARTNER-ADMIN', 31),
  21. ('PARTNER-SUPERVISOR', 32),
  22. ('PARTNER-SUPPORT', 33),
  23. ('PARTNER-TECHSUPPORT', 34),
  24. ('PROVIDER', 41),
  25. ('CLIENT', 51),
  26. ('GUEST', 61),
  27. ('TEST', 99)
  28. ]
  29. for name, pk in groups:
  30. group, created = Group.objects.get_or_create(name=name, defaults={'pk': pk})
  31. if not created:
  32. print(f"Group {name} already exists.")
  33. @receiver(post_migrate)
  34. def create_test_users(sender, **kwargs):
  35. """
  36. Создает тестовых пользователей, если:
  37. - В файле settings_vers.py переменная GENERATE_TEST_USERS = True
  38. - Или была задана переменная окружения TEST_USERS=true
  39. """
  40. if os.getenv('TEST_USERS') == 'true' or GENERATE_TEST_USERS:
  41. # Создание админа
  42. if not get_user_model().objects.filter(phone_number="11111111111").exists():
  43. admin, created = get_user_model().objects.create_superuser(
  44. 'admin',
  45. 'admin@admin.com',
  46. 'Sharix!',
  47. phone_number="11111111111"
  48. )
  49. password = make_password("sharix-open-test")
  50. test_group = Group.objects.get(pk=99)
  51. # Группа, в которой надо создать пользователя и их количество
  52. test_users = [
  53. ('METASERVICE-ADMIN', 1),
  54. ('METASERVICE-SUPERVISOR', 3),
  55. ('METASERVICE-SUPPORT', 3),
  56. ('METASERVICE-TECHSUPPORT', 3),
  57. ('PARTNER-ADMIN', 1),
  58. ('PARTNER-SUPERVISOR', 3),
  59. ('PARTNER-SUPPORT', 3),
  60. ('PARTNER-TECHSUPPORT', 3),
  61. ('PROVIDER', 3),
  62. ('CLIENT', 3),
  63. ('GUEST', 3)
  64. ]
  65. for test_user in test_users:
  66. group_name = test_user[0]
  67. group = Group.objects.get(name=group_name)
  68. for i in range(1, test_user[1] + 1):
  69. user, created = User.objects.get_or_create(
  70. phone_number=f"{group.pk}0{i}",
  71. defaults={
  72. 'last_name': i,
  73. 'first_name': group_name,
  74. 'email': f"test-{group_name.lower()}-{i}@domain.org",
  75. 'username': f"test-{group_name.lower()}-{i}",
  76. 'middle_name': "Test",
  77. 'password': password
  78. }
  79. )
  80. if created:
  81. user.groups.add(
  82. test_group,
  83. group
  84. )
  85. # Создание тикета о создании пользователей
  86. if Ticket.objects.all().exists():
  87. # test-metaservice-admin-1
  88. user = get_user_model().objects.filter(phone_number=2101).get()
  89. ticket_list = TicketList.objects.get(pk=2103)
  90. Ticket.objects.create(
  91. title=f"Создание тестовых пользователей",
  92. ticket_list=ticket_list,
  93. ticket_type=1, # ST_REQUEST
  94. due_date=datetime.now().date(),
  95. created_by=user,
  96. note=f"""
  97. Успешное создание тестовых пользователей
  98. """
  99. )
  100. @receiver(post_migrate)
  101. def create_initial_ticket_lists(sender, **kwargs):
  102. if sender.name == 'tickets':
  103. ticket_data = [
  104. # METASERVICE
  105. (2101, 'Активация партнеров (NEG_REQUEST)', 'METASERVICE-ADMIN'),
  106. (2102, 'Права в сервисе (ACCESS_REQUEST)', 'METASERVICE-ADMIN'),
  107. (2103, 'Проверка документов (ST_REQUEST)', 'METASERVICE-ADMIN'),
  108. (2201, 'Активность пользователей (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  109. (2202, 'Оперативный доступ (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  110. (2203, 'Оперативный доступ экстра (ACCESS_REQUEST)', 'METASERVICE-SUPERVISOR'),
  111. (2204, 'Права сервиса (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  112. (2205, 'Проверка документов (ST_REQUEST)', 'METASERVICE-SUPERVISOR'),
  113. (2301, 'Входящие обычные заявки (ST_REQUEST)', 'METASERVICE-SUPPORT'),
  114. (2302, 'Заявки на услуги сервиса (SERVICE_REQUEST)', 'METASERVICE-SUPPORT'),
  115. (2401, 'Входящие технические заявки (ST_REQUEST)', 'METASERVICE-TECHSUPPORT'),
  116. # PARTNER
  117. (3101, 'Документы исполнителей (ST_REQUEST)', 'PARTNER-ADMIN'),
  118. (3102, 'Документы ресурсов (ST_REQUEST)', 'PARTNER-ADMIN'),
  119. (3103, 'Права в партнерке (ACCESS_REQUEST)', 'PARTNER-ADMIN'),
  120. (3201, 'Активность внутри партнера (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  121. (3202, 'Документы исполнителей (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  122. (3203, 'Документы ресурсов (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  123. (3204, 'Доступ внутри партнера (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  124. (3205, 'Оперативный доступ (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  125. (3206, 'Оперативный доступ экстра (ST_REQUEST)', 'PARTNER-SUPERVISOR'),
  126. (3207, 'Ручное подтверждение заявок (ACCESS-REQUEST)', 'PARTNER-SUPERVISOR'),
  127. (3401, 'Входящие технические заявки (ST_REQUEST)', 'PARTNER-TECHSUPPORT'),
  128. ]
  129. for pk, name, group_name in ticket_data:
  130. group = Group.objects.get(name=group_name)
  131. # Проверяем существование тикета с таким же name и group
  132. ticket_exists = TicketList.objects.filter(group=group, name=name).exists()
  133. if not ticket_exists:
  134. TicketList.objects.create(pk=pk, name=name, group=group)
  135. # Откючаем тестовых пользователей (если такие есть), если DEBUG=False и наоброт
  136. try:
  137. if Group.objects.filter(name="TEST").exists():
  138. test_group = Group.objects.get(name="TEST")
  139. users_in_test_group = User.objects.filter(groups=test_group)
  140. if users_in_test_group:
  141. users_in_test_group.update(is_active=settings.DEBUG)
  142. except:
  143. print("Test user validation is not available. Models have not been created yet")