resource.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. from dbsynce.models import Resource
  2. from django.contrib.auth.decorators import login_required
  3. from django.contrib.auth.mixins import UserPassesTestMixin
  4. from django.http import JsonResponse
  5. from django.utils.translation import gettext as _
  6. from django_tables2 import SingleTableView
  7. from sharix_admin.tables import ResourcesTable
  8. from sharix_admin.utils import group_required
  9. from datetime import datetime, timedelta
  10. from dbsynce.lib.core import parse_requirements, get_admin_url
  11. from dbsynce.models import Documents
  12. from django.contrib import messages
  13. from django.db import transaction
  14. from django.urls import reverse_lazy
  15. from django.views.generic.edit import FormView
  16. from tickets.models import Ticket, TicketList
  17. from sharix_admin.forms import ResourceForm
  18. from sharix_admin.utils import *
  19. from dbsynce.lib.data import *
  20. from .base import BaseView
  21. from django.db.models import Q
  22. class ResourcesListView(UserPassesTestMixin, SingleTableView):
  23. table_class = ResourcesTable
  24. queryset = Resource.objects.all()
  25. template_name = 'sharix_admin/resource_list.html'
  26. def get_context_data(self, **kwargs):
  27. context = super().get_context_data(**kwargs)
  28. context.update({
  29. 'title': _('Resources'),
  30. 'object_list': context['object_list'],
  31. })
  32. return context
  33. def get_queryset(self):
  34. queryset = super().get_queryset()
  35. search_query = self.request.GET.get('q', '').strip()
  36. if search_query:
  37. queryset = queryset.filter(
  38. Q(id__icontains=search_query) |
  39. Q(user__first_name__icontains=search_query) |
  40. Q(user__last_name__icontains=search_query) |
  41. Q(status__icontains=search_query)
  42. ).distinct()
  43. return queryset
  44. def test_func(self) -> bool or None:
  45. #group_names = ('PARTNER-ADMIN')
  46. #if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  47. # return True
  48. #return False
  49. return True
  50. @login_required
  51. @group_required('PARTNER-ADMIN')
  52. def change_resource_status(request):
  53. if request.method == 'POST':
  54. resource = request.POST.get('resource')
  55. new_status = request.POST.get('new_status')
  56. resource = Resource.objects.get(pk=resource)
  57. resource.status = new_status
  58. resource.save()
  59. return JsonResponse({'status': 'success'})
  60. else:
  61. return JsonResponse({'status': 'error'})
  62. class ResourceEditView(BaseView, FormView):
  63. form_class = ResourceForm
  64. template_name = "sharix_admin/resource.html"
  65. success_url = reverse_lazy("sharix_admin:resource_list")
  66. page_title = 'Изменить ресурс'
  67. page_name = 'resource_edit'
  68. # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN
  69. def test_func(self):
  70. return "PARTNER-ADMIN" in self.user_groups
  71. def form_valid(self, form):
  72. with transaction.atomic():
  73. # Сохраняем форму, чтобы получить объект ресурса
  74. instance = form.save(commit=False)
  75. # Присваиваем полю repr идентификатор текущего пользователя
  76. instance.repr = self.request.user
  77. # Создаем новую запись в БД, чтобы иметь доступ к ID
  78. instance.save()
  79. # Создание тикета на активацию ресурса.
  80. # Создаем объект тикета и присваиваем его полю ticket_status
  81. instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance)
  82. # Создание тикета на утверждение прав пользователя
  83. # create_ticket_role_activation_partner_admin(self.request.user, instance)
  84. # Сохраняем новые изменения
  85. instance.save()
  86. # Создаем необходимые объекты документов по requirements указанных в созданной company
  87. # Используем bulk_create для создания всех объектов одновременно
  88. doc_codes = parse_requirements(instance.requirements)
  89. Documents.objects.bulk_create([
  90. Documents(
  91. company=instance,
  92. user=self.request.user,
  93. doc_type=doc_code
  94. ) for doc_code in doc_codes
  95. ])
  96. # Отправляем пользователю уведомление на страницу о успехе операции
  97. messages.success(
  98. self.request,
  99. 'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
  100. )
  101. return super().form_valid(form) # Возвращаем успешный ответ
  102. class ResourceCreate(BaseView, FormView):
  103. form_class = ResourceForm
  104. template_name = "sharix_admin/resource.html"
  105. success_url = reverse_lazy("sharix_admin:main")
  106. page_title = 'Добавить ресурс'
  107. page_name = 'resource/add/'
  108. # Проверяем не состояит ли текущий пользователь в группе PARTNER-ADMIN
  109. def test_func(self):
  110. return not "PARTNER-ADMIN" in self.user_groups
  111. def form_valid(self, form):
  112. with transaction.atomic():
  113. # Сохраняем форму, чтобы получить объект компании
  114. instance = form.save(commit=False)
  115. # Присваиваем полю repr идентификатор текущего пользователя
  116. instance.repr = self.request.user
  117. # Создаем новую запись в БД, чтобы иметь доступ к ID
  118. instance.save()
  119. # Создание тикета на активацию ресурса.
  120. # Создаем объект тикета и присваиваем его полю ticket_status
  121. instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance)
  122. # Создание тикета на утверждение прав пользователя
  123. create_ticket_resource_activation_by_partner_admin(self.request.user, instance)
  124. # Сохраняем новые изменения
  125. instance.save()
  126. # Создаем необходимые объекты документов по requirements указанных в созданной company
  127. # Используем bulk_create для создания всех объектов одновременно
  128. doc_codes = parse_requirements(instance.requirements)
  129. Documents.objects.bulk_create([
  130. Documents(
  131. #TODO add info about company
  132. resource=instance,
  133. user=self.request.user,
  134. doc_type=doc_code
  135. ) for doc_code in doc_codes
  136. ])
  137. # Отправляем пользователю уведомление на страницу о успехе операции
  138. messages.success(
  139. self.request,
  140. 'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
  141. )
  142. return super().form_valid(form) # Возвращаем успешный ответ