from dbsynce.models import Resource 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 ResourcesTable from sharix_admin.utils import group_required from datetime import datetime, timedelta from dbsynce.lib.core import parse_requirements, get_admin_url from dbsynce.models import Documents from django.contrib import messages from django.db import transaction from django.urls import reverse_lazy from django.views.generic.edit import FormView from tickets.models import Ticket, TicketList from sharix_admin.forms import ResourceForm from sharix_admin.utils import * from dbsynce.lib.data import * from .base import BaseView class ResourcesListView(UserPassesTestMixin, SingleTableView): table_class = ResourcesTable queryset = Resource.objects.all() template_name = 'sharix_admin/resource_list.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ 'title': _('Resources'), '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_resource_status(request): if request.method == 'POST': resource = request.POST.get('resource') new_status = request.POST.get('new_status') resource = Resource.objects.get(pk=resource) resource.status = new_status resource.save() return JsonResponse({'status': 'success'}) else: return JsonResponse({'status': 'error'}) class ResourceEditView(BaseView, FormView): form_class = ResourceForm template_name = "sharix_admin/resource.html" success_url = reverse_lazy("sharix_admin:resource_list") page_title = 'Изменить ресурс' page_name = 'resource_edit' # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN def test_func(self): return "PARTNER-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() # Создание тикета на активацию ресурса. # Создаем объект тикета и присваиваем его полю ticket_status instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance) # Создание тикета на утверждение прав пользователя # create_ticket_role_activation_partner_admin(self.request.user, instance) # Сохраняем новые изменения instance.save() # Создаем необходимые объекты документов по 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 ResourceCreate(BaseView, FormView): form_class = ResourceForm template_name = "sharix_admin/resource.html" success_url = reverse_lazy("sharix_admin:main") page_title = 'Добавить ресурс' page_name = 'resource/add/' # Проверяем не состояит ли текущий пользователь в группе PARTNER-ADMIN def test_func(self): return not "PARTNER-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() # Создание тикета на активацию партнера. # Создаем объект тикета и присваиваем его полю ticket_status instance.ticket_status = create_ticket_company_activation(self.request.user, instance) # Создание тикета на утверждение прав пользователя create_ticket_role_activation_partner_admin(self.request.user, instance) # Сохраняем новые изменения instance.save() # Создаем необходимые объекты документов по 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) # Возвращаем успешный ответ