init
This commit is contained in:
84
backend/servicedesk/views.py
Normal file
84
backend/servicedesk/views.py
Normal file
@@ -0,0 +1,84 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user