diff --git a/ticketsystem/forms.py b/ticketsystem/forms.py index 6b38809..d4f43cd 100644 --- a/ticketsystem/forms.py +++ b/ticketsystem/forms.py @@ -1,5 +1,6 @@ from django import forms from .models import Comment, Ticket +from django.core.exceptions import ValidationError class CommentForm(forms.ModelForm): @@ -16,7 +17,26 @@ class CommentForm(forms.ModelForm): class TicketForm(forms.ModelForm): class Meta: model = Ticket - fields = ["title", "description", "status", "priority", "course"] + fields = ["title", "description", "status", "priority", "course", "answer"] + widgets = { + 'answer': forms.Textarea(attrs={ + 'rows': 4, + 'placeholder': 'Beschreibe die Lösung des Problems...' + }) + } + + def clean(self): + cleaned_data = super().clean() + status = cleaned_data.get('status') + answer = cleaned_data.get('answer') + + # Wenn Status auf "gelöst" gesetzt wird, muss eine Antwort vorhanden sein + if status == 'resolved' and not answer: + raise ValidationError({ + 'answer': 'Eine Antwort ist erforderlich, wenn der Status auf "Gelöst" gesetzt wird.' + }) + + return cleaned_data def save(self, commit=True): ticket = super().save(commit=False) @@ -25,6 +45,11 @@ class TicketForm(forms.ModelForm): if ticket.course and ticket.course.tutor: ticket.assigned_to = ticket.course.tutor + # Setze answered_at wenn eine Antwort gegeben wird + if ticket.answer and not ticket.answered_at: + from django.utils import timezone + ticket.answered_at = timezone.now() + if commit: ticket.save() return ticket \ No newline at end of file diff --git a/ticketsystem/models.py b/ticketsystem/models.py index b982d60..7c8a191 100644 --- a/ticketsystem/models.py +++ b/ticketsystem/models.py @@ -51,6 +51,18 @@ class Ticket(models.Model): status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="new") priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default="medium") + answer = models.TextField( + blank=True, + null=True, + verbose_name="Antwort/Lösung", + help_text="Beschreibung der Lösung (erforderlich bei Status 'Gelöst')" + ) + answered_at = models.DateTimeField( + blank=True, + null=True, + verbose_name="Beantwortet am" + ) + course = models.ForeignKey( Course, on_delete=models.CASCADE, diff --git a/ticketsystem/templates/ticketsystem/base.html b/ticketsystem/templates/ticketsystem/base.html index ee1eb7e..6c9da6d 100644 --- a/ticketsystem/templates/ticketsystem/base.html +++ b/ticketsystem/templates/ticketsystem/base.html @@ -30,7 +30,7 @@ -