service_category.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. from dbsynce.models import ServiceCategory
  2. from django.urls import reverse
  3. from django.utils.translation import gettext as _
  4. from django.views.generic.edit import UpdateView, CreateView, DeleteView
  5. from django_tables2 import SingleTableView
  6. from sharix_admin.forms import ServiceCategoryCreateForm, ServiceCategoryUpdateForm
  7. from sharix_admin.tables import ServiceCategoriesTable
  8. from .base import BaseView
  9. from sharix_admin.utils import group_required
  10. from django.contrib.auth.decorators import login_required
  11. from django.urls import reverse_lazy
  12. from django.views.generic.edit import FormView
  13. from django.db import transaction
  14. from django.contrib import messages
  15. from django.db.models import Q
  16. from django.contrib.auth.mixins import UserPassesTestMixin
  17. class ServiceCategoryCreate(BaseView, FormView):
  18. form_class = ServiceCategoryCreateForm
  19. template_name = "sharix_admin/service_category_form.html"
  20. success_url = reverse_lazy("sharix_admin:service_categories")
  21. page_title = 'Добавить категорию услуг'
  22. page_name = 'service_category/add/'
  23. # Проверяем не состояит ли текущий пользователь в группе METASERVICE-ADMIN
  24. def test_func(self):
  25. group_names = ('METASERVICE-ADMIN')
  26. if bool(self.request.user.groups.filter(name=group_names)): #or self.request.user.is_superuser:
  27. return True
  28. return False
  29. #return not "METASERVICE-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. #TODO ADD INTEGRATION WITH PLATFORM!
  39. # Создание тикета на активацию Категории услуг на Платформе.
  40. # Создаем объект тикета и присваиваем его полю ticket_status
  41. #instance.ticket_status = create_ticket_company_activation(self.request.user, instance)
  42. # Создание тикета на утверждение прав пользователя
  43. #create_ticket_role_activation_partner_admin(self.request.user, instance)
  44. # Сохраняем новые изменения
  45. instance.save()
  46. #TODO! Это делать на платформе!
  47. # Создаем необходимые объекты документов по requirements указанных в созданной company
  48. # Используем bulk_create для создания всех объектов одновременно
  49. #doc_codes = parse_requirements(instance.requirements)
  50. #Documents.objects.bulk_create([
  51. # Documents(
  52. # company=instance,
  53. # user=self.request.user,
  54. # doc_type=doc_code
  55. # ) for doc_code in doc_codes
  56. #])
  57. # Отправляем пользователю уведомление на страницу о успехе операции
  58. messages.success(
  59. self.request,
  60. 'Ваша заявка на добавление категории услуг успешно отправлена на Платформу и теперь проходит проверку! Если Сервис не подключен к Платформе, можете активировать категорию услуг в списке вручную.'
  61. )
  62. return super().form_valid(form) # Возвращаем успешный ответ
  63. #class ServiceCategoryCreate(BaseView, CreateView):
  64. # page_title = _('Услуги сервиса')
  65. # page_name = 'service_category'
  66. # model = ServiceCategory
  67. # form_class = ServiceCategoryCreateForm
  68. # template_name = "sharix_admin/service_category_form.html"
  69. #
  70. # def get_context_data(self, **kwargs):
  71. # context = super().get_context_data(**kwargs)
  72. # context.update({
  73. # 'object': self.object,
  74. # })
  75. # return context
  76. #
  77. # def get_success_url(self):
  78. # return reverse('service_category')
  79. #
  80. # def test_func(self) -> bool or None:
  81. # group_names = ('METASERVICE-ADMIN')
  82. # if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  83. # return True
  84. # return False
  85. #class ServiceCategoriesListView(UserPassesTestMixin, SingleTableView):
  86. class ServiceCategoriesListView(BaseView, SingleTableView):
  87. page_title = _('Услуги сервиса')
  88. page_name = 'service_category'
  89. table_class = ServiceCategoriesTable
  90. queryset = ServiceCategory.objects.all()
  91. template_name = 'sharix_admin/service_categories.html'
  92. def get_queryset(self):
  93. queryset = super().get_queryset()
  94. search_query = self.request.GET.get('q', '').strip()
  95. if search_query:
  96. queryset = queryset.filter(
  97. Q(id__icontains=search_query) |
  98. Q(caption__icontains=search_query) |
  99. Q(codename__icontains=search_query) |
  100. Q(description__icontains=search_query)
  101. ).distinct()
  102. return queryset
  103. def get_context_data(self, **kwargs):
  104. context = super().get_context_data(**kwargs)
  105. context.update({
  106. 'object_list': context['object_list'],
  107. })
  108. return context
  109. def testing(self, queryset, is_descending):
  110. queryset = queryset.annotate.order_by("-" if is_descending else "")
  111. return (queryset, True)
  112. #def test_func(self) -> bool or None:
  113. # return True
  114. # group_names = ('METASERVICE-ADMIN')
  115. # if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  116. # return True
  117. # return False
  118. class ServiceCategoryUpdateView(BaseView, UpdateView):
  119. model = ServiceCategory
  120. page_title = _('Редактирование услуг Сервиса')
  121. form_class = ServiceCategoryUpdateForm
  122. success_url = reverse_lazy("sharix_admin:service_categories")
  123. template_name = "sharix_admin/service_category_form.html"
  124. page_name = 'service_category/edit/'
  125. def get_context_data(self, **kwargs):
  126. context = super().get_context_data(**kwargs)
  127. context.update({
  128. 'title': _('Услуги сервиса'),
  129. 'object': self.object,
  130. "current_page": "sharix_admin:service_categories"
  131. })
  132. return context
  133. def test_func(self) -> bool or None:
  134. group_names = ('METASERVICE-ADMIN')
  135. if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  136. return True
  137. return False
  138. #def get_success_url(self):
  139. # return success_url
  140. #return reverse_lazy('sharix_admin:service_categories')
  141. def form_valid(self, form):
  142. with transaction.atomic():
  143. # Сохраняем форму, чтобы получить объект ресурса
  144. instance = form.save(commit=False)
  145. # Присваиваем полю repr идентификатор текущего пользователя
  146. instance.repr = self.request.user
  147. # Создаем новую запись в БД, чтобы иметь доступ к ID
  148. instance.save()
  149. #TODO ADD INTEGRATION WITH PLATFORM
  150. # Создание тикета на активацию категории услуги.
  151. # Создаем объект тикета и присваиваем его полю ticket_status
  152. #instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance)
  153. # Создание тикета на утверждение прав пользователя
  154. # create_ticket_role_activation_partner_admin(self.request.user, instance)
  155. # Сохраняем новые изменения
  156. instance.save()
  157. #TODO ADD INTEGRATION WITH PLATFORM
  158. # Создаем необходимые объекты документов по requirements указанных в созданной company
  159. # Используем bulk_create для создания всех объектов одновременно
  160. #doc_codes = parse_requirements(instance.requirements)
  161. #Documents.objects.bulk_create([
  162. # Documents(
  163. # company=instance,
  164. # user=self.request.user,
  165. # doc_type=doc_code
  166. # ) for doc_code in doc_codes
  167. #])
  168. # Отправляем пользователю уведомление на страницу о успехе операции
  169. messages.success(
  170. self.request,
  171. 'Ваша заявка на изменение категории услуг успешно отправлена и теперь проходит проверку! Если Сервис не подключен к платформе - актифируйте самостоятельно.'
  172. )
  173. return super().form_valid(form) # Возвращаем успешный ответ
  174. #class ServiceCategoryDelete(BaseView, DeleteView):
  175. # model = ServiceCategory
  176. # template_name = "sharix_admin/service_category_delete.html"
  177. #
  178. # def get_context_data(self, **kwargs):
  179. # context = super().get_context_data(**kwargs)
  180. # context.update({
  181. # 'title': 'Услуги сервиса',
  182. # 'object': self.object,
  183. # "current_page": "service_category"
  184. # })
  185. # return context
  186. #
  187. # def get_success_url(self):
  188. # return reverse('service_category')
  189. #
  190. # def test_func(self) -> bool or None:
  191. # group_names = ('METASERVICE-ADMIN')
  192. # if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  193. # return True
  194. # return False
  195. @login_required
  196. @group_required('METASERVICE-ADMIN')
  197. def change_service_category_status(request):
  198. if request.method == 'POST':
  199. service_category = request.POST.get('resource')
  200. new_status = request.POST.get('new_status')
  201. service_category = ServiceCategory.objects.get(pk=service_category)
  202. service_category.status = new_status
  203. service_category.save()
  204. return JsonResponse({'status': 'success'})
  205. else:
  206. return JsonResponse({'status': 'error'})