123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- from dbsynce.models import Resource
- from webservice_running.models import ResourceLocal
- 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 django.views.generic import DetailView
- from django.shortcuts import render
- from webservice_running.tables import ResourcesLocalTable
- 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 django.views.generic.edit import CreateView
- from tickets.models import Ticket, TicketList
- from webservice_running.forms import ResourceLocalForm
- from sharix_admin.forms import ResourceForm
- from sharix_admin.utils import *
- from dbsynce.lib.data import *
- from sharix_admin.views.base import BaseView
- from webservice_running.views.base_local import BaseLocalView
- from django.db.models import Q
- from django import forms
- from django.shortcuts import redirect
- from dbsynce.docs.database.resource import Resource as ResourceHelpTexts
- from dbsynce.docs.verbose_names.resource import Resource as ResourceVerboseNames
- from webservice_running.docs.database.local import Local as HelpTextsLocal
- from webservice_running.docs.verbose_names.local import Local as VerboseNameLocal
- #def _get_form(request, formcls, prefix):
- def _get_form(request, formcls):
- data = request.POST
- #data = request.POST if prefix in request.POST else None
- return formcls(data)
- #return formcls(data, prefix=prefix)
- class ResourcesLocalListView(BaseView, UserPassesTestMixin, SingleTableView):
- table_class = ResourcesLocalTable
- queryset = ResourceLocal.objects.all()
- template_name = 'webservice_running/local/resource_local_list.html'
- page_title = 'Локальные данные ресурсов'
- page_name = 'resources'
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context.update({
- 'title': self.page_title,
- 'object_list': context['object_list'],
- })
- return context
- 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(user__first_name__icontains=search_query) |
- Q(user__last_name__icontains=search_query) |
- Q(status__icontains=search_query)
- ).distinct()
- return queryset
- 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 ResourceLocalEditView(BaseLocalView, FormView):
- resource_form = ResourceLocalForm
- resource_local_form = ResourceLocalForm
- template_name = "webservice_running/local/resource_local.html"
- success_url = reverse_lazy("webservice_running:resource_local_list")
- page_title = 'Изменить ресурс c локальными данными'
- page_name = 'resource_local_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) # Возвращаем успешный ответ
- return super().form_valid(resource_form, resource_local_form) # Возвращаем успешный ответ
- class ResourceLocalCreate(BaseLocalView):
- resource_form = ResourceForm
- resource_local_form = ResourceLocalForm
- template_name = "webservice_running/local/resource_local.html"
- success_url = reverse_lazy("webservice_running:main_local")
- page_title = 'Добавить ресурс с локальными данными'
- page_name = 'resource_local/add/'
- def get(self, request, *args, **kwargs):
- context = self.get_context_data(**kwargs)
- context.update({'form_base': ResourceForm(prefix='form_base'), 'form_local': ResourceLocalForm(prefix='form_local')})
- return render(
- request,
- self.template_name,
- context,
- )
- #return self.render_to_response(context)
- def post(self, request, *args, **kwargs):
- form_base = _get_form(request, ResourceForm)
- form_local = _get_form(request, ResourceLocalForm)
- #if form_base.is_valid() and form_local.is_valid():
- #if form_local.is_valid():
- if form_local.is_valid() and form_base.is_valid():
- instance=form_base.save(commit=False)
- instance.user = self.request.user
- instance.save()
- instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance)
- create_ticket_resource_activation_by_partner_admin(self.request.user, instance)
-
- instance.save()
- doc_codes = parse_requirements(instance.requirements)
- Documents.objects.bulk_create([
- Documents(
- # #TODO add info about company
- resource=instance,
- user=self.request.user,
- doc_type=doc_code
- ) for doc_code in doc_codes
- ])
- messages.success(
- self.request,
- 'Ваша заявка на добавление ресурса успешно отправлена и теперь проходит проверку!'
- )
- instance_local=form_local.save(commit=False)
- instance_local.resource=instance
- form_local.save()
- return redirect(self.success_url)
- else:
- messages.error(
- self.request,
- 'Ошибка добавления, попробуйте снова!'
- )
-
- context = self.get_context_data(**kwargs)
- context.update({'form_base': form_base, 'form_local': form_local})
-
- return render(
- request,
- self.template_name,
- context,
- )
- class ResourceLocalDetailView(BaseView, DetailView):
- model = ResourceLocal
- template_name = 'webservice_running/local/resource_local_detail.html'
- context_object_name = 'resource_local'
- page_title = 'Локальная информация о ресурсе'
- page_name = 'resource_local_detail'
- def detail_view(self, request, primary_key):
- try:
- resource_local = ResourceLocal.objects.get(pk=primary_key)
- #docs = Documents.objects.filter(resource=self.object.resource)
- #context['docs'] = self.docs
- except ResourceLocal.DoesNotExist:
- #docs=[]
- raise Http404('Something does not exist')
-
- return render(request, self.template_name, context={
- })
- def get_context_data(self, **kwargs):
- try:
- docs = Documents.objects.filter(resource=self.object.resource)
- except Documents.DoesNotExist:
- docs=[]
- context = super().get_context_data(**kwargs)
- context['help_texts'] = ResourceHelpTexts
- context['captions'] = ResourceVerboseNames
- context['help_texts_local'] = HelpTextsLocal
- context['captions_local'] = VerboseNameLocal
- context['docs'] = docs
- return context
|