simplify view and add due_date ordering
This commit is contained in:
@@ -2,18 +2,13 @@ from django.db import models
|
||||
from django.db.models import Q
|
||||
|
||||
|
||||
class TaskQuerySet(models.QuerySet):
|
||||
def get_ordered(self):
|
||||
return self.order_by("task_list")
|
||||
|
||||
|
||||
class TaskManager(models.Manager):
|
||||
def get_tasks(self, user, completed, task_list, all_tasks):
|
||||
def get_tasks(self, user, assigned_tasks, task_list, completed):
|
||||
# None ... assigned to all users
|
||||
qs_all = self.get_queryset().get_ordered()
|
||||
qs_all = self.get_queryset()
|
||||
qs = qs_all.filter(assigned_to__id=user)
|
||||
|
||||
if all_tasks:
|
||||
if not assigned_tasks:
|
||||
qs_tmp = qs_all.filter(
|
||||
Q(assigned_to=None) & Q(task_list__users__id__exact=user)
|
||||
)
|
||||
@@ -23,6 +18,3 @@ class TaskManager(models.Manager):
|
||||
qs = qs.filter(task_list=task_list)
|
||||
|
||||
return qs.filter(completed=completed)
|
||||
|
||||
def get_queryset(self):
|
||||
return TaskQuerySet(self.model, using=self._db)
|
||||
|
||||
@@ -3,6 +3,7 @@ from django.conf import settings
|
||||
from django.core.validators import ValidationError
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from django.db.models import F
|
||||
from django.db.models.constraints import UniqueConstraint
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
@@ -80,6 +81,7 @@ class Task(models.Model):
|
||||
taskmanager = TaskManager()
|
||||
|
||||
class Meta:
|
||||
ordering = ("task_list", F("due_date").desc(nulls_first=True))
|
||||
verbose_name = "Aufgabe"
|
||||
verbose_name_plural = "Aufgaben"
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ app_name = apps.TasksConfig.name
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="index"),
|
||||
path("task-create/", TaskCreate.as_view(), name="task-create"),
|
||||
path("<int:pk>/docu-create/", DocumentCreate.as_view(), name="docu-create"),
|
||||
path("add/", TaskCreate.as_view(), name="task-create"),
|
||||
path("<int:pk>/update/", TaskUpdate.as_view(), name="task-update"),
|
||||
path("<int:pk>/detail/", TaskDetail.as_view(), name="task-detail"),
|
||||
path("<int:pk>/add/", DocumentCreate.as_view(), name="docu-create"),
|
||||
]
|
||||
|
||||
@@ -22,10 +22,12 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
@authenticated_user
|
||||
def index(request):
|
||||
completed = False
|
||||
tasklist = None
|
||||
show_tasklist = None
|
||||
show_all_tasks = True
|
||||
assigned_tasks = None
|
||||
completed = False
|
||||
state_open = False
|
||||
state_closed = False
|
||||
|
||||
if request.method == "POST":
|
||||
if "btn_checkbox" in request.POST:
|
||||
@@ -38,38 +40,35 @@ def index(request):
|
||||
task.save()
|
||||
|
||||
if request.method == "GET":
|
||||
if "tasklist" in request.GET:
|
||||
if request.GET["tasklist"] != "all":
|
||||
if request.GET.get("tasklist"):
|
||||
if request.GET.get("tasklist") != "all":
|
||||
tasklist = TaskList.objects.filter(id=request.GET["tasklist"]).first()
|
||||
show_tasklist = tasklist.id
|
||||
|
||||
if "tasks" in request.GET:
|
||||
if request.GET["tasks"] == "all":
|
||||
show_all_tasks = True
|
||||
else:
|
||||
show_all_tasks = False
|
||||
if request.GET.get("tasks") == "assigned":
|
||||
assigned_tasks = True
|
||||
|
||||
if "open_tasks" in request.GET:
|
||||
if request.GET.get("open_tasks"):
|
||||
completed = False
|
||||
state_open = True
|
||||
|
||||
if "closed_tasks" in request.GET:
|
||||
if request.GET.get("closed_tasks"):
|
||||
completed = True
|
||||
state_closed = True
|
||||
|
||||
tasks = Task.taskmanager.get_tasks(
|
||||
user=request.user.id,
|
||||
completed=completed,
|
||||
assigned_tasks=assigned_tasks,
|
||||
task_list=tasklist,
|
||||
all_tasks=show_all_tasks,
|
||||
completed=completed,
|
||||
)
|
||||
tasklists = TaskList.objects.all()
|
||||
|
||||
context = {
|
||||
"tasks": tasks,
|
||||
"tasklists": tasklists,
|
||||
"current_user": request.user.id,
|
||||
"completed": completed,
|
||||
"show_tasklist": show_tasklist,
|
||||
"show_all_tasks": show_all_tasks,
|
||||
"assigned_tasks": assigned_tasks,
|
||||
"state_open": state_open,
|
||||
"state_closed": state_closed,
|
||||
}
|
||||
|
||||
return render(request, "tasks/index.html", context)
|
||||
|
||||
@@ -43,24 +43,25 @@
|
||||
<span class="text-gray-700 dark:text-gray-200">Task-Gruppe</span>
|
||||
<select id="id_tasklist" name="tasklist" class="block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
|
||||
<option value="all" {% if not show_tasklist %}selected{% endif %}>alle Task-Gruppen</option>
|
||||
{% for elem in tasklists %}
|
||||
<option value="{{ elem.id }}" {% if show_tasklist == elem.id %}selected{% endif %}>{{ elem.name }}</option>
|
||||
{% regroup tasks by task_list as section_list %}
|
||||
{% for group in section_list %}
|
||||
<option value="{{ group.grouper.id }}" {% if show_tasklist == group.grouper.id %}selected{% endif %}>{{ group.grouper.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<span class="text-gray-700 dark:text-gray-200">Tasks</span>
|
||||
<select id="id_task" name="tasks" class="block w-full mt-1 rounded-md border-gray-300 dark:border-none shadow-sm focus:border-none focus:ring focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
|
||||
<option value="own" {% if not show_all_tasks %}selected{% endif %}>eigenen Tasks</option>
|
||||
<option value="all" {% if show_all_tasks %}selected{% endif %}>alle Tasks</option>
|
||||
<option value="assigned" {% if assigned_tasks %}selected{% endif %}>dir zugewiesene</option>
|
||||
<option value="all" {% if not assigned_tasks %}selected{% endif %}>alle</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="inline-flex items-center">
|
||||
<input type="checkbox" name="open_tasks" {% if not completed %}checked{% endif %} class="rounded border-gray-300 dark:border-none text-proprietary shadow-sm focus:border-blue-300 focus:ring focus:ring-offset-0 focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
|
||||
<input type="checkbox" name="open_tasks" {% if state_open %}checked{% endif %} class="rounded border-gray-300 dark:border-none text-proprietary shadow-sm focus:border-blue-300 focus:ring focus:ring-offset-0 focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
|
||||
<span class="ml-2 text-gray-700 dark:text-gray-200">Offene Tasks</span>
|
||||
</label>
|
||||
<label class="inline-flex items-center">
|
||||
<input type="checkbox" name="closed_tasks" {% if completed %}checked{% endif %} class="rounded border-gray-300 dark:border-none text-proprietary shadow-sm focus:border-blue-300 focus:ring focus:ring-offset-0 focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
|
||||
<input type="checkbox" name="closed_tasks" {% if state_closed %}checked{% endif %} class="rounded border-gray-300 dark:border-none text-proprietary shadow-sm focus:border-blue-300 focus:ring focus:ring-offset-0 focus:ring-blue-200 dark:focus:ring-sky-700 focus:ring-opacity-50">
|
||||
<span class="ml-2 text-gray-700 dark:text-gray-200">Geschlossene Tasks</span>
|
||||
</label>
|
||||
<input type="submit" class="block btn btn-primary" value="Anzeigen">
|
||||
|
||||
Reference in New Issue
Block a user