From 82c9ae6cfb8ae30c9a6a9b20bc883fc0bff7ec62 Mon Sep 17 00:00:00 2001 From: Muhammad Haseeb Date: Wed, 28 Oct 2020 20:47:20 +0500 Subject: [PATCH] Restricted paid mode courses options for honor mode only customers (#57) --- .../extensions/edly_ecommerce_app/__init__.py | 1 + .../extensions/edly_ecommerce_app/apps.py | 2 +- .../templatetags/__init__.py | 0 .../templatetags/edly_extras.py | 20 +++++++++ .../tests/test_templatetags.py | 26 +++++++++++ ecommerce/settings/_oscar.py | 2 +- ecommerce/static/js/views/course_form_view.js | 44 ++++++++++++------- 7 files changed, 77 insertions(+), 18 deletions(-) create mode 100644 ecommerce/extensions/edly_ecommerce_app/templatetags/__init__.py create mode 100644 ecommerce/extensions/edly_ecommerce_app/templatetags/edly_extras.py create mode 100644 ecommerce/extensions/edly_ecommerce_app/tests/test_templatetags.py diff --git a/ecommerce/extensions/edly_ecommerce_app/__init__.py b/ecommerce/extensions/edly_ecommerce_app/__init__.py index e69de29bb2d..63664d00944 100644 --- a/ecommerce/extensions/edly_ecommerce_app/__init__.py +++ b/ecommerce/extensions/edly_ecommerce_app/__init__.py @@ -0,0 +1 @@ +default_app_config = 'ecommerce.extensions.edly_ecommerce_app.apps.EdlyEcommerceAppConfig' # pragma: no cover diff --git a/ecommerce/extensions/edly_ecommerce_app/apps.py b/ecommerce/extensions/edly_ecommerce_app/apps.py index dbffc698e85..2e7b9da8983 100644 --- a/ecommerce/extensions/edly_ecommerce_app/apps.py +++ b/ecommerce/extensions/edly_ecommerce_app/apps.py @@ -3,4 +3,4 @@ class EdlyEcommerceAppConfig(AppConfig): - name = 'edly_ecommerce_app' + name = 'ecommerce.extensions.edly_ecommerce_app' diff --git a/ecommerce/extensions/edly_ecommerce_app/templatetags/__init__.py b/ecommerce/extensions/edly_ecommerce_app/templatetags/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ecommerce/extensions/edly_ecommerce_app/templatetags/edly_extras.py b/ecommerce/extensions/edly_ecommerce_app/templatetags/edly_extras.py new file mode 100644 index 00000000000..28eb7ffd75a --- /dev/null +++ b/ecommerce/extensions/edly_ecommerce_app/templatetags/edly_extras.py @@ -0,0 +1,20 @@ +from django import template + +register = template.Library() + + +@register.simple_tag(takes_context=True) +def site_configuration_value(context, name): + """ + Retrieve Configuration value for the key specified as name argument. + + Arguments: + context (dict): Context of current request. + name (str): Name of the key for which to return configuration value. + + Returns: + Configuration value for the given key or returns `None` if default is not available. + """ + request = context['request'] + site_configuration = request.site.siteconfiguration + return site_configuration.get_edly_configuration_value(name) diff --git a/ecommerce/extensions/edly_ecommerce_app/tests/test_templatetags.py b/ecommerce/extensions/edly_ecommerce_app/tests/test_templatetags.py new file mode 100644 index 00000000000..a983be36502 --- /dev/null +++ b/ecommerce/extensions/edly_ecommerce_app/tests/test_templatetags.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +from django.template import Context, Template + +from ecommerce.tests.testcases import TestCase + + +class EdlyExtrasTests(TestCase): + + def setUp(self): + super(EdlyExtrasTests, self).setUp() + + def test_site_configuration_value(self): + """ + Verify site configuration template tag returns correct value. + """ + expected_configuration_value = 'FAKE_VALUE' + self.site.siteconfiguration.edly_client_theme_branding_settings['FAKE_KEY'] = expected_configuration_value + self.site.siteconfiguration.save() + + template = Template( + "{% load edly_extras %}" + "{% site_configuration_value \"FAKE_KEY\" %}" + ) + context = Context({'request': self.request}) + assert template.render(context) == expected_configuration_value diff --git a/ecommerce/settings/_oscar.py b/ecommerce/settings/_oscar.py index 539286556f2..8032ca8b0db 100644 --- a/ecommerce/settings/_oscar.py +++ b/ecommerce/settings/_oscar.py @@ -18,6 +18,7 @@ 'ecommerce.extensions.api', 'ecommerce.extensions.fulfillment', 'ecommerce.extensions.refund', + 'ecommerce.extensions.edly_ecommerce_app', ] + get_core_apps([ 'ecommerce.extensions.analytics', 'ecommerce.extensions.basket', @@ -33,7 +34,6 @@ 'ecommerce.extensions.partner', 'ecommerce.extensions.payment', 'ecommerce.extensions.voucher', - 'ecommerce.extensions.edly_ecommerce_app', ]) # END APP CONFIGURATION diff --git a/ecommerce/static/js/views/course_form_view.js b/ecommerce/static/js/views/course_form_view.js index e385ea1009c..ab6f5187993 100644 --- a/ecommerce/static/js/views/course_form_view.js +++ b/ecommerce/static/js/views/course_form_view.js @@ -158,22 +158,28 @@ define([ var activeCourseTypes, courseType = this.editing ? this.lockedCourseType : this.model.get('type'); - switch (courseType) { - case 'audit': - activeCourseTypes = ['audit', 'verified', 'credit']; - break; - case 'verified': - activeCourseTypes = ['verified', 'credit']; - break; - case 'professional': - activeCourseTypes = ['professional']; - break; - case 'credit': - activeCourseTypes = ['credit']; - break; - default: - activeCourseTypes = ['audit', 'verified', 'professional', 'credit']; - break; + var disablePaidCourseModes = $('#disable_paid_course_modes').attr('value'); + if (disablePaidCourseModes === 'True') { + activeCourseTypes = ['audit']; + } + else { + switch (courseType) { + case 'audit': + activeCourseTypes = ['audit', 'verified', 'credit']; + break; + case 'verified': + activeCourseTypes = ['verified', 'credit']; + break; + case 'professional': + activeCourseTypes = ['professional']; + break; + case 'credit': + activeCourseTypes = ['credit']; + break; + default: + activeCourseTypes = ['audit', 'verified', 'professional', 'credit']; + break; + } } return activeCourseTypes; @@ -250,6 +256,12 @@ define([ $honorModeContainer.toggleClass('hidden', !this.model.includeHonorMode()); + var disablePaidCourseModes = $('#disable_paid_course_modes').attr('value'); + if (disablePaidCourseModes === 'True') { + $("input[name=honor_mode][value='true']").trigger('click'); + $("input[name=honor_mode][value='false']").prop("disabled", true); + } + return this; },