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 django.contrib import admin
from .forms import TaskListForm
from .models import Task, TaskList 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', ) list_filter = ('task_list', )
ordering = ('priority', ) ordering = ('priority', )
search_fields = ('title', ) search_fields = ('title', )
@@ -29,5 +37,10 @@ class TaskAdmin(admin.ModelAdmin):
super().save_model(request, obj, form, change) 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) admin.site.register(Task, TaskAdmin)

View File

@@ -1,7 +1,13 @@
from django import forms 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 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): class TaskForm(forms.ModelForm):
@@ -22,6 +28,16 @@ class TaskForm(forms.ModelForm):
'assigned_to': _('Zuweisen an'), 'assigned_to': _('Zuweisen an'),
} }
widgets = {
'due_date': DateInput(
format=('%d-%m-%Y'),
)
}
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # to get the self.fields set super().__init__(*args, **kwargs) # to get the self.fields set
self.fields['assigned_to'].empty_label = "Alle" 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.conf import settings
from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from django.utils import timezone from django.utils import timezone
@@ -10,14 +11,20 @@ class TaskQuerySet(models.QuerySet):
class TaskManager(models.Manager): class TaskManager(models.Manager):
def get_tasks(self, user, completed): def get_tasks(self, user, completed, task_list, all_tasks):
if completed: # None ... assigned to all users
return self.get_queryset().get_ordered().filter(Q(assigned_to=user)) qs_comp = self.get_queryset().get_ordered().filter(assigned_to=user)
else:
return self.get_queryset().get_ordered().filter( if all_tasks:
Q(assigned_to=user) qs_comp |= self.get_queryset().get_ordered().filter(Q(assigned_to=None) & Q(task_list__users=user))
& Q(completed=completed)
) 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): def get_queryset(self):
return TaskQuerySet(self.model, using=self._db) return TaskQuerySet(self.model, using=self._db)
@@ -27,6 +34,8 @@ class TaskList(models.Model):
name = models.CharField(max_length=60) name = models.CharField(max_length=60)
slug = models.SlugField(unique=True, null=True, blank=True) slug = models.SlugField(unique=True, null=True, blank=True)
users = models.ManyToManyField(User, blank=True)
objects = models.Manager() objects = models.Manager()
def __str__(self): def __str__(self):

View File

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

View File

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