app/projrev/views/proposal.py
changeset 44 6fda3f3cc873
parent 43 55e650bb9dbe
child 45 9ffe957d6159
--- a/app/projrev/views/proposal.py	Wed Aug 12 22:41:21 2009 +0530
+++ b/app/projrev/views/proposal.py	Thu Aug 13 03:20:01 2009 +0530
@@ -221,20 +221,24 @@
 
 @access.register('reviewer')
 @access.checkAccess
-def review(request, micr_code=None):
+def review(request, micr_code=None, review_id=None):
   """View for reviewing the proposal.
   """
 
   if request.method == 'POST':
-    return reviewPost(request, micr_code)
+    return reviewPost(request, micr_code, review_id)
   else:
-    return reviewGet(request, micr_code)
+    return reviewGet(request, micr_code, review_id)
 
-def reviewPost(request, micr_code=None):
+def reviewPost(request, micr_code=None, review_id=None):
   """
   """
 
-  rev_form = projrev_forms.ReviewForm(request.POST)
+  if review_id:
+    review_instance = Review.objects.get(id=review_id)
+    rev_form = projrev_forms.ReviewForm(request.POST, instance=review_instance)
+  else:
+    rev_form = projrev_forms.ReviewForm(request.POST)
 
   if rev_form.is_valid():
     cleaned_data = rev_form.cleaned_data
@@ -252,9 +256,9 @@
     return HttpResponseRedirect(
         reverse('app.projrev.views.proposal.rank', args=(micr_code,)))
 
-  return reviewGet(request, micr_code, rev_form)
+  return reviewGet(request, micr_code, review_id, rev_form)
 
-def reviewGet(request, micr_code=None, rev_form=None):
+def reviewGet(request, micr_code=None, review_id=None, rev_form=None):
   """
   """
 
@@ -262,27 +266,53 @@
 
   if not micr_code:
     template = 'projrev/proposal/list.html'
-    context['projects'] = Project.objects.all().exclude(
+    context['projects'] = []
+    projects = Project.objects.all().exclude(
         status__exact='invalid').order_by('-last_updated_on')
+
+    for project in projects:
+      user_reviews = project.review_set.all().filter(
+          reviewer__id__exact=request.user.id).order_by('-reviewed_on')
+
+      proposals = project.proposal_set.all().order_by('-submitted_on')
+
+      if user_reviews and proposals:
+        info = {
+            'project': project,
+            }
+        proposal = proposals[0]
+        new_user_reviews = user_reviews.filter(proposal__id__exact=proposal.id)
+        if new_user_reviews:
+          info['user_review'] = new_user_reviews[0]
+        else:
+          info['not_this_proposal'] = True
+          info['user_review'] = user_reviews[0]
+
+        context['projects'].append(info)
+      elif proposals:
+        info = {
+            'project': project,
+            }
+        proposal = proposals[0]
+        context['projects'].append(info)
+
     context['row_url'] = '/proposal/review/'
 
     return render_to_response(template, RequestContext(request, context))
 
-  if not rev_form:
-    rev_form = projrev_forms.ReviewForm()
-  else:
-    context['prev_data'] = rev_form.data 
-    import logging
-    logging.error(rev_form.data)
-
   project = Project.objects.get(micr_code=micr_code)
-  context['form'] = rev_form
-  context['project'] = project
 
   proposals = project.proposal_set.all().order_by('-submitted_on')
+
   if proposals:
     proposal = proposals[0]
 
+    user_review = Review.objects.all().filter(
+        id__exact=review_id).order_by('-reviewed_on')
+
+    if user_review:
+      user_review = user_review[0]
+
     if proposal:
       proposal_path = str(proposal.document)
 
@@ -292,6 +322,18 @@
       context['proposal_name'] = proposal_name
       context['last_submitted'] = proposal.submitted_on
 
+  if not rev_form:
+    if user_review:
+      rev_form = projrev_forms.ReviewForm(instance=user_review)
+      context['prev_data'] = rev_form.initial
+    else:
+      rev_form = projrev_forms.ReviewForm()
+  else:
+    context['prev_data'] = rev_form.data
+
+  context['form'] = rev_form
+  context['project'] = project
+
   reviews = project.review_set.all().order_by('reviewed_on')
   if reviews:
     context['reviews'] = reviews