Example #1
0
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)
Example #2
0
    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)
Example #4
0
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
Example #5
0
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