feat: auto select tutor as assignee

This commit is contained in:
2025-05-29 22:52:35 +02:00
parent 5688d96e4f
commit c77c966e0e
4 changed files with 143 additions and 34 deletions

View File

@@ -3,7 +3,7 @@ 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 .forms import CommentForm, TicketForm
from django.urls import reverse
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib import messages
@@ -60,9 +60,10 @@ class TicketListView(ListView):
context["status_choices"] = Ticket.STATUS_CHOICES
return context
class TicketDetailUpdateView(UpdateView):
model = Ticket
fields = ["title", "description", "status", "priority", "assigned_to", "course"]
form_class = TicketForm # Verwende das custom Form anstatt fields
template_name = "ticketsystem/detail.html"
comment_form_class = CommentForm
@@ -93,25 +94,29 @@ class TicketDetailUpdateView(UpdateView):
def form_valid(self, form):
ticket = form.instance
original = Ticket.objects.get(pk=ticket.pk)
# Alten assigned_to Wert merken für History
old_assigned_to = original.assigned_to
response = super().form_valid(form) # Speichert das Ticket
# History tracking für geänderte Felder
tracked_fields = ["title", "description", "status", "priority", "assigned_to", "course"]
tracked_fields = ["title", "description", "status", "priority", "course"]
for field in tracked_fields:
if field in form.changed_data:
old_value = getattr(original, field)
new_value = form.cleaned_data.get(field)
# Für ForeignKey Felder den Display-Namen verwenden
if field == "assigned_to":
old_value = old_value.username if old_value else "Niemand"
new_value = new_value.username if new_value else "Niemand"
elif field == "status":
if field == "status":
old_value = original.get_status_display()
new_value = ticket.get_status_display()
elif field == "priority":
old_value = original.get_priority_display()
new_value = ticket.get_priority_display()
elif field == "course":
old_value = str(old_value)
new_value = str(new_value)
TicketHistory.objects.create(
ticket=ticket,
@@ -121,12 +126,28 @@ class TicketDetailUpdateView(UpdateView):
new_value=str(new_value),
)
if form.changed_data:
if "course" in form.changed_data and old_assigned_to != ticket.assigned_to:
old_name = old_assigned_to.username if old_assigned_to else "Niemand"
new_name = ticket.assigned_to.username if ticket.assigned_to else "Niemand"
TicketHistory.objects.create(
ticket=ticket,
changed_by=self.request.user,
field="assigned_to",
old_value=old_name,
new_value=new_name,
)
# Erweitere die changed_data Liste für die Nachricht
changed_fields = list(form.changed_data)
if "assigned_to" not in changed_fields:
changed_fields.append("assigned_to (automatisch)")
else:
changed_fields = form.changed_data
if changed_fields:
messages.success(
self.request,
f"Ticket erfolgreich aktualisiert. Geänderte Felder: {', '.join(form.changed_data)}",
f"Ticket erfolgreich aktualisiert. Geänderte Felder: {', '.join(changed_fields)}",
)
return response
def post(self, request, *args, **kwargs):
@@ -168,7 +189,7 @@ class AssignedTicketListView(LoginRequiredMixin, ListView):
class TicketCreateView(CreateView):
model = Ticket
fields = ["title", "description", "status", "priority", "assigned_to", "course"]
form_class = TicketForm
template_name = "ticketsystem/ticket_form.html"
def form_valid(self, form):