55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from django import forms
|
|
from .models import Comment, Ticket
|
|
from django.core.exceptions import ValidationError
|
|
|
|
|
|
class CommentForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Comment
|
|
fields = ["text"]
|
|
widgets = {
|
|
"text": forms.Textarea(
|
|
attrs={"rows": 3, "placeholder": "Kommentar schreiben..."}
|
|
),
|
|
}
|
|
|
|
|
|
class TicketForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Ticket
|
|
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)
|
|
|
|
# Automatische Tutor-Zuweisung basierend auf dem ausgewählten Kurs
|
|
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 |