provider.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. from dbsynce.models import Provider
  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 django.views.generic import DetailView
  8. from sharix_admin.tables import ProvidersTable
  9. from sharix_admin.utils import group_required
  10. from .base import BaseView
  11. from sharix_admin.utils import group_required
  12. from django.contrib.auth.decorators import login_required
  13. from django.urls import reverse_lazy
  14. from django.views.generic.edit import FormView
  15. from django.db import transaction
  16. from django.contrib import messages
  17. from tickets.models import Ticket, TicketList
  18. from sharix_admin.forms import CompanyForm
  19. from sharix_admin.utils import *
  20. from dbsynce.lib.data import *
  21. from dbsynce.lib.dicts import *
  22. from sharix_admin.forms import ProviderCreateForm
  23. #from sharix_admin.forms import ProviderUpdateForm
  24. from dbsynce.docs.database.provider import Provider as ProviderHelpTexts
  25. from dbsynce.docs.verbose_names.provider import Provider as ProviderVerboseNames
  26. class ProviderCreate(BaseView, FormView):
  27. form_class = ProviderCreateForm
  28. template_name = "sharix_admin/provider_form.html"
  29. success_url = reverse_lazy("sharix_admin:providers")
  30. page_title = 'Добавить услугу к исполнению'
  31. page_name = 'providers/add/'
  32. # Проверяем не состояит ли текущий пользователь в группе METASERVICE-ADMIN
  33. def test_func(self):
  34. group_names = ('PROVIDER')
  35. if bool(self.request.user.groups.filter(name=group_names)): #or self.request.user.is_superuser:
  36. return True
  37. return False
  38. #return not "METASERVICE-ADMIN" in self.user_groups
  39. def form_valid(self, form):
  40. with transaction.atomic():
  41. # Сохраняем форму, чтобы получить объект компании
  42. instance = form.save(commit=False)
  43. # Присваиваем полю repr идентификатор текущего пользователя
  44. #instance.repr = self.request.user
  45. # Создаем новую запись в БД, чтобы иметь доступ к ID
  46. instance.save()
  47. #TODO ADD INTEGRATION WITH PLATFORM!
  48. # Создание тикета на активацию Категории услуг на Платформе.
  49. # Создаем объект тикета и присваиваем его полю ticket_status
  50. #instance.ticket_status = create_ticket_company_activation(self.request.user, instance)
  51. instance.ticket_status = create_ticket_provider_activation_by_partner_admin(self.request.user, instance)
  52. # Создание тикета на утверждение прав пользователя
  53. #create_ticket_role_activation_partner_admin(self.request.user, instance)
  54. # Сохраняем новые изменения
  55. instance.save()
  56. #TODO! Это делать на платформе!
  57. # Создаем необходимые объекты документов по requirements указанных в созданной company
  58. # Используем bulk_create для создания всех объектов одновременно
  59. #doc_codes = parse_requirements(instance.requirements)
  60. #Documents.objects.bulk_create([
  61. # Documents(
  62. # company=instance,
  63. # user=self.request.user,
  64. # doc_type=doc_code
  65. # ) for doc_code in doc_codes
  66. #])
  67. # Отправляем пользователю уведомление на страницу о успехе операции
  68. messages.success(
  69. self.request,
  70. 'Ваша заявка на добавление категории услуг успешно отправлена на Платформу и теперь проходит проверку! Если Сервис не подключен к Платформе, можете активировать категорию услуг в списке вручную.'
  71. )
  72. return super().form_valid(form) # Возвращаем успешный ответ
  73. class ProvidersListView(BaseView, UserPassesTestMixin, SingleTableView):
  74. page_title = _('Исполнители по видам услуг')
  75. page_name = 'providers'
  76. table_class = ProvidersTable
  77. queryset = Provider.objects.all()
  78. template_name = 'sharix_admin/providers.html'
  79. def get_queryset(self):
  80. queryset = super().get_queryset()
  81. search_query = self.request.GET.get('q', '').strip()
  82. if search_query:
  83. queryset = queryset.filter(
  84. Q(id__icontains=search_query) |
  85. Q(service_status__icontains=search_query) |
  86. Q(service__icontains=search_query) |
  87. Q(resource__icontains=search_query)
  88. ).distinct()
  89. return queryset
  90. def get_context_data(self, **kwargs):
  91. context = super().get_context_data(**kwargs)
  92. context.update({
  93. 'title': _('Performers'),
  94. 'object_list': context['object_list'],
  95. })
  96. return context
  97. def test_func(self) -> bool or None:
  98. # group_names = ('PARTNER-ADMIN')
  99. # if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  100. # return True
  101. # return False
  102. return True
  103. @login_required
  104. @group_required('PARTNER-ADMIN')
  105. def change_provider_status(request):
  106. if request.method == 'POST':
  107. provider_id = request.POST.get('provider_id')
  108. new_status = request.POST.get('new_status')
  109. provider = Provider.objects.get(pk=provider_id)
  110. provider.status = new_status
  111. provider.save()
  112. return JsonResponse({'status': 'success'})
  113. else:
  114. return JsonResponse({'status': 'error'})
  115. class ProviderDetailView(BaseView, DetailView):
  116. model = Provider
  117. template_name = 'sharix_admin/provider_detail.html'
  118. context_object_name = 'provider'
  119. page_title = 'О возможности для заказа'
  120. page_name = 'provider_detail'
  121. def detail_view(request, primary_key):
  122. try:
  123. provider = Provider.objects.get(pk=primary_key)
  124. except Provider.DoesNotExist:
  125. raise Http404('Provider does not exist')
  126. return render(request, template_name, context={
  127. 'help_texts': ProviderHelpTexts,
  128. 'captions': ProviderVerboseNames,
  129. })
  130. def get_context_data(self, **kwargs):
  131. context = super().get_context_data(**kwargs)
  132. context['help_texts'] = ProviderHelpTexts
  133. context['captions'] = ProviderVerboseNames
  134. return context