from django.views.generic import ListView, TemplateView from django.views.generic.edit import CreateView, UpdateView from django.urls import reverse_lazy from django.views.generic.detail import DetailView from django.views.generic.edit import FormMixin from .forms import CommentForm from django.urls import reverse from django.http import HttpResponseForbidden from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib import messages from django.shortcuts import redirect from .models import Ticket class HomeView(TemplateView): template_name = "ticketsystem/home.html" class TicketListView(ListView): model = Ticket template_name = "ticketsystem/index.html" context_object_name = "tickets" ordering = ["-created_at"] # neueste zuerst paginate_by = 10 # optional: Pagination (10 Tickets pro Seite) def get_queryset(self): queryset = super().get_queryset() status = self.request.GET.get("status") if status: queryset = queryset.filter(status=status) return queryset def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["selected_status"] = self.request.GET.get("status", "") return context class TicketDetailView(FormMixin, DetailView): model = Ticket template_name = "ticketsystem/detail.html" context_object_name = "ticket" form_class = CommentForm def get_success_url(self): return reverse("detail", kwargs={"pk": self.object.pk}) def post(self, request, *args, **kwargs): self.object = self.get_object() form = self.get_form() if form.is_valid(): comment = form.save(commit=False) comment.ticket = self.object comment.author = request.user comment.save() return super().form_valid(form) return self.form_invalid(form) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["form"] = self.get_form() return context class TicketCreateView(CreateView): model = Ticket fields = ["title", "description", "priority", "assigned_to"] # user & status wird automatisch gesetzt template_name = "ticketsystem/ticket_form.html" success_url = reverse_lazy("ticket-list") def form_valid(self, form): form.instance.created_by = self.request.user # Der angemeldete User wird automatisch gesetzt form.instance.status = "open" # Neues Ticket beginnt immer als "offen" return super().form_valid(form) class TicketUpdateView(LoginRequiredMixin, UpdateView): model = Ticket fields = ["title", "description", "status", "priority", "assigned_to"] template_name = "ticketsystem/ticket_form.html" success_url = reverse_lazy("ticket-list") def dispatch(self, request, *args, **kwargs): ticket = self.get_object() user = request.user if user != ticket.assigned_to: messages.error(request, "⛔ Du darfst dieses Ticket nicht bearbeiten.") return redirect("detail", pk=ticket.pk) return super().dispatch(request, *args, **kwargs) def get_queryset(self): return Ticket.objects.all() # Optional: Nur eigene Tickets bearbeiten lassen?