delete_task.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.contrib import messages
  2. from django.contrib.auth.decorators import login_required, user_passes_test
  3. from django.core.exceptions import PermissionDenied
  4. from django.http import HttpResponse
  5. from django.shortcuts import get_object_or_404, redirect
  6. from django.urls import reverse
  7. from tickets.models import Task
  8. from tickets.utils import staff_check
  9. @login_required
  10. @user_passes_test(staff_check)
  11. def delete_task(request, task_id: int) -> HttpResponse:
  12. """Delete specified task.
  13. Redirect to the list from which the task came.
  14. """
  15. if request.method == "POST":
  16. task = get_object_or_404(Task, pk=task_id)
  17. redir_url = reverse(
  18. "tickets:list_detail",
  19. kwargs={"list_id": task.task_list.id, "list_slug": task.task_list.slug},
  20. )
  21. # Permissions
  22. if not (
  23. (task.created_by == request.user)
  24. or (request.user.is_superuser)
  25. or (task.assigned_to == request.user)
  26. or (task.task_list.group in request.user.groups.all())
  27. ):
  28. raise PermissionDenied
  29. task.delete()
  30. messages.success(request, "Task '{}' has been deleted".format(task.title))
  31. return redirect(redir_url)
  32. else:
  33. raise PermissionDenied