def format_strikeout_price(user, course, base_price=None, check_for_discount=True): """ Return a formatted price, including a struck-out original price if a discount applies, and also whether a discount was applied, as the tuple (formatted_price, has_discount). """ if base_price is None: base_price = get_course_prices(course, verified_only=True)[0] original_price = format_course_price(base_price) if not check_for_discount or can_receive_discount(user, course): discount_price = base_price * ( (100.0 - discount_percentage(course)) / 100) if discount_price == int(discount_price): discount_price = format_course_price( "{:0.0f}".format(discount_price)) else: discount_price = format_course_price( "{:0.2f}".format(discount_price)) # Separate out this string because it has a lot of syntax but no actual information for # translators to translate formatted_discount_price = HTML( u"{s_dp}{discount_price}{e_p} {s_st}{s_op}{original_price}{e_p}{e_st}" ).format( original_price=original_price, discount_price=discount_price, s_op=HTML("<span class='price original'>"), s_dp=HTML("<span class='price discount'>"), s_st=HTML("<del aria-hidden='true'>"), e_p=HTML("</span>"), e_st=HTML("</del>"), ) return (HTML( _(u"{s_sr}Original price: {s_op}{original_price}{e_p}, discount price: {e_sr}{formatted_discount_price}" )).format( original_price=original_price, formatted_discount_price=formatted_discount_price, s_sr=HTML("<span class='sr-only'>"), s_op=HTML("<span class='price original'>"), e_p=HTML("</span>"), e_sr=HTML("</span>"), ), True) else: return (HTML(u"<span class='price'>{}</span>").format(original_price), False)
def build_email_context(self): schedules = Schedule.objects.select_related( 'enrollment__user__profile', 'enrollment__course', ).prefetch_related( Prefetch( 'enrollment__course__modes', queryset=CourseMode.objects.filter(mode_slug=CourseMode.VERIFIED), to_attr='verified_modes' ), Prefetch( 'enrollment__user__preferences', queryset=UserPreference.objects.filter(key='time_zone'), to_attr='tzprefs' ), ).filter( upgrade_deadline__year=self.schedule_deadline.year, upgrade_deadline__month=self.schedule_deadline.month, upgrade_deadline__day=self.schedule_deadline.day, ) if "read_replica" in settings.DATABASES: schedules = schedules.using("read_replica") for schedule in schedules: enrollment = schedule.enrollment user = enrollment.user user_time_zone = tzutc() for preference in user.tzprefs: user_time_zone = gettz(preference.value) course_id_str = str(enrollment.course_id) course = enrollment.course course_root = reverse('course_root', kwargs={'course_id': urlquote(course_id_str)}) def absolute_url(relative_path): return u'{}{}'.format(settings.LMS_ROOT_URL, relative_path) template_context = { 'user_full_name': user.profile.name, 'user_personal_address': user.profile.name if user.profile.name else user.username, 'user_username': user.username, 'user_time_zone': user_time_zone, 'user_schedule_start_time': schedule.start, 'user_schedule_verified_upgrade_deadline_time': schedule.upgrade_deadline, 'course_id': course_id_str, 'course_title': course.display_name, 'course_url': absolute_url(course_root), 'course_image_url': absolute_url(course.course_image_url), 'course_end_time': course.end, 'course_verified_upgrade_url': check_and_get_upgrade_link(course, user), 'course_verified_upgrade_price': format_course_price(course.verified_modes[0].min_price), } yield (user, course.language, template_context)
def build_email_context(self): schedules = Schedule.objects.select_related( 'enrollment__user__profile', 'enrollment__course', ).prefetch_related( Prefetch( 'enrollment__course__modes', queryset=CourseMode.objects.filter(mode_slug=CourseMode.VERIFIED), to_attr='verified_modes' ), Prefetch( 'enrollment__user__preferences', queryset=UserPreference.objects.filter(key='time_zone'), to_attr='tzprefs' ), ).filter( upgrade_deadline__year=self.schedule_deadline.year, upgrade_deadline__month=self.schedule_deadline.month, upgrade_deadline__day=self.schedule_deadline.day, ) if "read_replica" in settings.DATABASES: schedules = schedules.using("read_replica") for schedule in schedules: enrollment = schedule.enrollment user = enrollment.user user_time_zone = tzutc() for preference in user.tzprefs: user_time_zone = gettz(preference.value) course_id_str = str(enrollment.course_id) course = enrollment.course course_root = reverse('course_root', kwargs={'course_id': urlquote(course_id_str)}) def absolute_url(relative_path): return u'{}{}'.format(settings.LMS_ROOT_URL, relative_path) template_context = { 'user_full_name': user.profile.name, 'user_personal_address': user.profile.name if user.profile.name else user.username, 'user_username': user.username, 'user_time_zone': user_time_zone, 'user_schedule_start_time': schedule.start, 'user_schedule_verified_upgrade_deadline_time': schedule.upgrade_deadline, 'course_id': course_id_str, 'course_title': course.display_name, 'course_url': absolute_url(course_root), 'course_image_url': absolute_url(course.course_image_url), 'course_end_time': course.end, 'course_verified_upgrade_url': check_and_get_upgrade_link(course, user), 'course_verified_upgrade_price': format_course_price(course.verified_modes[0].min_price), } yield (user, course.language, template_context)
def get_program_price_and_skus(courses): """ Get the total program price and purchase skus from these courses in the program """ program_price = 0 skus = [] for course in courses: course_price, course_sku = get_course_entitlement_price_and_sku(course) if course_price is not None and course_sku is not None: program_price = Decimal(program_price) + Decimal(course_price) skus.append(course_sku) if program_price <= 0: program_price = None skus = None else: program_price = format_course_price(program_price) program_price = six.text_type(program_price) return program_price, skus
def get_program_price_and_skus(courses): """ Get the total program price and purchase skus from these courses in the program """ program_price = 0 skus = [] for course in courses: course_price, course_sku = get_course_entitlement_price_and_sku(course) if course_price is not None and course_sku is not None: program_price = Decimal(program_price) + Decimal(course_price) skus.append(course_sku) if program_price <= 0: program_price = None skus = None else: program_price = format_course_price(program_price) program_price = six.text_type(program_price) return program_price, skus