learnlytics/learnlytics/pdf/study_pdf.py
2025-03-07 01:25:41 +01:00

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