Commit c67ccc58 by Zia Fazal Committed by Jonathan Piacenti

ziafazal/api-fix-users-grade-complete-count: fixed count exceeding total participants

and users_grade_average float conversion exception when average is None
parent c651642d
......@@ -409,3 +409,10 @@ class OrganizationsApiTests(ModuleStoreTestCase):
response = self.do_get(filtered_metrics_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['users_grade_complete_count'], 6)
courses = {'courses': '{}'.format(self.course.id)}
filtered_metrics_uri = '{}?{}'.format(metrics_uri, urlencode(courses))
response = self.do_get(filtered_metrics_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['users_grade_complete_count'], 0)
self.assertEqual(response.data['users_grade_average'], 0)
......@@ -33,8 +33,9 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
Provide statistical information for the specified Organization
"""
response_data = {}
grade_avg = 0
grade_complete_match_range = getattr(settings, 'GRADEBOOK_GRADE_COMPLETE_PROFORMA_MATCH_RANGE', 0.01)
org_user_grades = StudentGradebook.objects.filter(user__organizations=pk)
org_user_grades = StudentGradebook.objects.filter(user__organizations=pk, user__is_active=True)
courses_filter = request.QUERY_PARAMS.get('courses', None)
if courses_filter:
upper_bound = getattr(settings, 'API_LOOKUP_UPPER_BOUND', 100)
......@@ -45,7 +46,9 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
org_user_grades = org_user_grades.filter(course_id__in=courses)
users_grade_average = org_user_grades.aggregate(Avg('grade'))
response_data['users_grade_average'] = float('{0:.3f}'.format(float(users_grade_average['grade__avg'])))
if users_grade_average['grade__avg']:
grade_avg = float('{0:.3f}'.format(float(users_grade_average['grade__avg'])))
response_data['users_grade_average'] = grade_avg
users_grade_complete_count = org_user_grades\
.filter(proforma_grade__lte=F('grade') + grade_complete_match_range, proforma_grade__gt=0).count()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment