merged
authoranoop
Thu, 25 Feb 2010 17:37:14 +0530
changeset 98 cf94e35a9f99
parent 97 3699550991c6 (current diff)
parent 96 2881ed1c52b0 (diff)
child 99 64c34c1f441f
merged
--- a/taskapp/events/task.py	Thu Feb 25 17:33:34 2010 +0530
+++ b/taskapp/events/task.py	Thu Feb 25 17:37:14 2010 +0530
@@ -175,3 +175,35 @@
     mapobj = Map.objects.get(main=main_task)
     mapobj.subs.remove(sub_task)
     mapobj.save()
+
+def removeUser(main_task, rem_user):
+    """ right now, just remove the user from the list of assigned_users.
+    """
+
+    main_task.assigned_users.remove(rem_user)
+    main_task.save()
+
+def completeTask(main_task):
+    """ set the status of task to CP.
+    """
+
+    main_task.status = "CP"
+    main_task.save()
+
+def assignCredits(task, given_by, given_to, points):
+    """ make a proper request object.
+    """
+    
+    addCredits(task, given_by, given_to, points)
+
+def addCredits(task, given_by, given_to, points):
+    """ add credit to the credits model.
+    """
+
+    creditobj = Credit()
+    creditobj.task = task
+    creditobj.given_by = given_by
+    creditobj.given_to = given_to
+    creditobj.points = points
+    creditobj.given_time = datetime.now()
+    creditobj.save()
--- a/taskapp/forms/task.py	Thu Feb 25 17:33:34 2010 +0530
+++ b/taskapp/forms/task.py	Thu Feb 25 17:37:14 2010 +0530
@@ -48,3 +48,11 @@
         user = forms.ChoiceField(choices=choices, required=True)
         points = forms.IntegerField(min_value=0,required=True)
     return myForm(instance) if instance else myForm()
+
+def RemoveUserForm(choices, instance=None):
+
+    class myForm(forms.Form):
+        user = forms.ChoiceField(choices=choices, required=True)
+        reason = forms.CharField(min_length=1, required=True)
+    return myForm(instance) if instance else myForm()
+
--- a/taskapp/views/task.py	Thu Feb 25 17:33:34 2010 +0530
+++ b/taskapp/views/task.py	Thu Feb 25 17:37:14 2010 +0530
@@ -4,8 +4,8 @@
 from django.shortcuts import render_to_response, redirect
 
 from pytask.taskapp.models import User, Task, Comment, Claim, Credit
-from pytask.taskapp.forms.task import TaskCreateForm, AddMentorForm, AddTaskForm, ChoiceForm, AssignCreditForm
-from pytask.taskapp.events.task import createTask, addMentor, publishTask, addSubTask, addDep, addClaim, assignTask, getTask, updateTask, removeTask
+from pytask.taskapp.forms.task import TaskCreateForm, AddMentorForm, AddTaskForm, ChoiceForm, AssignCreditForm, RemoveUserForm
+from pytask.taskapp.events.task import createTask, addMentor, publishTask, addSubTask, addDep, addClaim, assignTask, getTask, updateTask, removeTask, removeUser, assignCredits
 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
@@ -301,7 +301,50 @@
     else:
         return show_msg('You are not logged in to view claims for this task', task_url, 'view the task')
     
+def rem_user(request, tid):
+    """ show a list of working users and ask for a message/reason for removing user.
+    """
     
