def _get_certificates_for_user(self, username): """ Returns a user's viewable certificates sorted by course name. """ course_certificates = get_certificates_for_user(username) passing_certificates = {} for course_certificate in course_certificates: if course_certificate.get('is_passing', False): course_key = course_certificate['course_key'] passing_certificates[course_key] = course_certificate viewable_certificates = [] for course_key, course_overview in CourseOverview.get_from_ids( list(passing_certificates.keys())).items(): if not course_overview: # For deleted XML courses in which learners have a valid certificate. # i.e. MITx/7.00x/2013_Spring course_overview = self._get_pseudo_course_overview(course_key) if certificates_viewable_for_course(course_overview): course_certificate = passing_certificates[course_key] # add certificate into viewable certificate list only if it's a PDF certificate # or there is an active certificate configuration. if course_certificate[ 'is_pdf_certificate'] or course_overview.has_any_active_web_certificate: course_certificate[ 'course_display_name'] = course_overview.display_name_with_default course_certificate[ 'course_organization'] = course_overview.display_org_with_default viewable_certificates.append(course_certificate) viewable_certificates.sort( key=lambda certificate: certificate['created']) return viewable_certificates
def _get_certificates_for_user(self, username): """ Returns a user's viewable certificates sorted by course name. """ course_certificates = get_certificates_for_user(username) passing_certificates = {} for course_certificate in course_certificates: if course_certificate.get('is_passing', False): course_key = course_certificate['course_key'] passing_certificates[course_key] = course_certificate viewable_certificates = [] for course_key, course_overview in CourseOverview.get_from_ids( list(passing_certificates.keys())).items(): if certificates_viewable_for_course(course_overview): course_certificate = passing_certificates[course_key] course_certificate[ 'course_display_name'] = course_overview.display_name_with_default course_certificate[ 'course_organization'] = course_overview.display_org_with_default viewable_certificates.append(course_certificate) viewable_certificates.sort( key=lambda certificate: certificate['created']) return viewable_certificates
def get_course_overviews_from_ids(course_ids): """ Return course overviews for the specified course ids. Params: course_ids (iterable[CourseKey]) Returns: dict[CourseKey, CourseOverview|None] """ return CourseOverview.get_from_ids(course_ids)
def prefetch_courses(persistent_course_grades): """ Prefetch courses from the list of course_ids present in the persistent_course_grades. Arguments: persistent_course_grades (list): A list of PersistentCourseGrade. Returns: (dict): A dictionary containing course_id to course_overview mapping. """ return CourseOverview.get_from_ids( [grade.course_id for grade in persistent_course_grades])
def get(self, request, program_uuid=None): """ Defines the GET endpoint for overviews of course enrollments for a user as part of a program. """ user = request.user self._check_program_enrollment_exists(user, program_uuid) course_run_keys = [ CourseKey.from_string(key) for key in course_run_keys_for_program(self.program) ] course_enrollments = CourseEnrollment.objects.filter( user=user, course_id__in=course_run_keys, mode__in=[CourseMode.VERIFIED, CourseMode.MASTERS], is_active=True, ) overviews = CourseOverview.get_from_ids(course_run_keys) course_run_resume_urls = get_resume_urls_for_enrollments( user, course_enrollments) course_runs = [] for enrollment in course_enrollments: overview = overviews[enrollment.course_id] certificate_info = get_certificate_for_user( user.username, enrollment.course_id) or {} course_run_dict = { 'course_run_id': enrollment.course_id, 'display_name': overview.display_name_with_default, 'course_run_status': get_course_run_status(overview, certificate_info), 'course_run_url': get_course_run_url(request, enrollment.course_id), 'start_date': overview.start, 'end_date': overview.end, 'due_dates': get_due_dates(request, enrollment.course_id, user), } emails_enabled = get_emails_enabled(user, enrollment.course_id) if emails_enabled is not None: course_run_dict['emails_enabled'] = emails_enabled if certificate_info.get('download_url'): course_run_dict[ 'certificate_download_url'] = request.build_absolute_uri( certificate_info['download_url']) if self.program['type'] == 'MicroMasters': course_run_dict['micromasters_title'] = self.program['title'] if course_run_resume_urls.get(enrollment.course_id): relative_resume_course_run_url = course_run_resume_urls.get( enrollment.course_id) course_run_dict[ 'resume_course_run_url'] = request.build_absolute_uri( relative_resume_course_run_url) course_runs.append(course_run_dict) serializer = CourseRunOverviewListSerializer( {'course_runs': course_runs}) return Response(serializer.data)