diff -r c6038cbf8a39 -r 293692eb8f06 pytask/taskapp/views/task.py --- a/pytask/taskapp/views/task.py Mon Feb 01 11:41:26 2010 +0530 +++ b/pytask/taskapp/views/task.py Mon Feb 01 15:00:40 2010 +0530 @@ -4,8 +4,8 @@ from django.shortcuts import render_to_response, redirect from pytask.taskapp.models import User, Task, Comment, Claim -from pytask.taskapp.forms.task import TaskCreateForm, AddMentorForm -from pytask.taskapp.events.task import createTask, addMentor, publishTask, addSubTask +from pytask.taskapp.forms.task import TaskCreateForm, AddMentorForm, AssignTaskForm +from pytask.taskapp.events.task import createTask, addMentor, publishTask, addSubTask, addClaim, assignTask from pytask.taskapp.views.user import show_msg ## everywhere if there is no task, django should display 500 message.. but take care of that in sensitive views like add mentor and all @@ -39,7 +39,6 @@ is_mentor = True if user in task.mentors.all() else False task_claimable = True if task.status in ["OP", "RE"] else False - user_can_view_claim = True if ( task_claimable and not ( is_guest or is_mentor ) ) else False context = {'user':user, 'task':task, @@ -47,9 +46,11 @@ 'mentors':mentors, 'is_guest':is_guest, 'is_mentor':is_mentor, - 'user_can_view_claim':user_can_view_claim, 'errors':errors, } + + if task.status == "AS": + context['assigned_user'] = task.assigned_users.all()[0] if request.method == 'POST': if not is_guest: @@ -172,25 +173,75 @@ ## see if that "one to n" or "n to one" relationship has a special field task_url = "/task/view/tid=%s"%tid + claim_url = "/task/claim/tid=%s"%tid + + errors = [] user = request.user task = Task.objects.get(id=tid) claims = Claim.objects.filter(task=task) is_guest = True if not user.is_authenticated() else False + if user in task.mentors.all(): + is_mentor = True + else: + is_mentor = False - task_claimable = True if task.status in ["OP", "RE"] else False - user_can_claim = True if ( task_claimable and not ( is_guest or is_mentor ) and ( user not in task.claimed_users.all() ) ) else False + task_claimable = True if task.status in ["OP", "RE", "CL"] else False + user_can_claim = True if task_claimable and not ( is_guest or is_mentor ) and ( user not in task.claimed_users.all() ) else False + + context = {'is_mentor':is_mentor, + 'task':task, + 'claims':claims, + 'user_can_claim':user_can_claim, + 'task_claimable':task_claimable, + 'errors':errors} if not is_guest: - if task_claimable: - pass + if request.method == "POST": + claim_proposal = request.POST['message'] + if claim_proposal: + addClaim(task, claim_proposal, user) + return redirect(claim_url) + else: + errors.append('Please fill up proposal in the field below') + return render_to_response('task/claim.html', context) else: - return show_msg('You are not logged in to view claims for this task', task_url, 'view the task') + return render_to_response('task/claim.html', context) else: return show_msg('You are not logged in to view claims for this task', task_url, 'view the task') +def assign_task(request, tid): + """ first get the status of the task and then assign it to one of claimed users + generate list of claimed users by passing it as an argument to a function. + """ + task_url = "/task/view/tid=%s"%tid + + user = request.user + task = Task.objects.get(id=tid) + + is_guest = True if not user.is_authenticated() else False + is_mentor = True if user in task.mentors.all() else False + + task_claimed = True if task.status == "CL" else False + if (not is_guest) and is_mentor: + if task_claimed: + user_list = ((user.id,user.username) for user in task.claimed_users.all()) + form = AssignTaskForm(user_list) + if request.method == "POST": + uid = request.POST['user'] + assigned_user = User.objects.get(id=uid) + assignTask(task, assigned_user) + return redirect(task_url) + else: + return render_to_response('task/assign.html',{'form':form}) + else: + return show_msg('The task is already assigned', task_url, 'view the task') + else: + return show_msg('You are not authorised to perform this action', task_url, 'view the task') + +