|
@@ -5,9 +5,11 @@ from django.contrib import messages
|
|
|
from django.urls import reverse
|
|
|
from django.http import HttpResponse
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
+from django.views.decorators.http import require_POST
|
|
|
+from django.utils import timezone
|
|
|
|
|
|
from .models import TaskList, Task
|
|
|
-from .forms import TaskForm
|
|
|
+from .forms import TaskForm, CommentForm
|
|
|
from .decorators import allowed_tasklist_required
|
|
|
|
|
|
|
|
@@ -19,24 +21,22 @@ def tasklist_list(request):
|
|
|
lists = lists.order_by('name')
|
|
|
return render(request, 'todo/tasklist_list.html', {
|
|
|
'lists': lists,
|
|
|
- 'task_count': Task.objects.filter(task_list__in=lists).count(), ## TODO check it works properly
|
|
|
+ 'task_count': Task.objects.filter(completed_date__isnull=True, task_list__in=lists).count(),
|
|
|
'list_count': lists.count(),
|
|
|
})
|
|
|
|
|
|
|
|
|
@allowed_tasklist_required
|
|
|
-def tasklist_detail(request, tasklist):
|
|
|
+def tasklist_detail(request, tasklist, completed=False):
|
|
|
+ task_list = tasklist.task_set.filter(completed_date__isnull=not completed)
|
|
|
return render(request, 'todo/tasklist_detail.html', {
|
|
|
'tasklist': tasklist,
|
|
|
+ 'task_list': task_list,
|
|
|
+ 'completed': completed,
|
|
|
})
|
|
|
|
|
|
|
|
|
@allowed_tasklist_required
|
|
|
-def tasklist_delete(request, tasklist):
|
|
|
- pass
|
|
|
-
|
|
|
-
|
|
|
-@allowed_tasklist_required
|
|
|
def tasklist_reorder(request, tasklist):
|
|
|
newtasklist = request.POST.getlist("tasktable[]")
|
|
|
if newtasklist:
|
|
@@ -58,36 +58,80 @@ def tasklist_reorder(request, tasklist):
|
|
|
|
|
|
|
|
|
@allowed_tasklist_required
|
|
|
-def task_add(request, tasklist):
|
|
|
- form = TaskForm(request.POST or None)
|
|
|
+def task_form(request, tasklist, task_id=None):
|
|
|
+ if task_id:
|
|
|
+ task = get_object_or_404(Task, task_list=tasklist, pk=task_id)
|
|
|
+ redirect_url = reverse('todo:show-task', kwargs={'tasklist_slug': tasklist.slug, 'task_id': task.pk})
|
|
|
+ else:
|
|
|
+ task = None
|
|
|
+ redirect_url = reverse('todo:show-tasklist', kwargs={'tasklist_slug': tasklist.slug})
|
|
|
+ form = TaskForm(request.POST or None, tasklist=tasklist, instance=task)
|
|
|
if request.method == 'POST' and form.is_valid():
|
|
|
- task = form.save(commit=False)
|
|
|
- task.task_list = tasklist
|
|
|
- task.created_by = request.user
|
|
|
- task.save()
|
|
|
- messages.success(request, 'Tâche créée avec succès.')
|
|
|
- return redirect(reverse('todo:show-tasklist', kwargs={'tasklist_slug': tasklist.slug}))
|
|
|
- return render(request, 'todo/task_add.html', {
|
|
|
+ if task:
|
|
|
+ form.save()
|
|
|
+ messages.success(request, 'Tâche mise à jour avec succès.')
|
|
|
+ else:
|
|
|
+ task = form.save(commit=False)
|
|
|
+ task.task_list = tasklist
|
|
|
+ task.created_by = request.user
|
|
|
+ task.save()
|
|
|
+ messages.success(request, 'Tâche créée avec succès.')
|
|
|
+ return redirect(redirect_url)
|
|
|
+ return render(request, 'todo/task_form.html', {
|
|
|
'tasklist': tasklist,
|
|
|
+ 'task': task,
|
|
|
'form': form,
|
|
|
+ 'cancel_url': redirect_url,
|
|
|
})
|
|
|
|
|
|
|
|
|
@allowed_tasklist_required
|
|
|
def task_detail(request, tasklist, task_id):
|
|
|
- task = get_object_or_404(Task, pk=task_id)
|
|
|
+ task = get_object_or_404(Task, task_list=tasklist, pk=task_id)
|
|
|
+ form = CommentForm(request.POST or None)
|
|
|
+ if request.method == 'POST' and form.is_valid():
|
|
|
+ comment = form.save(commit=False)
|
|
|
+ comment.task = task
|
|
|
+ comment.author = request.user
|
|
|
+ comment.save()
|
|
|
+ messages.success(request, 'Commentaire ajouté avec succès.')
|
|
|
+ return redirect(reverse('todo:show-task', kwargs={'tasklist_slug': tasklist.slug, 'task_id': task_id}))
|
|
|
return render(request, 'todo/task_detail.html', {
|
|
|
'tasklist': tasklist,
|
|
|
'task': task,
|
|
|
+ 'form': form,
|
|
|
})
|
|
|
-
|
|
|
+
|
|
|
|
|
|
@allowed_tasklist_required
|
|
|
def task_toggle_done(request, tasklist, task_id):
|
|
|
- task = get_object_or_404(Task, pk=task_id)
|
|
|
- return redirect() # TODO
|
|
|
+ task = get_object_or_404(Task, task_list=tasklist, pk=task_id)
|
|
|
+ if task.completed_date:
|
|
|
+ task.completed_date = None
|
|
|
+ messages.success(request, "La tâche « {} » a été marquée en cours.".format(task.title))
|
|
|
+ else:
|
|
|
+ task.completed_date = timezone.now()
|
|
|
+ messages.success(request, "La tâche « {} » a été marquée complétée.".format(task.title))
|
|
|
+ task.save()
|
|
|
+ return redirect(reverse('todo:show-task', kwargs={'tasklist_slug': tasklist.slug, 'task_id': task_id}))
|
|
|
|
|
|
|
|
|
@allowed_tasklist_required
|
|
|
-def task_delete(request, tasklist):
|
|
|
- pass
|
|
|
+def task_edit(request, tasklist, task_id):
|
|
|
+ task = get_object_or_404(Task, task_list=tasklist, pk=task_id)
|
|
|
+ form = CommentForm(request.POST)
|
|
|
+ if form.is_valid():
|
|
|
+ comment = form.save(commit=False)
|
|
|
+ comment.save()
|
|
|
+ messages.success(request, "La tâche « {} » a été marquée complétée.".format(task.title))
|
|
|
+ return redirect(reverse('todo:show-task', kwargs={'tasklist_slug': tasklist.slug, 'task_id': task_id}))
|
|
|
+
|
|
|
+
|
|
|
+# TODO: are you sure?
|
|
|
+@require_POST
|
|
|
+@allowed_tasklist_required
|
|
|
+def task_delete(request, tasklist, task_id):
|
|
|
+ task = get_object_or_404(Task, task_list=tasklist, pk=task_id)
|
|
|
+ task.delete()
|
|
|
+ messages.success(request, "La tâche « {} » a été supprimée.".format(task.title))
|
|
|
+ return redirect(reverse('todo:show-tasklist', kwargs={'tasklist_slug': tasklist.slug}))
|