Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def user_profile(request, id):
""" Show profile of any selected user """
if request.user.id == id:
return redirect("/profile/")
current_semester = Semester.objects.get(is_current_semester=True)
user = User.objects.get(pk=id)
if user.is_lecturer:
courses = Course.objects.filter(allocated_course__lecturer__pk=id).filter(semester=current_semester)
context = {
"user": user,
"courses": courses,
}
return render(request, 'account/user_profile.html', context)
elif user.is_student:
level = Student.objects.get(user__pk=id)
courses = TakenCourse.objects.filter(student__user__id=id, course__level=level.level)
context = {
"user_type": "student",
'courses': courses,
'level': level,
'user':user,
def view_result(request):
student = Student.objects.get(user__pk=request.user.id)
current_semester = Semester.objects.get(is_current_semester=True)
courses = TakenCourse.objects.filter(student__user__pk=request.user.id, course__level=student.level)
result = Result.objects.filter(student__user__pk=request.user.id)
current_semester_grades = {}
previousCGPA = 0
previousLEVEL = 0
for i in result:
if not int(i.level) - 100 == 0: # TODO think n check the logic
previousLEVEL = i.level
try:
a = Result.objects.get(student__user__pk=request.user.id, level=previousLEVEL, semester="Second")
previousCGPA = a.cgpa
break
except:
previousCGPA = 0
def add_score_for(request, id):
"""
Shows a page where a lecturer will add score for studens that are taking courses allocated to him
in a specific semester and session
"""
current_semester = Semester.objects.get(is_current_semester=True)
if request.method == 'GET':
courses = Course.objects.filter(allocated_course__lecturer__pk=request.user.id).filter(semester=current_semester)
course = Course.objects.get(pk=id)
students = TakenCourse.objects.filter(course__allocated_course__lecturer__pk=request.user.id).filter(course__id=id).filter(course__semester=current_semester)
context = {
"courses":courses,
"course": course,
"students":students,
}
return render(request, 'result/add_score_for.html', context)
if request.method == 'POST':
ids = ()
data = request.POST.copy()
data.pop('csrfmiddlewaretoken', None) # remove csrf_token
for key in data.keys():
def semester_update_view(request, pk):
semester = Semester.objects.get(pk=pk)
if request.method == 'POST':
if request.POST.get('is_current_semester') == 'True': # returns string of 'True' if the user selected yes for 'is current semester'
unset_semester = Semester.objects.get(is_current_semester=True)
unset_semester.is_current_semester = False
unset_semester.save()
unset_session = Session.objects.get(is_current_session=True)
unset_session.is_current_session = False
unset_session.save()
new_session = request.POST.get('session')
form = SemesterForm(request.POST, instance=semester)
if form.is_valid():
set_session = Session.objects.get(pk=new_session)
set_session.is_current_session = True
set_session.save()
form.save()
messages.success(request, 'Semester updated successfully !')
def course_registration_form(request):
current_semester = Semester.objects.get(is_current_semester=True)
current_session = Session.objects.get(is_current_session=True)
courses = TakenCourse.objects.filter(student__user__id=request.user.id)
fname = request.user.username + '.pdf'
fname = fname.replace("/", "-")
flocation = '/tmp/'+fname
doc = SimpleDocTemplate(flocation, rightMargin=15, leftMargin=15, topMargin=0, bottomMargin=0)
styles = getSampleStyleSheet()
Story = [Spacer(1,0.5)]
Story.append(Spacer(1,0.4*inch))
style = styles["Normal"]
style = getSampleStyleSheet()
normal = style["Normal"]
normal.alignment = TA_CENTER
normal.fontName = "Helvetica"
for key in data.keys():
ids = ids + (str(key),)
for s in range(0,len(ids)):
student = Student.objects.get(user__pk=request.user.id)
course = Course.objects.get(pk=ids[s])
obj = TakenCourse.objects.create(student=student, course=course)
obj.save()
messages.success(request, 'Courses Registered Successfully!')
return redirect('course_registration')
else:
student = Student.objects.get(user__pk=request.user.id)
taken_courses = TakenCourse.objects.filter(student__user__id=request.user.id)
t = ()
for i in taken_courses:
t += (i.course.pk,)
current_semester = Semester.objects.get(is_current_semester=True)
courses = Course.objects.filter(level=student.level).exclude(id__in=t)
all_courses = Course.objects.filter(level=student.level)
no_course_is_registered = False # Check if no course is registered
all_courses_are_registered = False
registered_courses = Course.objects.filter(level=student.level).filter(id__in=t)
if registered_courses.count() == 0: # Check if number of registered courses is 0
no_course_is_registered = True
if registered_courses.count() == all_courses.count():
all_courses_are_registered = True
total_first_semester_unit = 0
total_sec_semester_unit = 0
total_registered_unit = 0
def profile(request):
""" Show profile of any user that fire out the request """
current_semester = Semester.objects.get(is_current_semester=True)
if request.user.is_lecturer:
courses = Course.objects.filter(allocated_course__lecturer__pk=request.user.id).filter(semester=current_semester)
return render(request, 'account/profile.html', {"courses": courses,})
elif request.user.is_student:
level = Student.objects.get(user__pk=request.user.id)
courses = TakenCourse.objects.filter(student__user__id=request.user.id, course__level=level.level)
context = {
'courses': courses,
'level': level,
}
return render(request, 'account/profile.html', context)
else:
staff = User.objects.filter(is_lecturer=True)
return render(request, 'account/profile.html', { "staff": staff })
def home(request):
"""
Shows our dashboard containing number of students, courses, lecturers, repating students,
carry over students and 1st class students in an interactive graph
"""
students = Student.objects.all().count()
staff = User.objects.filter(is_lecturer=True).count()
courses = Course.objects.all().count()
current_semester = Semester.objects.get(is_current_semester=True)
no_of_1st_class_students = Result.objects.filter(cgpa__gte=4.5).count()
no_of_carry_over_students = CarryOverStudent.objects.all().count()
no_of_students_to_repeat = RepeatingStudent.objects.all().count()
context = {
"no_of_students": students,
"no_of_staff":staff,
"no_of_courses": courses,
"no_of_1st_class_students": no_of_1st_class_students,
"no_of_students_to_repeat": no_of_students_to_repeat,
"no_of_carry_over_students": no_of_carry_over_students,
}
return render(request, 'result/home.html', context)
def semester_add_view(request):
if request.method == 'POST':
form = SemesterForm(request.POST)
if form.is_valid():
data = form.data.get('is_current_semester') # returns string of 'True' if the user selected Yes
if data == 'True':
semester = form.data.get('semester')
ss = form.data.get('session')
session = Session.objects.get(pk=ss)
try:
if Semester.objects.get(semester=semester, session=ss):
messages.info(request, semester + " semester in " + session.session +" session already exist")
return redirect('create_new_semester')
except:
semester = Semester.objects.get(is_current_semester=True)
semester.is_current_semester = False
semester.save()
form.save()
form.save()
messages.success(request, 'Semester added successfully ! ')
return redirect('manage_semester')
else:
form = SemesterForm()
return render(request, 'result/semester_update.html', {'form': form})
def calculate_gpa(self, total_unit_in_semester):
current_semester = Semester.objects.get(is_current_semester=True)
student = TakenCourse.objects.filter(student=self.student, course__level=self.student.level, course__semester=current_semester)
p = 0
point = 0
for i in student:
courseUnit = i.course.courseUnit
if i.grade == A:
point = 5
elif i.grade == B:
point = 4
elif i.grade == C:
point = 3
elif i.grade == D:
point = 2
else:
point = 0
p += int(courseUnit) * point