cooperate.py 3.0 KB

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