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): ...@@ -409,3 +409,10 @@ class OrganizationsApiTests(ModuleStoreTestCase):
response = self.do_get(filtered_metrics_uri) response = self.do_get(filtered_metrics_uri)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['users_grade_complete_count'], 6) 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): ...@@ -33,8 +33,9 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
Provide statistical information for the specified Organization Provide statistical information for the specified Organization
""" """
response_data = {} response_data = {}
grade_avg = 0
grade_complete_match_range = getattr(settings, 'GRADEBOOK_GRADE_COMPLETE_PROFORMA_MATCH_RANGE', 0.01) 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) courses_filter = request.QUERY_PARAMS.get('courses', None)
if courses_filter: if courses_filter:
upper_bound = getattr(settings, 'API_LOOKUP_UPPER_BOUND', 100) upper_bound = getattr(settings, 'API_LOOKUP_UPPER_BOUND', 100)
...@@ -45,7 +46,9 @@ class OrganizationsViewSet(viewsets.ModelViewSet): ...@@ -45,7 +46,9 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
org_user_grades = org_user_grades.filter(course_id__in=courses) org_user_grades = org_user_grades.filter(course_id__in=courses)
users_grade_average = org_user_grades.aggregate(Avg('grade')) 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\ users_grade_complete_count = org_user_grades\
.filter(proforma_grade__lte=F('grade') + grade_complete_match_range, proforma_grade__gt=0).count() .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