116 lines
3.6 KiB
Python
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
|