Skip to content

Commit

Permalink
Update the Program record to display grades properly (#5341)
Browse files Browse the repository at this point in the history
  • Loading branch information
annagav authored May 18, 2023
1 parent 1cb89ea commit 65e38f1
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 10 deletions.
11 changes: 9 additions & 2 deletions certificates/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,12 +259,19 @@ def get_context_data(self, **kwargs):
for course in courses:
best_grade = mmtrack.get_best_final_grade_for_course(course)
combined_grade = CombinedFinalGrade.objects.filter(user=user, course=course).first()
letter_grade = convert_to_letter(combined_grade.grade) if combined_grade else ""
earned = get_certificate_url(mmtrack, course)
if best_grade and best_grade.is_already_combined:
combined_grade = best_grade
letter_grade = convert_to_letter(best_grade.grade_percent)
earned = best_grade.passed

context['courses'].append({
"title": course.title,
"edx_course_key": best_grade.course_run.edx_course_key if best_grade else "",
"attempts": mmtrack.get_course_proctorate_exam_results(course).count(),
"letter_grade": convert_to_letter(combined_grade.grade) if combined_grade else "",
"status": "Earned" if get_certificate_url(mmtrack, course) else "Not Earned",
"letter_grade": letter_grade,
"status": "Earned" if earned else "Not Earned",
"date_earned": combined_grade.created_on if combined_grade else "",
"overall_grade": mmtrack.get_overall_final_grade_for_course(course),
"elective_tag": "elective" if (getattr(course, "electivecourse", None) is not None) else "core"
Expand Down
11 changes: 4 additions & 7 deletions dashboard/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@
from decimal import Decimal
from math import floor

import datetime

import pytz
from django.db import transaction
from django.db.models import Q, Count
from django.urls import reverse
Expand All @@ -16,7 +13,7 @@
from dashboard.api_edx_cache import CachedEdxUserData
from dashboard.models import ProgramEnrollment
from ecommerce.models import Order, Line
from grades.constants import FinalGradeStatus
from grades.constants import FinalGradeStatus, NEW_COMBINED_FINAL_GRADES_DATE
from grades.models import (
FinalGrade,
ProctoredExamGrade,
Expand Down Expand Up @@ -389,7 +386,7 @@ def has_passed_course(self, course):
return FinalGrade.objects.filter(
user=self.user,
course_run__course_id=course.id,
course_run__start_date__gt=datetime.datetime(2022, 9, 1, tzinfo=pytz.UTC),
course_run__start_date__gt=NEW_COMBINED_FINAL_GRADES_DATE,
).passed().exists()
else:
return self.final_grade_qset.filter(course_run__course_id=course.id).passed().exists()
Expand Down Expand Up @@ -453,7 +450,7 @@ def get_overall_final_grade_for_course(self, course):
best_grade = self.get_best_final_grade_for_course(course)
if best_grade is None:
return ""
if not course.has_exam:
if not course.has_exam or best_grade.is_already_combined:
return str(round(best_grade.grade_percent))

combined_grade = CombinedFinalGrade.objects.filter(user=self.user, course=course)
Expand Down Expand Up @@ -567,7 +564,7 @@ def get_number_of_passed_courses(self, course_ids):
course_ids_passing_grade = FinalGrade.objects.filter(
user=self.user,
course_run__course_id__in=course_ids,
course_run__start_date__gt=datetime.datetime(2022, 9, 1, tzinfo=pytz.UTC),
course_run__start_date__gt=NEW_COMBINED_FINAL_GRADES_DATE,
).passed().values_list('course_run__course__id', flat=True).distinct()
num_certs = MicromastersCourseCertificate.objects.filter(
user=self.user,
Expand Down
4 changes: 4 additions & 0 deletions grades/constants.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
"""
Constants for the grades app
"""
import datetime
import pytz

COURSE_GRADE_WEIGHT = 0.4
EXAM_GRADE_WEIGHT = 0.6

NEW_COMBINED_FINAL_GRADES_DATE = datetime.datetime(2022, 9, 1, tzinfo=pytz.UTC)


class FinalGradeStatus:
"""
Expand Down
9 changes: 8 additions & 1 deletion grades/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
)
from exams.models import ExamRun
from exams.constants import EXAM_GRADE_PASS, EXAM_GRADE_FAIL
from grades.constants import FinalGradeStatus
from grades.constants import FinalGradeStatus, NEW_COMBINED_FINAL_GRADES_DATE
from micromasters.models import (
AuditableModel,
AuditModel,
Expand Down Expand Up @@ -102,6 +102,13 @@ def grade_percent(self):
"""Returns the grade field value as a number out of 100 (or None if the value is None)"""
return self.grade * 100 if self.grade is not None else None

@property
def is_already_combined(self):
"""
Returns true if this grade is for a course run that started after Sept 1st, 2022
"""
return self.course_run.start_date > NEW_COMBINED_FINAL_GRADES_DATE

@classmethod
def get_frozen_users(cls, course_run):
"""
Expand Down

0 comments on commit 65e38f1

Please sign in to comment.