diff --git a/fet2020/fet2020/utils.py b/fet2020/fet2020/utils.py new file mode 100644 index 00000000..e4e87df4 --- /dev/null +++ b/fet2020/fet2020/utils.py @@ -0,0 +1,24 @@ +# util functions for all apps +from django.contrib.admin.models import ADDITION, CHANGE, LogEntry +from django.contrib.admin.utils import construct_change_message +from django.contrib.contenttypes.models import ContentType + + +def add_log_action(request, form, app_label, model, add=True): + obj = form.save() + content_type = ContentType.objects.get(app_label=app_label, model=model) + change_message = construct_change_message(form, None, add) + + if add: + action_flag = ADDITION + else: + action_flag = CHANGE + + LogEntry.objects.log_action( + user_id=request.user.pk, + content_type_id=content_type.pk, + object_id=obj.pk, + object_repr=str(obj), + action_flag=action_flag, + change_message=change_message, + ) diff --git a/fet2020/tasks/forms.py b/fet2020/tasks/forms.py index ff48bb1b..5c8c73ef 100644 --- a/fet2020/tasks/forms.py +++ b/fet2020/tasks/forms.py @@ -122,7 +122,7 @@ class TaskCreateForm(forms.ModelForm): return cleaned_data -class TaskUpdateForm(TaskCreateForm): +class TaskUpdateForm(forms.ModelForm): class Meta: model = Task @@ -146,6 +146,18 @@ class TaskUpdateForm(TaskCreateForm): "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: diff --git a/fet2020/tasks/views.py b/fet2020/tasks/views.py index 2896b9a4..ee5c84c5 100644 --- a/fet2020/tasks/views.py +++ b/fet2020/tasks/views.py @@ -1,11 +1,8 @@ import logging from collections import deque -from django.contrib.admin.models import ADDITION, CHANGE, LogEntry -from django.contrib.admin.utils import construct_change_message from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User -from django.contrib.contenttypes.models import ContentType from django.shortcuts import render from django.views.generic.detail import DetailView from django.views.generic.edit import CreateView, UpdateView @@ -15,6 +12,7 @@ from django.utils import timezone from authentications.decorators import authenticated_user from documents.api import get_pad_link from documents.etherpadlib import add_ep_cookie +from fet2020.utils import add_log_action from intern.models import Topic from .forms import DocumentCreateForm, TaskCreateForm, TaskUpdateForm from .models import Document, Task, TaskList @@ -77,42 +75,17 @@ def index(request): return render(request, "tasks/index.html", context) -def add_log_action(request, form, add=True): - obj = form.save() - content_type = ContentType.objects.get(app_label="tasks", model="task") - change_message = construct_change_message(form, None, add) - - if add: - action_flag = ADDITION - else: - action_flag = CHANGE - - LogEntry.objects.log_action( - user_id=request.user.pk, - content_type_id=content_type.pk, - object_id=obj.pk, - object_repr=str(obj), - action_flag=action_flag, - change_message=change_message, - ) - - class TaskCreate(LoginRequiredMixin, CreateView): model = Task success_url = reverse_lazy("tasks:index") template_name = "tasks/task_create.html" form_class = TaskCreateForm - user = None - def form_valid(self, form): form.instance.created_by = self.request.user - add_log_action(self.request, form, True) + add_log_action(self.request, form, "tasks", "task", True) return super().form_valid(form) - def get_initial(self): - self.user = self.request.user - def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs["user"] = self.request.user @@ -124,15 +97,30 @@ class TaskUpdate(LoginRequiredMixin, UpdateView): template_name = "tasks/task_update.html" form_class = TaskUpdateForm - pk = None + task_id = None + task_list = None def form_valid(self, form): - add_log_action(self.request, form, False) + add_log_action(self.request, form, "tasks", "task", False) return super().form_valid(form) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["task_list"] = self.task_list + return context + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["task_list"] = self.task_list + return kwargs + + def get_initial(self): + self.task_id = self.kwargs.get("pk") + self.task_list = Task.objects.get(id=self.task_id).task_list + def get_success_url(self): kwargs = { - "pk": self.kwargs.get("pk"), + "pk": self.task_id, } return reverse("tasks:task-detail", kwargs=kwargs) @@ -156,9 +144,7 @@ class TaskDetail(LoginRequiredMixin, DetailView): context = super().get_context_data(**kwargs) docus = Document.objects.filter(task__id=self.object.id).order_by("-date") - documents = deque([]) - # list of etherpad url-link of any documents for elem in docus: documents.append( @@ -182,17 +168,17 @@ class DocumentCreate(LoginRequiredMixin, CreateView): task_id = None + def form_valid(self, form): + form.instance.created_by = self.request.user + add_log_action(self.request, form, "tasks", "document", True) + return super().form_valid(form) + def get_initial(self): self.task_id = self.kwargs.get("pk") - task = Task.objects.get(pk=self.task_id) - context = { - "task": task, - } - return context def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - context["task_id"] = self.task_id + context["task"] = Task.objects.get(pk=self.task_id) return context diff --git a/fet2020/templates/tasks/attachment_create.html b/fet2020/templates/tasks/attachment_create.html index acbc812b..69a0ae5b 100644 --- a/fet2020/templates/tasks/attachment_create.html +++ b/fet2020/templates/tasks/attachment_create.html @@ -10,17 +10,35 @@
diff --git a/fet2020/templates/tasks/index.html b/fet2020/templates/tasks/index.html index 6433bca2..64e9512e 100644 --- a/fet2020/templates/tasks/index.html +++ b/fet2020/templates/tasks/index.html @@ -84,23 +84,25 @@