feat: add override option to upgrade CTA utils and add course_run_key identifier (#35441)
* feat: add override option to upgrade CTAs and send course_run_key identifier
This commit is contained in:
committed by
GitHub
parent
1103544a07
commit
6a63cfcaa4
@@ -126,9 +126,13 @@ class ChooseModeView(View):
|
||||
if ecommerce_service.is_enabled(request.user):
|
||||
professional_mode = modes.get(CourseMode.NO_ID_PROFESSIONAL_MODE) or modes.get(CourseMode.PROFESSIONAL)
|
||||
if purchase_workflow == "single" and professional_mode.sku:
|
||||
redirect_url = ecommerce_service.get_checkout_page_url(professional_mode.sku)
|
||||
redirect_url = ecommerce_service.get_checkout_page_url(
|
||||
professional_mode.sku, course_run_keys=[course_id]
|
||||
)
|
||||
if purchase_workflow == "bulk" and professional_mode.bulk_sku:
|
||||
redirect_url = ecommerce_service.get_checkout_page_url(professional_mode.bulk_sku)
|
||||
redirect_url = ecommerce_service.get_checkout_page_url(
|
||||
professional_mode.bulk_sku, course_run_keys=[course_id]
|
||||
)
|
||||
return redirect(redirect_url)
|
||||
course = modulestore().get_course(course_key)
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ from .waffle import ( # lint-amnesty, pylint: disable=invalid-django-waffle-imp
|
||||
should_redirect_to_commerce_coordinator_checkout,
|
||||
should_redirect_to_commerce_coordinator_refunds,
|
||||
)
|
||||
from edx_django_utils.plugins import pluggable_override
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@@ -56,6 +57,7 @@ class EcommerceService:
|
||||
""" Retrieve Ecommerce service public url root. """
|
||||
return configuration_helpers.get_value('ECOMMERCE_PUBLIC_URL_ROOT', settings.ECOMMERCE_PUBLIC_URL_ROOT)
|
||||
|
||||
@pluggable_override('OVERRIDE_GET_ABSOLUTE_ECOMMERCE_URL')
|
||||
def get_absolute_ecommerce_url(self, ecommerce_page_url):
|
||||
""" Return the absolute URL to the ecommerce page.
|
||||
|
||||
@@ -110,7 +112,6 @@ class EcommerceService:
|
||||
|
||||
def get_add_to_basket_url(self):
|
||||
""" Return the URL for the payment page based on the waffle switch.
|
||||
|
||||
Example:
|
||||
http://localhost/enabled_service_api_path
|
||||
"""
|
||||
@@ -118,12 +119,14 @@ class EcommerceService:
|
||||
return urljoin(settings.COMMERCE_COORDINATOR_URL_ROOT, settings.COORDINATOR_CHECKOUT_REDIRECT_PATH)
|
||||
return self.payment_page_url()
|
||||
|
||||
@pluggable_override('OVERRIDE_GET_CHECKOUT_PAGE_URL')
|
||||
def get_checkout_page_url(self, *skus, **kwargs):
|
||||
""" Construct the URL to the ecommerce checkout page and include products.
|
||||
|
||||
Args:
|
||||
skus (list): List of SKUs associated with products to be added to basket
|
||||
program_uuid (string): The UUID of the program, if applicable
|
||||
course_run_keys (list): The course run keys of the products to be added to basket.
|
||||
|
||||
Returns:
|
||||
Absolute path to the ecommerce checkout page showing basket that contains specified products.
|
||||
@@ -153,10 +156,12 @@ class EcommerceService:
|
||||
"""
|
||||
Returns the URL for the user to upgrade, or None if not applicable.
|
||||
"""
|
||||
course_run_key = str(course_key)
|
||||
|
||||
verified_mode = CourseMode.verified_mode_for_course(course_key)
|
||||
if verified_mode:
|
||||
if self.is_enabled(user):
|
||||
return self.get_checkout_page_url(verified_mode.sku)
|
||||
return self.get_checkout_page_url(verified_mode.sku, course_run_keys=[course_run_key])
|
||||
else:
|
||||
return reverse('dashboard')
|
||||
return None
|
||||
|
||||
@@ -825,9 +825,13 @@ def course_about(request, course_id): # pylint: disable=too-many-statements
|
||||
single_paid_mode = modes.get(CourseMode.PROFESSIONAL)
|
||||
|
||||
if single_paid_mode and single_paid_mode.sku:
|
||||
ecommerce_checkout_link = ecomm_service.get_checkout_page_url(single_paid_mode.sku)
|
||||
ecommerce_checkout_link = ecomm_service.get_checkout_page_url(
|
||||
single_paid_mode.sku, course_run_keys=[course_id]
|
||||
)
|
||||
if single_paid_mode and single_paid_mode.bulk_sku:
|
||||
ecommerce_bulk_checkout_link = ecomm_service.get_checkout_page_url(single_paid_mode.bulk_sku)
|
||||
ecommerce_bulk_checkout_link = ecomm_service.get_checkout_page_url(
|
||||
single_paid_mode.bulk_sku, course_run_keys=[course_id]
|
||||
)
|
||||
|
||||
registration_price, course_price = get_course_prices(course) # lint-amnesty, pylint: disable=unused-variable
|
||||
|
||||
|
||||
@@ -503,7 +503,8 @@ class PayAndVerifyView(View):
|
||||
if ecommerce_service.is_enabled(user):
|
||||
url = ecommerce_service.get_checkout_page_url(
|
||||
sku,
|
||||
catalog=self.request.GET.get('catalog')
|
||||
catalog=self.request.GET.get('catalog'),
|
||||
course_run_keys=[str(course_key)]
|
||||
)
|
||||
|
||||
# Redirect if necessary, otherwise implicitly return None
|
||||
|
||||
@@ -631,7 +631,9 @@ class ProgramDataExtender:
|
||||
ecommerce = EcommerceService()
|
||||
sku = getattr(required_mode, "sku", None)
|
||||
if ecommerce.is_enabled(self.user) and sku:
|
||||
run_mode["upgrade_url"] = ecommerce.get_checkout_page_url(required_mode.sku)
|
||||
run_mode["upgrade_url"] = ecommerce.get_checkout_page_url(
|
||||
required_mode.sku, course_run_keys=[self.course_run_key]
|
||||
)
|
||||
else:
|
||||
run_mode["upgrade_url"] = None
|
||||
else:
|
||||
|
||||
@@ -91,7 +91,7 @@ class ContentTypeGatingPartition(UserPartition):
|
||||
if expiration_datetime and expiration_datetime < datetime.datetime.now(pytz.UTC):
|
||||
ecommerce_checkout_link = None
|
||||
else:
|
||||
ecommerce_checkout_link = self._get_checkout_link(user, verified_mode.sku)
|
||||
ecommerce_checkout_link = self._get_checkout_link(user, verified_mode.sku, str(course_key))
|
||||
|
||||
request = crum.get_current_request()
|
||||
|
||||
@@ -118,11 +118,11 @@ class ContentTypeGatingPartition(UserPartition):
|
||||
else:
|
||||
return _("Graded assessments are available to Verified Track learners. Upgrade to Unlock.")
|
||||
|
||||
def _get_checkout_link(self, user, sku):
|
||||
def _get_checkout_link(self, user, sku, course_run_key):
|
||||
ecomm_service = EcommerceService()
|
||||
ecommerce_checkout = ecomm_service.is_enabled(user)
|
||||
if ecommerce_checkout and sku:
|
||||
return ecomm_service.get_checkout_page_url(sku) or ''
|
||||
return ecomm_service.get_checkout_page_url(sku, course_run_keys=[course_run_key]) or ''
|
||||
|
||||
def _get_course_key_from_course_block(self, block):
|
||||
"""
|
||||
|
||||
@@ -8,6 +8,7 @@ import pytz
|
||||
from django.conf import settings
|
||||
from django.utils.translation import get_language
|
||||
from django.utils.translation import gettext as _
|
||||
from edx_django_utils.plugins import pluggable_override
|
||||
|
||||
from common.djangoapps.course_modes.models import format_course_price, get_course_prices
|
||||
from lms.djangoapps.experiments.models import ExperimentData
|
||||
@@ -73,6 +74,7 @@ def _get_discount_prices(user, course, assume_discount=False):
|
||||
return format_course_price(base_price), None, None
|
||||
|
||||
|
||||
@pluggable_override("OVERRIDE_GENERATE_OFFER_DATA")
|
||||
def generate_offer_data(user, course):
|
||||
"""
|
||||
Create a dictionary of information about the current discount offer.
|
||||
|
||||
Reference in New Issue
Block a user