resource_local.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. from dbsynce.models import Resource
  2. from webservice_running.models import ResourceLocal
  3. from django.contrib.auth.decorators import login_required
  4. from django.contrib.auth.mixins import UserPassesTestMixin
  5. from django.http import JsonResponse
  6. from django.utils.translation import gettext as _
  7. from django_tables2 import SingleTableView
  8. from django.views.generic import DetailView
  9. from django.views.generic import UpdateView
  10. from django.shortcuts import render
  11. from django.http import Http404
  12. from django.db.models import Q
  13. from django.shortcuts import get_object_or_404, redirect
  14. from webservice_running.tables import ResourcesLocalTable
  15. from sharix_admin.utils import group_required
  16. from datetime import datetime, timedelta
  17. from dbsynce.lib.core import parse_requirements, get_admin_url
  18. from dbsynce.models import Documents
  19. from django.contrib import messages
  20. from django.db import transaction
  21. from django.urls import reverse_lazy
  22. from django.views.generic.edit import FormView
  23. from django.views.generic.edit import CreateView
  24. from tickets.models import Ticket, TicketList
  25. from webservice_running.forms import ResourceLocalForm
  26. from sharix_admin.forms import ResourceForm
  27. from sharix_admin.utils import *
  28. from dbsynce.lib.data import *
  29. from sharix_admin.views.base import BaseView
  30. from webservice_running.views.base_local import BaseLocalView
  31. from django.db.models import Q
  32. from django import forms
  33. from django.shortcuts import redirect
  34. from dbsynce.docs.database.resource import Resource as ResourceHelpTexts
  35. from dbsynce.docs.verbose_names.resource import Resource as ResourceVerboseNames
  36. from webservice_running.docs.database.local import Local as HelpTextsLocal
  37. from webservice_running.docs.verbose_names.local import Local as VerboseNameLocal
  38. class ResourcesLocalListView(BaseView, UserPassesTestMixin, SingleTableView):
  39. table_class = ResourcesLocalTable
  40. queryset = ResourceLocal.objects.all()
  41. template_name = 'webservice_running/local/resource_local_list.html'
  42. page_title = 'Локальные данные ресурсов'
  43. page_name = 'resources'
  44. def get_context_data(self, **kwargs):
  45. context = super().get_context_data(**kwargs)
  46. context.update({
  47. 'title': self.page_title,
  48. 'object_list': context['object_list'],
  49. })
  50. return context
  51. def get_queryset(self):
  52. queryset = super().get_queryset()
  53. search_query = self.request.GET.get('q', '').strip()
  54. if search_query:
  55. queryset = queryset.filter(
  56. Q(id__icontains=search_query) |
  57. Q(user__first_name__icontains=search_query) |
  58. Q(user__last_name__icontains=search_query) |
  59. Q(status__icontains=search_query)
  60. ).distinct()
  61. return queryset
  62. def test_func(self) -> bool or None:
  63. #group_names = ('PARTNER-ADMIN')
  64. #if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  65. # return True
  66. #return False
  67. return True
  68. @login_required
  69. @group_required('PARTNER-ADMIN')
  70. def change_resource_status(request):
  71. if request.method == 'POST':
  72. resource = request.POST.get('resource')
  73. new_status = request.POST.get('new_status')
  74. resource = Resource.objects.get(pk=resource)
  75. resource.status = new_status
  76. resource.save()
  77. return JsonResponse({'status': 'success'})
  78. else:
  79. return JsonResponse({'status': 'error'})
  80. #class ResourceLocalEditView(BaseLocalView, FormView):
  81. class ResourceLocalEditView(BaseView, UpdateView):
  82. #form_base = ResourceForm
  83. #form_local = ResourceLocalForm
  84. form_class = ResourceLocalForm
  85. model = ResourceLocal
  86. template_name = "webservice_running/local/resource_local_edit.html"
  87. success_url = reverse_lazy("webservice_running:resources_local")
  88. page_title = 'Изменить ресурс c локальными данными'
  89. page_name = 'resource_local_edit'
  90. # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN
  91. def get_form_kwargs(self):
  92. kwargs = super().get_form_kwargs()
  93. kwargs['instance'] = get_object_or_404(ResourceLocal, id=self.object.id)
  94. return kwargs
  95. def form_valid(self, form):
  96. with transaction.atomic():
  97. # Сохраняем изменения
  98. form.save()
  99. # Получаем текущий объект компании и деактивируем ее
  100. current_local_resource = form.instance
  101. #current_local.deactivate()
  102. current_local_resource.resource.deactivate()
  103. # Выполняем пересоздание тикета на активацию партнера
  104. #TODO - тикет для партнера?
  105. current_local_resource.resource.ticket_status.archive()
  106. current_local_resource.resource.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, current_local_resource.resource)
  107. # Отправляем полAьзователю уведомление на страницу об успехе операции
  108. messages.success(self.request, 'Данные успешно изменены и теперь проходят проверку!')
  109. return super().form_valid(form)
  110. class ResourceLocalCreate(BaseLocalView):
  111. form_base = ResourceForm
  112. form_local = ResourceLocalForm
  113. #resource_form = ResourceForm
  114. #resource_local_form = ResourceLocalForm
  115. template_name = "webservice_running/local/resource_local.html"
  116. success_url = reverse_lazy("webservice_running:main_local")
  117. page_title = 'Добавить ресурс с локальными данными'
  118. page_name = 'resource_local/add/'
  119. def get(self, request, *args, **kwargs):
  120. context = self.get_context_data(**kwargs)
  121. context.update({'form_base': self.form_base(prefix='form_base'), 'form_local': self.form_local(prefix='form_local')})
  122. return render(
  123. request,
  124. self.template_name,
  125. context,
  126. )
  127. def post(self, request, *args, **kwargs):
  128. form_base = self.form_base(request.POST, prefix='form_base')
  129. form_local = self.form_local(request.POST, prefix='form_local')
  130. if form_local.is_valid() and form_base.is_valid():
  131. instance=form_base.save(commit=False)
  132. instance.user = self.request.user
  133. instance.save()
  134. instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance)
  135. create_ticket_resource_activation_by_partner_admin(self.request.user, instance)
  136. instance.save()
  137. doc_codes = parse_requirements(instance.requirements)
  138. Documents.objects.bulk_create([
  139. Documents(
  140. # #TODO add info about company
  141. resource=instance,
  142. user=self.request.user,
  143. doc_type=doc_code
  144. ) for doc_code in doc_codes
  145. ])
  146. messages.success(
  147. self.request,
  148. 'Ваша заявка на добавление ресурса успешно отправлена и теперь проходит проверку!'
  149. )
  150. instance_local=form_local.save(commit=False)
  151. instance_local.resource=instance
  152. form_local.save()
  153. return redirect(self.success_url)
  154. else:
  155. context = self.get_context_data(**kwargs)
  156. context.update({'form_base': self.form_base(prefix='form_base'), 'form_local': self.form_local(prefix='form_local')})
  157. messages.error(
  158. 'Возникла ошибка, попробуйте снова!')
  159. context = self.get_context_data(**kwargs)
  160. context.update({'form_base': self.form_base(prefix='form_base'), 'form_local': self.form_local(prefix='form_local')})
  161. return render(
  162. request,
  163. self.template_name,
  164. context,
  165. )
  166. class ResourceLocalDetailView(BaseView, DetailView):
  167. model = ResourceLocal
  168. template_name = 'webservice_running/local/resource_local_detail.html'
  169. context_object_name = 'resource_local'
  170. page_title = 'Локальная информация о ресурсе'
  171. page_name = 'resource_local_detail'
  172. def detail_view(self, request, primary_key):
  173. try:
  174. resource_local = ResourceLocal.objects.get(pk=primary_key)
  175. #docs = Documents.objects.filter(resource=self.object.resource)
  176. #context['docs'] = self.docs
  177. except ResourceLocal.DoesNotExist:
  178. #docs=[]
  179. raise Http404('Something does not exist')
  180. return render(request, self.template_name, context={
  181. })
  182. def get_context_data(self, **kwargs):
  183. try:
  184. docs = Documents.objects.filter(resource=self.object.resource)
  185. except Documents.DoesNotExist:
  186. docs=[]
  187. context = super().get_context_data(**kwargs)
  188. context['help_texts'] = ResourceHelpTexts
  189. context['captions'] = ResourceVerboseNames
  190. context['help_texts_local'] = HelpTextsLocal
  191. context['captions_local'] = VerboseNameLocal
  192. context['docs'] = docs
  193. return context