resource.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from dbsynce.models import Resource
  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 sharix_admin.tables import ResourceTable
  8. from sharix_admin.utils import group_required
  9. from datetime import datetime, timedelta
  10. from dbsynce.lib.core import parse_requirements, get_admin_url
  11. from dbsynce.models import Documents
  12. from django.contrib import messages
  13. from django.db import transaction
  14. from django.urls import reverse_lazy
  15. from django.views.generic.edit import FormView
  16. from tickets.models import Ticket, TicketList
  17. from sharix_admin.forms import ResourceForm
  18. from sharix_admin.utils import *
  19. from dbsynce.lib.data import *
  20. from .base import BaseView
  21. class ResourceListView(UserPassesTestMixin, SingleTableView):
  22. table_class = ResourceTable
  23. queryset = Resource.objects.all()
  24. template_name = 'sharix_admin/resource.html'
  25. def get_context_data(self, **kwargs):
  26. context = super().get_context_data(**kwargs)
  27. context.update({
  28. 'title': _('Resources'),
  29. 'object_list': context['object_list'],
  30. })
  31. return context
  32. def test_func(self) -> bool or None:
  33. group_names = ('PARTNER-ADMIN')
  34. if bool(self.request.user.groups.filter(name=group_names)) or self.request.user.is_superuser:
  35. return True
  36. return False
  37. @login_required
  38. @group_required('PARTNER-ADMIN')
  39. def change_resource_status(request):
  40. if request.method == 'POST':
  41. resource = request.POST.get('resource')
  42. new_status = request.POST.get('new_status')
  43. resource = Resource.objects.get(pk=resource)
  44. resource.status = new_status
  45. resource.save()
  46. return JsonResponse({'status': 'success'})
  47. else:
  48. return JsonResponse({'status': 'error'})
  49. class ResourceEditView(BaseView, FormView):
  50. form_class = ResourceForm
  51. template_name = "sharix_admin/resource.html"
  52. success_url = reverse_lazy("sharix_admin:resource_list")
  53. page_title = 'Изменить ресурс'
  54. page_name = 'resource_edit'
  55. # Проверяем состояит ли текущий пользователь в группе PARTNER-ADMIN
  56. def test_func(self):
  57. return "PARTNER-ADMIN" in self.user_groups
  58. def form_valid(self, form):
  59. with transaction.atomic():
  60. # Сохраняем форму, чтобы получить объект ресурса
  61. instance = form.save(commit=False)
  62. # Присваиваем полю repr идентификатор текущего пользователя
  63. instance.repr = self.request.user
  64. # Создаем новую запись в БД, чтобы иметь доступ к ID
  65. instance.save()
  66. # Создание тикета на активацию ресурса.
  67. # Создаем объект тикета и присваиваем его полю ticket_status
  68. instance.ticket_status = create_ticket_resource_activation_by_metaservice_supervisor(self.request.user, instance)
  69. # Создание тикета на утверждение прав пользователя
  70. # create_ticket_role_activation_partner_admin(self.request.user, instance)
  71. # Сохраняем новые изменения
  72. instance.save()
  73. # Создаем необходимые объекты документов по requirements указанных в созданной company
  74. # Используем bulk_create для создания всех объектов одновременно
  75. doc_codes = parse_requirements(instance.requirements)
  76. Documents.objects.bulk_create([
  77. Documents(
  78. company=instance,
  79. user=self.request.user,
  80. doc_type=doc_code
  81. ) for doc_code in doc_codes
  82. ])
  83. # Отправляем пользователю уведомление на страницу о успехе операции
  84. messages.success(
  85. self.request,
  86. 'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
  87. )
  88. return super().form_valid(form) # Возвращаем успешный ответ