diff -r 000000000000 -r c94bd9ae70d2 app/projrev/views/proposal.py --- /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" ', +] + + +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)