service_category.py 12 KB

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