Commit e7a3847e by Diana Huang

More validation to the free-form price text box and allow for decimal places

parent 3efa8033
import decimal
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import ( from django.http import (
HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, Http404 HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, Http404
...@@ -63,15 +64,22 @@ class ChooseModeView(View): ...@@ -63,15 +64,22 @@ class ChooseModeView(View):
amount = request.POST.get("contribution") or \ amount = request.POST.get("contribution") or \
request.POST.get("contribution-other-amt") or 0 request.POST.get("contribution-other-amt") or 0
donation_for_course = request.session.get("donation_for_course", {}) try:
donation_for_course[course_id] = amount # validate the amount passed in and force it into two digits
request.session["donation_for_course"] = donation_for_course amount_value = decimal.Decimal(amount).quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
except decimal.InvalidOperation:
error_msg = _("Invalid amount selected.")
return self.get(request, error=error_msg)
# Check for minimum pricing # Check for minimum pricing
if int(amount) < mode_info.min_price: if amount_value < mode_info.min_price:
error_msg = _("No selected price or selected price is too low.") error_msg = _("No selected price or selected price is too low.")
return self.get(request, error=error_msg) return self.get(request, error=error_msg)
donation_for_course = request.session.get("donation_for_course", {})
donation_for_course[course_id] = donation_for_course
request.session["donation_for_course"] = donation_for_course
return redirect( return redirect(
"{}?{}".format( "{}?{}".format(
reverse('verify_student_show_requirements'), reverse('verify_student_show_requirements'),
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
""" """
import json import json
import logging import logging
import decimal
from mitxmako.shortcuts import render_to_response from mitxmako.shortcuts import render_to_response
...@@ -68,19 +69,23 @@ def create_order(request): ...@@ -68,19 +69,23 @@ def create_order(request):
course_id = request.POST['course_id'] course_id = request.POST['course_id']
contribution = request.POST.get("contribution", 0) contribution = request.POST.get("contribution", 0)
try:
amount = decimal.Decimal(contribution).quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
except decimal.InvalidOperation:
return HttpResponseBadRequest(_("Selected price is not valid number."))
verified_mode = CourseMode.modes_for_course_dict(course_id).get('verified', None) verified_mode = CourseMode.modes_for_course_dict(course_id).get('verified', None)
# make sure this course has a verified mode # make sure this course has a verified mode
if not verified_mode: if not verified_mode:
return HttpResponseBadRequest(_("This course doesn't support verified certificates")) return HttpResponseBadRequest(_("This course doesn't support verified certificates"))
if int(contribution) < verified_mode.min_price: if amount < verified_mode.min_price:
return HttpResponseBadRequest(_("No selected price or selected price is below minimum.")) return HttpResponseBadRequest(_("No selected price or selected price is below minimum."))
# I know, we should check this is valid. All kinds of stuff missing here # I know, we should check this is valid. All kinds of stuff missing here
cart = Order.get_cart_for_user(request.user) cart = Order.get_cart_for_user(request.user)
cart.clear() cart.clear()
CertificateItem.add_to_order(cart, course_id, contribution, 'verified') CertificateItem.add_to_order(cart, course_id, amount, 'verified')
params = get_signed_purchase_params(cart) params = get_signed_purchase_params(cart)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment