pytask/taskapp/views/task.py
author Madhusudan.C.S <madhusudancs@gmail.com>
Fri, 04 Feb 2011 16:37:56 +0530
changeset 557 a8102f88008c
parent 556 a0e57ca7cf56
permissions -rwxr-xr-x
Use Unauthorized exception for access checks.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     1
"""Module containing the views for all the task related activities.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     2
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     3
If there is something common to all other views. They sit here, here
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     4
even if there nothing relevant to tasks alone since task is the basis
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     5
for everything else.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     6
"""
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     7
550
a606a40584f7 Base views should take keyword arguments and should use them for URLs.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 545
diff changeset
     8
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     9
__authors__ = [
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    10
    '"Nishanth Amuluru" <nishanth@fossee.in>',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    11
    '"Madhusudan.C.S" <madhusudancs@fossee.in>',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    12
    ]
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    13
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    14
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    15
from datetime import datetime
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    16
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    17
from django import shortcuts
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    18
from django import http
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    19
from django.contrib.auth.decorators import login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    20
from django.contrib.auth.models import User
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    21
from django.core.context_processors import csrf
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    22
from django.core.urlresolvers import reverse
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    23
from django.template import RequestContext
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    24
from django.utils import simplejson as json
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    25
from django.utils.translation import ugettext
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    26
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    27
from tagging.models import Tag
545
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
    28
from tagging.models import TaggedItem
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    29
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
    30
from pytask.helpers import exceptions
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    31
from pytask.views import show_msg
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    32
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    33
from pytask.profile import models as profile_models
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    34
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    35
from pytask.taskapp import forms as taskapp_forms
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    36
from pytask.taskapp import models as taskapp_models
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    37
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    38
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    39
DONT_CLAIM_TASK_MSG = ugettext(
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
    40
  "Please don't submit any claims for the tasks until you get an email "
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
    41
  "to start claiming tasks. Please be warned that the task claim work-"
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    42
  "flow may change. So all the claims submitted before the workshop may "
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    43
  "not be valid.")
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    44
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
    45
NO_EDIT_RIGHT = ugettext(
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
    46
  "You are not authorized to edit this page.")
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
    47
557
a8102f88008c Use Unauthorized exception for access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 556
diff changeset
    48
NO_MOD_REVIEWERS_RIGHT = ugettext(
a8102f88008c Use Unauthorized exception for access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 556
diff changeset
    49
  "You are not authorized to moderate reviewers.")
