views.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from django.contrib.auth.decorators import login_required
  2. from django.shortcuts import render, redirect, get_object_or_404
  3. from django.core.exceptions import PermissionDenied
  4. from django.contrib import messages
  5. from django.urls import reverse
  6. from django.http import HttpResponse
  7. from django.views.decorators.csrf import csrf_exempt
  8. from .models import TaskList, Task
  9. from .forms import TaskForm
  10. from .decorators import allowed_tasklist_required
  11. @login_required
  12. def tasklist_list(request):
  13. lists = TaskList.objects.all()
  14. if not request.user.is_superuser:
  15. lists = lists.filter(group__in=request.user.groups.all())
  16. lists = lists.order_by('name')
  17. return render(request, 'todo/tasklist_list.html', {
  18. 'lists': lists,
  19. 'task_count': Task.objects.filter(task_list__in=lists).count(), ## TODO check it works properly
  20. 'list_count': lists.count(),
  21. })
  22. @allowed_tasklist_required
  23. def tasklist_detail(request, tasklist):
  24. return render(request, 'todo/tasklist_detail.html', {
  25. 'tasklist': tasklist,
  26. })
  27. @allowed_tasklist_required
  28. def tasklist_delete(request, tasklist):
  29. pass
  30. @allowed_tasklist_required
  31. def tasklist_reorder(request, tasklist):
  32. newtasklist = request.POST.getlist("tasktable[]")
  33. if newtasklist:
  34. # Re-prioritize each task in list
  35. i = 1
  36. for pk in newtasklist:
  37. try:
  38. task = Task.objects.get(task_list=tasklist, pk=pk)
  39. task.priority = i
  40. task.save()
  41. i += 1
  42. except Task.DoesNotExist:
  43. # Can occur if task is deleted behind the scenes during re-ordering.
  44. # Not easy to remove it from the UI without page refresh, but prevent crash.
  45. pass
  46. # All views must return an httpresponse of some kind ... without this we get
  47. # error 500s in the log even though things look peachy in the browser.
  48. return HttpResponse(status=201)
  49. @allowed_tasklist_required
  50. def task_add(request, tasklist):
  51. form = TaskForm(request.POST or None)
  52. if request.method == 'POST' and form.is_valid():
  53. task = form.save(commit=False)
  54. task.task_list = tasklist
  55. task.created_by = request.user
  56. task.save()
  57. messages.success(request, 'Tâche créée avec succès.')
  58. return redirect(reverse('todo:show-tasklist', kwargs={'tasklist_slug': tasklist.slug}))
  59. return render(request, 'todo/task_add.html', {
  60. 'tasklist': tasklist,
  61. 'form': form,
  62. })
  63. @allowed_tasklist_required
  64. def task_detail(request, tasklist, task_id):
  65. task = get_object_or_404(Task, pk=task_id)
  66. return render(request, 'todo/task_detail.html', {
  67. 'tasklist': tasklist,
  68. 'task': task,
  69. })
  70. @allowed_tasklist_required
  71. def task_toggle_done(request, tasklist, task_id):
  72. task = get_object_or_404(Task, pk=task_id)
  73. return redirect() # TODO
  74. @allowed_tasklist_required
  75. def task_delete(request, tasklist):
  76. pass