# HG changeset patch
# User nishanth
# Date 1265305537 -19800
# Node ID c0e4fc8b8b5bcfd565f11c7a0103930cdac37258
# Parent fcae44e94845d642bbddf822b3602d062b9b4752
added the functionality to assign a task to one of the claimed users.
diff -r fcae44e94845 -r c0e4fc8b8b5b taskapp/events/task.py
--- a/taskapp/events/task.py Thu Feb 04 23:13:03 2010 +0530
+++ b/taskapp/events/task.py Thu Feb 04 23:15:37 2010 +0530
@@ -1,5 +1,5 @@
from datetime import datetime
-from pytask.taskapp.models import Profile, Task, Comment, Credit
+from pytask.taskapp.models import Profile, Task, Comment, Credit, Claim
def publishTask(task):
""" set the task status to open """
@@ -39,3 +39,25 @@
main_task.status = "LO"
main_task.save()
return main_task
+
+def addClaim(task, message, user):
+ """ add claim data to the database if it does not exist
+ and also update the claimed users field of the task.
+ """
+
+ task.claimed_users.add(user)
+ task.status = "CL"
+ task.save()
+ claim = Claim()
+ claim.message = message
+ claim.task = task
+ claim.user = user
+ claim.creation_datetime = datetime.now()
+ claim.save()
+
+def assignTask(task, user):
+ """ check for the status of task and assign it to the particular user """
+
+ task.assigned_users.add(user)
+ task.status = "AS"
+ task.save()
diff -r fcae44e94845 -r c0e4fc8b8b5b taskapp/forms/task.py
--- a/taskapp/forms/task.py Thu Feb 04 23:13:03 2010 +0530
+++ b/taskapp/forms/task.py Thu Feb 04 23:15:37 2010 +0530
@@ -19,3 +19,11 @@
class Meta:
model = Claim
fields = ['message']
+
+def AssignTaskForm(choices, instance=None):
+ """ return a form object with appropriate choices """
+
+ class myform(forms.Form):
+ user = forms.ChoiceField(choices=choices, required=True)
+ form = myform()
+ return form
diff -r fcae44e94845 -r c0e4fc8b8b5b taskapp/views/task.py
--- a/taskapp/views/task.py Thu Feb 04 23:13:03 2010 +0530
+++ b/taskapp/views/task.py Thu Feb 04 23:15:37 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')
+
+
diff -r fcae44e94845 -r c0e4fc8b8b5b templates/task/assign.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/task/assign.html Thu Feb 04 23:15:37 2010 +0530
@@ -0,0 +1,8 @@
+{% extends 'base.html' %}
+{% block content %}
+ Select a user to assign this task.
+