Browse Source

Fixed confused order of creating tickets when applying for cooperating

TonyKurts 6 months ago
parent
commit
4275e50251

+ 2 - 0
SharixAdmin/utils/__init__.py

@@ -0,0 +1,2 @@
+from .group import *
+from .ticket_gen import *

+ 0 - 0
SharixAdmin/utils.py → SharixAdmin/utils/group.py


+ 33 - 0
SharixAdmin/utils/ticket_gen.py

@@ -0,0 +1,33 @@
+from datetime import datetime, timedelta
+
+from tickets.models import Ticket, TicketList
+
+
+def create_ticket_partner_activation(user, сompany):
+    """
+    Создание тикета на активацию партнера.
+    
+    Список: 2101, METASERVICE-ADMIN: Активация партнеров (NEG_REQUEST)
+    Тип: 4, NEG_REQUEST
+    """
+    # FIXME: Возможно нужно автоматически создавать содержимое поля json
+    return Ticket.objects.create(
+        title=f"Создание нового Партнера '{сompany.legal_name}'",
+        ticket_list=TicketList.objects.get(pk=2101),
+        ticket_type=4,
+        due_date=datetime.now().date() + timedelta(days=30),
+        created_by=user,
+        
+        note=f"""
+            Пользователь {user} #{user.pk} отправил заявку на становление партнером сервиса:\n
+            - Имя: {сompany.legal_name}\n
+            - ИНН: {сompany.inn}\n
+            - Юридический адрес: {сompany.address}\n
+            <a href="{сompany.get_admin_url()}">Полная информация</a>\n
+            \n
+            Проверьте всю информацию и для активации партнера измените статус заявки на ACCEPTED.
+            Это будет означать, что договорные отношения между сервисом и партнером, вступают в силу.
+        """
+    )
+
+    

+ 36 - 49
SharixAdmin/views/cooperate.py

@@ -3,74 +3,61 @@ from datetime import datetime, timedelta
 from django.views.generic.edit import FormView
 from django.urls import reverse_lazy
 from django.contrib.auth.mixins import UserPassesTestMixin
+from django.contrib import messages
+from django.db import transaction
 
 from SharixAdmin.forms import CompanyForm
+from SharixAdmin.utils import create_ticket_partner_activation
 from tickets.models import Ticket, TicketList
 
 
 class CooperateView(UserPassesTestMixin, FormView):
     form_class = CompanyForm
     template_name = "SharixAdmin/cooperate.html"
-    success_url = reverse_lazy("cooperate")
+    success_url = reverse_lazy("home")
 
     # Проверяем не состояит ли текущий пользователь в группе PARTNER-ADMIN
     def test_func(self):
         return not self.request.user.groups.filter(name='PARTNER-ADMIN').exists()
 
     def form_valid(self, form):
-        # Сохраняем форму, чтобы получить объект компании
-        instance = form.save(commit=False)
-    
-        # Присваиваем полю repr_id идентификатор текущего пользователя
-        instance.repr_id = self.request.user
+        with transaction.atomic():
+            # Сохраняем форму, чтобы получить объект компании
+            instance = form.save(commit=False)
+        
+            # Присваиваем полю repr_id идентификатор текущего пользователя
+            instance.repr_id = self.request.user
 
-        # Создаем новую запись в БД, чтобы иметь доступ к ID
-        instance.save() 
+            # Создаем новую запись в БД, чтобы иметь доступ к ID
+            instance.save() 
 
