update task view

This commit is contained in:
2020-10-22 16:12:43 +00:00
parent 707cadff60
commit 1032c03df0
5 changed files with 150 additions and 70 deletions

View File

@@ -1,5 +1,6 @@
from django.contrib import admin
from .forms import TaskListForm
from .models import Task, TaskList
@@ -19,7 +20,14 @@ class TaskAdmin(admin.ModelAdmin):
)
}),
)
list_display = ('title', 'task_list', 'completed', 'priority', 'due_date')
list_display = (
'title',
'task_list',
'completed',
'priority',
'due_date',
'assigned_to',
)
list_filter = ('task_list', )
ordering = ('priority', )
search_fields = ('title', )
@@ -29,5 +37,10 @@ class TaskAdmin(admin.ModelAdmin):
super().save_model(request, obj, form, change)
admin.site.register(TaskList)
class TaskListAdmin(admin.ModelAdmin):
form = TaskListForm
model = TaskList
admin.site.register(TaskList, TaskListAdmin)
admin.site.register(Task, TaskAdmin)

View File

@@ -1,7 +1,13 @@
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _
from .models import Task
from .models import Task, TaskList
class DateInput(forms.DateInput):
input_type = 'date'
class TaskForm(forms.ModelForm):
@@ -22,6 +28,16 @@ class TaskForm(forms.ModelForm):
'assigned_to': _('Zuweisen an'),
}
widgets = {
'due_date': DateInput(
format=('%d-%m-%Y'),
)
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # to get the self.fields set
self.fields['assigned_to'].empty_label = "Alle"
class TaskListForm(forms.ModelForm):
users = forms.ModelMultipleChoiceField(queryset=User.objects.all(), widget=FilteredSelectMultiple("User", is_stacked=False))

View File

@@ -1,4 +1,5 @@
from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
from django.db.models import Q
from django.utils import timezone
@@ -10,14 +11,20 @@ class TaskQuerySet(models.QuerySet):
class TaskManager(models.Manager):
def get_tasks(self, user, completed):
if completed:
return self.get_queryset().get_ordered().filter(Q(assigned_to=user))
else:
return self.get_queryset().get_ordered().filter(
Q(assigned_to=user)
& Q(completed=completed)
)
def get_tasks(self, user, completed, task_list, all_tasks):
# None ... assigned to all users
qs_comp = self.get_queryset().get_ordered().filter(assigned_to=user)
if all_tasks:
qs_comp |= self.get_queryset().get_ordered().filter(Q(assigned_to=None) & Q(task_list__users=user))
if not completed:
qs_comp = qs_comp.filter(completed=completed)
if task_list:
qs_comp = qs_comp.filter(task_list=task_list)
return qs_comp
def get_queryset(self):
return TaskQuerySet(self.model, using=self._db)
@@ -27,6 +34,8 @@ class TaskList(models.Model):
name = models.CharField(max_length=60)
slug = models.SlugField(unique=True, null=True, blank=True)
users = models.ManyToManyField(User, blank=True)
objects = models.Manager()
def __str__(self):

View File

@@ -1,3 +1,4 @@
from django.contrib import messages
from django.contrib.auth.models import User
from django.shortcuts import render
from django.utils import timezone
@@ -5,12 +6,14 @@ from django.utils import timezone
from collections import deque
from .forms import TaskForm
from .models import Task
from .models import Task, TaskList
def index(request):
current_user = request.user.id
current_action = False
show_tasklist = None
show_all_tasks = True
if request.method == 'POST':
if 'btn_input' in request.POST:
@@ -18,6 +21,14 @@ def index(request):
if form.is_valid():
task = form.save(commit=False)
if task.assigned_to:
if TaskList.objects.filter(users=task.assigned_to):
task.created_by = request.user
task.save()
else:
messages.info(request, "User '{}' ist nicht in der Liste von Task-Gruppe '{}'.".format(task.assigned_to, task.task_list.name))
else:
task.created_by = request.user
task.save()
@@ -36,19 +47,27 @@ def index(request):
else:
current_action = True
if request.POST['user'] == 'all':
current_user = None
if request.POST['tasklist'] != 'all':
show_tasklist = TaskList.objects.filter(id=request.POST['tasklist']).first()
if request.POST['tasks'] == 'all':
show_all_tasks = True
else:
current_user = int(request.POST['user'])
show_all_tasks = False
form = TaskForm()
tasks = deque(Task.taskmanager.get_tasks(user=current_user, completed=current_action))
users = User.objects.all()
tasks = deque(Task.taskmanager.get_tasks(
user=current_user,
completed=current_action,
task_list=show_tasklist,
all_tasks=show_all_tasks
))
tasklists = deque(TaskList.objects.all())
context = {
"formset": form,
"tasks": tasks,
"users": users,
"tasklists": tasklists,
"current_user": current_user,
"current_action": current_action,
}

View File

@@ -3,18 +3,15 @@
<div class="grid-container">
{% if current_user != None %}
{% for user in users %}
{% if current_user == user.id %}
<h1>Task-Übersicht für {{ user.username }}</h1>
{% endif %}
{% for message in messages %}
<p id="messages" style="background-color: red">{{message}}</p>
{% endfor %}
{% else %}
<h1>Task-Übersicht für alle Mitarbeiter_innen</h1>
{% endif %}
{% if tasks %}
<form action="" method="post">
{% csrf_token %}
@@ -38,10 +35,16 @@
</div>
<div class="cell medium-4 large-4 small-10">
{% if task.due_date is not None %}
{% if task.due_date %}
Fälligkeitsdatum: {{ task.due_date|date:"d.m.Y" }}
{% endif %}
</div>
<div class="cell medium-4 large-4 small-10">
{% if task.assigned_to %}
nur dir zugewiesen!
{% endif %}
</div>
</div>
{% endfor %}
@@ -60,6 +63,13 @@
</div>
</div>
</form>
{% else %}
<div class="grid-x">
<div class="cell">
keine Tasks in dieser Liste für dich.
</div>
</div>
{% endif %}
<h2>Andere Task-Übersicht anzeigen</h2>
@@ -68,20 +78,33 @@
<div class="grid-x grid-margin-x">
<div class="cell medium-4 large-3 small-10">
<label>User
<select id="id_user" name="user">
<label>Task-Gruppe
<select id="id_tasklist" name="tasklist">
<option value="all">
Alle
alle Task-Gruppen
</option>
{% for user in users %}
<option value="{{ user.id }}" {% if current_user == user.id %} selected {% endif %}>
{{ user.username }}
{% for elem in tasklists %}
<option value="{{ elem.id }}">
{{ elem.name }}
</option>
{% endfor %}
</select>
</label>
</div>
<div class="cell medium-4 large-3 small-10">
<label>Tasks
<select id="id_task" name="tasks">
<option value="own">
nur die eigenen Tasks
</option>
<option value="all">
die an alle zugewiesenen Tasks
</option>
</select>
</label>
</div>
<div class="cell medium-4 large-3 small-10">
<label>Aktion
<select id="id_action" name="action">