app/projrev/views/proposal.py
changeset 0 c94bd9ae70d2
child 4 8d9da911ed7d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/projrev/views/proposal.py	Tue Aug 04 02:21:15 2009 -0400
@@ -0,0 +1,205 @@
+"""This module contains the views for the project's proposal 
+funded by NME through ICT.
+"""
+
+
+__authors__ = [
+  '"Madhusudan.C.S" <madhusudancs@gmail.com>',
+]
+
+
+import time
+
+from django.shortcuts import render_to_response, get_object_or_404
+
+from projrev.models import Project
+from projrev.models import Proposal
+from projrev.views.helpers import forms as projrev_forms
+
+
+def submit(request):
+  """View for proposal submission.
+  """
+
+  if request.method == 'POST':
+    return submitPost(request)
+  else:
+    return submitGet(request)
+
+def submitPost(request):
+  """Handles POST request for the submitted proposal form. 
+  """
+
+  prop_form = projrev_forms.ProposalForm(request.POST, request.FILES)
+
+  project = None
+  proposal = None
+
+  if prop_form.is_valid():
+    cleaned_data = prop_form.cleaned_data
+
+    # Generate MICR code
+    cleaned_data['micr_code'] = '%s%s%s%d' % (
+        cleaned_data['state'], cleaned_data['district'],
+        cleaned_data['line_item'], 
+        int(time.time() * 1000) % 1000000000)
+
+    cleaned_data['line_item'] = Project.getLineItem(cleaned_data['line_item'])
+    cleaned_data['state'] = Project.getState(cleaned_data['state'])
+    cleaned_data['district'] = Project.getDistrict(cleaned_data['district'])
+
+    # If the form is valid create a new project or update the project
+    # if it already exists from the form.
+    project = prop_form.save()
+
+    project.status = 'new'
+
+    project.save()
+
+    # Create a proposal for the project.
+    proposal = project.proposal_set.create(
+        document=prop_form.cleaned_data['document'], rev_num = 0)
+
+    proposal.save()
+
+  return submitGet(request, project, proposal)
+
+def submitGet(request, project=None, proposal=None):
+  """Handles GET request for the submission of proposal form.
+  """
+
+  context = {}
+
+  if proposal:
+    context['document'] = proposal.document
+
+  if not project:
+    prop_form = projrev_forms.ProposalForm()
+  else:
+    prop_form = projrev_forms.ProposalForm(instance=project)
+
+  context['form'] = prop_form
+
+  template = 'projrev/proposal/submit.html'
+
+  return render_to_response(template, context)
+
+def review(request, micr_code=None):
+  """
+  """
+
+  if request.method == 'POST':
+    return reviewPost(request, micr_code)
+  else:
+    return reviewGet(request, micr_code)
+
+def reviewPost(request, micr_code=None):
+  """
+  """
+
+  rev_form = projrev_forms.ReviewForm(request.POST)
+
+  if rev_form.is_valid():
+    cleaned_data = rev_form.cleaned_data
+
+    cleaned_data['project'] = Project.objects.get(micr_code=micr_code)
+
+    # If the form is valid create a new project or update the project
+    # if it already exists from the form.
+    review = rev_form.save()
+
+  return reviewGet(request, micr_code, rev_form)
+
+def reviewGet(request, micr_code=None, rev_form=None):
+  """
+  """
+
+  if not micr_code:
+    template = 'projrev/proposal/list.html'
+    context = {
+        'projects': Project.objects.all(),
+        'row_url': '/proposal/review/',
+        }
+
+    return render_to_response(template, context)
+
+  if not rev_form:
+    rev_form = projrev_forms.ReviewForm()
+
+  proposal_path = str(Project.objects.get(
+          micr_code=micr_code).proposal_set.all()[0].document)
+
+  proposal_name = proposal_path.split('/')[-1]
+
+  context = {
+      'form': rev_form,
+      'project': Project.objects.get(micr_code=micr_code),
+      'proposal_path': proposal_path,
+      'proposal_name': proposal_name,
+      }
+
+  template = 'projrev/proposal/review.html'
+
+  return render_to_response(template, context)
+
+def rank(request, micr_code=None):
+  """
+  """
+
+  if request.method == 'POST':
+    return rankPost(request, micr_code)
+  else:
+    return rankGet(request, micr_code)
+
+def rankPost(request, micr_code=None):
+  """
+  """
+
+  return rankGet(request, micr_code)
+
+def rankGet(request, micr_code=None):
+  """
+  """
+
+  if not micr_code:
+    template = 'projrev/proposal/list.html'
+    context = {
+        'projects': Project.objects.all(),
+        'row_url': '/proposal/rank/',
+        }
+
+    return render_to_response(template, context)
+
+  projects = Project.objects.get(micr_code=micr_code)
+
+  proposal_path = str(projects.proposal_set.all()[0].document)
+
+  proposal_name = proposal_path.split('/')[-1]
+
+  reviews = projects.review_set.all()
+
+  review_score = [0] * 9
+  for review in reviews:
+    review_score[0] += review.attribute1
+    review_score[1] += review.attribute2
+    review_score[2] += review.attribute3
+    review_score[3] += review.attribute4
+    review_score[4] += review.attribute5
+    review_score[5] += review.attribute6
+    review_score[6] += review.attribute7
+    review_score[7] += review.attribute8
+    review_score[8] += review.attribute9
+
+  total_score = sum(review_score)
+
+  context = {
+      'project': projects,
+      'proposal_path': proposal_path,
+      'proposal_name': proposal_name,
+      'review_score': review_score,
+      'total_score': total_score,
+      }
+
+  template = 'projrev/proposal/rank.html'
+
+  return render_to_response(template, context)