cooperate.py 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 create_ticket_partner_activation
  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_partner_activation(self.request.user, instance)
  32. # Создание тикета на утверждение прав пользователя
  33. Ticket.objects.create(
  34. title=f"Запрос прав на становление Партнером '{instance.legal_name}'",
  35. ticket_list=TicketList.objects.get(pk=2102), # METASERVICE-ADMIN: Права в сервисе (ACCESS_REQUEST)
  36. ticket_type=3, # ACCESS_REQUEST
  37. due_date=datetime.now().date() + timedelta(days=30),
  38. created_by=self.request.user,
  39. # FIXME: Возможно нужно автоматически создавать содержимое поля json
  40. note=f"""
  41. Пользователь {self.request.user} #{self.request.user.pk} отправил заявку на права партнера сервиса.\n
  42. \n
  43. <a href="{get_admin_url(instance)}">Полная информация о компании партнера</a>\n
  44. \n
  45. После принятия изменений указанное лицо будет партнером сервиса при совершении юридически значимых действий.
  46. """
  47. )
  48. # Сохраняем новые изменения
  49. instance.save()
  50. # Создаем необходимые объекты документов по requirements указанных в созданной company
  51. # Используем bulk_create для создания всех объектов одновременно
  52. doc_codes = parse_requirements(instance.requirements)
  53. Documents.objects.bulk_create([
  54. Documents(
  55. company=instance,
  56. user=self.request.user,
  57. doc_type=doc_code
  58. ) for doc_code in doc_codes
  59. ])
  60. # Отправляем пользователю уведомление на страницу о успехе операции
  61. messages.success(
  62. self.request,
  63. 'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!'
  64. )
  65. return super().form_valid(form) # Возвращаем успешный ответ