Files
e-trznice/backend/servicedesk/views.py
2025-10-02 00:54:34 +02:00

85 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework import viewsets, filters
from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema
from django.contrib.auth import get_user_model
from .models import ServiceTicket
from .serializers import ServiceTicketSerializer
from .filters import ServiceTicketFilter
from account.email import send_email_with_context
from rest_framework.permissions import IsAuthenticated
from rest_framework.exceptions import PermissionDenied
# from account.permissions import RoleAllowed
@extend_schema(
tags=["ServiceTicket"],
description="Správa uživatelských požadavků vytvoření, úprava a výpis. Filtrování podle stavu, urgence, uživatele atd."
)
class ServiceTicketViewSet(viewsets.ModelViewSet):
# queryset = ServiceTicket.objects.select_related("user").all().order_by("-created_at")
queryset = ServiceTicket.objects.all().order_by("-created_at")
serializer_class = ServiceTicketSerializer
filter_backends = [DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
filterset_class = ServiceTicketFilter
ordering_fields = ["created_at"]
search_fields = ["title", "description", "user__username"]
permission_classes = [IsAuthenticated]
def get_queryset(self):
user = self.request.user
if user.role in ["admin", "cityClerk"]: # Adjust as needed for staff roles
# return ServiceTicket.objects.select_related("user").all().order_by("-created_at")
return ServiceTicket.objects.all().order_by("-created_at")
else:
# return ServiceTicket.objects.select_related("user").filter(user=user).order_by("-created_at")
return ServiceTicket.objects.filter(user=user).order_by("-created_at")
def get_object(self):
obj = super().get_object()
if self.request.user.role not in ["admin", "cityClerk"] and obj.user != self.request.user:
raise PermissionDenied("Nemáte oprávnění pracovat s tímto požadavkem.")
return obj
def perform_create(self, serializer):
user_request = serializer.save(user=self.request.user)
# Map categories to roles responsible for handling them
category_role_map = {
"tech": "admin",
"reservation": "cityClerk",
"payment": "admin",
"account": "admin",
"content": "admin",
"suggestion": "admin",
"other": "admin"
}
role = category_role_map.get(user_request.category)
if not role:
return # Or log: unknown category, no notification sent
User = get_user_model()
recipients = User.objects.filter(role=role, email__isnull=False).exclude(email="").values_list("email", flat=True)
if not recipients:
recipients = User.objects.filter(role='admin', email__isnull=False).exclude(email="").values_list("email", flat=True)
if not recipients:
return
subject = "Nový uživatelský požadavek"
message = f"""
Nový požadavek byl vytvořen:
Název: {user_request.title}
Kategorie: {user_request.get_category_display()}
Popis: {user_request.description or ""}
Vytvořeno: {user_request.created_at.strftime('%d.%m.%Y %H:%M')}
Zadal: {user_request.user.get_full_name()} ({user_request.user.email})
Spravujte požadavky v systému.
"""
send_email_with_context(list(recipients), subject, message)