cooperate.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. from datetime import datetime, timedelta
  2. from dbsynce.lib.core import parse_requirements, get_admin_url
  3. from dbsynce.models import Documents
  4. from dbsynce.models import Permissions
  5. from dbsynce.models import Relationship
  6. from django.contrib import messages
  7. from django.db import transaction
  8. from django.urls import reverse_lazy
  9. from django.views.generic.edit import FormView
  10. from tickets.models import Ticket, TicketList
  11. from sharix_admin.forms import CompanyForm
  12. from sharix_admin.utils import *
  13. from dbsynce.lib.data import *
  14. from dbsynce.lib.dicts import *
  15. from .base import BaseView
  16. from dbsynce.lib.ticket_gen import *
  17. from datetime import datetime, timedelta
  18. from sharix_admin.forms import JobRequestPartnerForm
  19. from sharix_admin.forms import JobRequestMetaserviceForm
  20. from django.contrib.auth import get_user_model
  21. class CooperateView(BaseView, FormView):
  22. form_class = CompanyForm
  23. template_name = "sharix_admin/requests/cooperate.html"
  24. success_url = reverse_lazy("sharix_admin:main")
  25. page_title = 'Сотрудничество'
  26. page_name = 'cooperate'
  27. # Проверяем не состояит ли текущий пользователь в группе PARTNER-ADMIN
  28. def test_func(self):
  29. return not "PARTNER-ADMIN" in self.user_groups
  30. def form_valid(self, form):
  31. with transaction.atomic():
  32. # Сохраняем форму, чтобы получить объект компании
  33. instance = form.save(commit=False)
  34. # Присваиваем полю repr идентификатор текущего пользователя
  35. instance.repr = self.request.user
  36. # Создаем новую запись в БД, чтобы иметь доступ к ID
  37. instance.save()
  38. # Создание тикета на активацию партнера.
  39. # Создаем объект тикета и присваиваем его полю ticket_status
  40. instance.ticket_status = create_ticket_company_activation(self.request.user, instance)
  41. # Создание тикета на утверждение прав пользователя
  42. Permissions.objects.create(
  43. id_permissions=permissions_type["partner_admin"],
  44. check_level=permissions_type["metaservice_admin"],
  45. status=activity_status["deactivated"],
  46. ticket_status=create_ticket_role_activation_partner_admin(self.request.user, instance)
  47. )
  48. Relationship.objects.create(
  49. user_who=get_user_model().objects.filter(groups__name='METASERVICE-ADMIN').first(),
  50. user_whom=self.request.user,
  51. neg_type=neg_type["contract"],
  52. #проверить корректность requirements
  53. requirements="DS01y04y05y06y07yMPUCS13MPUB",
  54. status=activity_status["deactivated"],
  55. ticket_status=create_ticket_contract_with_metaservice(self.request.user, instance)
  56. )
  57. # Сохраняем новые изменения
  58. instance.save()
  59. # Создаем необходимые объекты документов по requirements указанных в созданной company
  60. # Используем bulk_create для создания всех объектов одновременно
  61. doc_codes = parse_requirements(instance.requirements)
  62. Documents.objects.bulk_create([
  63. Documents(
  64. company=instance,
  65. user=self.request.user,
  66. doc_type=doc_code
  67. ) for doc_code in doc_codes
  68. ])
  69. # Отправляем пользователю уведомление на страницу о успехе операции
  70. messages.success(
  71. self.request,
  72. 'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
  73. )
  74. return super().form_valid(form) # Возвращаем успешный ответ
  75. class JobRequestMetaserviceView(BaseView, FormView):
  76. form_class = JobRequestMetaserviceForm
  77. template_name = "sharix_admin/requests/job_request.html"
  78. success_url = reverse_lazy("sharix_admin:main")
  79. page_title = 'Заявка на работу в Сервисе'
  80. page_name = 'main'
  81. #def test_func(self):
  82. #FIXME! Check is not valid
  83. # return not Practice.objects.filter(created_by=self.request.user).exists()
  84. def form_valid(self, form):
  85. with transaction.atomic():
  86. selected_roles = form.cleaned_data['multiple_choice_field_select']
  87. if 'METASERVICE-SUPERVISOR' in selected_roles:
  88. create_ticket_role_activation_metaservice_supervisor(self.request.user)
  89. if 'METASERVICE-SUPPORT' in selected_roles:
  90. create_ticket_role_activation_metaservice_support(self.request.user)
  91. if 'METASERVICE-TECHSUPPORT' in selected_roles:
  92. create_ticket_role_activation_metaservice_techsupport(self.request.user)
  93. #send_notify_mail(
  94. # f'Новая заявка на прохождение практики ({instance.created_by})',
  95. # "sharix_admin/emails/team_request.html",
  96. # ["info@sharix-app.org"],
  97. # {"ticket": ticket}
  98. #)
  99. messages.success(self.request, 'Ваша заявка успешно отправлена и теперь проходит проверку!')
  100. return super().form_valid(form)
  101. class JobRequestPartnerView(BaseView, FormView):
  102. form_class = JobRequestPartnerForm
  103. template_name = "sharix_admin/requests/job_request.html"
  104. success_url = reverse_lazy("sharix_admin:main")
  105. #TODO FIXME! This page should be about particular partner!
  106. page_title = 'Заявка на сотрудничество с Партнером Сервиса'
  107. page_name = 'main'
  108. #def test_func(self):
  109. #FIXME! Check is not valid
  110. # return not Practice.objects.filter(created_by=self.request.user).exists()
  111. def form_valid(self, form):
  112. with transaction.atomic():
  113. selected_roles = form.cleaned_data['multiple_choice_field_select']
  114. if 'PARTNER-SUPERVISOR' in selected_roles:
  115. create_ticket_role_activation_partner_supervisor(self.request.user)
  116. if 'PARTNER-SUPPORT' in selected_roles:
  117. create_ticket_role_activation_partner_support(self.request.user)
  118. if 'PARTNER-TECHSUPPORT' in selected_roles:
  119. create_ticket_role_activation_partner_techsupport(self.request.user)
  120. if 'PROVIDER' in selected_roles:
  121. create_ticket_role_activation_provider(self.request.user)
  122. #send_notify_mail(
  123. # f'Новая заявка на прохождение практики ({instance.created_by})',
  124. # "sharix_admin/emails/team_request.html",
  125. # ["info@sharix-app.org"],
  126. # {"ticket": ticket}
  127. #)
  128. messages.success(self.request, 'Ваша заявка успешно отправлена и теперь проходит проверку!')
  129. return super().form_valid(form)