Refactor Done and Delete actions in list and detail views
This commit is contained in:
parent
4fe3829b98
commit
9098e3f0d4
7 changed files with 108 additions and 141 deletions
|
@ -12,6 +12,7 @@ from django.db.models import Q
|
|||
from django.http import HttpResponse
|
||||
from django.shortcuts import get_object_or_404, render, redirect
|
||||
from django.template.loader import render_to_string
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from django.utils.text import slugify
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
@ -19,8 +20,6 @@ from django.views.decorators.csrf import csrf_exempt
|
|||
from todo.forms import AddTaskListForm, AddEditTaskForm, AddExternalTaskForm, SearchForm
|
||||
from todo.models import Task, TaskList, Comment
|
||||
from todo.utils import (
|
||||
toggle_done,
|
||||
toggle_deleted,
|
||||
send_notify_mail,
|
||||
send_email_to_thread_participants,
|
||||
)
|
||||
|
@ -137,16 +136,6 @@ def list_detail(request, list_id=None, list_slug=None, view_completed=False):
|
|||
else:
|
||||
tasks = tasks.filter(completed=False)
|
||||
|
||||
if request.POST:
|
||||
# Process completed and deleted tasks on each POST
|
||||
results_changed = toggle_done(request.POST.getlist('toggle_done_tasks'))
|
||||
for res in results_changed:
|
||||
messages.success(request, res)
|
||||
|
||||
results_changed = toggle_deleted(request.POST.getlist('toggle_deleted_tasks'))
|
||||
for res in results_changed:
|
||||
messages.success(request, res)
|
||||
|
||||
# ######################
|
||||
# Add New Task Form
|
||||
# ######################
|
||||
|
@ -382,7 +371,6 @@ def external_add(request) -> HttpResponse:
|
|||
messages.warning(request, "Task saved but mail not sent. Contact your administrator.")
|
||||
|
||||
messages.success(request, "Your trouble ticket has been submitted. We'll get back to you soon.")
|
||||
|
||||
return redirect(settings.TODO_PUBLIC_SUBMIT_REDIRECT)
|
||||
|
||||
else:
|
||||
|
@ -393,3 +381,51 @@ def external_add(request) -> HttpResponse:
|
|||
}
|
||||
|
||||
return render(request, 'todo/add_task_external.html', context)
|
||||
|
||||
|
||||
@login_required
|
||||
def toggle_done(request, task_id: int) -> HttpResponse:
|
||||
"""Toggle the completed status of a task from done to undone, or vice versa.
|
||||
Redirect to the list from which the task came.
|
||||
"""
|
||||
|
||||
task = get_object_or_404(Task, pk=task_id)
|
||||
|
||||
# Permissions
|
||||
if not (
|
||||
(task.created_by == request.user) or
|
||||
(task.assigned_to == request.user) or
|
||||
(task.task_list.group in request.user.groups.all())
|
||||
):
|
||||
raise PermissionDenied
|
||||
|
||||
tlist = task.task_list
|
||||
task.completed = not task.completed
|
||||
task.save()
|
||||
|
||||
messages.success(request, "Task status changed for '{}'".format(task.title))
|
||||
return redirect(reverse('todo:list_detail', kwargs={"list_id": tlist.id, "list_slug": tlist.slug}))
|
||||
|
||||
|
||||
|
||||
@login_required
|
||||
def delete_task(request, task_id: int) -> HttpResponse:
|
||||
"""Delete specified task.
|
||||
Redirect to the list from which the task came.
|
||||
"""
|
||||
|
||||
task = get_object_or_404(Task, pk=task_id)
|
||||
|
||||
# Permissions
|
||||
if not (
|
||||
(task.created_by == request.user) or
|
||||
(task.assigned_to == request.user) or
|
||||
(task.task_list.group in request.user.groups.all())
|
||||
):
|
||||
raise PermissionDenied
|
||||
|
||||
tlist = task.task_list
|
||||
task.delete()
|
||||
|
||||
messages.success(request, "Task '{}' has been deleted".format(task.title))
|
||||
return redirect(reverse('todo:list_detail', kwargs={"list_id": tlist.id, "list_slug": tlist.slug}))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue