diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py index d98ac6fa0b..b3c3e0bbfb 100644 --- a/common/djangoapps/course_modes/views.py +++ b/common/djangoapps/course_modes/views.py @@ -19,14 +19,15 @@ from student.views import course_from_id class ChooseModeView(View): @method_decorator(login_required) - def get(self, request): + def get(self, request, error=None): course_id = request.GET.get("course_id") modes = CourseMode.modes_for_course_dict(course_id) context = { "course_id": course_id, "modes": modes, "course_name": course_from_id(course_id).display_name, - "chosen_price" : None, + "chosen_price": None, + "error": error, } if "verified" in modes: context["suggested_prices"] = modes["verified"].suggested_prices.split(",") @@ -43,7 +44,8 @@ class ChooseModeView(View): # but I don't really have the time to refactor it more nicely and test. course = course_from_id(course_id) if not has_access(user, course, 'enroll'): - return HttpResponseBadRequest(_("Enrollment is closed")) + error_msg = _("Enrollment is closed") + return self.get(request, error=error_msg) requested_mode = self.get_requested_mode(request.POST.get("mode")) @@ -55,16 +57,20 @@ class ChooseModeView(View): CourseEnrollment.enroll(user, course_id) return redirect('dashboard') + mode_info = allowed_modes[requested_mode] + if requested_mode == "verified": amount = request.POST.get("contribution") or \ - request.POST.get("contribution-other-amt") or \ - requested_mode.min_price.format("{:g}") + request.POST.get("contribution-other-amt") or 0 donation_for_course = request.session.get("donation_for_course", {}) donation_for_course[course_id] = amount request.session["donation_for_course"] = donation_for_course - # TODO: Check here for minimum pricing + # Check for minimum pricing + if int(amount) < mode_info.min_price: + error_msg = _("No selected price or selected price is too low.") + return self.get(request, error=error_msg) return redirect( "{}?{}".format( @@ -75,7 +81,7 @@ class ChooseModeView(View): def get_requested_mode(self, user_choice): choices = { - "Select Audit" : "audit", - "Select Certificate" : "verified" + "Select Audit": "audit", + "Select Certificate": "verified" } return choices.get(user_choice) diff --git a/common/templates/course_modes/choose.html b/common/templates/course_modes/choose.html index 7f2aa01555..936a0ecc40 100644 --- a/common/templates/course_modes/choose.html +++ b/common/templates/course_modes/choose.html @@ -25,6 +25,11 @@ + %if error: +
+ ${error} +
+ %endif

Select your track:

diff --git a/lms/djangoapps/shoppingcart/processors/CyberSource.py b/lms/djangoapps/shoppingcart/processors/CyberSource.py index 6340e4d6bb..34a38d182a 100644 --- a/lms/djangoapps/shoppingcart/processors/CyberSource.py +++ b/lms/djangoapps/shoppingcart/processors/CyberSource.py @@ -104,7 +104,7 @@ def render_purchase_form_html(cart): """ return render_to_string('shoppingcart/cybersource_form.html', { 'action': get_purchase_endpoint(), - 'params': get_signed_purchase_params(params), + 'params': get_signed_purchase_params(cart), }) def get_signed_purchase_params(cart): diff --git a/lms/djangoapps/verify_student/views.py b/lms/djangoapps/verify_student/views.py index 4c76251d84..60ff619c84 100644 --- a/lms/djangoapps/verify_student/views.py +++ b/lms/djangoapps/verify_student/views.py @@ -9,9 +9,10 @@ from mitxmako.shortcuts import render_to_response from django.conf import settings from django.core.urlresolvers import reverse -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseBadRequest from django.shortcuts import redirect from django.views.generic.base import View +from django.utils.translation import ugettext as _ from course_modes.models import CourseMode from student.models import CourseEnrollment @@ -47,14 +48,14 @@ class VerifyView(View): else: chosen_price = verify_mode.min_price.format("{:g}") context = { - "progress_state" : progress_state, - "user_full_name" : request.user.profile.name, - "course_id" : course_id, - "course_name" : course_from_id(course_id).display_name, - "purchase_endpoint" : get_purchase_endpoint(), - "suggested_prices" : verify_mode.suggested_prices.split(","), - "currency" : verify_mode.currency.upper(), - "chosen_price" : chosen_price, + "progress_state": progress_state, + "user_full_name": request.user.profile.name, + "course_id": course_id, + "course_name": course_from_id(course_id).display_name, + "purchase_endpoint": get_purchase_endpoint(), + "suggested_prices": verify_mode.suggested_prices.split(","), + "currency": verify_mode.currency.upper(), + "chosen_price": chosen_price, } return render_to_response('verify_student/photo_verification.html', context) @@ -66,17 +67,20 @@ def create_order(request): attempt.save() course_id = request.POST['course_id'] - donation_for_course = request.session.get("donation_for_course", {}) + contribution = request.POST.get("contribution", 0) - # FIXME: When this isn't available we do...? - verified_mode = CourseMode.modes_for_course_dict(course_id)["verified"] - amount = donation_for_course.get(course_id, verified_mode.min_price) + verified_mode = CourseMode.modes_for_course_dict(course_id).get('verified', None) + # make sure this course has a verified mode + if not verified_mode: + return HttpResponseBadRequest(_("This course doesn't support verified certificates")) + + if contribution < verified_mode.min_price: + 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 - # enrollment = CourseEnrollment.create_enrollment(request.user, course_id) cart = Order.get_cart_for_user(request.user) cart.clear() - CertificateItem.add_to_order(cart, course_id, amount, 'verified') + CertificateItem.add_to_order(cart, course_id, contribution, 'verified') params = get_signed_purchase_params(cart) diff --git a/lms/templates/verify_student/photo_verification.html b/lms/templates/verify_student/photo_verification.html index 590b399ace..0bfc2a3a49 100644 --- a/lms/templates/verify_student/photo_verification.html +++ b/lms/templates/verify_student/photo_verification.html @@ -37,7 +37,7 @@ .done(function(data) { $("#pay_form").submit(); }) - .fail(function() { alert("error"); }); + .fail(function(jqXhr,text_status, error_thrown) { alert(jqXhr.responseText); }); } function initSnapshotHandler(names) {