from dbsynce.models import Provider from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import UserPassesTestMixin from django.http import JsonResponse from django.utils.translation import gettext as _ from django_tables2 import SingleTableView from sharix_admin.tables import ProvidersTable from sharix_admin.utils import group_required from .base import BaseView from sharix_admin.utils import group_required from django.contrib.auth.decorators import login_required from django.urls import reverse_lazy from django.views.generic.edit import FormView from django.db import transaction from django.contrib import messages from tickets.models import Ticket, TicketList from sharix_admin.forms import CompanyForm from sharix_admin.utils import * from dbsynce.lib.data import * from dbsynce.lib.dicts import * from sharix_admin.forms import ProviderCreateForm #from sharix_admin.forms import ProviderUpdateForm class ProviderCreate(BaseView, FormView): form_class = ProviderCreateForm template_name = "sharix_admin/provider_form.html" success_url = reverse_lazy("sharix_admin:providers") page_title = 'Добавить услугу к исполнению' page_name = 'providers/add/' # Проверяем не состояит ли текущий пользователь в группе METASERVICE-ADMIN def test_func(self): group_names = ('PROVIDER') if bool(self.request.user.groups.filter(name=group_names)): #or self.request.user.is_superuser: return True return False #return not "METASERVICE-ADMIN" in self.user_groups def form_valid(self, form): with transaction.atomic(): # Сохраняем форму, чтобы получить объект компании instance = form.save(commit=False) # Присваиваем полю repr идентификатор текущего пользователя #instance.repr = self.request.user # Создаем новую запись в БД, чтобы иметь доступ к ID instance.save() #TODO ADD INTEGRATION WITH PLATFORM! # Создание тикета на активацию Категории услуг на Платформе. # Создаем объект тикета и присваиваем его полю ticket_status #instance.ticket_status = create_ticket_company_activation(self.request.user, instance) instance.ticket_status = create_ticket_provider_activation_by_partner_admin(self.request.user, instance) # Создание тикета на утверждение прав пользователя #create_ticket_role_activation_partner_admin(self.request.user, instance) # Сохраняем новые изменения instance.save() #TODO! Это делать на платформе! # Создаем необходимые объекты документов по requirements указанных в созданной company # Используем bulk_create для создания всех объектов одновременно #doc_codes = parse_requirements(instance.requirements) #Documents.objects.bulk_create([ # Documents( # company=instance, # user=self.request.user, # doc_type=doc_code # ) for doc_code in doc_codes #]) # Отправляем пользователю уведомление на страницу о успехе операции messages.success( self.request, 'Ваша заявка на добавление категории услуг успешно отправлена на Платформу и теперь проходит проверку! Если Сервис не подключен к Платформе, можете активировать категорию услуг в списке вручную.' ) return super().form_valid(form) # Возвращаем успешный ответ class ProvidersListView(UserPassesTestMixin, SingleTableView): page_title = _('Исполнители по видам услуг') page_name = 'providers' table_class = ProvidersTable queryset = Provider.objects.all() template_name = 'sharix_admin/providers.html' def get_queryset(self): queryset = super().get_queryset() search_query = self.request.GET.get('q', '').strip() if search_query: queryset = queryset.filter( Q(id__icontains=search_query) | Q(service_status__icontains=search_query) | Q(service__icontains=search_query) | Q(resource__icontains=search_query) ).distinct() return queryset def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ 'title': _('Performers'), 'object_list': context['object_list'], }) return context def test_func(self) -> bool or None: # group_names = ('PARTNER-ADMIN') # if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser: # return True # return False return True @login_required @group_required('PARTNER-ADMIN') def change_provider_status(request): if request.method == 'POST': provider_id = request.POST.get('provider_id') new_status = request.POST.get('new_status') provider = Provider.objects.get(pk=provider_id) provider.status = new_status provider.save() return JsonResponse({'status': 'success'}) else: return JsonResponse({'status': 'error'})