2025-03-24 14:34:56 +01:00

116 lines
3.6 KiB
Python

from django.shortcuts import render
from django.template.defaulttags import register
from django.http import Http404
from django.contrib.auth.decorators import login_required
from .models import ExamLines, Lecturer, Subject, Exam, Student, sort_and_group_datetime
import datetime as dt
@login_required
def lecturer(request):
lecturers = Lecturer.objects.all()
context = {"lecturers": lecturers}
return render(request, "pruefplan/lecturer.html", context)
@login_required
def subject(request):
subjects = Subject.objects.all()
context = {"subjects": subjects}
return render(request, "pruefplan/subject.html", context)
@login_required
def student(request):
students = Student.objects.all()
context = {"students": students}
return render(request, "pruefplan/student.html", context)
@login_required
def exam(request):
exams = Exam.objects.all()
supervisorSetDict = {}
for ex in exams:
examSupervisors = []
for partialExam in ex.partialexam_set.all():
for examExe in partialExam.examexecution_set.all():
supervisor = (
examExe.lecturer.firstName + " " + examExe.lecturer.lastName
)
if supervisor not in examSupervisors:
examSupervisors.append(supervisor)
supervisorSetDict[ex.identification] = examSupervisors
context = {"exams": exams, "supervisorSetDict": supervisorSetDict}
return render(request, "pruefplan/exam.html", context)
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
def examsForLecturer(request, lecturer_id):
lecturer = Lecturer.objects.filter(pk=lecturer_id).first()
if lecturer is not None:
lecExamExes = lecturer.examexecution_set.all()
lecAttendance = lecturer.attendance_set.all()
lecExamLines = mergeModels(lecExamExes, lecAttendance)
context = {
"lecturer": lecturer,
"lecExamLines": lecExamLines,
"lecExamExes": lecExamExes,
}
return render(request, "pruefplan/lecturerExam.html", context)
else:
raise Http404("Dozentenkennung ungültig.")
def examsForStudent(request, student_id):
student = Student.objects.all().filter(matrikel=student_id).first()
if student is not None:
exams = student.exams.all()
context = {"student": student, "exams": exams}
return render(request, "pruefplan/studentExam.html", context)
else:
raise Http404("Matrikelnummer ungültig.")
def mergeModels(lecExamExes, lecAttendance):
result = [
ExamLines(
date=examExes.partialExam.exam.date,
time=examExes.partialExam.exam.time,
weekday=examExes.partialExam.exam.weekday,
location=examExes.location,
subjectIds=examExes.subjectIds,
examIdent=examExes.partialExam.identification,
examStudCound=examExes.partialExam.regStudCount,
supervisorType=examExes.supervisorType,
executionSet=list(examExes.partialExam.examexecution_set.all()),
partialExamIdent=examExes.partialExam.exam.identification,
)
for examExes in lecExamExes
]
result += [
ExamLines(
date=attendance.date,
time=attendance.time,
weekday=attendance.weekday,
location=None,
subjectIds=None,
examIdent=None,
examStudCound=None,
supervisorType="PRÄSENZ",
executionSet=None,
partialExamIdent=None,
)
for attendance in lecAttendance
]
result = sort_and_group_datetime(result)
return result