service_category.py 12 KB

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