Split up views into separate modules
This commit is contained in:
parent
21ec87cee4
commit
78e9c510bc
15 changed files with 557 additions and 464 deletions
84
todo/views/list_detail.py
Normal file
84
todo/views/list_detail.py
Normal file
|
@ -0,0 +1,84 @@
|
|||
import bleach
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.utils import timezone
|
||||
|
||||
from todo.forms import AddEditTaskForm
|
||||
from todo.models import Task, TaskList
|
||||
from todo.utils import send_notify_mail
|
||||
|
||||
|
||||
@login_required
|
||||
def list_detail(request, list_id=None, list_slug=None, view_completed=False) -> HttpResponse:
|
||||
"""Display and manage tasks in a todo list.
|
||||
"""
|
||||
|
||||
# Defaults
|
||||
task_list = None
|
||||
form = None
|
||||
|
||||
# Which tasks to show on this list view?
|
||||
if list_slug == "mine":
|
||||
tasks = Task.objects.filter(assigned_to=request.user)
|
||||
|
||||
else:
|
||||
# Show a specific list, ensuring permissions.
|
||||
task_list = get_object_or_404(TaskList, id=list_id)
|
||||
if task_list.group not in request.user.groups.all() and not request.user.is_staff:
|
||||
raise PermissionDenied
|
||||
tasks = Task.objects.filter(task_list=task_list.id)
|
||||
|
||||
# Additional filtering
|
||||
if view_completed:
|
||||
tasks = tasks.filter(completed=True)
|
||||
else:
|
||||
tasks = tasks.filter(completed=False)
|
||||
|
||||
# ######################
|
||||
# Add New Task Form
|
||||
# ######################
|
||||
|
||||
if request.POST.getlist("add_edit_task"):
|
||||
form = AddEditTaskForm(
|
||||
request.user,
|
||||
request.POST,
|
||||
initial={"assigned_to": request.user.id, "priority": 999, "task_list": task_list},
|
||||
)
|
||||
|
||||
if form.is_valid():
|
||||
new_task = form.save(commit=False)
|
||||
new_task.created_date = timezone.now()
|
||||
new_task.note = bleach.clean(form.cleaned_data["note"], strip=True)
|
||||
form.save()
|
||||
|
||||
# Send email alert only if Notify checkbox is checked AND assignee is not same as the submitter
|
||||
if (
|
||||
"notify" in request.POST
|
||||
and new_task.assigned_to
|
||||
and new_task.assigned_to != request.user
|
||||
):
|
||||
send_notify_mail(new_task)
|
||||
|
||||
messages.success(request, 'New task "{t}" has been added.'.format(t=new_task.title))
|
||||
return redirect(request.path)
|
||||
else:
|
||||
# Don't allow adding new tasks on some views
|
||||
if list_slug not in ["mine", "recent-add", "recent-complete"]:
|
||||
form = AddEditTaskForm(
|
||||
request.user,
|
||||
initial={"assigned_to": request.user.id, "priority": 999, "task_list": task_list},
|
||||
)
|
||||
|
||||
context = {
|
||||
"list_id": list_id,
|
||||
"list_slug": list_slug,
|
||||
"task_list": task_list,
|
||||
"form": form,
|
||||
"tasks": tasks,
|
||||
"view_completed": view_completed,
|
||||
}
|
||||
|
||||
return render(request, "todo/list_detail.html", context)
|
Loading…
Add table
Add a link
Reference in a new issue