Files
fet2020/fet2020/tasks/forms.py

222 lines
5.8 KiB
Python

from ckeditor.widgets import CKEditorWidget
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.auth.models import User
from django.core.validators import ValidationError
from django.forms.widgets import HiddenInput
from django.utils import timezone
from .models import Document, Task, TaskList
class DateInput(forms.DateInput):
input_type = "date"
class DocumentInlineForm(forms.ModelForm):
class Meta:
model = Document
fields = [
"title",
"date",
]
labels = {
"title": "Titel",
}
class TaskListAdminForm(forms.ModelForm):
users = forms.ModelMultipleChoiceField(
label="Benutzer",
help_text="Es können nur die Benutzer ausgewählt werden, die sich auf der Homepage angemeldet haben.",
queryset=User.objects.all().order_by("username"),
widget=FilteredSelectMultiple("User", is_stacked=False),
)
class Meta:
model = TaskList
fields = "__all__"
labels = {
"name": "Titel",
"shortterm": "Kürzel für den Link",
"slug": "Permalink",
}
class TaskAdminForm(forms.ModelForm):
class Meta:
model = Task
fields = "__all__"
labels = {
"title": "Titel",
"shortterm": "Kürzel für den Link",
"slug": "Permalink",
"task_list": "Aufgabenbereich",
"due_date": "Fälligkeit",
"completed": "Abgeschlossen",
"completed_date": "Datum der Fertigstellung",
"assigned_to": "Zuweisen an",
"note": "Notizen",
"priority": "Priorität",
}
widgets = {
"note": CKEditorWidget(config_name="default"),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # to get the self.fields set
self.fields["assigned_to"].empty_label = "Alle"
self.fields["assigned_to"].queryset = self.fields[
"assigned_to"
].queryset.order_by("username")
class TaskCreateForm(forms.ModelForm):
class Meta:
model = Task
fields = [
"title",
"task_list",
"due_date",
"assigned_to",
"note",
]
labels = {
"title": "Titel des Tasks",
"task_list": "Task-Gruppe",
"assigned_to": "Zuweisen an",
"due_date": "Fälligkeitsdatum",
"note": "Notizen",
}
widgets = {
"due_date": DateInput(format=("%Y-%m-%d")),
"note": CKEditorWidget(config_name="intern"),
}
def __init__(self, *args, **kwargs):
if "user" in kwargs:
user = kwargs.pop("user")
else:
user = None
super().__init__(*args, **kwargs) # to get the self.fields set
self.fields["assigned_to"].empty_label = "Alle"
qs = self.fields["assigned_to"].queryset
self.fields["assigned_to"].queryset = qs.order_by("username")
if user:
self.fields["task_list"].queryset = TaskList.objects.filter(users=user)
def clean(self):
cleaned_data = super().clean()
assigned_to = cleaned_data["assigned_to"]
if assigned_to:
task_list = TaskList.objects.get(id=cleaned_data["task_list"].id)
if not task_list.users.filter(username=assigned_to.username):
raise ValidationError(
_(
f"User '{assigned_to}' gibt es nicht in der User-Liste der Task-Gruppe '{task_list}'."
)
)
return cleaned_data
class TaskUpdateForm(forms.ModelForm):
class Meta:
model = Task
fields = [
"assigned_to",
"due_date",
"completed",
"completed_date",
"note",
"task_list",
]
labels = {
"assigned_to": "Zuweisen an",
"due_date": "Fälligkeitsdatum",
"completed": "Abgeschlossen",
"completed_date": "Datum der Fertigstellung",
"note": "Notizen",
}
widgets = {
"due_date": DateInput(
format=("%Y-%m-%d"),
),
"note": CKEditorWidget(config_name="intern"),
"task_list": HiddenInput,
}
def __init__(self, *args, **kwargs):
if "task_list" in kwargs:
task_list = kwargs.pop("task_list")
else:
task_list = None
super().__init__(*args, **kwargs) # to get the self.fields set
self.fields["assigned_to"].empty_label = "Alle"
if task_list:
qs = TaskList.objects.get(id=task_list.id).users
self.fields["assigned_to"].queryset = qs.order_by("username")
class DocumentCreateForm(forms.ModelForm):
class Meta:
model = Document
fields = [
"title",
"date",
"task",
]
labels = {
"title": "Titel",
"date": "Datum",
}
widgets = {
"date": DateInput(format=("%d-%m-%Y")),
"task": HiddenInput,
}
class InternTaskCreateForm(TaskCreateForm):
# form for creating a task from intern page.
class Meta:
model = Task
fields = [
"title",
"task_list",
"due_date",
"assigned_to",
"note",
]
labels = {
"title": "Titel des Tasks",
"task_list": "Task-Gruppe",
"due_date": "Fälligkeitsdatum",
"assigned_to": "Zuweisen an",
}
widgets = {
"due_date": DateInput(
format=("%d-%m-%Y"),
),
"task_list": HiddenInput,
}