def complete_task(request, pk, person_pk): response = {'result': False, 'reason': 'nope'} # import pdb # pdb.set_trace() user = is_logged_in(request) if user: task = Task.objects.filter(pk=pk) person = User.objects.filter(pk=person_pk) if task and person: task, person = task[0], person[0] if not (user in task.assigner.all() or user in task.group.first().admins.all()): response['reason'] = "You don't have permission to mark it complete" return HttpResponse(json.dumps(response), content_type="application/json") if person in task.assignedto.all(): task.completedby.add(person) task.save() person.points += task.points person.save() response['result'] = True response['message'] = "Done" badge = Badge.get_well_begun_is_half_done_badge() if badge not in person.badges.all(): person.badges.add(badge) person.points += badge.points person.save() badge.save() if person.completedtasks.count() > 10: badge = Badge.get_dependable_badge() if badge not in person.badges.all(): person.badges.add(badge) person.points += badge.points person.save() badge.save() else: response['reason'] = "This person was never assigned this task" else: response['reason'] = "Task with this pk does not exist" else: response['reason'] = "not logged in" return HttpResponse(json.dumps(response), content_type="application/json")