-        # Создание тикета на активацию партнера
-        # Создаем объект тикета и присваиваем его полю ticket_status
-        instance.ticket_status = Ticket.objects.create(
-            title=f"Создание нового Партнера '{instance.legal_name}'",
-            ticket_list=TicketList.objects.get(pk=2102),# METASERVICE-ADMIN: Права в сервисе (ACCESS_REQUEST)
-            ticket_type=3, # ACCESS_REQUEST
-            due_date=datetime.now().date() + timedelta(days=30),
-            created_by=self.request.user,
+            # Создание тикета на активацию партнера.
+            # Создаем объект тикета и присваиваем его полю ticket_status
+            instance.ticket_status = create_ticket_partner_activation(self.request.user, instance)
             
-            # FIXME: Возможно необходима автоматическая генерация содержимого в определенном формате
-            # FIXME: Возможно нужно автоматически создавать содержимое поля json
-            note=f"""
-            Пользователь {self.request.user} #{self.request.user.pk} отправил заявку на становление партнером сервиса:\n
-            - Имя: {instance.legal_name}\n
-            - ИНН: {instance.inn}\n
-            - Юридический адрес: {instance.address}\n
-            <a href="{instance.get_admin_url()}">Полная информация</a>\n
-            \n
-            Проверьте всю информацию и для активации партнера измените статус заявки на ACCEPTED.
-            Это будет означать, что договорные отношения между сервисом и партнером, вступают в силу.
-            """
-        )
+            # Создание тикета на утверждение прав пользователя
+            Ticket.objects.create(
+                title=f"Запрос прав на становление Партнером '{instance.legal_name}'",
+                ticket_list=TicketList.objects.get(pk=2102),# METASERVICE-ADMIN: Права в сервисе (ACCESS_REQUEST)
+                ticket_type=3, # ACCESS_REQUEST
+                due_date=datetime.now().date() + timedelta(days=30),
+                created_by=self.request.user,
+                
+                # FIXME: Возможно нужно автоматически создавать содержимое поля json
+                note=f"""
+                    Пользователь {self.request.user} #{self.request.user.pk} отправил заявку на права партнера сервиса.\n
+                    \n
+                    <a href="{instance.get_admin_url()}">Полная информация о компании партнера</a>\n
+                    \n
+                    После принятия изменений указанное лицо будет партнером сервиса при совершении юридически значимых действий.
+                """
+            )
 
-        # Сохраняем новые изменения
-        instance.save()
+            # Сохраняем новые изменения
+            instance.save()
 
-        # Создание тикета на утверждение прав пользователя
-        # FIXME: Возможно нужно автоматически создавать содержимое поля json
-        Ticket.objects.create(
-            title=f"Запрос прав на становление Партнером '{instance.legal_name}'",
-            ticket_list=TicketList.objects.get(pk=2101),# METASERVICE-ADMIN: Активация партнеров (NEG_REQUEST)
-            ticket_type=4, # NEG_REQUEST
-            due_date=datetime.now().date() + timedelta(days=30),
-            created_by=self.request.user,
-            
-            # FIXME: Возможно необходима автоматическая генерация содержимого в определенном формате
-            note=f"""
-            Пользователь {self.request.user} #{self.request.user.pk} отправил заявку на права партнера сервиса.\n
-            \n
-            <a href="{instance.get_admin_url()}">Полная информация о компании партнера</a>\n
-            \n
-            После принятия изменений указанное лицо будет партнером сервиса при совершении юридически значимых действий.
-            """
-        )
+        # Отправляем пользователю уведомление на страницу о успехе операции
+        messages.success(self.request, 'Ваша заявка на становление партнером успешно отправлена и теперь проходит проверку!')
 
         return super().form_valid(form) # Возвращаем успешный ответ
 

+ 12 - 5
SharixAdmin/views/partner.py

@@ -5,9 +5,11 @@ from django.shortcuts import get_object_or_404
 from django.utils.translation import gettext as _
 from django.contrib.auth.mixins import UserPassesTestMixin
 from django.contrib import messages
+from django.db import transaction
 
 from dbsynce.models import Company, Documents
 from SharixAdmin.forms import CompanyForm
+from SharixAdmin.utils import create_ticket_partner_activation
 
 from .base import BaseView
 
@@ -54,12 +56,17 @@ class PartnerEditView(UserPassesTestMixin, BaseView, FormView):
         return kwargs
 
     def form_valid(self, form):
-        # Сохраняем изменения
-        form.save()
+        with transaction.atomic():
+            # Сохраняем изменения
+            form.save()
 
-        # Получаем текущий объект компании и деактивируем ее
-        current_company = form.instance
-        current_company.deactivate()
+            # Получаем текущий объект компании и деактивируем ее
+            current_company = form.instance
+            current_company.deactivate()
+
+            # Выполняем пересоздание тикета на активацию партнера
+            current_company.ticket_status.archive()
+            create_ticket_partner_activation(self.request.user, current_company)
 
         # Отправляем пользователю уведомление на страницу о успехе операции
         messages.success(self.request, 'Данные успешно изменены и теперь проходят проверку!')