38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from dbmodel import *
|
|
from grader import get_grader
|
|
from markdown_pdf import Section
|
|
|
|
|
|
def create_study_pdf(filter: list[int]) -> list[Section]:
|
|
sections = list()
|
|
text = ''
|
|
|
|
data = {
|
|
study: list(Student.select().where(Student.study_id == study.id))
|
|
for study in filter
|
|
}
|
|
|
|
max_points = [lecture.points for lecture in Lecture.select().where(Lecture.class_id == next(iter(data.values()))[0].class_id)]
|
|
max = sum(max_points)
|
|
|
|
for study, students in data.items():
|
|
text += f'## {study.name}\n'
|
|
text += f'#### Number of Students: {Student.select().where(Student.study_id == study.id).count()}\n'
|
|
text += '|Student|Points|Percentage|Passed?|\n'
|
|
text += '|-|-|-|-|\n'
|
|
|
|
for student in students:
|
|
|
|
grader = get_grader(student.grader)
|
|
overall_points = [sub.points for sub in Submission.select().where(Submission.student_id == student.id)]
|
|
passed = grader.get_final_grade(overall_points, max_points)
|
|
points = sum(overall_points)
|
|
points = int(points) if points.is_integer() else points
|
|
|
|
text += f'|{student.prename} {student.surname}|{points}/{max}|{points/max:.1%}|{passed}|\n'
|
|
|
|
sections.append(Section(text))
|
|
text = ''
|
|
|
|
return sections
|