def todo(request, project_name): """Allows to create a new todolist and todoitems. Actions available here: Add a todolist: Owner Participant Add a todoitem: Owner Participant """ project = get_project(request, project_name) access = get_access(project, request.user) if request.GET.get('includecomplete', 0): lists = TodoList.objects.filter(user=request.user, project=project) else: lists = TodoList.objects.filter(user=request.user, project=project, is_complete_attr=False) addlistform = bforms.AddTodoListForm() if request.method == 'POST': if request.POST.has_key('addlist'): addlistform = bforms.AddTodoListForm(project, request.user, request.POST) if addlistform.is_valid(): addlistform.save() return HttpResponseRedirect('.') elif request.POST.has_key('additem'): id = int(request.POST['id']) list = TodoList.objects.get(id=id) text_id = '%s-text' % list.id if request.POST[text_id]: item = TodoItem(list=list, text=request.POST[text_id]) item.save() elif request.POST.has_key('listmarkdone'): id = int(request.POST['id']) list = TodoList.objects.get(id=id) list.is_complete = True list.save() return HttpResponseRedirect('.') elif request.POST.has_key('itemmarkdone'): id = int(request.POST['id']) todoitem = TodoItem.objects.get(id=id) todoitem.is_complete = True todoitem.save() return HttpResponseRedirect('.') if request.method == 'GET': addlistform = bforms.AddTodoListForm() if request.GET.get('csv', ''): response, writer = reponse_for_cvs(project=project) writer.writerow(('Todo Lists',)) writer.writerow(TodoList.as_csv_header()) lists = TodoList.objects.filter(user=request.user, project=project) for list in lists: writer.writerow(list.as_csv()) for list in lists: for item in list.todoitem_set.all(): writer.writerow(item.as_csv()) return response payload = {'project': project, 'lists': lists, 'addlistform': addlistform} return render(request, 'project/todo.html', payload)