From 263cf647ad4630a4ac64e2ffa459f22cd18c1118 Mon Sep 17 00:00:00 2001 From: Han Su Kim Date: Tue, 6 May 2014 14:53:32 -0400 Subject: [PATCH] Added totals for different student tracks sorted the output, easier to read Add is_active filter to only generate for students enrolled Adding back total_enrollment Removing active filter Certs will generate for all users in the course, not just those "active" Typo Renaming headings to make more sense Renaming variables to match headings --- .../management/commands/gen_cert_report.py | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/lms/djangoapps/certificates/management/commands/gen_cert_report.py b/lms/djangoapps/certificates/management/commands/gen_cert_report.py index 54b30ca275..3122771ef3 100644 --- a/lms/djangoapps/certificates/management/commands/gen_cert_report.py +++ b/lms/djangoapps/certificates/management/commands/gen_cert_report.py @@ -61,11 +61,23 @@ class Command(BaseCommand): # find students who are active # enrolled students are always downloable + notpassing print "Looking up certificate states for {0}".format(course_id) - active_students = User.objects.filter( + enrolled_current = User.objects.filter( courseenrollment__course_id=course_id, courseenrollment__is_active=True) + enrolled_total = User.objects.filter( + courseenrollment__course_id=course_id) + verified_enrolled = GeneratedCertificate.objects.filter( + course_id__exact=course_id, mode__exact='verified') + honor_enrolled = GeneratedCertificate.objects.filter( + course_id__exact=course_id, mode__exact='honor') + audit_enrolled = GeneratedCertificate.objects.filter( + course_id__exact=course_id, mode__exact='audit') - cert_data[course_id] = {'active': active_students.count()} + cert_data[course_id] = {'enrolled_current': enrolled_current.count(), + 'enrolled_total': enrolled_total.count(), + 'verified_enrolled': verified_enrolled.count(), + 'honor_enrolled': honor_enrolled.count(), + 'audit_enrolled': audit_enrolled.count()} status_tally = GeneratedCertificate.objects.filter( course_id__exact=course_id).values('status').annotate( @@ -83,21 +95,21 @@ class Command(BaseCommand): for mode in mode_tally}) # all states we have seen far all courses - status_headings = set( + status_headings = sorted(set( [status for course in cert_data - for status in cert_data[course]]) + for status in cert_data[course]])) # print the heading for the report - print "{:>20}".format("course ID"), - print ' '.join(["{:>12}".format(heading) + print "{:>26}".format("course ID"), + print ' '.join(["{:>16}".format(heading) for heading in status_headings]) # print the report for course_id in cert_data: - print "{0:>20}".format(course_id[0:18]), + print "{0:>26}".format(course_id[0:24]), for heading in status_headings: if heading in cert_data[course_id]: - print "{:>12}".format(cert_data[course_id][heading]), + print "{:>16}".format(cert_data[course_id][heading]), else: - print " " * 12, + print " " * 16, print