From d2de618b20b875d69b3cd4c46240af7fe8732bfa Mon Sep 17 00:00:00 2001
From: Calen Pennington <cale@edx.org>
Date: Mon, 10 Jun 2019 13:52:11 -0400
Subject: [PATCH] Add strike-out price to LMS Course Home sidebar

---
 .../features/_course-upgrade-message.scss     |  9 ++++++-
 .../course-home-fragment.html                 | 13 ++++++---
 .../tests/views/test_course_home.py           | 27 +++++++++++++++++++
 .../course_experience/views/course_home.py    | 12 +++++++--
 4 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/lms/static/sass/features/_course-upgrade-message.scss b/lms/static/sass/features/_course-upgrade-message.scss
index bcc0e45ee0c..7ad6abdc68f 100644
--- a/lms/static/sass/features/_course-upgrade-message.scss
+++ b/lms/static/sass/features/_course-upgrade-message.scss
@@ -30,9 +30,12 @@ Search for the courseware_verified_certificate_upsell promotion ID.
 }
 
 .section-upgrade .upgrade-container {
+  margin-top: 15px;
+}
+
+.section-upgrade.no-discount .upgrade-container {
   float: right;
   text-align: center;
-  margin-top: 15px;
 }
 
 @media only screen and (max-width: 991px) and (min-width: 768px)  {
@@ -45,6 +48,10 @@ Search for the courseware_verified_certificate_upsell promotion ID.
   margin: 0.5em 0;
 }
 
+.section.section-upgrade.discount p {
+  display: inline-block;
+}
+
 .section-upgrade .btn-brand.btn-upgrade {
   color: white !important;
 }
diff --git a/openedx/features/course_experience/templates/course_experience/course-home-fragment.html b/openedx/features/course_experience/templates/course_experience/course-home-fragment.html
index c90825a9dd6..89b488e7ed8 100644
--- a/openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+++ b/openedx/features/course_experience/templates/course_experience/course-home-fragment.html
@@ -124,7 +124,7 @@ from openedx.features.course_experience import UNIFIED_COURSE_TAB_FLAG, SHOW_REV
                 </div>
             % endif
             % 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>
                         <img src="https://courses.edx.org/static/images/edx-verified-mini-cert.png" alt="">
                         <div class="upgrade-container">
@@ -132,11 +132,16 @@ from openedx.features.course_experience import UNIFIED_COURSE_TAB_FLAG, SHOW_REV
                                 <a class="btn-brand btn-upgrade"
                                    href="${upgrade_url}"
                                    data-creative="sidebarupsell"
-                                   data-position="sidebar-message">
-                                   ${_("Upgrade ({price})").format(price=upgrade_price)}
+                                   data-position="sidebar-message"
+                                >
+                                    % if upgrade_price_before_discount:
+                                        ${_("Upgrade")} (${upgrade_price} <del>${upgrade_price_before_discount}</del>)
+                                    % else:
+                                        ${_("Upgrade ({price})").format(price=upgrade_price)}
+                                    % endif
                                 </a>
                             </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>
             % endif
diff --git a/openedx/features/course_experience/tests/views/test_course_home.py b/openedx/features/course_experience/tests/views/test_course_home.py
index 3e0a0a92a40..d81c058dee7 100644
--- a/openedx/features/course_experience/tests/views/test_course_home.py
+++ b/openedx/features/course_experience/tests/views/test_course_home.py
@@ -53,6 +53,7 @@ from openedx.features.course_experience import (
     SHOW_UPGRADE_MSG_ON_COURSE_HOME,
     UNIFIED_COURSE_TAB_FLAG
 )
+from openedx.features.discounts.applicability import DISCOUNT_APPLICABILITY_FLAG
 from student.models import CourseEnrollment
 from student.tests.factories import UserFactory
 from util.date_utils import strftime_localized
@@ -927,6 +928,7 @@ class TestCourseHomePageAccess(CourseHomePageTestCase):
         self.assertNotContains(response, TEST_COURSE_GOAL_UPDATE_FIELD_HIDDEN)
 
 
+@ddt.ddt
 class CourseHomeFragmentViewTests(ModuleStoreTestCase):
     """
     Test Messages Displayed on the Course Home
@@ -1001,3 +1003,28 @@ class CourseHomeFragmentViewTests(ModuleStoreTestCase):
     def test_display_upgrade_message_if_audit_and_deadline_not_passed(self):
         CourseEnrollment.enroll(self.user, self.course.id, CourseMode.AUDIT)
         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
diff --git a/openedx/features/course_experience/views/course_home.py b/openedx/features/course_experience/views/course_home.py
index 8b4796ed90d..37d5ca27f02 100644
--- a/openedx/features/course_experience/views/course_home.py
+++ b/openedx/features/course_experience/views/course_home.py
@@ -14,7 +14,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie
 from opaque_keys.edx.keys import CourseKey
 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.courses import can_self_enroll_in_course, get_course_info_section, get_course_with_access
 from lms.djangoapps.commerce.utils import EcommerceService
@@ -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_experience.course_tools import CourseToolsPluginManager
 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 util.views import ensure_valid_course_key
 from xmodule.course_module import COURSE_VISIBILITY_PUBLIC, COURSE_VISIBILITY_PUBLIC_OUTLINE
@@ -204,11 +205,17 @@ class CourseHomeFragmentView(EdxFragmentView):
         # Get info for upgrade messaging
         upgrade_price = None
         upgrade_url = None
+        upgrade_price_before_discount = None
 
         # TODO Add switch to control deployment
         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_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
         context = {
@@ -236,6 +243,7 @@ class CourseHomeFragmentView(EdxFragmentView):
             'uses_pattern_library': True,
             'upgrade_price': upgrade_price,
             'upgrade_url': upgrade_url,
+            'upgrade_price_before_discount': upgrade_price_before_discount,
         }
         html = render_to_string('course_experience/course-home-fragment.html', context)
         return Fragment(html)
-- 
GitLab