def is_mode_upsellable(user, enrollment, course=None): """ Return whether the user is enrolled in a mode that can be upselled to another mode, usually audit upselled to verified. The partition code allows this function to more accurately return results for masquerading users. Arguments: user (:class:`.AuthUser`): The user from the request.user property enrollment (:class:`.CourseEnrollment`): The enrollment under consideration. course (:class:`.ModulestoreCourse`): Optional passed in modulestore course. If provided, it is expected to correspond to `enrollment.course.id`. If not provided, the course will be loaded from the modulestore. We use the course to retrieve user partitions when calculating whether the upgrade link will be shown. """ partition_service = PartitionService(enrollment.course.id, course=course) enrollment_track_partition = partition_service.get_user_partition( ENROLLMENT_TRACK_PARTITION_ID) group = partition_service.get_group(user, enrollment_track_partition) current_mode = None if group: try: current_mode = [ mode.get('slug') for mode in settings.COURSE_ENROLLMENT_MODES.values() if mode['id'] == group.id ].pop() except IndexError: pass upsellable_mode = not current_mode or current_mode in CourseMode.UPSELL_TO_VERIFIED_MODES return upsellable_mode
def can_show_verified_upgrade(user, enrollment, course=None): """ Return whether this user can be shown upgrade message. Arguments: user (:class:`.AuthUser`): The user from the request.user property enrollment (:class:`.CourseEnrollment`): The enrollment under consideration. If None, then the enrollment is considered to be upgradeable. course (:class:`.ModulestoreCourse`): Optional passed in modulestore course. If provided, it is expected to correspond to `enrollment.course.id`. If not provided, the course will be loaded from the modulestore. We use the course to retrieve user partitions when calculating whether the upgrade link will be shown. """ # Return `true` if user is not enrolled in course if enrollment is None: return False partition_service = PartitionService(enrollment.course.id, course=course) enrollment_track_partition = partition_service.get_user_partition( ENROLLMENT_TRACK_PARTITION_ID) group = partition_service.get_group(user, enrollment_track_partition) current_mode = None if group: try: current_mode = [ mode.get('slug') for mode in settings.COURSE_ENROLLMENT_MODES.values() if mode['id'] == group.id ].pop() except IndexError: pass upgradable_mode = not current_mode or current_mode in CourseMode.UPSELL_TO_VERIFIED_MODES if not upgradable_mode: return False upgrade_deadline = enrollment.upgrade_deadline if upgrade_deadline is None: return False if datetime.datetime.now(utc).date() > upgrade_deadline.date(): return False # Show the summary if user enrollment is in which allow user to upsell return enrollment.is_active and enrollment.mode in CourseMode.UPSELL_TO_VERIFIED_MODES
def can_show_verified_upgrade(user, course_id, enrollment): """ Check if we are able to show verified upgrade message based on the enrollment and current user partition """ if not enrollment: return False partition_service = PartitionService(course_id) enrollment_track_partition = partition_service.get_user_partition( ENROLLMENT_TRACK_PARTITION_ID) group = partition_service.get_group(user, enrollment_track_partition) current_mode = None if group: try: current_mode = [ mode.get('slug') for mode in settings.COURSE_ENROLLMENT_MODES.values() if mode['id'] == group.id ].pop() except IndexError: pass upgradable_mode = not current_mode or current_mode in CourseMode.UPSELL_TO_VERIFIED_MODES return upgradable_mode and verified_upgrade_link_is_valid(enrollment)