cooperate.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from datetime import datetime, timedelta
  2. from dbsynce.lib.core import parse_requirements, get_admin_url
  3. from dbsynce.models import Documents
  4. from django.contrib import messages
  5. from django.db import transaction
  6. from django.urls import reverse_lazy
  7. from django.views.generic.edit import FormView
  8. from tickets.models import Ticket, TicketList
  9. from sharix_admin.forms import CompanyForm
  10. from sharix_admin.utils import *
  11. from .base import BaseView
  12. class CooperateView(BaseView, FormView):
  13. form_class = CompanyForm
  14. template_name = "sharix_admin/cooperate.html"
  15. success_url = reverse_lazy("sharix_admin:main")
  16. page_title = 'Сотрудничество'
  17. page_name = 'cooperate'
  18. # Проверяем не состояит ли текущий пользователь в группе PARTNER-ADMIN
  19. def test_func(self):
  20. return not "PARTNER-ADMIN" in self.user_groups
  21. def form_valid(self, form):
  22. with transaction.atomic():
  23. # Сохраняем форму, чтобы получить объект компании
  24. instance = form.save(commit=False)
  25. # Присваиваем полю repr идентификатор текущего пользователя
  26. instance.repr = self.request.user
  27. # Создаем новую запись в БД, чтобы иметь доступ к ID
  28. instance.save()
  29. # Создание тикета на активацию партнера.
  30. # Создаем объект тикета и присваиваем его полю ticket_status
  31. instance.ticket_status = create_ticket_company_activation(self.request.user, instance)
  32. # Создание тикета на утверждение прав пользователя
  33. create_ticket_role_activation_partner_admin(self.request.user, instance)
  34. # Сохраняем новые изменения
  35. instance.save()
  36. # Создаем необходимые объекты документов по requirements указанных в созданной company
  37. # Используем bulk_create для создания всех объектов одновременно
  38. doc_codes = parse_requirements(instance.requirements)
  39. Documents.objects.bulk_create([
  40. Documents(
  41. company=instance,
  42. user=self.request.user,
  43. doc_type=doc_code
  44. ) for doc_code in doc_codes
  45. ])
  46. # Отправляем пользователю уведомление на страницу о успехе операции
  47. messages.success(
  48. self.request,
  49. 'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
  50. )
  51. return super().form_valid(form) # Возвращаем успешный ответ