utils.py 2.43 KB
Newer Older
1 2 3 4 5
from student.models import CourseEnrollment
from course_modes.models import (
    get_cosmetic_verified_display_price
)
from courseware.date_summary import (
6
    verified_upgrade_deadline_link, verified_upgrade_link_is_valid
7 8 9
)


10
def check_and_get_upgrade_link_and_date(user, enrollment=None, course=None):
11 12 13 14
    """
    For an authenticated user, return a link to allow them to upgrade
    in the specified course.
    """
15 16
    if enrollment is None and course is None:
        raise ValueError("Must specify either an enrollment or a course")
17

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
    if enrollment:
        if course is None:
            course = enrollment.course
        elif enrollment.course_id != course.id:
            raise ValueError("{} refers to a different course than {} which was supplied".format(
                enrollment, course
            ))

        if enrollment.user_id != user.id:
            raise ValueError("{} refers to a different user than {} which was supplied".format(
                enrollment, user
            ))

    if enrollment is None:
        enrollment = CourseEnrollment.get_enrollment(user, course.id)

    if user.is_authenticated() and verified_upgrade_link_is_valid(enrollment):
        return (
            verified_upgrade_deadline_link(user, course),
            enrollment.upgrade_deadline
        )

    return (None, None)
41 42


43
def get_experiment_user_metadata_context(course, user):
44 45 46 47 48
    """
    Return a context dictionary with the keys used by the user_metadata.html.
    """
    enrollment_mode = None
    enrollment_time = None
49
    enrollment = None
50
    try:
51 52 53
        enrollment = CourseEnrollment.objects.select_related(
            'course'
        ).get(user_id=user.id, course_id=course.id)
54 55 56 57 58 59
        if enrollment.is_active:
            enrollment_mode = enrollment.mode
            enrollment_time = enrollment.created
    except CourseEnrollment.DoesNotExist:
        pass  # Not enrolled, used the default None values

60
    upgrade_link, upgrade_date = check_and_get_upgrade_link_and_date(user, enrollment, course)
61 62

    return {
63
        'upgrade_link': upgrade_link,
64
        'upgrade_price': unicode(get_cosmetic_verified_display_price(course)),
65 66 67
        'enrollment_mode': enrollment_mode,
        'enrollment_time': enrollment_time,
        'pacing_type': 'self_paced' if course.self_paced else 'instructor_paced',
68
        'upgrade_deadline': upgrade_date,
69
        'course_key': course.id,
70
        'course_start': course.start,
71
        'course_end': course.end,
72
    }