from django.shortcuts import get_object_or_404, render 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 .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 # <- das ist wichtig! 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 setzen wir automatisch template_name = "ticketsystem/ticket_form.html" success_url = reverse_lazy("index") 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(UpdateView): model = Ticket fields = ["title", "description", "status", "priority", "assigned_to"] template_name = "ticketsystem/ticket_form.html" # kannst das gleiche Template wie beim Erstellen verwenden success_url = reverse_lazy("index") # oder zurück zur Detailseite def get_queryset(self): return Ticket.objects.all() # Optional: Nur eigene Tickets bearbeiten lassen?