update task view
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user