+    task_url = "/task/view/tid=%s"%tid
+    
+    user = request.user
+    task = getTask(tid)
+    
+    is_guest = True if not user.is_authenticated() else False
+    is_mentor = True if user in task.mentors.all() else False
+
+    if (not is_guest) and is_mentor:
+
+        assigned_users = task.assigned_users.all()
+        choices = [ (_.id,_.username) for _ in assigned_users ]
+        context = {
+            'user':user,
+            'task':task,
+        }
+
+        if assigned_users:
+            form = RemoveUserForm(choices)
+            context['form'] = form
+            if request.method == "POST":
+                data = request.POST
+                form = RemoveUserForm(choices, data)
+                if form.is_valid():
+                    data = form.cleaned_data
+                    uid = data['user']
+                    rem_user = User.objects.get(id=uid)
+                    removeUser(task, rem_user)
+                    print data['reason']
+                    return redirect(task_url)
+                else:
+                    context['form'] = form
+                    return render_to_response('task/remove_user.html', context)
+            else:
+                return render_to_response('task/remove_user.html',context)
+        else:
+            return show_msg("There is no one working on this task to be kicked off", task_url, "view the task")
+    else:
+        return show_msg("You are not authorised to do this", 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.
@@ -365,6 +408,7 @@
 
             context = {
                 'user':user,
+                'task':task,
                 'prev_credits':prev_credits,
                 'form':form,
             }
@@ -377,10 +421,7 @@
                     uid = data['user']
                     points = data['points']
                     given_to = User.objects.get(id=uid)
-                    given_time = datetime.now()
-                    creditobj = Credit(task=task, given_by=user, given_to=given_to,points=points,given_time=given_time)
-                    ## remove the next line and add a request here
-                    creditobj.save()
+                    assignCredits(task=task, given_by=user, given_to=given_to, points=points)
                     return redirect('/task/assigncredits/tid=%s'%task.id)
                 else:
                     context['form'] = form
--- a/templates/task/assigncredits.html	Thu Feb 25 17:33:34 2010 +0530
+++ b/templates/task/assigncredits.html	Thu Feb 25 17:37:14 2010 +0530
@@ -3,7 +3,7 @@
     {{task.title}}
 {% endblock %}
 {% block content %}
-        
+        <a href="/task/view/tid={{task.id}}">Click here</a> to return to the task.
         {% if prev_credits %}
             <hr />
             <br/>Previous credits:<br />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/task/remove_user.html	Thu Feb 25 17:37:14 2010 +0530
@@ -0,0 +1,11 @@
+{% extends 'base.html' %}
+{% block title %}
+    Remove users for {{task.title}}
+{% endblock %}
+{% block content %}
+    <a href="/task/view/tid={{task.id}}">Click here</a> to return to {{task.title}}
+    <form action="" method="post">
+        {{form.as_p}}
+    <input value="Submit" type="submit">
+    </form>
+{% endblock %}
--- a/templates/task/view.html	Thu Feb 25 17:33:34 2010 +0530
+++ b/templates/task/view.html	Thu Feb 25 17:37:14 2010 +0530
@@ -4,7 +4,9 @@
 {% endblock %}
 {% block content %}
     {% if task_viewable %}
-        <a href="/task/edit/tid={{task.id}}">Edit task</a>
+        {% if is_mentor %}
+            <a href="/task/edit/tid={{task.id}}">Edit task</a>
+        {% endif %}
         <h3>{{ task.title }}</h3><br />
         <!-- we have to write our own datetime.strftime filter and use in the next line -->
         created by <a href="/user/view/uid={{ task.created_by.id }}">{{ task.created_by.username }}</a> on {{ task.creation_datetime.ctime }}<br />
@@ -66,15 +68,17 @@
                 <a href="/user/view/uid={{user.id}}">{{user.username}}</a>|
             {% endfor %}
             {% if is_mentor %}
-                <a href="/task/user/remove/">Remove an existing user</a>
+                <a href="/task/remuser/tid={{task.id}}">Remove an existing user</a>
             <br />
             {% endif %}
+        {% else %}
+            There are no users currently working on this task.<br />
         {% endif %}
         {% if can_assign_credits %}
             <a href="/task/assigncredits/tid={{task.id}}">Assign credits</a>
         {% endif %}
         {% if not is_guest and task_claimable %}
-            <a href="/task/claim/tid={{task.id}}">View claims</a><br />
+            <a href="/task/claim/tid={{task.id}}">View claims for this task</a>.<br />
         {% endif %}
         
         {% if comments %}
--- a/urls.py	Thu Feb 25 17:33:34 2010 +0530
+++ b/urls.py	Thu Feb 25 17:37:14 2010 +0530
@@ -31,6 +31,7 @@
     (r'^task/edit/tid=(\d+)$', taskViews.edit_task),
     (r'^task/claim/tid=(\d+)$', taskViews.claim_task),
     (r'^task/assign/tid=(\d+)$', taskViews.assign_task),
+    (r'^task/remuser/tid=(\d+)$', taskViews.rem_user),
     (r'^task/addtask/tid=(\d+)$', taskViews.add_tasks),
     (r'^task/remtask/tid=(\d+)$', taskViews.remove_task),
     (r'^task/assigncredits/tid=(\d+)$', taskViews.assign_credits),