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