a8102f88008c Use Unauthorized exception for access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 556
diff changeset
    50
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    51
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    52
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    53
def create_task(request):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    54
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    55
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    56
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    57
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    58
    context = {"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    59
               "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    60
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    61
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    62
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    63
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    64
    can_create_task = False if (
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    65
      profile.role == profile_models.ROLES_CHOICES[3][0]) else True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    66
    if can_create_task:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    67
        if request.method == "POST":
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    68
            form = taskapp_forms.CreateTaskForm(request.POST)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    69
            if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    70
                data = form.cleaned_data.copy()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    71
                data.update({"created_by": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    72
                             "creation_datetime": datetime.now(),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    73
                            })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    74
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    75
                task = taskapp_models.Task(**data)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    76
                task.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    77
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    78
                task_url = reverse('view_task', kwargs={'task_id': task.id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    79
                return shortcuts.redirect(task_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    80
            else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    81
                context.update({'form':form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    82
                return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    83
                  'task/edit.html', RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    84
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    85
            form = taskapp_forms.CreateTaskForm()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    86
            context.update({'form': form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    87
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    88
              'task/edit.html', RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    89
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    90
        return show_msg(user, 'You are not authorised to create a task.')
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    91
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    92
def browse_tasks(request):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    93
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    94
    context = {}
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    95
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    96
    # TODO(disable): Disable once the tasks can be claimed
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    97
    context['uberbar_message'] = DONT_CLAIM_TASK_MSG
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    98
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    99
    open_tasks = taskapp_models.Task.objects.filter(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   100
      status=taskapp_models.TASK_STATUS_CHOICES[1][0])
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   101
    working_tasks = taskapp_models.Task.objects.filter(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   102
      status=taskapp_models.TASK_STATUS_CHOICES[3][0])
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   103
    comp_tasks = taskapp_models.Task.objects.filter(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   104
      status=taskapp_models.TASK_STATUS_CHOICES[6][0])
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   105
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   106
    context.update({
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   107
      'open_tasks': open_tasks,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   108
      'working_tasks': working_tasks,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   109
      'comp_tasks': comp_tasks,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   110
      })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   111
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   112
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   113
    if not user.is_authenticated():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   114
        return shortcuts.render_to_response('task/browse.html',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   115
                                            RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   116
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   117
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   118
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   119
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   120
    if profile.role in [profile_models.ROLES_CHOICES[0][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   121
                        profile_models.ROLES_CHOICES[1][0]]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   122
        can_approve = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   123
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   124
        can_approve = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   125
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   126
    unpub_tasks = taskapp_models.Task.objects.filter(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   127
      status=taskapp_models.TASK_STATUS_CHOICES[0][0]).exclude(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   128
        status=taskapp_models.TASK_STATUS_CHOICES[5][0])
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   129
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   130
    if can_approve:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   131
        context.update({'unpub_tasks': unpub_tasks})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   132
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   133
    context.update({'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   134
                    'profile': profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   135
                   })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   136
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   137
    return shortcuts.render_to_response('task/browse.html',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   138
                                        RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   139
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   140
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   141
def view_task(request, task_id, **kwargs):
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   142
    """View to get the requested.
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   143
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   144
    Checks for authentication and add a comment if it is a post request.
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   145
    """
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   146
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   147
    context = {}
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   148
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   149
    if 'context' in kwargs:
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   150
        context.update(kwargs['context'])
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   151
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   152
    # TODO(disable): Disable once the tasks can be claimed
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   153
    context['uberbar_message'] = DONT_CLAIM_TASK_MSG
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   154
550
a606a40584f7 Base views should take keyword arguments and should use them for URLs.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 545
diff changeset
   155
    task_url = kwargs.get(
a606a40584f7 Base views should take keyword arguments and should use them for URLs.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 545
diff changeset
   156
      'task_url', reverse('view_task', kwargs={'task_id': task_id}))
a606a40584f7 Base views should take keyword arguments and should use them for URLs.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 545
diff changeset
   157
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   158
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   159
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   160
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   161
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   162
    if not user.is_authenticated():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   163
        return shortcuts.render_to_response('task/view.html', {'task': task})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   164
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   165
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   166
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   167
    context.update({
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   168
      'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   169
      'profile': profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   170
      'task': task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   171
      })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   172
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   173
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   174
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   175
    if task.status == taskapp_models.TASK_STATUS_CHOICES[5][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   176
        return show_msg(user, 'This task no longer exists',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   177
                        reverse('browse_tasks'), 'browse the tasks')
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   178
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   179
    if ((task.status != taskapp_models.TASK_STATUS_CHOICES[0][0] )
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   180
      or profile.role != profile_models.ROLES_CHOICES[3][0]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   181
        task_viewable = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   182
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   183
        task_viewable = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   184
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   185
    if not task_viewable:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   186
        return show_msg(user, 'You are not authorised to view this task',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   187
                        reverse('browse_tasks'), 'browse the tasks')
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   188
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   189
    reviewers = task.reviewers.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   190
    is_reviewer = True if user in task.reviewers.all() else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   191
    comments = task.comments.filter(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   192
      is_deleted=False).order_by('comment_datetime')
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   193
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   194
    context.update({'is_reviewer':is_reviewer,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   195
                    'comments':comments,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   196
                    'reviewers':reviewers,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   197
                   })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   198
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   199
    selected_users = task.selected_users.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   200
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   201
    user_role = user.get_profile().role
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   202
    is_creator = True if user == task.created_by else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   203
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   204
    context['selected_users'] = selected_users
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   205
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   206
    context['is_selected'] = True if user in selected_users else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   207
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   208
    if (task.status == taskapp_models.TASK_STATUS_CHOICES[0][0] and
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   209
      profile.role in [profile_models.ROLES_CHOICES[0][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   210
      profile_models.ROLES_CHOICES[1][0]]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   211
        context['can_approve'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   212
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   213
        context['can_approve'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   214
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   215
    if ((is_creator or user_role != profile_models.ROLES_CHOICES[3][0])
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   216
      and task.status in [taskapp_models.TASK_STATUS_CHOICES[0][0],
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   217
      taskapp_models.TASK_STATUS_CHOICES[1][0]]):
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   218
        context['can_edit'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   219
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   220
        context['can_edit'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   221
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   222
    if (task.status not in [taskapp_models.TASK_STATUS_CHOICES[0][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   223
      taskapp_models.TASK_STATUS_CHOICES[4][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   224
      taskapp_models.TASK_STATUS_CHOICES[6][0]] and is_reviewer):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   225
        context['can_close'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   226
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   227
        context['can_close'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   228
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   229
    if task.status == taskapp_models.TASK_STATUS_CHOICES[0][0] and is_creator:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   230
        context['can_delete'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   231
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   232
        context['can_delete'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   233
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   234
    if (task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   235
      taskapp_models.TASK_STATUS_CHOICES[3][0]] and is_reviewer):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   236
        context['can_assign_pynts'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   237
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   238
        context['can_assign_pynts'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   239
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   240
    if (task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   241
      taskapp_models.TASK_STATUS_CHOICES[3][0]]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   242
        context['task_claimable'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   243
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   244
        context['task_claimable'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   245
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   246
    if (task.status != taskapp_models.TASK_STATUS_CHOICES[0][0] or\
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   247
      profile.role != profile_models.ROLES_CHOICES[3][0]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   248
        context['can_comment'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   249
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   250
        context['can_comment'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   251
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   252
    if (profile.role in [profile_models.ROLES_CHOICES[0][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   253
      profile_models.ROLES_CHOICES[1][0]]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   254
        context['can_mod_reviewers'] = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   255
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   256
        context['can_mod_reviewers'] = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   257
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   258
    if request.method == 'POST':
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   259
        form = taskapp_forms.TaskCommentForm(request.POST)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   260
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   261
            data = form.cleaned_data['data']
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   262
            new_comment = taskapp_forms.TaskComment(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   263
              task=task, data=data, commented_by=user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   264
              comment_datetime=datetime.now())
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   265
            new_comment.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   266
            return shortcuts.redirect(task_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   267
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   268
            context['form'] = form
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   269
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   270
              'task/view.html', RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   271
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   272
        form = taskapp_forms.TaskCommentForm()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   273
        context['form'] = form
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   274
        return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   275
          'task/view.html', RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   276
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   277
@login_required
550
a606a40584f7 Base views should take keyword arguments and should use them for URLs.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 545
diff changeset
   278
def edit_task(request, task_id, **kwargs):
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   279
    """ only creator gets to edit the task and that too only before it gets
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   280
    approved.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   281
    """
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   282
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   283
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   284
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   285
550
a606a40584f7 Base views should take keyword arguments and should use them for URLs.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 545
diff changeset
   286
    task_url = kwargs.get(
a606a40584f7 Base views should take keyword arguments and should use them for URLs.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 545
diff changeset
   287
      'task_url', reverse('view_task', kwargs={'task_id': task_id}))
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   288
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   289
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   290
    is_creator = True if user == task.created_by else False
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   291
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   292
    if ((is_creator or profile.role != profile_models.ROLES_CHOICES[3][0])
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   293
      and task.status in [taskapp_models.TASK_STATUS_CHOICES[0][0],
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   294
      taskapp_models.TASK_STATUS_CHOICES[1][0]]):
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   295
        can_edit = True 
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   296
    else:
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   297
        can_edit = False
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   298
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   299
    if not can_edit:
543
57b0f8f80ebf Add edit and view chapters views.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   300
        raise exceptions.UnauthorizedAccess(NO_EDIT_RIGHT)
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   301
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   302
    context = {"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   303
               "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   304
               "task": task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   305
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   306
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   307
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   308
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   309
    if request.method == "POST":
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   310
        form = taskapp_forms.EditTaskForm(request.POST, instance=task)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   311
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   312
            form.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   313
            return shortcuts.redirect(task_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   314
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   315
            context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   316
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   317
              "task/edit.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   318
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   319
        form = taskapp_forms.EditTaskForm(instance=task)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   320
        context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   321
        return shortcuts.render_to_response("task/edit.html",
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   322
                                            RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   323
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   324
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   325
def approve_task(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   326
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   327
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   328
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   329
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   330
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   331
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   332
    if profile.role not in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]] or task.status != taskapp_models.TASK_STATUS_CHOICES[0][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   333
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   334
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   335
    context = {"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   336
               "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   337
               "task": task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   338
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   339
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   340
    return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   341
      "task/confirm_approval.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   342
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   343
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   344
def approved_task(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   345
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   346
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   347
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   348
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   349
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   350
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   351
    if profile.role not in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]] or task.status != taskapp_models.TASK_STATUS_CHOICES[0][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   352
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   353
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   354
    task.approved_by = user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   355
    task.approval_datetime = datetime.now()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   356
    task.status = taskapp_models.TASK_STATUS_CHOICES[1][0]
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   357
    task.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   358
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   359
    context = {"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   360
               "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   361
               "task": task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   362
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   363
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   364
    return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   365
      "task/approved_task.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   366
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   367
@login_required
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   368
def addreviewer(request, task_id, template_name='task/addreviewer.html'):
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   369
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   370
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   371
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   372
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   373
    task_url = reverse('view_task', kwargs={'task_id': task_id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   374
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   375
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   376
    if profile.role in [profile_models.ROLES_CHOICES[0][0],
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   377
      profile_models.ROLES_CHOICES[1][0]]:
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   378
        can_mod_reviewers = True
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   379
    else:
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   380
        can_mod_reviewers = False
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   381
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   382
    if not can_mod_reviewers:
557
a8102f88008c Use Unauthorized exception for access checks.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 556
diff changeset
   383
        raise exceptions.UnauthorizedAccess(NO_MOD_REVIEWERS_RIGHT)
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   384
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   385
    context = {
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   386
      'user': user,
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   387
      'profile': profile,
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   388
      'task': task,
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   389
      }
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   390
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   391
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   392
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   393
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   394
    # TODO(Madhu): This part has to be made better
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   395
    reviewer_choices = User.objects.filter(
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   396
      is_active=True).exclude(reviewing_tasks__id=task_id).exclude(
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   397
      claimed_tasks__id=task_id).exclude(
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   398
      selected_tasks__id=task_id).exclude(created_tasks__id=task_id)
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   399
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   400
    choices = ((a_user.id, a_user.username) for a_user in reviewer_choices)
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   401
    label = "Reviewer"
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   402
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   403
    if request.method == "POST":
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   404
        form = taskapp_forms.ChoiceForm(
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   405
          choices, data=request.POST, label=label)
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   406
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   407
            data = form.cleaned_data.copy()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   408
            uid = data['choice']
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   409
            reviewer = User.objects.get(id=uid)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   410
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   411
            task.reviewers.add(reviewer)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   412
            return shortcuts.redirect(task_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   413
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   414
            context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   415
            return shortcuts.render_to_response(
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   416
              template_name, RequestContext(request, context))
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   417
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   418
        form = taskapp_forms.ChoiceForm(choices, label=label)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   419
        context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   420
        return shortcuts.render_to_response(
556
a0e57ca7cf56 Style fixes.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 550
diff changeset
   421
          template_name, RequestContext(request, context))
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   422
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   423
def view_work(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   424
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   425
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   426
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   427
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   428
    old_reports = task.reports.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   429
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   430
    context = {
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   431
      'task': task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   432
      'old_reports': old_reports,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   433
      }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   434
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   435
    if not user.is_authenticated():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   436
        return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   437
          "task/view_work.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   438
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   439
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   440
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   441
    context.update({"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   442
                    "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   443
                   })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   444
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   445
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   446
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   447
    working_users = task.selected_users.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   448
    is_working = True if user in working_users else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   449
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   450
    context.update({"is_working": is_working})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   451
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   452
    return shortcuts.render_to_response("task/view_work.html",
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   453
                                        RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   454
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   455
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   456
def view_report(request, report_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   457
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   458
    report = shortcuts.get_object_or_404(taskapp_models.WorkReport,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   459
                                         pk=report_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   460
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   461
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   462
    context = {"report": report,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   463
               "user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   464
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   465
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   466
    if not user.is_authenticated():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   467
        return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   468
          "task/view_report.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   469
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   470
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   471
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   472
    context.update({"profile": profile})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   473
    return shortcuts.render_to_response("task/view_report.html",
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   474
                                        RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   475
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   476
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   477
def submit_report(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   478
    """ Check if the work is in WR state and the user is in assigned_users.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   479
    """
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   480
    task_url = reverse('view_task', kwargs={'task_id': task_id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   481
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   482
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   483
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   484
    old_reports = task.reports.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   485
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   486
    if not task.status == taskapp_models.TASK_STATUS_CHOICES[3][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   487
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   488
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   489
    can_upload = True if user in task.selected_users.all() else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   490
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   491
    context = {
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   492
        'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   493
        'task': task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   494
        'can_upload': can_upload,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   495
    }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   496
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   497
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   498
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   499
    if request.method == "POST":
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   500
        if not can_upload:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   501
            return show_msg(user, "You are not authorised to upload data to this task", task_url, "view the task")
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   502
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   503
        form = taskapp_forms.WorkReportForm(request.POST, request.FILES)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   504
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   505
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   506
            data = form.cleaned_data.copy()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   507
            data.update({"task":task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   508
                         "revision": old_reports.count(),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   509
                         "submitted_by": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   510
                         "submitted_at": datetime.now(),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   511
                        })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   512
            r = taskapp_models.WorkReport(**data)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   513
            r.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   514
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   515
            report_url = reverse('view_report', kwargs={'report_id': r.id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   516
            return shortcuts.redirect(report_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   517
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   518
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   519
            context.update({"form":form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   520
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   521
              'task/submit_report.html', RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   522
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   523
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   524
        form = taskapp_forms.WorkReportForm()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   525
        context.update({"form":form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   526
        return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   527
          'task/submit_report.html', RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   528
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   529
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   530
def claim_task(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   531
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   532
    context = {}
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   533
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   534
    # TODO(disable): Disable once the tasks can be claimed
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   535
    context['uberbar_message'] = DONT_CLAIM_TASK_MSG
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   536
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   537
    claim_url = reverse('claim_task', kwargs={'task_id': task_id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   538
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   539
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   540
    if task.status == taskapp_models.TASK_STATUS_CHOICES[0][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   541
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   542
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   543
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   544
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   545
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   546
    context.update({
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   547
      'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   548
      'profile': profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   549
      'task': task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   550
      })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   551
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   552
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   553
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   554
    reviewers = task.reviewers.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   555
    claimed_users = task.claimed_users.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   556
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   557
    is_creator = True if user == task.created_by else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   558
    is_reviewer = True if user in reviewers else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   559
    has_claimed = True if user in claimed_users else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   560
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   561
    task_claimable = True if task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0], taskapp_models.TASK_STATUS_CHOICES[3][0]] else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   562
    can_claim = True if task_claimable and ( not has_claimed )\
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   563
                        and ( not is_reviewer ) and (not is_creator ) \
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   564
                        else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   565
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   566
    old_claims = task.claims.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   567
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   568
    context.update({"is_creator": is_creator,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   569
                    "task_claimable": task_claimable,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   570
                    "can_claim": can_claim,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   571
                    "old_claims": old_claims})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   572
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   573
    if request.method == "POST" and can_claim:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   574
        form = taskapp_forms.ClaimTaskForm(request.POST)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   575
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   576
            data = form.cleaned_data.copy()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   577
            data.update({"task": task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   578
                         "claim_datetime": datetime.now(),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   579
                         "claimed_by": user,})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   580
            new_claim = taskapp_models.TaskClaim(**data)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   581
            new_claim.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   582
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   583
            task.claimed_users.add(user)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   584
            task.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   585
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   586
            return shortcuts.redirect(claim_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   587
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   588
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   589
            context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   590
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   591
              "task/claim.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   592
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   593
        form = taskapp_forms.ClaimTaskForm()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   594
        context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   595
        return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   596
          "task/claim.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   597
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   598
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   599
def select_user(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   600
    """ first get the status of the task and then select one of claimed users
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   601
    generate list of claimed users by passing it as an argument to a function.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   602
    """
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   603
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   604
    task_url = reverse('view_task', kwargs={'task_id': task_id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   605
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   606
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   607
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   608
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   609
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   610
    context = {"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   611
               "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   612
               "task": task,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   613
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   614
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   615
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   616
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   617
    claimed_users = task.claimed_users.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   618
    task_claimed = True if claimed_users else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   619
    
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   620
    is_creator = True if user == task.created_by else False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   621
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   622
    if (is_creator or profile.role in [profile_models.ROLES_CHOICES[1][0], profile_models.ROLES_CHOICES[2][0]]) and \
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   623
       task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0], taskapp_models.TASK_STATUS_CHOICES[3][0]]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   624
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   625
        if task_claimed:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   626
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   627
            user_list = ((user.id,user.username) for user in claimed_users)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   628
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   629
            if request.method == "POST":
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   630
                form = taskapp_forms.ChoiceForm(user_list, request.POST)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   631
                if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   632
                    uid = form.cleaned_data['choice']
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   633
                    selected_user = User.objects.get(id=uid)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   634
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   635
                    task.selected_users.add(selected_user)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   636
                    task.claimed_users.remove(selected_user)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   637
                    task.status = taskapp_models.TASK_STATUS_CHOICES[3][0]
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   638
                    task.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   639
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   640
                    return shortcuts.redirect(task_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   641
                else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   642
                    context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   643
                    return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   644
                      'task/select_user.html',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   645
                      RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   646
            else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   647
                form = taskapp_forms.ChoiceForm(user_list)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   648
                context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   649
                return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   650
                  'task/select_user.html',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   651
                  RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   652
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   653
            return show_msg(user, 'There are no pending claims for this task',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   654
                            task_url, 'view the task')
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   655
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   656
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   657
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   658
def suggest_task_tags(request):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   659
    """Returns the tags matching the query for the AJAXy autocomplete
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   660
    to get tags related to tasks.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   661
    """
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   662
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   663
    term = request.GET.get('term', None)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   664
    response = []
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   665
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   666
    if term:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   667
      tag_entities = Tag.objects.filter(name__icontains=term)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   668
      response = [tag.name for tag in tag_entities]
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   669
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   670
    json_response = json.dumps(response)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   671
    return http.HttpResponse(json_response)
545
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   672
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   673
def view_tag(request, tag_name, template='task/view_tag.html'):
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   674
    """View that displays all the tasks tagged with the given name
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   675
    """
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   676
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   677
    tag = Tag.objects.filter(name=tag_name)
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   678
    tasks = TaggedItem.objects.get_by_model(taskapp_models.Task, tag)
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   679
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   680
    context = {
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   681
      'tag_name': tag_name,
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   682
      'tasks': tasks,
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   683
      }
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   684
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   685
    return shortcuts.render_to_response(
3a86d85333a3 Add a view to list all items tagged with a given tag name.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 543
diff changeset
   686
      template, RequestContext(request, context))