Skip to content
Snippets Groups Projects
Commit d2de618b authored by Calen Pennington's avatar Calen Pennington
Browse files

Add strike-out price to LMS Course Home sidebar

parent 023540c2
Branches
Tags release-2020-11-09-18.01
No related merge requests found
...@@ -30,9 +30,12 @@ Search for the courseware_verified_certificate_upsell promotion ID. ...@@ -30,9 +30,12 @@ Search for the courseware_verified_certificate_upsell promotion ID.
} }
.section-upgrade .upgrade-container { .section-upgrade .upgrade-container {
margin-top: 15px;
}
.section-upgrade.no-discount .upgrade-container {
float: right; float: right;
text-align: center; text-align: center;
margin-top: 15px;
} }
@media only screen and (max-width: 991px) and (min-width: 768px) { @media only screen and (max-width: 991px) and (min-width: 768px) {
...@@ -45,6 +48,10 @@ Search for the courseware_verified_certificate_upsell promotion ID. ...@@ -45,6 +48,10 @@ Search for the courseware_verified_certificate_upsell promotion ID.
margin: 0.5em 0; margin: 0.5em 0;
} }
.section.section-upgrade.discount p {
display: inline-block;
}
.section-upgrade .btn-brand.btn-upgrade { .section-upgrade .btn-brand.btn-upgrade {
color: white !important; color: white !important;
} }
......
...@@ -124,7 +124,7 @@ from openedx.features.course_experience import UNIFIED_COURSE_TAB_FLAG, SHOW_REV ...@@ -124,7 +124,7 @@ from openedx.features.course_experience import UNIFIED_COURSE_TAB_FLAG, SHOW_REV
</div> </div>
% endif % endif
% if upgrade_url and upgrade_price: % if upgrade_url and upgrade_price:
<div class="section section-upgrade course-home-sidebar-upgrade"> <div class="section section-upgrade course-home-sidebar-upgrade ${'discount' if upgrade_price_before_discount else 'no-discount'}">
<h3 class="hd hd-6">${_("Pursue a verified certificate")}</h3> <h3 class="hd hd-6">${_("Pursue a verified certificate")}</h3>
<img src="https://courses.edx.org/static/images/edx-verified-mini-cert.png" alt=""> <img src="https://courses.edx.org/static/images/edx-verified-mini-cert.png" alt="">
<div class="upgrade-container"> <div class="upgrade-container">
...@@ -132,11 +132,16 @@ from openedx.features.course_experience import UNIFIED_COURSE_TAB_FLAG, SHOW_REV ...@@ -132,11 +132,16 @@ from openedx.features.course_experience import UNIFIED_COURSE_TAB_FLAG, SHOW_REV
<a class="btn-brand btn-upgrade" <a class="btn-brand btn-upgrade"
href="${upgrade_url}" href="${upgrade_url}"
data-creative="sidebarupsell" data-creative="sidebarupsell"
data-position="sidebar-message"> data-position="sidebar-message"
${_("Upgrade ({price})").format(price=upgrade_price)} >
% if upgrade_price_before_discount:
${_("Upgrade")} (${upgrade_price} <del>${upgrade_price_before_discount}</del>)
% else:
${_("Upgrade ({price})").format(price=upgrade_price)}
% endif
</a> </a>
</p> </p>
<p><button class="btn-link btn-small promo-learn-more">${_('Learn More')}</button></p> <p><button class="btn-link btn-small promo-learn-more">${_('Learn More')}</button></p>
</div> </div>
</div> </div>
% endif % endif
......
...@@ -53,6 +53,7 @@ from openedx.features.course_experience import ( ...@@ -53,6 +53,7 @@ from openedx.features.course_experience import (
SHOW_UPGRADE_MSG_ON_COURSE_HOME, SHOW_UPGRADE_MSG_ON_COURSE_HOME,
UNIFIED_COURSE_TAB_FLAG UNIFIED_COURSE_TAB_FLAG
) )
from openedx.features.discounts.applicability import DISCOUNT_APPLICABILITY_FLAG
from student.models import CourseEnrollment from student.models import CourseEnrollment
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from util.date_utils import strftime_localized from util.date_utils import strftime_localized
...@@ -927,6 +928,7 @@ class TestCourseHomePageAccess(CourseHomePageTestCase): ...@@ -927,6 +928,7 @@ class TestCourseHomePageAccess(CourseHomePageTestCase):
self.assertNotContains(response, TEST_COURSE_GOAL_UPDATE_FIELD_HIDDEN) self.assertNotContains(response, TEST_COURSE_GOAL_UPDATE_FIELD_HIDDEN)
@ddt.ddt
class CourseHomeFragmentViewTests(ModuleStoreTestCase): class CourseHomeFragmentViewTests(ModuleStoreTestCase):
""" """
Test Messages Displayed on the Course Home Test Messages Displayed on the Course Home
...@@ -1001,3 +1003,28 @@ class CourseHomeFragmentViewTests(ModuleStoreTestCase): ...@@ -1001,3 +1003,28 @@ class CourseHomeFragmentViewTests(ModuleStoreTestCase):
def test_display_upgrade_message_if_audit_and_deadline_not_passed(self): def test_display_upgrade_message_if_audit_and_deadline_not_passed(self):
CourseEnrollment.enroll(self.user, self.course.id, CourseMode.AUDIT) CourseEnrollment.enroll(self.user, self.course.id, CourseMode.AUDIT)
self.assert_upgrade_message_displayed() self.assert_upgrade_message_displayed()
@ddt.data(True, False)
def test_upgrade_message_discount(self, has_discount):
CourseEnrollment.enroll(self.user, self.course.id, CourseMode.AUDIT)
self.verified_mode.min_price = 100
self.verified_mode.save()
with FIRST_PURCHASE_OFFER_BANNER_DISPLAY.override(has_discount):
with DISCOUNT_APPLICABILITY_FLAG.override(has_discount):
response = self.client.get(self.url)
self.assertIn('section-upgrade', response.content)
url = EcommerceService().get_checkout_page_url(self.verified_mode.sku)
self.assertIn('<a class="btn-brand btn-upgrade"', response.content)
self.assertIn(url, response.content)
content = response.content.decode(response.charset)
print(content)
if has_discount:
assert '$85' in content
assert '<del>$100</del>' in content
else:
assert u'$85' not in content
assert u'<del>' not in content
assert u'Upgrade ($100)' in content
...@@ -14,7 +14,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie ...@@ -14,7 +14,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from web_fragments.fragment import Fragment from web_fragments.fragment import Fragment
from course_modes.models import get_cosmetic_verified_display_price from course_modes.models import get_cosmetic_verified_display_price, get_course_prices, format_course_price
from courseware.access import has_access from courseware.access import has_access
from courseware.courses import can_self_enroll_in_course, get_course_info_section, get_course_with_access from courseware.courses import can_self_enroll_in_course, get_course_info_section, get_course_with_access
from lms.djangoapps.commerce.utils import EcommerceService from lms.djangoapps.commerce.utils import EcommerceService
...@@ -32,6 +32,7 @@ from openedx.core.djangoapps.util.maintenance_banner import add_maintenance_bann ...@@ -32,6 +32,7 @@ from openedx.core.djangoapps.util.maintenance_banner import add_maintenance_bann
from openedx.features.course_duration_limits.access import generate_course_expired_fragment from openedx.features.course_duration_limits.access import generate_course_expired_fragment
from openedx.features.course_experience.course_tools import CourseToolsPluginManager from openedx.features.course_experience.course_tools import CourseToolsPluginManager
from openedx.features.course_experience.utils import get_first_purchase_offer_banner_fragment from openedx.features.course_experience.utils import get_first_purchase_offer_banner_fragment
from openedx.features.discounts.applicability import discount_percentage
from student.models import CourseEnrollment from student.models import CourseEnrollment
from util.views import ensure_valid_course_key from util.views import ensure_valid_course_key
from xmodule.course_module import COURSE_VISIBILITY_PUBLIC, COURSE_VISIBILITY_PUBLIC_OUTLINE from xmodule.course_module import COURSE_VISIBILITY_PUBLIC, COURSE_VISIBILITY_PUBLIC_OUTLINE
...@@ -204,11 +205,17 @@ class CourseHomeFragmentView(EdxFragmentView): ...@@ -204,11 +205,17 @@ class CourseHomeFragmentView(EdxFragmentView):
# Get info for upgrade messaging # Get info for upgrade messaging
upgrade_price = None upgrade_price = None
upgrade_url = None upgrade_url = None
upgrade_price_before_discount = None
# TODO Add switch to control deployment # TODO Add switch to control deployment
if SHOW_UPGRADE_MSG_ON_COURSE_HOME.is_enabled(course_key) and enrollment and enrollment.upgrade_deadline: if SHOW_UPGRADE_MSG_ON_COURSE_HOME.is_enabled(course_key) and enrollment and enrollment.upgrade_deadline:
upgrade_url = EcommerceService().upgrade_url(request.user, course_key) upgrade_url = EcommerceService().upgrade_url(request.user, course_key)
upgrade_price = get_cosmetic_verified_display_price(course) if offer_banner_fragment:
upgrade_price_before_discount_num = get_course_prices(course, verified_only=True)[0]
upgrade_price_before_discount = format_course_price(upgrade_price_before_discount_num)
upgrade_price = format_course_price("{:0.2f}".format(upgrade_price_before_discount_num * ((100.0 - discount_percentage()) / 100)))
else:
upgrade_price = get_cosmetic_verified_display_price(course)
# Render the course home fragment # Render the course home fragment
context = { context = {
...@@ -236,6 +243,7 @@ class CourseHomeFragmentView(EdxFragmentView): ...@@ -236,6 +243,7 @@ class CourseHomeFragmentView(EdxFragmentView):
'uses_pattern_library': True, 'uses_pattern_library': True,
'upgrade_price': upgrade_price, 'upgrade_price': upgrade_price,
'upgrade_url': upgrade_url, 'upgrade_url': upgrade_url,
'upgrade_price_before_discount': upgrade_price_before_discount,
} }
html = render_to_string('course_experience/course-home-fragment.html', context) html = render_to_string('course_experience/course-home-fragment.html', context)
return Fragment(html) return Fragment(html)
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