def section(request, sectionid): logged_in = request.user.is_authenticated if logged_in: the_profile = request.user.profile user_role = the_profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN is_prof = logged_in and user_role == Profile.ACCESS_PROFESSOR can_see_students = logged_in and user_role in (Profile.ACCESS_ADMIN, Profile.ACCESS_PROFESSOR) qs = Section.objects.filter(id=sectionid) if qs.count() < 1: return HttpResponse("No such section") the_section = qs.get() data = { 'section': the_section, 'can_edit': is_admin, 'can_refresh_items': is_prof and the_section.professor == the_profile.professor, 'can_see_students': can_see_students, } data.update(next_prev(request, 'sections', sectionid)) if can_see_students: data.update( filtered_table2( name='secstuds', qs=SectionStudent.objects.filter(section=the_section), filter=SectionStudentFilter, table=StudentInSectionTable, request=request, self_url=reverse('schooladmin:section', args=[sectionid]), click_url=reverse('schooladmin:sectionstudent', args=[DUMMY_ID]), )) data.update( filtered_table2( name='secitems', qs=the_section.sectionreferenceitem_set, filter=SectionItemFilter, table=ReferenceItemsForSectionTable, request=request, self_url=reverse('schooladmin:section', args=[sectionid]), click_url=reverse('sis:secitem', args=[DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'schooladmin/section.html', data)
def course(request, courseid): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN qs = Course.objects.filter(id=courseid) if qs.count() < 1: return HttpResponse("No such course") the_course = qs.get() data = {'course': the_course, 'can_edit': is_admin} data.update(next_prev(request, 'courses', courseid)) data.update( filtered_table2( name='sections', qs=Section.objects.filter(course=the_course), filter=SectionFilter, table=SectionForClassTable, request=request, self_url=reverse('schooladmin:course', args=[courseid]), click_url=reverse('schooladmin:section', args=[DUMMY_ID]), )) data.update( filtered_table2( name='prereqs', qs=Course.objects.filter(a_prerequisite__course=the_course), filter=CourseFilter, table=CoursesTable, request=request, page_size=5, self_url=reverse('schooladmin:course', args=[courseid]), click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) data.update( filtered_table2( name='neededby', qs=Course.objects.filter(a_course__prerequisite=the_course), filter=CourseFilter, table=CoursesTable, request=request, page_size=10, self_url=reverse('schooladmin:course', args=[courseid]), click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'schooladmin/course.html', data)
def semester(request, semester_id): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN qs = Semester.objects.filter(id=semester_id) if qs.count() < 1: return HttpResponse("No such semester") the_semester = qs.get() data = {'semester': the_semester, 'can_add': is_admin} data.update(next_prev(request, 'semesters', semester_id)) data.update( filtered_table2( name='sections', qs=Section.objects.filter(semester=the_semester), filter=SectionFilter, table=SectionsTable, request=request, self_url=reverse('schooladmin:semester', args=[semester_id]), click_url=reverse('schooladmin:section', args=[DUMMY_ID]), )) if logged_in and user_role in (Profile.ACCESS_ADMIN, Profile.ACCESS_PROFESSOR): data.update( filtered_table2( name='students', qs=the_semester.students_attending(), filter=StudentFilter, table=StudentsTable, request=request, self_url=reverse('schooladmin:semester', args=[semester_id]), click_url=reverse('schooladmin:student', args=[DUMMY_ID]), )) data.update( filtered_table2( name='professors', qs=the_semester.professors_teaching(), filter=UserFilter, table=UsersTable, request=request, self_url=reverse('schooladmin:semester', args=[semester_id]), click_url=reverse('schooladmin:professor', args=[DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'schooladmin/semester.html', data)
def semesters(request): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN data = {'can_add': is_admin} qs = Semester.objects.all() if request.method == 'POST': if request.POST.get('active') is not None: qs = Semester.active_semesters() elif request.POST.get('upcoming') is not None: qs = Semester.objects.filter( date_started__gte=datetime.now().date()) data.update( filtered_table2( name='semesters', qs=qs, filter=SemesterFilter, table=SemestersTable, request=request, scrollable=True, self_url=reverse('schooladmin:semesters'), click_url=reverse('schooladmin:semester', args=[DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'schooladmin/semesters.html', data)
def professor_items(request, userid): logged_in = request.user.is_authenticated qs = User.objects.filter(id=userid) if qs.count() < 1: return HttpResponse("No such user") the_user = qs.get() if the_user.profile.role != Profile.ACCESS_PROFESSOR: return users.user(request, userid) data = { 'auser': the_user, } data.update( filtered_table2( name='items', qs=the_user.profile.professor.referenceitem_set, filter=ItemFilter, table=ProfReferenceItemsTable, request=request, self_url=reverse('schooladmin:professor_items', args=[userid]), click_url=reverse('schooladmin:professor_item', args=[userid, DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'schooladmin/professor_items.html', data)
def secitems(request): the_user = request.user the_semester = Semester.current_semester() if request.method == 'POST': the_id = request.POST.get('semester', the_semester.id) the_semester = Semester.objects.get(id=the_id) data = { 'auser': the_user, 'semester': the_semester, 'semesters': the_user.profile.student.semesters.all(), } data.update( filtered_table2( name='secitems', qs=the_user.profile.student.section_reference_items_for( the_semester), filter=SectionItemFilter, table=SectionReferenceItemsTable, request=request, self_url=reverse('student:secitems'), click_url=reverse('sis:secitem', args=[DUMMY_ID]), )) return render(request, 'student/items.html', data)
def professors(request): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN data = { 'can_add': is_admin, } if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} now = datetime.now().date() qs = User.objects.all().filter(profile__role=Profile.ACCESS_PROFESSOR) if request.method == 'POST': if request.POST.get('teaching-current') is not None: qs = qs.filter(profile__professor__id__in=Subquery( Section.objects.filter(semester__date_started__lte=now, semester__date_ended__gte=now).values( 'professor__id'))) the_sem_qs = Semester.objects.filter(date_started__lte=now, date_ended__gte=now) if the_sem_qs.count() < 1: messages.error(request, f'No current semester.') else: messages.info( request, f'{qs.count()} professors teaching in ' + f'{the_sem_qs[0].name}') if request.POST.get('teaching-upcoming') is not None: qs = qs.filter(profile__professor__id__in=Subquery( Section.objects.filter( semester__date_registration_opens__lte=now, semester__date_registration_closes__gte=now).values( 'professor__id'))) the_sem_qs = Semester.objects.filter( date_registration_opens__lte=now, date_registration_closes__gte=now) if the_sem_qs.count() < 1: messages.error(request, f'No semester open for registration.') else: messages.info( request, f'{qs.count()} professors teaching in ' + f'{the_sem_qs[0].name}') data.update( filtered_table2( name='professors', qs=qs, filter=ProfessorFilter, table=ProfessorsTable, request=request, scrollable=True, self_url=reverse('schooladmin:professors'), click_url=reverse('schooladmin:professor', args=[DUMMY_ID]), )) return render(request, 'schooladmin/professors.html', data)
def history(request): the_user = request.user student = the_user.profile.student ssects = student.sectionstudent_set.all().order_by( 'section__semester', 'section__course__name') semesters = [] accumulating_sem = { 'semester': None, } for ssect in ssects: if ssect.section.semester != accumulating_sem['semester']: if accumulating_sem['semester'] is not None: semesters.append(accumulating_sem) accumulating_sem = { 'semester': ssect.section.semester, 'gpa': student.semesterstudent_set.get( semester=ssect.section.semester).gpa, 'sections': [], 'credits_earned': student.semesterstudent_set.get( semester=ssect.section.semester).credits_earned, } accumulating_sem['sections'].append(ssect) data = { 'auser': the_user, 'semesters': semesters, } remaining = the_user.profile.student.requirements_met_list() stats = remaining.filter(met=False).aggregate( remaining_course_count=Count('id'), remaining_credit_count=Sum('credits_earned')) if stats['remaining_credit_count'] is None: stats['remaining_credit_count'] = 0 data.update(stats) data.update( filtered_table2( name='majorcourses', qs=remaining, filter=RequirementsCourseFilter, table=MajorCoursesMetTable, request=request, self_url=reverse('student:history'), click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) return render(request, 'student/history.html', data)
def usermessages(request): the_user = request.user sentFilter = FullSentMessageFilter receivedFilter = FullReceivedMessageFilter receivedTable = MessageReceivedTable if the_user.profile.role == Profile.ACCESS_STUDENT: sentFilter = SentMessageFilter receivedFilter = ReceivedMessageFilter receivedTable = StudentMessageReceivedTable data = { 'auser': the_user, } data.update( filtered_table2( name='received', qs=the_user.profile.sent_to.all(), filter=receivedFilter, table=receivedTable, request=request, scrollable=True, self_url=reverse('sis:messages'), click_url=reverse('sis:message', args=[DUMMY_ID]), )) data.update( filtered_table2( name='sent', qs=the_user.profile.sent_by.all(), filter=sentFilter, table=MessageSentTable, request=request, scrollable=True, self_url=reverse('sis:messages'), click_url=reverse('sis:message', args=[DUMMY_ID]), )) return render(request, 'sis/messages.html', data)
def userslist(request): return render( request, 'schooladmin/users.html', filtered_table2( name='users', qs=User.objects.exclude( profile__role=Profile.ACCESS_NONE).exclude(~Exists( Profile.objects.filter( user__username=OuterRef('username')))), filter=UserFilter, table=FullUsersTable, request=request, scrollable=True, self_url=reverse('schooladmin:users'), click_url=reverse('schooladmin:user', args=[DUMMY_ID]), ))
def test_majors(request): the_user = request.user the_major = the_user.profile.student.major if request.method == 'POST': major_form = MajorSelectForm(request.POST) if major_form.is_valid(): the_major = major_form.cleaned_data.get('major') else: messages.error(request, "Something went wrong") else: major_form = MajorSelectForm(initial={ 'major': the_major, }) data = { 'auser': the_user, 'major': the_major, 'major_form': major_form, } candidate_remaining = the_user.profile.student.requirements_met_list( major=the_major) stats = candidate_remaining.filter(met=False).aggregate( remaining_course_count=Count('id'), remaining_credit_count=Sum('credits_earned')) if stats['remaining_credit_count'] is None: stats['remaining_credit_count'] = 0 data.update(stats) data.update( filtered_table2( name='majorcourses', qs=candidate_remaining, filter=RequirementsCourseFilter, table=MajorCoursesMetTable, request=request, self_url=reverse('student:test_majors'), click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) return render(request, 'student/test_majors.html', data)
def sections(request): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN data = { 'can_add': is_admin, } data.update( filtered_table2( name='sections', qs=Section.objects.all(), filter=SectionFilter, table=SectionsTable, request=request, scrollable=True, self_url=reverse('schooladmin:sections'), click_url=reverse('schooladmin:section', args=[DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'schooladmin/sections.html', data)
def students(request): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN qs = User.objects.all().filter(profile__role=Profile.ACCESS_STUDENT) if request.method == 'POST': if request.POST.get('attending-current') is not None: qs = qs.filter( profile__student__semesters__date_started__lte=datetime.now( ).date(), profile__student__semesters__date_ended__gte=datetime.now( ).date()) if request.POST.get('attending-upcoming') is not None: qs = qs.filter( profile__student__semesters__date_registration_opens__lte= datetime.now().date(), profile__student__semesters__date_registration_closes__gte= datetime.now().date()) data = { 'can_add': is_admin, } data.update( filtered_table2( name='students', qs=qs, filter=StudentFilter, table=StudentsTable, request=request, scrollable=True, self_url=reverse('schooladmin:students'), click_url=reverse('schooladmin:student', args=[DUMMY_ID]), )) return render(request, 'schooladmin/students.html', data)
def user(request, userid): qs = User.objects.filter(id=userid) if qs.count() < 1: return HttpResponse("No such user") the_user = qs.get() logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN if is_admin and request.method == 'POST': if request.POST.get('disbutton'): the_user.is_active = False the_user.save() messages.success( request, f'User {the_user.get_full_name()} has been disabled from login.' ) elif request.POST.get('enabutton'): the_user.is_active = True the_user.save() messages.success( request, f'User {the_user.get_full_name()} has been enabled for login.') return redirect('schooladmin:users') if the_user.profile.role == Profile.ACCESS_STUDENT: if logged_in and (is_admin or user_role == Profile.ACCESS_PROFESSOR): return student(request, userid) else: return HttpResponse("Unauthorized") elif the_user.profile.role == Profile.ACCESS_PROFESSOR: return professor(request, userid) data = { 'auser': the_user, 'show_all': is_admin, } data.update(next_prev(request, 'users', userid)) if is_admin: data.update( filtered_table2( name='received', qs=the_user.profile.sent_to.all(), filter=FullReceivedMessageFilter, table=MessageReceivedTable, request=request, wrap_list=False, self_url=reverse('schooladmin:user', args=[userid]), click_url=reverse('sis:viewmessage', args=[DUMMY_ID]), )) data.update( filtered_table2( name='sent', qs=the_user.profile.sent_by.all(), filter=FullSentMessageFilter, table=MessageSentTable, request=request, wrap_list=False, self_url=reverse('schooladmin:user', args=[userid]), click_url=reverse('sis:viewmessage', args=[DUMMY_ID]), )) return render(request, 'schooladmin/user.html', data)
def professor(request, userid): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN qs = User.objects.filter(id=userid) if qs.count() < 1: return HttpResponse("No such user") the_prof = qs[0] if is_admin and request.method == 'POST': if request.POST.get('disbutton'): the_prof.is_active = False the_prof.save() elif request.POST.get('enabutton'): the_prof.is_active = True the_prof.save() return redirect('schooladmin:users') data = {'auser': the_prof, 'can_edit': is_admin} data.update(next_prev(request, 'professors', userid, fallback='users')) data.update( filtered_table2( name='semesters', qs=the_prof.profile.professor.semesters_teaching(), filter=SemesterFilter, table=SemestersSummaryTable, request=request, self_url=reverse('schooladmin:professor', args=[userid]), click_url=reverse('schooladmin:semester', args=[DUMMY_ID]), )) data.update( filtered_table2( name='sections', qs=the_prof.profile.professor.section_set, filter=SectionFilter, table=SectionsTable, request=request, self_url=reverse('schooladmin:professor', args=[userid]), click_url=reverse('schooladmin:section', args=[DUMMY_ID]), )) data.update( filtered_table2( name='items', qs=the_prof.profile.professor.referenceitem_set, filter=ItemFilter, table=ProfReferenceItemsTable, request=request, self_url=reverse('schooladmin:professor', args=[userid]), click_url=reverse('schooladmin:professor_item', args=[userid, DUMMY_ID]), )) if is_admin: data.update( filtered_table2( name='received', qs=the_prof.profile.sent_to.filter(time_archived__isnull=True), filter=ReceivedMessageFilter, table=MessageReceivedTable, request=request, wrap_list=False, self_url=reverse('schooladmin:professor', args=[userid]), click_url=reverse('sis:viewmessage', args=[DUMMY_ID]), )) data.update( filtered_table2( name='sent', qs=the_prof.profile.sent_by.filter(time_archived__isnull=True), filter=SentMessageFilter, table=MessageSentTable, request=request, wrap_list=False, self_url=reverse('schooladmin:professor', args=[userid]), click_url=reverse('sis:viewmessage', args=[DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'schooladmin/professor.html', data)
def student(request, userid): logged_in = request.user.is_authenticated if logged_in: user_role = request.user.profile.role is_admin = logged_in and user_role == Profile.ACCESS_ADMIN qs = User.objects.filter(id=userid) if qs.count() < 1: return HttpResponse("No such user") the_user = qs.get() if the_user.profile.role != Profile.ACCESS_STUDENT: return user(request, userid) if request.method == 'POST': if request.POST.get('disbutton'): the_user.is_active = False the_user.save() elif request.POST.get('enabutton'): the_user.is_active = True the_user.save() return redirect('schooladmin:users') data = { 'auser': the_user, 'can_edit': is_admin, } data.update(next_prev(request, 'students', userid, fallback='users')) data.update( filtered_table2( name='semesters', qs=the_user.profile.student.semesterstudent_set.all(), filter=SemesterStudentFilter, table=SemesterStudentSummaryTable, request=request, self_url=reverse('schooladmin:student', args=[userid]), )) data.update( filtered_table2( name='history', qs=the_user.profile.student.course_history(), filter=SectionStudentFilter, table=StudentHistoryTable, request=request, self_url=reverse('schooladmin:student', args=[userid]), click_url=reverse('schooladmin:sectionstudent', args=[DUMMY_ID]), )) data.update( filtered_table2( name='remaining', qs=the_user.profile.student.remaining_required_courses(), filter=CourseFilter, table=CoursesTable, request=request, self_url=reverse('schooladmin:student', args=[userid]), click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) data.update( filtered_table2( name='majorcourses', qs=the_user.profile.student.requirements_met_list(), filter=CourseFilter, table=MajorCoursesMetTable, request=request, click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) if is_admin: data.update( filtered_table2( name='received', qs=the_user.profile.sent_to.filter(time_archived__isnull=True), filter=ReceivedMessageFilter, table=MessageReceivedTable, request=request, wrap_list=False, self_url=reverse('schooladmin:student', args=[userid]), click_url=reverse('sis:viewmessage', args=[DUMMY_ID]), )) data.update( filtered_table2( name='sent', qs=the_user.profile.sent_by.filter(time_archived__isnull=True), filter=SentMessageFilter, table=MessageSentTable, request=request, wrap_list=False, self_url=reverse('schooladmin:student', args=[userid]), click_url=reverse('sis:viewmessage', args=[DUMMY_ID]), )) return render(request, 'schooladmin/student.html', data)
def major(request, majorid): the_user = request.user logged_in = request.user.is_authenticated is_admin = logged_in and the_user.profile.role == Profile.ACCESS_ADMIN include_students = logged_in and the_user.profile.role in (Profile.ACCESS_ADMIN, Profile.ACCESS_PROFESSOR) qs = Major.objects.filter(id=majorid) if qs.count() < 1: messages.error(request, "Something went wrong.") return HttpResponse("No such major", reason="Invalid Data", status=404) the_major = qs.get() data = { 'major': the_major, 'permit_edit': is_admin, 'permit_new_course': is_admin, 'include_students': include_students, } data.update(next_prev(request, 'majors', majorid)) data.update( filtered_table2( name='profs', qs=User.objects.all().filter(profile__professor__major=the_major), filter=UserFilter, table=UsersTable, request=request, self_url=reverse('sis:major', args=[majorid]), click_url=reverse('schooladmin:professor', args=[DUMMY_ID]), )) data.update( filtered_table2( name='required', qs=Course.objects.filter(required_by=the_major), filter=CourseFilter, table=CoursesTable, request=request, self_url=reverse('sis:major', args=[majorid]), click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) data.update( filtered_table2( name='offered', qs=Course.objects.filter(major=the_major), filter=CourseFilter, table=CoursesForMajorTable, request=request, self_url=reverse('sis:major', args=[majorid]), click_url=reverse('schooladmin:course', args=[DUMMY_ID]), )) if include_students: data.update( filtered_table2( name='students', qs=User.objects.all().filter(profile__student__major=the_major), filter=UserFilter, table=StudentInMajorTable, request=request, self_url=reverse('sis:major', args=[majorid]), click_url=reverse('schooladmin:student', args=[DUMMY_ID]), )) if not logged_in: data['user'] = {'home_template': "schooladmin/home_guest.html"} return render(request, 'sis/major.html', data)