def finaid_review(request, pks=None):
"""Starting view for reviewers - list the applications"""
# On a POST the pks are in the form.
# On a GET there might be pks in the URL.
if not is_reviewer(request.user):
return HttpResponseForbidden(_(u"Not authorized for this page"))
if request.method == 'POST':
# They want to do something to bulk applicants
# Find the checkboxes they checked
regex = re.compile(r'^finaid_application_(.*)$')
pk_list = []
for field_name in request.POST:
m = regex.match(field_name)
if m:
pk_list.append(m.group(1))
if not pk_list:
messages.add_message(
request, messages.ERROR,
_(u"Please select at least one application"))
return redirect(request.path)
if 'email_action' in request.POST:
# They want to email applicants
pks = ",".join(pk_list)
return redirect('finaid_email', pks=pks)
elif 'message_action' in request.POST:
# They want to attach a message to applications
pks = ",".join(pk_list)
return redirect('finaid_message', pks=pks)
elif 'status_action' in request.POST:
# They want to change applications' statuses
applications = FinancialAidApplication.objects.filter(pk__in=pk_list)\
.select_related('review')
status = int(request.POST['status'])
count = 0
for application in applications:
try:
review = application.review
except FinancialAidReviewData.DoesNotExist:
review = FinancialAidReviewData(application=application)
if review.status != status:
review.status = status
review.save()
count += 1
messages.info(request,
"Updated %d application status%s" % (count, "" if count == 1 else "es"))
pks = ",".join(pk_list)
return redirect(reverse('finaid_review', kwargs=dict(pks=pks)))
else:
messages.error(request, "WHAT?")
else:
# GET - pks are in the URL. maybe.
pk_list = pks.split(",") if pks else []
return render(request, "finaid/application_list.html", {
"applications": FinancialAidApplication.objects.all().select_related('review'),
"status_options": STATUS_CHOICES,
"pks": [int(pk) for pk in pk_list],
})
评论列表
文章目录