Skip to content

Commit b746349

Browse files
authored
Merge pull request #1107 from thecourseforum/sb_fix_partial_credits
fix: server 500 on partial credits for schedules
2 parents 6e8383a + dc0de26 commit b746349

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

tcf_website/models/models.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"""TCF Database models."""
33

44
import math
5+
from decimal import Decimal
56

67
from django.contrib.auth.models import AbstractUser
78
from django.contrib.postgres.aggregates.general import ArrayAgg
@@ -1522,7 +1523,11 @@ def get_schedule(self):
15221523
ret = [0] * 5 # intialize return array for the schedule, which will have 5 fields
15231524
ret[0] = courses # list of courses in the schedule
15241525
# pylint: disable=not-an-iterable
1525-
ret[1] = sum(int(course.section.units) for course in ret[0]) # total amount of credits
1526+
ret[1] = sum(
1527+
Decimal(course.section.units)
1528+
for course in ret[0]
1529+
if course.section.units
1530+
)
15261531
ret[2] = (
15271532
self.average_rating_for_schedule()
15281533
) # average rating for the courses in this schedule
@@ -1533,7 +1538,7 @@ def get_schedule(self):
15331538
# calculate weighted gpa based on credits
15341539
for course in courses:
15351540
course_gpa = course.gpa
1536-
course_credits = course.credits if course.credits else 0
1541+
course_credits = float(course.credits) if course.credits else 0.0
15371542

15381543
if not course_gpa:
15391544
continue # pass a given course if there is no gpa for it
@@ -1555,7 +1560,7 @@ def get_scheduled_courses(self):
15551560
queryset = (
15561561
self.scheduledcourse_set.select_related("section", "instructor")
15571562
.annotate(
1558-
credits=Cast("section__units", output_field=models.IntegerField()),
1563+
credits=Cast("section__units", output_field=models.DecimalField(max_digits=3, decimal_places=2)),
15591564
avg_recommendability=Coalesce(
15601565
models.Avg(
15611566
"section__course__review__recommendability",

tcf_website/templates/schedule/schedule.html

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ <h6>{{ course.instructor|remove_email }}</h6>
117117
<i class="fas fa-clock"></i>&nbsp;Units
118118
</small>
119119
<p class="mb-0 info text-break">
120-
{% if course.credits %}
120+
{% if course.credits and course.credits != 0.0 %}
121121
{{ course.credits }}
122122
{% else %}
123123
&mdash;
@@ -180,7 +180,7 @@ <h6>{{ course.instructor|remove_email }}</h6>
180180
let courses = this_schedule.querySelectorAll('.schedule_course_card');
181181
courses.forEach(course => {
182182
let courseRating = parseFloat(course.getAttribute("course_rating"));
183-
let courseCredits = parseInt(course.getAttribute("course_credits"));
183+
let courseCredits = parseFloat(course.getAttribute("course_credits"));
184184
let courseDifficulty = parseFloat(course.getAttribute("course_diff"));
185185
let courseGpa = parseFloat(course.getAttribute("course_gpa"));
186186
if (!isNaN(courseRating) || courseRating == 0) {
@@ -202,11 +202,12 @@ <h6>{{ course.instructor|remove_email }}</h6>
202202
let final_gpa = gpa_credits ? (cumulative_grade_point / gpa_credits).toFixed(2) : "\u2014";
203203
let final_rating = r_count ? (rating / r_count).toFixed(2) : "\u2014";
204204
let final_difficulty = d_count ? (difficulty / d_count).toFixed(2) : "\u2014";
205+
let final_credit = credit ? (credit).toFixed(2) : "\u2014";
205206

206207
this_schedule.querySelector('#ScheduleGPA-{{schedule.id}}').innerText = final_gpa;
207208
this_schedule.querySelector('#ScheduleRating-{{schedule.id}}').innerText = final_rating;
208209
this_schedule.querySelector('#ScheduleDifficulty-{{schedule.id}}').innerText = final_difficulty;
209-
this_schedule.querySelector('#ScheduleCredits-{{schedule.id}}').innerText = credit;
210+
this_schedule.querySelector('#ScheduleCredits-{{schedule.id}}').innerText = final_credit;
210211
}
211212

212213
function addCourse(course) {
@@ -222,6 +223,7 @@ <h6>{{ course.instructor|remove_email }}</h6>
222223
let gpa = isNaN(parseFloat(course.gpa)) ? "\u2014" : parseFloat(course.gpa).toFixed(2);
223224
let rating = isNaN(parseFloat(course.rating)) ? "\u2014" : parseFloat(course.rating).toFixed(2);
224225
let difficulty = isNaN(parseFloat(course.difficulty)) ? "\u2014" : parseFloat(course.difficulty).toFixed(2);
226+
let credits = isNaN(parseFloat(course.credits)) || course.credits == 0.0 ? "\u2014" : parseFloat(course.credits).toFixed(2);
225227
const course_name = document.getElementById('course-name-value').textContent.split('|')[0].trim();
226228

227229
let courseCardHTML = `
@@ -263,7 +265,7 @@ <h6>${course.instructor_name}</h6>
263265
<small class="mb-0 text-uppercase">
264266
<i class="fas fa-clock"></i>&nbsp;Units
265267
</small>
266-
<p class="mb-0 info text-break">${course.credits}</p>
268+
<p class="mb-0 info text-break">${credits}</p>
267269
</div>
268270
<div class="col-4 col-lg-3 col-md-2 text-nowrap">
269271
<small class="mb-0 text-uppercase">

0 commit comments

Comments
 (0)