|
@@ -1,9 +1,17 @@
|
|
|
-from rest_framework import generics, permissions
|
|
|
+from rest_framework import generics, permissions, status
|
|
|
+from rest_framework.decorators import api_view, permission_classes
|
|
|
+from rest_framework.response import Response
|
|
|
+
|
|
|
from rest_framework_api_key.permissions import HasAPIKey
|
|
|
|
|
|
+from django.contrib.auth.models import Group
|
|
|
+from django.contrib.auth import get_user_model
|
|
|
+
|
|
|
from tickets.api.v2.serializers.tickets import TicketSerializer
|
|
|
from tickets.models import Ticket
|
|
|
|
|
|
+import random
|
|
|
+
|
|
|
|
|
|
class TicketPatchAPIView(generics.UpdateAPIView):
|
|
|
"""
|
|
@@ -36,3 +44,31 @@ class TicketListAPIView(generics.ListAPIView):
|
|
|
'assigned_to',
|
|
|
)
|
|
|
|
|
|
+
|
|
|
+@api_view(['PATCH'])
|
|
|
+@permission_classes([permissions.IsAuthenticated | HasAPIKey])
|
|
|
+def ticket_assigin_someone_user(request, pk):
|
|
|
+ try:
|
|
|
+ ticket = Ticket.objects.get(pk=pk)
|
|
|
+ except Ticket.DoesNotExist:
|
|
|
+ return Response({"error": "Тикет не найден"}, status=status.HTTP_404_NOT_FOUND)
|
|
|
+
|
|
|
+ users = ticket.ticket_list.group.user_set.all()
|
|
|
+ if not users:
|
|
|
+ return Response(
|
|
|
+ {"error": "Нет доступных пользователей для назначения"},
|
|
|
+ status=status.HTTP_400_BAD_REQUEST
|
|
|
+ )
|
|
|
+
|
|
|
+ # TODO: Сделать алгоритм выбора пользователя по каким-нибудь параметрам
|
|
|
+ # Например по количеству уже назначенных тикетов:
|
|
|
+ # Выбрать пользователя, у кого меньше всего тикетов назначено
|
|
|
+ random_user = random.choice(users)
|
|
|
+ ticket.assigned_to = random_user
|
|
|
+ ticket.save()
|
|
|
+
|
|
|
+ return Response({
|
|
|
+ "id": ticket.id,
|
|
|
+ "assigned_to": random_user.username,
|
|
|
+ "status": "Назначение обновлено"
|
|
|
+ }, status=status.HTTP_200_OK)
|