diff --git a/FusionIIIT/Fusion/context_processors.py b/FusionIIIT/Fusion/context_processors.py new file mode 100644 index 000000000..54566d56e --- /dev/null +++ b/FusionIIIT/Fusion/context_processors.py @@ -0,0 +1,5 @@ +def global_vars(request): + return { + 'global_var': request.session.get('currentDesignationSelected', 'default_value'), + 'global_var2': request.session.get('allDesignations', 'default_value2'), + } \ No newline at end of file diff --git a/FusionIIIT/Fusion/middleware/custom_middleware.py b/FusionIIIT/Fusion/middleware/custom_middleware.py new file mode 100644 index 000000000..f77873534 --- /dev/null +++ b/FusionIIIT/Fusion/middleware/custom_middleware.py @@ -0,0 +1,48 @@ +# custom_middleware.py +from django.contrib.auth.signals import user_logged_in +from django.dispatch import receiver +from applications.globals.models import (ExtraInfo, Feedback, HoldsDesignation, + Issue, IssueImage, DepartmentInfo) +from django.shortcuts import get_object_or_404, redirect, render + +def user_logged_in_middleware(get_response): + @receiver(user_logged_in) + def user_logged_in_handler(sender, user, request, **kwargs): + if 'function_executed' not in request.session: + # Run the function only if the flag is not set + # Assuming user is a model with the desired data field, retrieve the data + # For example, if your User model has a field named 'custom_field', you can access it like: + if user.is_authenticated: + desig = list(HoldsDesignation.objects.select_related('user','working','designation').all().filter(working = request.user).values_list('designation')) + print(desig) + b = [i for sub in desig for i in sub] + design = HoldsDesignation.objects.select_related('user','designation').filter(working=request.user) + + designation=[] + + designation.append(str(user.extrainfo.user_type)) + for i in design: + if str(i.designation) != str(user.extrainfo.user_type): + print('-------') + print(i.designation) + print(user.extrainfo.user_type) + print('') + designation.append(str(i.designation)) + + for i in designation: + print(i) + + request.session['currentDesignationSelected'] = designation[0] + request.session['allDesignations'] = designation + print("logged iN") + + # Set the flag in the session to indicate that the function has bee+n executed + request.session['function_executed'] = True + + def middleware(request): + if request.user.is_authenticated: + user_logged_in_handler(request.user, request.user, request) + response = get_response(request) + return response + + return middleware \ No newline at end of file diff --git a/FusionIIIT/Fusion/settings/common.py b/FusionIIIT/Fusion/settings/common.py index b98ea6960..fabe81ec2 100644 --- a/FusionIIIT/Fusion/settings/common.py +++ b/FusionIIIT/Fusion/settings/common.py @@ -163,6 +163,7 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'Fusion.middleware.custom_middleware.user_logged_in_middleware', ] ROOT_URLCONF = 'Fusion.urls' @@ -178,6 +179,7 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'Fusion.context_processors.global_vars', ], }, }, diff --git a/FusionIIIT/applications/globals/urls.py b/FusionIIIT/applications/globals/urls.py index f8d82ee71..2dea4e77d 100644 --- a/FusionIIIT/applications/globals/urls.py +++ b/FusionIIIT/applications/globals/urls.py @@ -23,5 +23,6 @@ # Endpoint to reset all passwords in DEV environment url(r'^resetallpass/$', views.reset_all_pass, name='resetallpass'), # API urls - url(r'^api/', include('applications.globals.api.urls')) + url(r'^api/', include('applications.globals.api.urls')), + url(r'^update_global_variable/$', views.update_global_variable, name='update_global_var'), ] diff --git a/FusionIIIT/applications/globals/views.py b/FusionIIIT/applications/globals/views.py index a7f3886c9..5b023abb5 100644 --- a/FusionIIIT/applications/globals/views.py +++ b/FusionIIIT/applications/globals/views.py @@ -740,21 +740,26 @@ def dashboard(request): } # a=HoldsDesignation.objects.select_related('user','working','designation').filter(designation = user) + print(context) + print(type(user.extrainfo.user_type)) if(request.user.get_username() == 'director'): return render(request, "dashboard/director_dashboard2.html", {}) elif( "dean_rspc" in designation): return render(request, "dashboard/dashboard.html", context) - elif user.extrainfo.user_type != 'student': + elif user.extrainfo.user_type != "student": + print ("inside") designat = HoldsDesignation.objects.select_related().filter(user=user) response = {'designat':designat} context.update(response) return render(request, "dashboard/dashboard.html", context) else: + print ("inside2") + return render(request, "dashboard/dashboard.html", context) @login_required(login_url=LOGIN_URL) -def profile(request, username=None): +def profile(request, username=None): """ Generic endpoint for views. If it's a faculty, redirects to /eis/profile/* @@ -768,16 +773,76 @@ def profile(request, username=None): """ user = get_object_or_404(User, Q(username=username)) if username else request.user - editable = request.user == user + print("editable",editable) profile = get_object_or_404(ExtraInfo, Q(user=user)) + print("profile",profile) if(str(user.extrainfo.user_type)=='faculty'): + print("profile") return HttpResponseRedirect('/eis/profile/' + (username if username else '')) if(str(user.extrainfo.department)=='department: Academics'): + print("profile2") return HttpResponseRedirect('/aims') - current = HoldsDesignation.objects.select_related('user','working','designation').filter(Q(working=user, designation__name="student")) + + array = [ + "student", + "CC convenor", + "Mechatronic convenor", + "mess_committee", + "mess_convener", + "alumini", + "Electrical_AE", + "Electrical_JE", + "Civil_AE", + "Civil_JE", + "co-ordinator", + "co co-ordinator", + "Convenor", + "Convener", + "cc1convener", + "CC2 convener", + "mess_convener_mess2", + "mess_committee_mess2" +] + + # queryset = HoldsDesignation.objects.select_related('user','working','designation').filter(Q(working=user)) + + # for obj in queryset: + # designation_name = obj.designation.name + # print("designation_name",designation_name) + + # design = False + # if designation_name in array: + # design = True + # print("design",design) + # print("designation_name",designation_name) + # if design: + # current = HoldsDesignation.objects.select_relapted('user','working','designation').filter(Q(working=user, designation__name=designation_name)) + # for obj in current: + # obj.designation.name = obj.designation.name.replace(designation_name, 'student') + + designation_name = "" + design = False + + current = HoldsDesignation.objects.select_related('user', 'working', 'designation').filter(Q(working=user)) + + for obj in current: + designation_name = obj.designation.name + if designation_name in array: + design = True + break + + if design: + current = HoldsDesignation.objects.filter(working=user, designation__name=designation_name) + for obj in current: + obj.designation.name = obj.designation.name.replace(designation_name, 'student') + + print(user.extrainfo.user_type) + print("current",current) if current: + print("profile3") student = get_object_or_404(Student, Q(id=profile.id)) + print("student",student) if editable and request.method == 'POST': if 'studentapprovesubmit' in request.POST: status = PlacementStatus.objects.select_related('notify_id','unique_id__id__user','unique_id__id__department').filter(pk=request.POST['studentapprovesubmit']).update(invitation='ACCEPTED', timestamp=timezone.now()) @@ -979,6 +1044,7 @@ def profile(request, username=None): return render(request, "globals/student_profile4.html", context) if 'achievementsubmit' in request.POST or 'deleteach' in request.POST: return render(request, "globals/student_profile5.html", context) + print("context",context) return render(request, "globals/student_profile.html", context) else: return redirect("/") @@ -1176,4 +1242,15 @@ def search(request): if len(search_results) == 0: search_results = [] context = {'sresults':search_results} - return render(request, "globals/search.html", context) + return render(request, "globals/search.html", context), + +@login_required(login_url=LOGIN_URL) +def update_global_variable(request): + if request.method == 'POST': + selected_option = request.POST.get('dropdown') + request.session['currentDesignationSelected'] = selected_option + print(selected_option) + print(request.session['currentDesignationSelected']) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) + # Redirect to home if not a POST request or some issue occurs + return HttpResponseRedirect(reverse('home')) diff --git a/FusionIIIT/applications/programme_curriculum/admin.py b/FusionIIIT/applications/programme_curriculum/admin.py index 75ab2ca82..0afbdaf09 100644 --- a/FusionIIIT/applications/programme_curriculum/admin.py +++ b/FusionIIIT/applications/programme_curriculum/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from django.contrib.admin.options import ModelAdmin -from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseInstructor +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseInstructor, CourseProposal,UpdateCourseProposal class ProgrammeAdmin(admin.ModelAdmin): @@ -29,7 +29,10 @@ class BatchAdmin(admin.ModelAdmin): class CourseSlotAdmin(admin.ModelAdmin): list_display = ('name', 'type', 'course_slot_info','semester') list_filter = ('type', 'courses',) - +class CourseProposalAdmin(admin.ModelAdmin): + list_display = ('faculty_name','faculty_code', 'name', 'code',) +class UpdateCourseProposalAdmin(admin.ModelAdmin): + list_display = ('faculty_name','faculty_code', 'name', 'code',) # Register your models here. admin.site.register(Discipline, DisciplineAdmin) @@ -39,4 +42,6 @@ class CourseSlotAdmin(admin.ModelAdmin): admin.site.register(Course, CourseAdmin) admin.site.register(Batch, BatchAdmin) admin.site.register(CourseSlot, CourseSlotAdmin) -admin.site.register(CourseInstructor) \ No newline at end of file +admin.site.register(CourseInstructor) +admin.site.register(CourseProposal,CourseProposalAdmin) +admin.site.register(UpdateCourseProposal,UpdateCourseProposalAdmin) \ No newline at end of file diff --git a/FusionIIIT/applications/programme_curriculum/filters.py b/FusionIIIT/applications/programme_curriculum/filters.py index 2959c61b9..d1da0cca5 100644 --- a/FusionIIIT/applications/programme_curriculum/filters.py +++ b/FusionIIIT/applications/programme_curriculum/filters.py @@ -7,6 +7,7 @@ class Meta: model = Course fields = {'code': ['icontains'], 'name': ['icontains'], + 'version': ['exact'], 'working_course': ['exact'], 'disciplines': ['exact'], } @@ -14,6 +15,7 @@ class Meta: 'code' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,})), 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), 'name' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,})), + 'code' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Version','max_length': 10,})), 'working_course' : django_filters.CharFilter(forms.CheckboxInput(attrs={'class': 'ui checkbox'})), 'disciplines' : django_filters.CharFilter(forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',})), } @@ -32,4 +34,10 @@ class CurriculumFilter(django_filters.FilterSet): class Meta: model = Curriculum fields = {'name': ['icontains'], - } \ No newline at end of file + 'version': ['exact'], + } + widgets = { + 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), + 'name' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,})), + 'code' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Version','max_length': 10,})), + } \ No newline at end of file diff --git a/FusionIIIT/applications/programme_curriculum/forms.py b/FusionIIIT/applications/programme_curriculum/forms.py index 72ccfa2b2..210789e29 100644 --- a/FusionIIIT/applications/programme_curriculum/forms.py +++ b/FusionIIIT/applications/programme_curriculum/forms.py @@ -3,7 +3,7 @@ from django.forms import ModelForm, widgets from django.forms import Form, ValidationError from django.forms.models import ModelChoiceField -from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot, PROGRAMME_CATEGORY_CHOICES +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot, PROGRAMME_CATEGORY_CHOICES,CourseProposal,UpdateCourseProposal from django.utils.translation import gettext_lazy as _ class ProgrammeForm(ModelForm): @@ -18,8 +18,7 @@ class Meta: 'category' : 'Programme Category', 'name': 'Programme Name' } - - + class DisciplineForm(ModelForm): class Meta: model = Discipline @@ -44,7 +43,7 @@ class Meta: widgets = { 'name' : forms.TextInput(attrs={'placeholder': 'Enter New Curriculum Name','max_length': 70,'class':'field'}), 'programme' : forms.Select(attrs={'class':'ui fluid search selection dropdown',}), - 'version' : forms.NumberInput(attrs={'placeholder': 'Enter the latest version',' class': 'field'}, ), + 'version' : forms.NumberInput(attrs={'placeholder': 'Enter the latest version',' class': 'field','min': '1.0'}, ), 'working_curriculum' : forms.CheckboxInput(attrs={'class': 'ui checkbox'}), 'no_of_semester' : forms.NumberInput(attrs={'placeholder': 'Enter the number of semesters',' class': 'field'}, ), 'min_credit' : forms.NumberInput(attrs={'placeholder': 'Minimum Number of Credits',' class': 'field'}, ), @@ -124,15 +123,19 @@ def clean(self): self.add_error('percent_project', msg) self.add_error('percent_lab_evaluation', msg) self.add_error('percent_course_attendance', msg) - + + # version = cleaned_data.get('version') + # previous_version = self.instance.version if self.instance else None + # if version < previous_version: + # self.add_error('version', 'The version should be greater than the previous version.') return cleaned_data - class Meta: model = Course fields = '__all__' widgets = { 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,}), 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), + 'version' : forms.NumberInput(attrs={'placeholder': 'version_no'}, ), 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits',}, ), 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours',}, ), 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours',}, ), @@ -156,6 +159,7 @@ class Meta: labels = { 'code' : 'Course Code', 'name' : 'Course Name', + 'version':'version', 'credit' : 'Credits', 'lecture_hours' : 'Academic Loads', 'tutorial_hours' : '', @@ -219,4 +223,257 @@ class Meta: 'duration' : "Course/Project Duration", 'min_registration_limit': 'Min Course Slot Registration Limit', 'max_registration_limit': 'Max Course Slot Registration Limit', - } \ No newline at end of file + } + + + +#new + +class Course_Proposal(ModelForm): + + def clean(self): + cleaned_data = super().clean() + + percentages_sum = ( + cleaned_data.get("percent_quiz_1") + + cleaned_data.get("percent_midsem") + + cleaned_data.get("percent_quiz_2") + + cleaned_data.get("percent_endsem") + + cleaned_data.get("percent_project") + + cleaned_data.get("percent_lab_evaluation") + + cleaned_data.get("percent_course_attendance") + ) + + if percentages_sum != 100: + msg = 'Percentages must add up to 100%, they currently add up to ' + str(percentages_sum) + '%' + self.add_error('percent_quiz_1', msg) + self.add_error('percent_midsem', msg) + self.add_error('percent_quiz_2', msg) + self.add_error('percent_endsem', msg) + self.add_error('percent_project', msg) + self.add_error('percent_lab_evaluation', msg) + self.add_error('percent_course_attendance', msg) + + return cleaned_data + + class Meta: + model = CourseProposal + fields = '__all__' + widgets = { + 'faculty_name' : forms.TextInput(attrs={'max_length': 100,'readonly':'readonly'}), + 'faculty_code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,}), + 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), + 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits',}, ), + 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours',}, ), + 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours',}, ), + 'pratical_hours' : forms.NumberInput(attrs={'placeholder': 'Practical hours',}, ), + 'discussion_hours' : forms.NumberInput(attrs={'placeholder': 'Group Discussion hours',}, ), + 'project_hours' : forms.NumberInput(attrs={'placeholder': 'Project hours',}, ), + 'disciplines' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'pre_requisits' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'pre_requisit_courses' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'syllabus' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'ref_books' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'percent_quiz_1' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_midsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_quiz_2' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_endsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_project' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_lab_evaluation' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_course_attendance' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'status':forms.NumberInput(attrs={'readonly':'readonly'},), + + } + labels = { + 'faculty_name':'Faculty name', + 'faculty_code':'Faculty Code', + 'code' : 'Course Code', + 'name' : 'Course Name', + 'credit' : 'Credits', + 'lecture_hours' : 'Academic Loads', + 'tutorial_hours' : '', + 'pratical_hours' : '', + 'discussion_hours' : '', + 'project_hours' : '', + 'pre_requisits' : 'Pre-requisits', + 'pre_requisit_courses' : 'Pre-requisit Courses', + 'syllabus' : 'Syllabus', + 'ref_books' : 'References & Books', + 'percent_quiz_1' : 'percent_quiz_1', + 'percent_midsem' : 'percent_midsem', + 'percent_quiz_2' : 'percent_quiz_2', + 'percent_endsem' : 'percent_endsem', + 'percent_project' : 'percent_project', + 'percent_lab_evaluation' : 'percent_lab_evaluation', + 'percent_course_attendance' : 'percent_course_attendance', + 'disciplines' : 'disciplines', + 'status':'status' + } + + + + +class Update_Course_Proposal(ModelForm): + + def clean(self): + cleaned_data = super().clean() + + percentages_sum = ( + cleaned_data.get("percent_quiz_1") + + cleaned_data.get("percent_midsem") + + cleaned_data.get("percent_quiz_2") + + cleaned_data.get("percent_endsem") + + cleaned_data.get("percent_project") + + cleaned_data.get("percent_lab_evaluation") + + cleaned_data.get("percent_course_attendance") + ) + + if percentages_sum != 100: + msg = 'Percentages must add up to 100%, they currently add up to ' + str(percentages_sum) + '%' + self.add_error('percent_quiz_1', msg) + self.add_error('percent_midsem', msg) + self.add_error('percent_quiz_2', msg) + self.add_error('percent_endsem', msg) + self.add_error('percent_project', msg) + self.add_error('percent_lab_evaluation', msg) + self.add_error('percent_course_attendance', msg) + + return cleaned_data + + class Meta: + model = UpdateCourseProposal + fields = '__all__' + widgets = { + 'faculty_name' : forms.TextInput(attrs={'max_length': 100,'readonly':'readonly'}), + 'faculty_code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), + 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits',}, ), + 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours',}, ), + 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours',}, ), + 'pratical_hours' : forms.NumberInput(attrs={'placeholder': 'Practical hours',}, ), + 'discussion_hours' : forms.NumberInput(attrs={'placeholder': 'Group Discussion hours',}, ), + 'project_hours' : forms.NumberInput(attrs={'placeholder': 'Project hours',}, ), + 'working_course' : forms.CheckboxInput(attrs={'class': 'ui checkbox'}), + 'disciplines' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'pre_requisits' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'pre_requisit_courses' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'syllabus' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'ref_books' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'percent_quiz_1' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_midsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_quiz_2' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_endsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_project' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_lab_evaluation' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_course_attendance' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'status':forms.NumberInput(attrs={'readonly':'readonly'},), + + } + labels = { + 'faculty_name':'Faculty name', + 'faculty_code':'Faculty Code', + 'code' : 'Course Code', + 'name' : 'Course Name', + 'credit' : 'Credits', + 'lecture_hours' : 'Academic Loads', + 'tutorial_hours' : '', + 'pratical_hours' : '', + 'discussion_hours' : '', + 'project_hours' : '', + 'pre_requisits' : 'Pre-requisits', + 'pre_requisit_courses' : 'Pre-requisit Courses', + 'syllabus' : 'Syllabus', + 'ref_books' : 'References & Books', + 'percent_quiz_1' : 'percent_quiz_1', + 'percent_midsem' : 'percent_midsem', + 'percent_quiz_2' : 'percent_quiz_2', + 'percent_endsem' : 'percent_endsem', + 'percent_project' : 'percent_project', + 'percent_lab_evaluation' : 'percent_lab_evaluation', + 'percent_course_attendance' : 'percent_course_attendance', + 'disciplines' : 'disciplines', + 'working_course' : 'working_course', + 'status':'status' + } + + +class CourseProposalForm(ModelForm): + + def clean(self): + cleaned_data = super().clean() + + percentages_sum = ( + cleaned_data.get("percent_quiz_1") + + cleaned_data.get("percent_midsem") + + cleaned_data.get("percent_quiz_2") + + cleaned_data.get("percent_endsem") + + cleaned_data.get("percent_project") + + cleaned_data.get("percent_lab_evaluation") + + cleaned_data.get("percent_course_attendance") + ) + + if percentages_sum != 100: + msg = 'Percentages must add up to 100%, they currently add up to ' + str(percentages_sum) + '%' + self.add_error('percent_quiz_1', msg) + self.add_error('percent_midsem', msg) + self.add_error('percent_quiz_2', msg) + self.add_error('percent_endsem', msg) + self.add_error('percent_project', msg) + self.add_error('percent_lab_evaluation', msg) + self.add_error('percent_course_attendance', msg) + + return cleaned_data + + class Meta: + model = Course + fields = '__all__' + widgets = { + 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,'readonly':'readonly'}), + 'version' : forms.NumberInput(attrs={'placeholder': 'version_no',}, ), + 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits','readonly':'readonly'}, ), + 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours','readonly':'readonly'}, ), + 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours','readonly':'readonly'}, ), + 'pratical_hours' : forms.NumberInput(attrs={'placeholder': 'Practical hours','readonly':'readonly'}, ), + 'discussion_hours' : forms.NumberInput(attrs={'placeholder': 'Group Discussion hours','readonly':'readonly'}, ), + 'project_hours' : forms.NumberInput(attrs={'placeholder': 'Project hours','readonly':'readonly'}, ), + 'working_course' : forms.CheckboxInput(attrs={'class': 'ui checkbox','disabled': 'disabled'}), + 'disciplines' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown','disabled': 'disabled'}), + 'pre_requisits' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), + 'pre_requisit_courses' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown','disabled': 'disabled'}), + 'syllabus' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), + 'ref_books' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), + 'percent_quiz_1' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_midsem' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_quiz_2' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_endsem' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_project' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_lab_evaluation' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_course_attendance' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + } + labels = { + 'code' : 'Course Code', + 'name' : 'Course Name', + 'credit' : 'Credits', + 'lecture_hours' : 'Academic Loads', + 'tutorial_hours' : '', + 'pratical_hours' : '', + 'discussion_hours' : '', + 'project_hours' : '', + 'pre_requisits' : 'Pre-requisits', + 'pre_requisit_courses' : 'Pre-requisit Courses', + 'syllabus' : 'Syllabus', + 'ref_books' : 'References & Books', + 'percent_quiz_1' : 'percent_quiz_1', + 'percent_midsem' : 'percent_midsem', + 'percent_quiz_2' : 'percent_quiz_2', + 'percent_endsem' : 'percent_endsem', + 'percent_project' : 'percent_project', + 'percent_lab_evaluation' : 'percent_lab_evaluation', + 'percent_course_attendance' : 'percent_course_attendance', + 'working_course' : 'working_course', + 'disciplines' : 'disciplines' + } + diff --git a/FusionIIIT/applications/programme_curriculum/models.py b/FusionIIIT/applications/programme_curriculum/models.py index 733217fff..48841580b 100644 --- a/FusionIIIT/applications/programme_curriculum/models.py +++ b/FusionIIIT/applications/programme_curriculum/models.py @@ -10,7 +10,7 @@ from django.core.validators import MinValueValidator, MaxValueValidator, DecimalValidator # Create your models here. - +# Create your models here. PROGRAMME_CATEGORY_CHOICES = [ ('UG', 'Undergraduate'), ('PG', 'Postgraduate'), @@ -119,9 +119,11 @@ class Curriculum(models.Model): ''' programme = models.ForeignKey(Programme, on_delete=models.CASCADE, null=False) name = models.CharField(max_length=100, null=False, blank=False) + version = models.DecimalField( max_digits=2, decimal_places=1, + default=1.0, validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)]) working_curriculum = models.BooleanField(default=True, null=False) @@ -216,10 +218,12 @@ class Course(models.Model): code = models.CharField(max_length=10, null=False, blank=False) name = models.CharField(max_length=100, null=False, blank=False) version = models.DecimalField( - max_digits=2, + + max_digits=5, decimal_places=1, default=1.0, - validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)]) + validators=[MinValueValidator(1.0), DecimalValidator(max_digits=5, decimal_places=1)]) + credit = models.PositiveIntegerField(default=0, null=False, blank=False) lecture_hours = PositiveIntegerField(null=True, ) tutorial_hours = PositiveIntegerField(null=True) @@ -244,7 +248,9 @@ class Course(models.Model): class Meta: unique_together = ('code','version') - def _str_(self): + + def __str__(self): + return str(self.code + " - " +self.name+"- v"+str(self.version)) @@ -332,5 +338,145 @@ class Meta: unique_together = ('course_id', 'instructor_id', 'batch_id') - def _self_(self): - return '{} - {}'.format(self.course_id, self.instructor_id) \ No newline at end of file + + def __self__(self): + return '{} - {}'.format(self.course_id, self.instructor_id) + + +#new + + +class CourseProposal(models.Model): + ''' + Current Purpose : To store the details regarding a course + + + + + + ATTRIBUTES : + + code(char) - the course code (eg CS3005) + name(char) - the name of the course(eg Machine Learning) + credit(Integer) - the credits defined for the course + lecture_hours(integer) - lecture hours defined for the course + tutorial_hours(Integer) - tutorial hours defined for the course + practical_hours(Integer) - practical hours defined for the course + discussion_hours(Integer) - discussion hours + project_hours(Integer) - project hours + pre_requisits(Boolean) - denote whether this course has prerequisites(courses that one should take before opting this ) + pre_requisit_courses(programme_curriculum.Course) - link to set of prerequisite courses + syllabus(text) - syllabus described for the course + percent_quiz_1(+ve int) - defined weightage in marking + percent_midsem(+ve int) - defined weightage in marking + percent_quiz_2(+ve int) - defined weightage in marking + percent_endsem (+ve int) - defined weightage in marking + percent_project(+ve int) - defined weightage in marking + percent_lab_evaluation (+ve int) - defined weightage in marking + percent_course_attendance (+ve int) - defined weightage in marking + ref_books(text) - reference books suggested for the course + working_course(boolean) - to denote whether the course is currently in execution or not + disciplines(programme_curriculum.Discipline) - to store which discipline is offering the course + + + ''' + faculty_name=models.CharField(max_length=100, null=False,blank=False) + faculty_code = models.CharField(max_length=10, null=False, blank=False) + code = models.CharField(max_length=10, null=False, blank=False) + name = models.CharField(max_length=100, null=False,blank=False) + credit = models.PositiveIntegerField(default=3, null=False, blank=False) + lecture_hours = PositiveIntegerField(default=3,null=True, ) + tutorial_hours = PositiveIntegerField(default=0,null=True) + pratical_hours = PositiveIntegerField(default=0,null=True) + discussion_hours = PositiveIntegerField(default=0,null=True) + project_hours = PositiveIntegerField(default=0,null=True) + pre_requisits = models.TextField(null=True, blank=True) + pre_requisit_courses = models.ManyToManyField(Course, blank=True) + syllabus = models.TextField() + percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False) + percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False) + percent_project = models.PositiveIntegerField(default=15, null=False, blank=False) + percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False) + ref_books = models.TextField() + disciplines = models.ManyToManyField(Discipline, blank=True) + status = models.PositiveIntegerField(default=0,null=False, blank=False) + + class Meta: + unique_together = ('code', 'faculty_code',) + + def __str__(self): + return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name) + + # @property + # def courseslots(self): + # return CourseSlot.objects.filter(courses=self.id) + + + +class UpdateCourseProposal(models.Model): + ''' + Current Purpose : To store the details regarding a update course proposal forms + ATTRIBUTES : + + code(char) - the course code (eg CS3005) + name(char) - the name of the course(eg Machine Learning) + credit(Integer) - the credits defined for the course + lecture_hours(integer) - lecture hours defined for the course + tutorial_hours(Integer) - tutorial hours defined for the course + practical_hours(Integer) - practical hours defined for the course + discussion_hours(Integer) - discussion hours + project_hours(Integer) - project hours + pre_requisits(Boolean) - denote whether this course has prerequisites(courses that one should take before opting this ) + pre_requisit_courses(programme_curriculum.Course) - link to set of prerequisite courses + syllabus(text) - syllabus described for the course + percent_quiz_1(+ve int) - defined weightage in marking + percent_midsem(+ve int) - defined weightage in marking + percent_quiz_2(+ve int) - defined weightage in marking + percent_endsem (+ve int) - defined weightage in marking + percent_project(+ve int) - defined weightage in marking + percent_lab_evaluation (+ve int) - defined weightage in marking + percent_course_attendance (+ve int) - defined weightage in marking + ref_books(text) - reference books suggested for the course + working_course(boolean) - to denote whether the course is currently in execution or not + disciplines(programme_curriculum.Discipline) - to store which discipline is offering the course + + + ''' + faculty_name=models.CharField(max_length=100, null=False,blank=False) + faculty_code = models.CharField(max_length=10, null=False, blank=False) + code = models.CharField(max_length=10, null=False, blank=False) + name = models.CharField(max_length=100, null=False,blank=False) + credit = models.PositiveIntegerField(default=0, null=False, blank=False) + lecture_hours = PositiveIntegerField(null=True, ) + tutorial_hours = PositiveIntegerField(null=True) + pratical_hours = PositiveIntegerField(null=True) + discussion_hours = PositiveIntegerField(null=True) + project_hours = PositiveIntegerField(null=True) + pre_requisits = models.TextField(null=True, blank=True) + pre_requisit_courses = models.ManyToManyField(Course, blank=True) + syllabus = models.TextField() + percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False) + percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False) + percent_project = models.PositiveIntegerField(default=15, null=False, blank=False) + percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False) + ref_books = models.TextField() + working_course = models.BooleanField(default=True) + disciplines = models.ManyToManyField(Discipline, blank=True) + status = models.PositiveIntegerField(default=0,null=False, blank=False) + + class Meta: + unique_together = ('code', 'faculty_code',) + + def __str__(self): + return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name) + + # @property + # def courseslots(self): + # return CourseSlot.objects.filter(courses=self.id) + diff --git a/FusionIIIT/applications/programme_curriculum/urls.py b/FusionIIIT/applications/programme_curriculum/urls.py index 85355b0ca..8dc18adc1 100644 --- a/FusionIIIT/applications/programme_curriculum/urls.py +++ b/FusionIIIT/applications/programme_curriculum/urls.py @@ -48,4 +48,23 @@ path('admin_edit_discipline//', views.edit_discipline_form, name='edit_discipline_form'), path('admin_instigate_semester//', views.instigate_semester, name='instigate_semester'), path('admin_replicate_curriculum//', views.replicate_curriculum, name='replicate_curriculum'), -] \ No newline at end of file + + + + #new + path('course_proposal_form/',views.course_proposal_form,name='course_proposal_form'), + path('view_course_proposal_forms/',views.view_course_proposal_forms,name='view_course_proposal_forms'), + path('update_course_proposal_form//',views.update_course_proposal_form,name='update_course_proposal_form'), + path('faculty_view_all_courses/', views.faculty_view_all_courses, name='faculty_view_all_courses'), + path('faculty_view_a_course//',views.faculty_view_a_course,name="faculty_view_a_course"), + path('head_view_a_course_proposal//', views.head_view_a_course_proposal, name='head_view_a_course_proposal'), + path('head_view_a_update_course_proposal//', views.head_view_a_update_course_proposal, name='head_view_a_update_course_proposal'), + + path('forward_form/', views.forward_form, name='forward_form'), + path('reject_form/', views.reject_form, name='reject_form'), + # path('approve_form/', views.approve_form, name='approve_form'), + + path('forward_update_form//', views.forward_update_form, name='forward_update_form'), + path('reject_update_form/', views.reject_update_form, name='reject_update_form'), + # path('approve_update_form/', views.approve_update_form, name='approve_update_form'), +] diff --git a/FusionIIIT/applications/programme_curriculum/views.py b/FusionIIIT/applications/programme_curriculum/views.py index 018e096cd..5efb2314c 100644 --- a/FusionIIIT/applications/programme_curriculum/views.py +++ b/FusionIIIT/applications/programme_curriculum/views.py @@ -6,9 +6,10 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User -from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot -from .forms import ProgrammeForm, DisciplineForm, CurriculumForm, SemesterForm, CourseForm, BatchForm, CourseSlotForm, ReplicateCurriculumForm +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseProposal,UpdateCourseProposal +from .forms import ProgrammeForm, DisciplineForm, CurriculumForm, SemesterForm, CourseForm, BatchForm, CourseSlotForm, ReplicateCurriculumForm,Course_Proposal,Update_Course_Proposal,CourseProposalForm from .filters import CourseFilter, BatchFilter, CurriculumFilter +from django.db import IntegrityError # from applications.academic_information.models import Student from applications.globals.models import (DepartmentInfo, Designation, @@ -28,9 +29,13 @@ def programme_curriculum(request): user_details - Gets the information about the logged in user. des - Gets the designation about the looged in user. """ + user=request.user + + # print(context) + print(user.extrainfo.user_type + "Programme and curriculum") user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : return HttpResponseRedirect('/programme_curriculum/admin_programmes') @@ -51,12 +56,21 @@ def view_all_programmes(request): pg - PG programmes phd - PHD programmes """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + url+='faculty/' + ug = Programme.objects.filter(category='UG') pg = Programme.objects.filter(category='PG') phd = Programme.objects.filter(category='PHD') + url+='view_all_programmes.html' - - return render(request, 'programme_curriculum/view_all_programmes.html', {'ug': ug, 'pg': pg, 'phd': phd}) + return render(request, url, {'ug': ug, 'pg': pg, 'phd': phd}) def view_curriculums_of_a_programme(request, programme_id): @@ -72,6 +86,15 @@ def view_curriculums_of_a_programme(request, programme_id): working_curriculum - Curriculums that are affective past_curriculum - Curriculums thet are obsolete """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + url+='faculty/' + program = get_object_or_404(Programme, Q(id=programme_id)) curriculums = program.curriculums @@ -81,19 +104,28 @@ def view_curriculums_of_a_programme(request, programme_id): working_curriculums = curriculums.filter(working_curriculum=1) past_curriculums = curriculums.filter(working_curriculum=0) - - return render(request,'programme_curriculum/view_curriculums_of_a_programme.html', {'program': program, 'past_curriculums': past_curriculums, 'working_curriculums': working_curriculums, 'curriculumfilter': curriculumfilter}) + url+='view_curriculums_of_a_programme.html' + return render(request,url, {'program': program, 'past_curriculums': past_curriculums, 'working_curriculums': working_curriculums, 'curriculumfilter': curriculumfilter}) def view_all_working_curriculums(request): - """ views all the working curriculums offered by the institute """ + """ views all the working curriculums offered by the institute """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + + url+='faculty/' curriculums = Curriculum.objects.filter(working_curriculum=1) curriculumfilter = CurriculumFilter(request.GET, queryset=curriculums) curriculums = curriculumfilter.qs - return render(request,'programme_curriculum/view_all_working_curriculums.html',{'curriculums':curriculums, 'curriculumfilter': curriculumfilter}) + return render(request,url+'view_all_working_curriculums.html',{'curriculums':curriculums, 'curriculumfilter': curriculumfilter}) @@ -108,6 +140,15 @@ def view_semesters_of_a_curriculum(request, curriculum_id): transpose_semester_slots - semester_slots 2D list is transpose for viewing in HTML . semester_credits - Total Credits for each semester. """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + url+='faculty/' curriculum = get_object_or_404(Curriculum, Q(id=curriculum_id)) semesters = curriculum.semesters semester_slots = [] @@ -138,49 +179,95 @@ def view_semesters_of_a_curriculum(request, curriculum_id): transpose_semester_slots = list(zip(*semester_slots)) - return render(request, 'programme_curriculum/view_semesters_of_a_curriculum.html', {'curriculum': curriculum, 'semesters': semesters, 'semester_slots': transpose_semester_slots, 'semester_credits': semester_credits}) + return render(request, url+'view_semesters_of_a_curriculum.html', {'curriculum': curriculum, 'semesters': semesters, 'semester_slots': transpose_semester_slots, 'semester_credits': semester_credits}) def view_a_semester_of_a_curriculum(request, semester_id): """ views a specfic semester of a specfic curriculum """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + url+='faculty/' semester = get_object_or_404(Semester, Q(id=semester_id)) course_slots = semester.courseslots - return render(request, 'programme_curriculum/view_a_semester_of_a_curriculum.html', {'semester': semester, 'course_slots': course_slots}) + return render(request, url+'view_a_semester_of_a_curriculum.html', {'semester': semester, 'course_slots': course_slots}) def view_a_courseslot(request, courseslot_id): """ view a course slot """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + url+='faculty/' course_slot = get_object_or_404(CourseSlot, Q(id=courseslot_id)) - return render(request, 'programme_curriculum/view_a_courseslot.html', {'course_slot': course_slot}) + return render(request, url+'view_a_courseslot.html', {'course_slot': course_slot}) def view_all_courses(request): """ views all the course slots of a specfic semester """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + + url+='faculty/' courses = Course.objects.all() coursefilter = CourseFilter(request.GET, queryset=courses) courses = coursefilter.qs - return render(request, 'programme_curriculum/view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) + return render(request, url+'view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) def view_a_course(request, course_id): """ views the details of a Course """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + + url+='faculty/' course = get_object_or_404(Course, Q(id=course_id)) - return render(request, 'programme_curriculum/view_a_course.html', {'course': course}) + return render(request, url+'view_a_course.html', {'course': course}) def view_all_discplines(request): """ views the details of a Course """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + url+='faculty/' disciplines = Discipline.objects.all() - return render(request, 'programme_curriculum/view_all_disciplines.html', {'disciplines': disciplines}) + return render(request, url+'view_all_disciplines.html', {'disciplines': disciplines}) def view_all_batches(request): """ views the details of a Course """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected']== "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or request.session['currentDesignationSelected']== "Dean Academic" or request.session['currentDesignationSelected']== "CSE HOD": + + url+='faculty/' batches = Batch.objects.all().order_by('year') @@ -192,7 +279,7 @@ def view_all_batches(request): batches = batches.filter(running_batch=True) - return render(request, 'programme_curriculum/view_all_batches.html', {'batches': batches, 'finished_batches': finished_batches, 'batchfilter': batchfilter}) + return render(request, url+'view_all_batches.html', {'batches': batches, 'finished_batches': finished_batches, 'batchfilter': batchfilter}) @@ -211,7 +298,7 @@ def admin_view_all_programmes(request): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -239,7 +326,7 @@ def admin_view_curriculums_of_a_programme(request, programme_id): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -263,7 +350,7 @@ def admin_view_all_working_curriculums(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -283,7 +370,7 @@ def admin_view_semesters_of_a_curriculum(request, curriculum_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -337,7 +424,7 @@ def admin_view_a_semester_of_a_curriculum(request, semester_id): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -355,7 +442,7 @@ def admin_view_a_courseslot(request, courseslot_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -374,7 +461,7 @@ def admin_view_all_courses(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -395,7 +482,7 @@ def admin_view_a_course(request, course_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -410,7 +497,7 @@ def admin_view_all_discplines(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -425,7 +512,7 @@ def admin_view_all_batches(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -449,7 +536,7 @@ def add_discipline_form(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -471,7 +558,7 @@ def edit_discipline_form(request, discipline_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -494,7 +581,7 @@ def add_programme_form(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -518,7 +605,7 @@ def edit_programme_form(request, programme_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -547,7 +634,7 @@ def add_curriculum_form(request): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -588,7 +675,7 @@ def edit_curriculum_form(request, curriculum_id): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -634,7 +721,7 @@ def add_course_form(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -658,23 +745,34 @@ def update_course_form(request, course_id): #user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student": # or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" + if request.session['currentDesignationSelected']== "student": # or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass course = get_object_or_404(Course, Q(id=course_id)) + previous = Course.objects.all().filter(code=course.code).order_by('version').last() + course.version=previous.version + version_error='' form = CourseForm(instance=course) submitbutton= request.POST.get('Submit') if submitbutton: if request.method == 'POST': - form = CourseForm(request.POST, instance=course) - if form.is_valid(): - form.save() - messages.success(request, "Updated "+ course.name +" successful") - return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course_id) + "/") - - return render(request,'programme_curriculum/acad_admin/add_course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton}) + form = CourseForm(request.POST) + if form.is_valid() : + previous.latest_version=False + previous.save() + form.latest_version=True + new_course = form.save(commit=False) + if(new_course.version>previous.version): + form.save() + course = Course.objects.last() + messages.success(request, "Added successful") + return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course.id) + "/") + else: + version_error+=f'The version should be greater than {previous.version}' + + return render(request,'programme_curriculum/acad_admin/update_course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton,'version_error':version_error}) @login_required(login_url='/accounts/login') @@ -682,7 +780,7 @@ def add_courseslot_form(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -708,7 +806,7 @@ def edit_courseslot_form(request, courseslot_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -731,7 +829,7 @@ def delete_courseslot(request, courseslot_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -754,7 +852,7 @@ def add_batch_form(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -777,7 +875,7 @@ def edit_batch_form(request, batch_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -811,7 +909,7 @@ def instigate_semester(request, semester_id): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -851,7 +949,7 @@ def replicate_curriculum(request, curriculum_id): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if request.session['currentDesignationSelected']== "student" or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" : return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : pass @@ -896,4 +994,370 @@ def replicate_curriculum(request, curriculum_id): messages.success(request, "Added successful") return HttpResponseRedirect('/programme_curriculum/admin_curriculum_semesters/' + str(curriculum.id) + '/') - return render(request, 'programme_curriculum/acad_admin/add_curriculum_form.html',{'form':form, 'submitbutton': submitbutton}) \ No newline at end of file + return render(request, 'programme_curriculum/acad_admin/add_curriculum_form.html',{'form':form, 'submitbutton': submitbutton}) + + + + + + + + + + + + + + + + +#new + +@login_required(login_url='/accounts/login') +def course_proposal_form(request): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : + pass + elif request.session['currentDesignationSelected'] == "acadadmin": + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + faculty_id=user_details.user_id + details=User.objects.get(id=faculty_id) + faculty_name=details.first_name +' '+ details.last_name + + + + + form=Course_Proposal(initial={'faculty_name': faculty_name,'faculty_code':des.user}) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = Course_Proposal(request.POST) + if form.is_valid(): + new_course = form.save(commit=False) + new_course.status=0 + new_course.save() + messages.success(request, " Proposal Added successful") + return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') + + return render(request,'programme_curriculum/faculty/course_proposal_form.html',{'form':form,'submitbutton': submitbutton}) + + +# @login_required(login_url='/accounts/login') +# def update_course_proposal_form(request, course_id): + +# user_details = ExtraInfo.objects.get(user = request.user) +# des = HoldsDesignation.objects.all().filter(user = request.user).first() +# if request.session['currentDesignationSelected']== "student": +# return HttpResponseRedirect('/programme_curriculum/programmes/') +# elif str(request.user) == "acadadmin" : +# return HttpResponseRedirect('/programme_curriculum/admin_programmes') +# elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor": +# pass + +# course = get_object_or_404(Course, Q(id=course_id)) +# form = Update_Course_Proposal(instance=course) +# submitbutton= request.POST.get('Submit') +# if submitbutton: +# if request.method == 'POST': +# form = Update_Course_Proposal(request.POST, instance=course) +# if form.is_valid(): +# form.save() +# messages.success(request, "Updated "+ course.name +" successful") +# return HttpResponseRedirect("/programme_curriculum//programme_curriculum/course_proposal_form//") + + # return render(request,'programme_curriculum/faculty/update_course_proposal_form.html',{'form':form,'submitbutton': submitbutton}) + +@login_required(login_url='/accounts/login') +def faculty_view_all_courses(request): + """ views all the course slots of a specfic semester """ + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected'] == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif request.session['currentDesignationSelected'] == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + elif request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor": + pass + + # discipline=user_details.department + # courses = Course.objects.filter(disciplines=discipline) + + + courses = Course.objects.all() + + coursefilter = CourseFilter(request.GET, queryset=courses) + + courses = coursefilter.qs + + return render(request, 'programme_curriculum/faculty/faculty_view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) + + +@login_required(login_url='/accounts/login') +def faculty_view_a_course(request, course_id): + """ views the details of a Course """ + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected'] == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif request.session['currentDesignationSelected'] == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + elif request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : + pass + course = get_object_or_404(Course, Q(id=course_id)) + return render(request, 'programme_curriculum/faculty/faculty_view_a_course.html', {'course': course}) + + + + + +# ##new +# @login_required(login_url='/accounts/login') +# def head_view_a_course(request, proposal_id): +# """ views the details of a Course """ + +# user_details = ExtraInfo.objects.get(user = request.user) +# des = HoldsDesignation.objects.all().filter(user = request.user).last() +# if request.session['currentDesignationSelected']== "CSE HOD" : +# pass +# elif str(request.user) == "acadadmin" : +# return HttpResponseRedirect('/programme_curriculum/admin_programmes') +# elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or str(des.designation)=="student" : +# return HttpResponseRedirect('/programme_curriculum/programmes') +# proposal = get_object_or_404(CourseProposal, Q(id=proposal_id)) +# return render(request, 'programme_curriculum/hod/head_view_a_course.html', {'proposal': proposal}) + +def head_view_a_course_proposal(request,CourseProposal_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + + if request.session['currentDesignationSelected'] == "CSE HOD" : + pass + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + + if (request.session['currentDesignationSelected'] == "Dean Academic"): + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + form = CourseProposalForm(instance=proposalform,initial={'version':1.0}) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = CourseProposalForm(request.POST) + if form.is_valid(): + proposalform.status = 3 + proposalform.save() + form.save() + course = get_object_or_404(Course, Q(code=proposalform.code)) + messages.success(request, "Updated "+ proposalform.name +" successful") + return HttpResponseRedirect("/programme_curriculum/course/" + str(course.id) + "/") + return render(request, 'programme_curriculum/faculty/dean_view_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) + return render(request, 'programme_curriculum/faculty/head_view_a_course_proposal.html', {'proposal': proposalform}) + +def head_view_a_update_course_proposal(request,UpdateCourseProposal_id): + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + + if request.session['currentDesignationSelected'] == "CSE HOD" : + pass + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + + if(request.session['currentDesignationSelected'] == "Dean Academic"): + + # course = get_object_or_404(Course, Q(code=proposalform.code)) + course =Course.objects.all().filter(code=proposalform.code).order_by('version').last() + previous = Course.objects.all().filter(code=course.code).order_by('version').last() + course.version=previous.version + version_error='' + form = CourseProposalForm(instance=proposalform,initial={'version':course.version}) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = CourseForm(request.POST) + if form.is_valid() : + previous.latest_version=False + previous.save() + form.latest_version=True + new_course = form.save(commit=False) + if(new_course.version>previous.version): + proposalform.status = 3 + proposalform.save() + form.save() + course = Course.objects.last() + messages.success(request, "Added successful") + return HttpResponseRedirect("/programme_curriculum/course/"+ str(course.id) + "/") + else: + version_error+=f'The version should be greater than {previous.version}' + return render(request, 'programme_curriculum/faculty/dean_view_update_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton,'version_error':version_error}) + return render(request, 'programme_curriculum/faculty/head_view_update_a_course_proposal.html', {'proposal': proposalform}) + + #return render(request,'programme_curriculum/acad_admin/update_course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton,'version_error':version_error}) + + + + + # submitbutton= request.POST.get('Submit') + # if submitbutton: + # if request.method == 'POST': + # form = CourseProposalForm(request.POST,instance=course) + # if form.is_valid(): + # proposalform.status = 3 + # proposalform.save() + # form.save() + # messages.success(request, "Updated "+ proposalform.name +" successful") + # return HttpResponseRedirect("/programme_curriculum/course/"+ str(course.id) + "/") + # return render(request, 'programme_curriculum/faculty/dean_view_update_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) + # return render(request, 'programme_curriculum/faculty/head_view_update_a_course_proposal.html', {'proposal': proposalform}) + +def forward_form(request,CourseProposal_id): + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status =1 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + +def forward_update_form(request,UpdateCourseProposal_id): + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status =1 + proposalform.save() + Updatecourses = UpdateCourseProposal.objects.all() + courses = CourseProposal.objects.all() + # return HttpResponseRedirect('/programme_curriculum/head_view_a_update_course_proposal/'), + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + +@login_required(login_url='/accounts/login') +def reject_form(request,CourseProposal_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).last() + + if request.session['currentDesignationSelected'] == "CSE HOD" or request.session['currentDesignationSelected'] == "Dean Academic": + pass + elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status = 2 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + + if request.session['currentDesignationSelected'] == "CSE HOD": + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status = 2 + proposalform.save() + courses = CourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + if request.session['currentDesignationSelected'] == "Dean Academic" : + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status = 4 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + +def reject_update_form(request,UpdateCourseProposal_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).last() + + if request.session['currentDesignationSelected'] == "CSE HOD" or request.session['currentDesignationSelected'] == "Dean Academic": + pass + elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status = 2 + proposalform.save() + courses = UpdateCourseProposal.objects.all() + if request.session['currentDesignationSelected']== "CSE HOD": + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status = 2 + proposalform.save() + Updatecourses = UpdateCourseProposal.objects.all() + courses=CourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + if request.session['currentDesignationSelected']== "Dean Academic" : + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status = 4 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + + +# def approve_form(request,CourseProposal_id): +# proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) +# proposalform.status = 3 +# proposalform.save() +# courses = CourseProposal.objects.all() +# Updatecourses = UpdateCourseProposal.objects.all() + +# return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) +# def approve_update_form(request,UpdateCourseProposal_id): +# proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) +# proposalform.status = 3 +# proposalform.save() +# courses = CourseProposal.objects.all() +# Updatecourses = UpdateCourseProposal.objects.all() + +# return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + + +@login_required(login_url='/accounts/login') +def view_course_proposal_forms(request): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).last() + + if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : + pass + elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + + courseProposal = CourseProposal.objects.filter(faculty_code=des.user) + coursefilter = CourseFilter(request.GET, queryset=courseProposal) + + courses = CourseProposal.objects.all() + updatecourses=UpdateCourseProposal.objects.all() + + updatecourseProposal = UpdateCourseProposal.objects.filter(faculty_code=des.user) + + if(request.session['currentDesignationSelected'] == "CSE HOD"): + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) + elif(request.session['currentDesignationSelected'] == "Dean Academic"): + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) + return render(request, 'programme_curriculum/faculty/view_course_proposal_forms.html',{'courseProposals': courseProposal,'updateProposals':updatecourseProposal}) + + + + + +@login_required(login_url='/accounts/login') +def update_course_proposal_form(request, course_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected'] == "student": + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif request.session['currentDesignationSelected'] == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes/') + elif request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : + pass + + faculty_id=user_details.user_id + details=User.objects.get(id=faculty_id) + faculty_name=details.first_name +' '+ details.last_name + faculty_details=Update_Course_Proposal(initial={'faculty_name': faculty_name,'faculty_code':des.user}) + course = get_object_or_404(Course, Q(id=course_id)) + form = Update_Course_Proposal(instance=course) + + submitbutton= request.POST.get('Submit') + + if submitbutton: + if request.method == 'POST': + form = Update_Course_Proposal(request.POST) + if form.is_valid(): + form.save() + messages.success(request, "Updated "+ course.name +" successful") + return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') + return render(request,'programme_curriculum/faculty/update_course_proposal_form.html',{'faculty_details':faculty_details,'form':form, 'submitbutton': submitbutton}) \ No newline at end of file diff --git a/FusionIIIT/templates/academic_procedures/academic.html b/FusionIIIT/templates/academic_procedures/academic.html old mode 100755 new mode 100644 index 6b04a54fb..35eebf446 --- a/FusionIIIT/templates/academic_procedures/academic.html +++ b/FusionIIIT/templates/academic_procedures/academic.html @@ -22,6 +22,39 @@ } + + {% endblock css %} @@ -30,13 +63,12 @@ {% include 'dashboard/navbar.html' %} {% endblock %} -
+
- {% comment %}The left-margin segment!{% endcomment %} -
+ {% comment %}The left-rail segment starts here!{% endcomment %} -
+
{% comment %}The user image card starts here!{% endcomment %} {% block usercard %} {% include 'globals/usercard.html' %} @@ -46,8 +78,8 @@
{% comment %}The Tab-Menu starts here!{% endcomment %} -
- {% if course.disciplines.all %} @@ -54,6 +54,10 @@

{{ discipline }}

+ + + + diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html index 8a9b28673..5b2e096fc 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html @@ -38,6 +38,7 @@ + @@ -48,6 +49,7 @@ + + + + + + + +{% endblock %} +{% block rightcontent %} +
+
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/common.html b/FusionIIIT/templates/programme_curriculum/faculty/common.html new file mode 100644 index 000000000..22f83d34a --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/common.html @@ -0,0 +1,78 @@ +{% extends 'globals/base.html' %} +{% load static %} + +{% block title %} + Programme & Curriculum +{% endblock %} + +{% block css %} + +{% endblock %} + +{% block body %} + {% block navBar %} + {% include 'dashboard/navbar.html' %} + {% endblock %} + +
+ + {% comment %}The left-margin segment!{% endcomment %} +
+ + {% comment %}The left-rail segment starts here!{% endcomment %} +
+ + {% comment %}The user image card starts here!{% endcomment %} + {% block usercard %} + {% include 'globals/usercard.html' %} + {% endblock %} + {% comment %}The user image card ends here!{% endcomment %} + +
+ + {% comment %}The Tab-Menu starts here!{% endcomment %} + {% block sidetabmenu %} + {% endblock %} + {% comment %}The Tab-Menu ends here!{% endcomment %} +
+ + {% comment %} + The left-rail segment ends here! + {% endcomment %} + + {% comment %} + The central-rail segment starts here! + {% endcomment %} + +
+ + {% block content %} + {% endblock %} + +
+ {% comment %}The central-rail segment ends here!{% endcomment %} + + {% comment %}The right-rail segment starts here!{% endcomment %} +
+
+ {% comment %} + TODO: the right rail! + {% endcomment %} + {% block rightcontent %} + {% endblock %} +
+
+ {% comment %}The right-rail segment ends here!{% endcomment %} + + {% comment %}The right-margin segment!{% endcomment %} +
+ +
+ {% comment %}The grid ends here!{% endcomment %} +{% endblock %} + +{% block javascript %} + + + +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html b/FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html new file mode 100644 index 000000000..17a638108 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html @@ -0,0 +1,239 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+

New Course Proposal Form

+
+
+ + {% csrf_token %} + {% if form.non_field_errors %} +
+
We had some issues
+ {% for error in form.non_field_errors %} +
    +
  • {{ error }}
  • +
+ {% endfor %} +
+ {% endif %} +
+ {% if form.name.errors or form.code.errors or form.credit.errors %} +
+

{{ form.faculty_name.errors }}

+

{{ form.faculty_code.errors }}

+

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

+
+ {% endif %} +
+
+ + {{ form.faculty_name }} +
+
+ + {{ form.faculty_code }} +
+
+ + {{ form.name }} +
+
+
+ + {{ form.code }} +
+
+ + {{ form.credit }} +
+
+
+ {% if form.lecture_hours.errors or form.tutorial_hours.errors or form.pratical_hours.errors or form.discussion_hours.errors or form.project_hours.errors %} +
+

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.lecture_hours }} +
+
+ + {{ form.tutorial_hours }} +
+
+ + {{ form.pratical_hours }} +
+
+
+
+ + {{ form.discussion_hours }} +
+
+ + {{ form.project_hours }} +
+
+
+ {% if form.disciplines.errors %} +
+ {{ form.disciplines.errors }} +
+ {% endif %} + + {{ form.disciplines }} +
+
+ {% if form.pre_requisits.errors %} +
+ {{ form.pre_requisits.errors }} +
+ {% endif %} + + {{ form.pre_requisits }} +
+
+ {% if form.pre_requisit_courses.errors %} +
+ {{ form.pre_requisit_courses.errors }} +
+ {% endif %} + + {{ form.pre_requisit_courses }} +
+
+ {% if form.syllabus.errors %} +
+ {{ form.syllabus.errors }} +
+ {% endif %} + + {{ form.syllabus }} +
+
+ {% if form.ref_books.errors %} +
+ {{ form.ref_books.errors }} +
+ {% endif %} + + {{ form.ref_books }} +
+
+ {% if form.status.errors %} +
+ {{ form.status.errors }} +
+ {% endif %} + + {{ form.status }} +
+
+ {% if form.percent_quiz_1.errors %} +
+

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ +
+ + + + + + +{% endblock %} +{% block rightcontent %} +
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html new file mode 100644 index 000000000..509fc8d57 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html @@ -0,0 +1,243 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+

Course Proposal Form

+
+
+ + {% csrf_token %} + {% if form.non_field_errors %} +
+
We had some issues
+ {% for error in form.non_field_errors %} +
    +
  • {{ error }}
  • +
+ {% endfor %} +
+ {% endif %} +
+ {% if form.name.errors or form.code.errors or form.credit.errors %} +
+

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

+
+ {% endif %} +
+
+ + {{ form.name }} +
+
+
+ + {{ form.code }} +
+
+ + {{ form.version }} +
+
+ + {{ form.credit }} +
+
+
+ {% if form.lecture_hours.errors or form.tutorial_hours.errors or form.pratical_hours.errors or form.discussion_hours.errors or form.project_hours.errors %} +
+

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.lecture_hours }} +
+
+ + {{ form.tutorial_hours }} +
+
+ + {{ form.pratical_hours }} +
+
+
+
+ + {{ form.discussion_hours }} +
+
+ + {{ form.project_hours }} +
+
+
+ {% if form.working_course.errors %} +
+ {{ form.working_course.errors }} +
+ {% endif %} + + {{ form.working_course }} +
+
+ {% if form.disciplines.errors %} +
+ {{ form.disciplines.errors }} +
+ {% endif %} + + {{ form.disciplines }} +
+
+ {% if form.pre_requisits.errors %} +
+ {{ form.pre_requisits.errors }} +
+ {% endif %} + + {{ form.pre_requisits }} +
+
+ {% if form.pre_requisit_courses.errors %} +
+ {{ form.pre_requisit_courses.errors }} +
+ {% endif %} + + {{ form.pre_requisit_courses }} +
+
+ {% if form.syllabus.errors %} +
+ {{ form.syllabus.errors }} +
+ {% endif %} + + {{ form.syllabus }} +
+
+ {% if form.ref_books.errors %} +
+ {{ form.ref_books.errors }} +
+ {% endif %} + + {{ form.ref_books }} +
+
+ {% if form.percent_quiz_1.errors %} +
+

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ +
+ + + + + + +{% endblock %} +{% comment %} {% block rightcontent %} +
+
+ +{% endblock %} {% endcomment %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/dean_view_course_proposal_forms.html b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_course_proposal_forms.html new file mode 100644 index 000000000..08842798d --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_course_proposal_forms.html @@ -0,0 +1,159 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+

{{ course.code }} - {{ course.name }}

+

{{ course.code }} - {{ course.name }} - v{{course.version}}

Course Name {{ course.name }}
Version{{ course.version }}
Contact hours

index

Course Code

Course Name

Version No.

Credits

{{ forloop.counter }} {{ course.code }} {{ course.name }}{{ course.version }} {{ course.credit }} + + Programmes & Curriculums + + + Working Curriculums + + + Discipline + + + Batch + + + Courses + + + +{% endblock %} + +{% block content %} +
+

Course Form

+
+
+ + {% csrf_token %} + {% if form.non_field_errors %} +
+
We had some issues
+ {% for error in form.non_field_errors %} +
    +
  • {{ error }}
  • +
+ {% endfor %} +
+ {% endif %} +
+ {% if form.name.errors or form.code.errors or form.credit.errors %} +
+

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.version.errors }}

+

{{ form.credit.errors }}

+
+ {% endif %} +
+
+ {% if version_error %} +
+

{{version_error}}

+
+ {% endif %} +
+
+ + {{ form.name }} + +
+ +
+
+ + {{ form.code }} +
+
+ + {{ form.credit }} +
+
+ + {{ form.version }} +
+
+
+ {% if form.lecture_hours.errors or form.tutorial_hours.errors or form.pratical_hours.errors or form.discussion_hours.errors or form.project_hours.errors %} +
+

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

+ +
+ {% endif %} +
+
+
+ + {{ form.lecture_hours }} +
+
+ + {{ form.tutorial_hours }} +
+
+ + {{ form.pratical_hours }} +
+ + +
+
+
+ + {{ form.discussion_hours }} +
+
+ + {{ form.project_hours }} +
+
+
+ {% if form.working_course.errors %} +
+ {{ form.working_course.errors }} +
+ {% endif %} + + {{ form.working_course }} +
+
+ {% if form.disciplines.errors %} +
+ {{ form.disciplines.errors }} +
+ {% endif %} + + {{ form.disciplines }} +
+
+ {% if form.pre_requisits.errors %} +
+ {{ form.pre_requisits.errors }} +
+ {% endif %} + + {{ form.pre_requisits }} +
+
+ {% if form.pre_requisit_courses.errors %} +
+ {{ form.pre_requisit_courses.errors }} +
+ {% endif %} + + {{ form.pre_requisit_courses }} +
+
+ {% if form.syllabus.errors %} +
+ {{ form.syllabus.errors }} +
+ {% endif %} + + {{ form.syllabus }} +
+
+ {% if form.ref_books.errors %} +
+ {{ form.ref_books.errors }} +
+ {% endif %} + + {{ form.ref_books }} +
+
+ {% if form.percent_quiz_1.errors %} +
+

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ +
+
+ Cancel +
+ +
+
+
+ Cancel +
+ +
+
+
+ Reject +
+ +
+
+ + + + + + + + + + + + {% for courseProposal in courseProposals %} + + {% if courseProposal.status != 0 and courseProposal.status != 2 %} + + + + + + + + + + + + + {% endif %} + + {% empty %} + + {% endfor %} + +

Faculty Name

Faculty Name

Course Name

Course Code

Status

{{ courseProposal.faculty_name }}{{ courseProposal.faculty_code }}{{ courseProposal.name }}{{ courseProposal.code }} + {% if courseProposal.status == 1 %} + +
edit
+ +
+ {% endif %} + {% if courseProposal.status == 3 %} + Approved + {% endif %} + {% if courseProposal.status == 4 %} + Rejected + {% endif %} + {% if courseProposal.status == 6%} + Course Added! + {% endif %} +
No Courses Avaliable
+ + + + +
+
+
+ + + + + + + + + + + + + {% for updateProposal in updateProposals %} + + {% if updateProposal.status != 0 and updateProposal.status != 2 %} + + + + + + + + + + + + + {% endif %} + + {% empty %} + + {% endfor %} + +

Faculty Name

Faculty Name

Course Name

Course Code

Status

{{ updateProposal.faculty_name }}{{ updateProposal.faculty_code }}{{ updateProposal.name }}{{ updateProposal.code }} + {% if updateProposal.status == 1 %} + +
edit
+ +
+ {% endif %} + {% if updateProposal.status == 3 %} + Approved + {% endif %} + {% if updateProposal.status == 4 %} + Rejected + {% endif %} + {% if updateProposal.status == 6%} + Course Updated +
Succesfully!
+ {% endif %} +
No Courses Avaliable
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html new file mode 100644 index 000000000..6be107cb8 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html @@ -0,0 +1,251 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+

Update Course Proposal Form

+
+
+ + {% csrf_token %} + {% if form.non_field_errors %} +
+
We had some issues
+ {% for error in form.non_field_errors %} +
    +
  • {{ error }}
  • +
+ {% endfor %} +
+ {% endif %} +
+ {% if form.name.errors or form.code.errors or form.credit.errors %} +
+

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

+

{{ form.version.errors }}

+
+ {% endif %} +
+
+ {% if version_error %} +
+

{{version_error}}

+
+ {% endif %} +
+
+ + {{ form.name }} +
+
+
+ + {{ form.code }} +
+
+ + {{ form.version }} +
+
+ + {{ form.credit }} +
+
+
+ {% if form.lecture_hours.errors or form.tutorial_hours.errors or form.pratical_hours.errors or form.discussion_hours.errors or form.project_hours.errors %} +
+

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.lecture_hours }} +
+
+ + {{ form.tutorial_hours }} +
+
+ + {{ form.pratical_hours }} +
+
+
+
+ + {{ form.discussion_hours }} +
+
+ + {{ form.project_hours }} +
+
+
+ {% if form.working_course.errors %} +
+ {{ form.working_course.errors }} +
+ {% endif %} + + {{ form.working_course }} +
+
+ {% if form.disciplines.errors %} +
+ {{ form.disciplines.errors }} +
+ {% endif %} + + {{ form.disciplines }} +
+
+ {% if form.pre_requisits.errors %} +
+ {{ form.pre_requisits.errors }} +
+ {% endif %} + + {{ form.pre_requisits }} +
+
+ {% if form.pre_requisit_courses.errors %} +
+ {{ form.pre_requisit_courses.errors }} +
+ {% endif %} + + {{ form.pre_requisit_courses }} +
+
+ {% if form.syllabus.errors %} +
+ {{ form.syllabus.errors }} +
+ {% endif %} + + {{ form.syllabus }} +
+
+ {% if form.ref_books.errors %} +
+ {{ form.ref_books.errors }} +
+ {% endif %} + + {{ form.ref_books }} +
+
+ {% if form.percent_quiz_1.errors %} +
+

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ + + +
+ Reject +
+ +
+ +
+
+ + + +{% endblock %} +{% comment %} {% block rightcontent %} +
+
+ +{% endblock %} {% endcomment %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html b/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html new file mode 100644 index 000000000..cc0f295aa --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html @@ -0,0 +1,166 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} +{% block content %} +
+
+
+ + + + + + {% if course.disciplines.all %} + + + + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

{{ course.code }} - {{ course.name }}

+
Discipline + {% for discipline in course.disciplines.all %} +

{{ discipline }}

+ {% endfor %} + +
Course Code{{ course.code }}
Course Name{{ course.name }}
Contact hours
Lecture{{ course.lecture_hours }}hrs
Tutorial{{ course.tutorial_hours }}hrs
Lab{{ course.pratical_hours }}hrs
Discussion{{ course.discussion_hours }}hrs
Project{{ course.project_hours }}hrs
Credits{{ course.credit }}
Pre-requisits
Info{{ course.pre_requisits|linebreaks }}
Courses +

+ {% for p_course in course.pre_requisit_courses.all %} + {{ p_course }},
+ {% endfor %} +

+
Syllabus{{ course.syllabus|linebreaks }}
Evaluation Schema
Quiz 1{{ course.percent_quiz_1 }} %
Mid-Sem Exam{{ course.percent_midsem }} %
Quiz 2{{ course.percent_quiz_2 }} %
End-Sem Exam{{ course.percent_endsem }} %
Project{{ course.percent_project }} %
Lab Evaluation{{ course.percent_lab_evaluation }} %
Course Attendance{{ course.percent_course_attendance }} %
References & Books{{ course.ref_books|linebreaks }}
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_all_courses.html b/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_all_courses.html new file mode 100644 index 000000000..2f218954c --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_all_courses.html @@ -0,0 +1,90 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + + + + {% for course in courses %} + + + + + + + + + {% empty %} + + {% endfor %} + +

index

Course Code

Course Name

Version

Credits

{{ forloop.counter }}{{ course.code }}{{ course.name }}{{ course.version }}{{ course.credit }} +
EDIT
+ +
+
No Courses Avaliable
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+
+
FILTER SEARCH
+
+ {{ coursefilter.form }} +
+ +
+
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html b/FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html new file mode 100644 index 000000000..b1c8c8018 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html @@ -0,0 +1,180 @@ + +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} +{% block content %} +
+
+
+ + + + + + + + + {% if course.disciplines.all %} + + + + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Course Proposal Form By

{{ proposal.faculty_name }}({{ proposal.faculty_code }})

+

{{ proposal.code }} - {{ proposal.name }}

+
Discipline + {% for discipline in proposal.disciplines.all %} +

{{ discipline }}

+ {% endfor %} + +
Course Code{{ proposal.code }}
Course Name{{ proposal.name }}
Contact hours
Lecture{{ proposal.lecture_hours }}hrs
Tutorial{{ proposal.tutorial_hours }}hrs
Lab{{ proposal.pratical_hours }}hrs
Discussion{{ proposal.discussion_hours }}hrs
Project{{ proposal.project_hours }}hrs
Credits{{ proposal.credit }}
Pre-requisits
Info{{ proposal.pre_requisits|linebreaks }}
Courses +

+ {% for p_proposal in proposal.pre_requisit_courses.all %} + {{ p_proposal }},
+ {% endfor %} +

+
Syllabus{{ proposal.syllabus|linebreaks }}
Evaluation Schema
Quiz 1{{ proposal.percent_quiz_1 }} %
Mid-Sem Exam{{ proposal.percent_midsem }} %
Quiz 2{{ proposal.percent_quiz_2 }} %
End-Sem Exam{{ proposal.percent_endsem }} %
Project{{ proposal.percent_project }} %
Lab Evaluation{{ proposal.percent_lab_evaluation }} %
Course Attendance{{ proposal.percent_course_attendance }} %
References & Books{{ proposal.ref_books|linebreaks }}
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+ +{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/head_view_course_proposal_forms.html b/FusionIIIT/templates/programme_curriculum/faculty/head_view_course_proposal_forms.html new file mode 100644 index 000000000..24863ff3a --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/head_view_course_proposal_forms.html @@ -0,0 +1,162 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + + + {% for courseProposal in courseProposals %} + + + + + + + + + + {% empty %} + + {% endfor %} + + +

Faculty Name

Faculty Name

Course Name

Course Code

Status

{{ courseProposal.faculty_name }}{{ courseProposal.faculty_code }}{{ courseProposal.name }}{{ courseProposal.code }} + {% if courseProposal.status == 0 %} + +
edit
+ +
+ {% endif %} + {% if courseProposal.status == 1 %} + Forwarded to Dean + {% endif %} + {% if courseProposal.status == 2 %} + Rejected + {% endif %} + {% if courseProposal.status == 3 %} + Approved by Dean + {% endif %} + {% if courseProposal.status == 4 %} + Rejected by Dean + {% endif %} + {% if courseProposal.status == 6%} + Course Added! + {% endif %} + + +
No Courses Avaliable
+
+
+
+ +
+
+
+ + + + + + + + + + + + {% for updateProposal in updateProposals %} + + + + + + + + + + {% empty %} + + {% endfor %} + + +

Faculty Name

Faculty Name

Course Name

Course Code

Status

{{ updateProposal.faculty_name }}{{ updateProposal.faculty_code }}{{ updateProposal.name }}{{ updateProposal.code }} + {% if updateProposal.status == 0 %} + +
edit
+ +
+ {% endif %} + {% if updateProposal.status == 1 %} + Forwarded to Dean + {% endif %} + {% if updateProposal.status == 2 %} + Rejected + {% endif %} + {% if updateProposal.status == 3 %} + Approved by Dean + {% endif %} + {% if updateProposal.status == 4 %} + Rejected by Dean + {% endif %} + {% if updateProposal.status == 6%} + Course Added! + {% endif %} + + +
No Courses Avaliable
+
+
+
+ +{% endblock %} + diff --git a/FusionIIIT/templates/programme_curriculum/faculty/head_view_update_a_course_proposal.html b/FusionIIIT/templates/programme_curriculum/faculty/head_view_update_a_course_proposal.html new file mode 100644 index 000000000..1bfb07e83 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/head_view_update_a_course_proposal.html @@ -0,0 +1,180 @@ + +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} +{% block content %} +
+
+
+ + + + + + + + + {% if course.disciplines.all %} + + + + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Course Proposal Form By

{{ proposal.faculty_name }}({{ proposal.faculty_code }})

+

{{ proposal.code }} - {{ proposal.name }}

+
Discipline + {% for discipline in proposal.disciplines.all %} +

{{ discipline }}

+ {% endfor %} + +
Course Code{{ proposal.code }}
Course Name{{ proposal.name }}
Contact hours
Lecture{{ proposal.lecture_hours }}hrs
Tutorial{{ proposal.tutorial_hours }}hrs
Lab{{ proposal.pratical_hours }}hrs
Discussion{{ proposal.discussion_hours }}hrs
Project{{ proposal.project_hours }}hrs
Credits{{ proposal.credit }}
Pre-requisits
Info{{ proposal.pre_requisits|linebreaks }}
Courses +

+ {% for p_proposal in proposal.pre_requisit_courses.all %} + {{ p_proposal }},
+ {% endfor %} +

+
Syllabus{{ proposal.syllabus|linebreaks }}
Evaluation Schema
Quiz 1{{ proposal.percent_quiz_1 }} %
Mid-Sem Exam{{ proposal.percent_midsem }} %
Quiz 2{{ proposal.percent_quiz_2 }} %
End-Sem Exam{{ proposal.percent_endsem }} %
Project{{ proposal.percent_project }} %
Lab Evaluation{{ proposal.percent_lab_evaluation }} %
Course Attendance{{ proposal.percent_course_attendance }} %
References & Books{{ proposal.ref_books|linebreaks }}
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+ +{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/update_course_proposal_form.html b/FusionIIIT/templates/programme_curriculum/faculty/update_course_proposal_form.html new file mode 100644 index 000000000..b89075517 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/update_course_proposal_form.html @@ -0,0 +1,249 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+

Course Update Proposal Form

+
+
+ + {% csrf_token %} + {% if form.non_field_errors %} +
+
We had some issues
+ {% for error in form.non_field_errors %} +
    +
  • {{ error }}
  • +
+ {% endfor %} +
+ {% endif %} +
+ {% if form.name.errors or form.code.errors or form.credit.errors %} +
+

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

+
+ {% endif %} +
+
+ + {{ faculty_details.faculty_name }} +
+
+ + {{ faculty_details.faculty_code }} +
+
+ + {{ form.name }} +
+
+
+ + {{ form.code }} +
+
+ + {{ form.credit }} +
+
+
+ {% if form.lecture_hours.errors or form.tutorial_hours.errors or form.pratical_hours.errors or form.discussion_hours.errors or form.project_hours.errors %} +
+

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.lecture_hours }} +
+
+ + {{ form.tutorial_hours }} +
+
+ + {{ form.pratical_hours }} +
+
+
+
+ + {{ form.discussion_hours }} +
+
+ + {{ form.project_hours }} +
+
+
+ {% if form.working_course.errors %} +
+ {{ form.working_course.errors }} +
+ {% endif %} + + {{ form.working_course }} +
+
+ {% if form.disciplines.errors %} +
+ {{ form.disciplines.errors }} +
+ {% endif %} + + {{ form.disciplines }} +
+
+ {% if form.pre_requisits.errors %} +
+ {{ form.pre_requisits.errors }} +
+ {% endif %} + + {{ form.pre_requisits }} +
+
+ {% if form.pre_requisit_courses.errors %} +
+ {{ form.pre_requisit_courses.errors }} +
+ {% endif %} + + {{ form.pre_requisit_courses }} +
+
+ {% if form.syllabus.errors %} +
+ {{ form.syllabus.errors }} +
+ {% endif %} + + {{ form.syllabus }} +
+
+ {% if form.ref_books.errors %} +
+ {{ form.ref_books.errors }} +
+ {% endif %} + + {{ form.ref_books }} +
+
+ {% if form.status.errors %} +
+ {{ form.status.errors }} +
+ {% endif %} + + {{ form.status }} +
+
+ {% if form.percent_quiz_1.errors %} +
+

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ + + +
+ Cancel +
+ +
+ +
+
+ + + +{% endblock %} +{% block rightcontent %} +
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html b/FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html new file mode 100644 index 000000000..f221fe18c --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html @@ -0,0 +1,148 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+
+
+ + + + + + {% if course.disciplines.all %} + + + + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

{{ course.code }} - {{ course.name }}-v{{course.version}}

+
Discipline + {% for discipline in course.disciplines.all %} +

{{ discipline }}

+ {% endfor %} + +
Course Code{{ course.code }}
Course Name{{ course.name }}
Contact hours
Lecture{{ course.lecture_hours }}hrs
Tutorial{{ course.tutorial_hours }}hrs
Lab{{ course.pratical_hours }}hrs
Discussion{{ course.discussion_hours }}hrs
Project{{ course.project_hours }}hrs
Credits{{ course.credit }}
Pre-requisits
Info{{ course.pre_requisits|linebreaks }}
Courses +

+ {% for p_course in course.pre_requisit_courses.all %} + {{ p_course }},
+ {% endfor %} +

+
Syllabus{{ course.syllabus|linebreaks }}
Evaluation Schema
Quiz 1{{ course.percent_quiz_1 }} %
Mid-Sem Exam{{ course.percent_midsem }} %
Quiz 2{{ course.percent_quiz_2 }} %
End-Sem Exam{{ course.percent_endsem }} %
Project{{ course.percent_project }} %
Lab Evaluation{{ course.percent_lab_evaluation }} %
Course Attendance{{ course.percent_course_attendance }} %
References & Books{{ course.ref_books|linebreaks }}
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html b/FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html new file mode 100644 index 000000000..2e73c2014 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html @@ -0,0 +1,105 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Course Slot: {{ course_slot.name }}

Semester: {{ course_slot.semester }}

Type : {{ course_slot.type }}

Info{{ course_slot.course_slot_info|linebreaks }}
Duration{{ course_slot.duration }} Semesters
Min Registration Limit{{ course_slot.min_registration_limit }}Max Registration Limit{{ course_slot.max_registration_limit }}
+ {% if course_slot.courses.all %} +
+ + + + + + + + + + {% for course in course_slot.courses.all %} + + + + + + {% empty %} + + {% endfor %} + +

Course Code

Course Name

Credits

{{ course.code }}{{ course.name }}{{ course.credit }}
{{ course_slot.course_slot_info }}
+ {% else %} +
+ + + + +
No Courses Instigated
+ {% endif %} + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_a_semester_of_a_curriculum.html b/FusionIIIT/templates/programme_curriculum/faculty/view_a_semester_of_a_curriculum.html new file mode 100644 index 000000000..5ab2fe11b --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_a_semester_of_a_curriculum.html @@ -0,0 +1,129 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + + + +
+
+
+ + + + + + + + + + + + + {% if semester.instigate_semester == True %} + + {% else %} + + {% endif %} + + + + + + + + + + + + + + +

Curriculum : {{ semester.curriculum }}

Semester : {{ semester.semester_no }}

Instigate Semester + Yes + + Not Yet +
Start Semester Date{{ semester.start_semester }}
End Semester Date{{ semester.end_semester }}
Semester Information{{ semester.semester_info|linebreaks }}
+
+
+
+ + + +
+
+
+ {% for slot in course_slots %} + + + + + + + + + + {% if slot.courses.all %} + + + + + + + + + {% for course in slot.courses.all %} + + + + + + {% empty %} + + {% endfor %} + + {% else %} + + {% endif %} +

{{ slot.name }}

Type : {{ slot.type }}

Course Code

Course Name

Credits

{{ course.code }}{{ course.name }}{{ course.credit }}
No Courses Avaliable for this slot
EMPTY SLOT
+
+ {% empty %} +

No Courses Avaliable for this slot

+ {% endfor %} +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html new file mode 100644 index 000000000..277cd9b80 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html @@ -0,0 +1,120 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + + {% for batch in batches %} + + + + + {% if batch.curriculum != None %} + + {% else %} + + {% endif %} + + + {% empty %} + + {% endfor %} + +

Name

Discipline

Year

Curriculum

{{ batch.name }}{{ batch.discipline }}{{ batch.year }}{{ batch.curriculum }}
No Batch Avaliable
+
+
+
+ +
+
+
+ + + + + + + + + + + {% for batch in finished_batches %} + + + + + {% if batch.curriculum != None %} + + {% else %} + + {% endif %} + + {% empty %} + + {% endfor %} + +

Name

Discipline

Year

Curriculum

{{ batch.name }}{{ batch.discipline }}{{ batch.year }}{{ batch.curriculum }}
No Batch Avaliable
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+
+
FILTER SEARCH
+
+ {{ batchfilter.form }} +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html new file mode 100644 index 000000000..e0e24912e --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html @@ -0,0 +1,78 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + + {% for course in courses %} + + + + + + + {% empty %} + + {% endfor %} + +

Course Code

Course Name

Version

Credits

{{ course.code }}{{ course.name }}{{ course.version }}{{ course.credit }}
No Courses Avaliable
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+
+
FILTER SEARCH
+
+ {{ coursefilter.form }} +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html new file mode 100644 index 000000000..61b583c91 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html @@ -0,0 +1,61 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + {% for discipline in disciplines %} + + + + + {% endfor %} + +

Discipline Name

Programmes

{{ discipline.name }} + {% for programme in discipline.programmes.all %} +

{{ programme.name }}

+ {% endfor %} +
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html new file mode 100644 index 000000000..c4c66fb17 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html @@ -0,0 +1,140 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + + + + + +
+
+
+ + + + + + + + + {% for programme in ug %} + + + + + {% empty %} + + {% endfor %} + +

Programmes

Discipline

{{ programme.name }} + {% for discipline in programme.get_discipline_objects %} +

{{ discipline.name }}

+ {% endfor %} +
No Programmes Avaliable
+
+
+
+ + + +
+
+
+ + + + + + + + + {% for programme in pg %} + + + + + {% empty %} + + {% endfor %} + +

Programmes

Discipline

{{ programme.name }} + {% for discipline in programme.get_discipline_objects %} +

{{ discipline.name }}

+ {% endfor %} +
No Programmes Avaliable
+
+
+
+ + + + +
+
+
+ + + + + + + + + {% for programme in phd %} + + + + + + {% empty %} + + {% endfor %} + +

Programmes

Discipline

{{ programme.name }} + {% for discipline in programme.get_discipline_objects %} +

{{ discipline.name }}

+ {% endfor %} +
No Programmes Avaliable
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html new file mode 100644 index 000000000..15ca0f8c0 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html @@ -0,0 +1,83 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + + {% for curriculum in curriculums %} + + + + + + + {% empty %} + + {% endfor %} + +

Name

Version

Batch

No. of Semester

{{ curriculum.name }}{{ curriculum.version }} + {% for batch in curriculum.batches %} +

{{ batch }}

+ {% endfor %} +
{{ curriculum.no_of_semester }}
No Curriculums Avaliable
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+
+
FILTER SEARCH
+
+ {{ curriculumfilter.form }} +
+ +
+ +
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html b/FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html new file mode 100644 index 000000000..660fb66ab --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html @@ -0,0 +1,167 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + + + {% for courseProposal in courseProposals %} + + + + + + + + {% empty %} + + {% endfor %} + +

Faculty Name

Faculty Name

Course Name

Course Code

Status

{{ courseProposal.faculty_name }}{{ courseProposal.faculty_code }}{{ courseProposal.name }}{{ courseProposal.code }} + {% if courseProposal.status == 0 %} + Pending + {% endif %} + {% if courseProposal.status == 1 %} + Forwarded to Dean + {% endif %} + {% if courseProposal.status == 2 %} + Rejected by HOD + {% endif %} + {% if courseProposal.status == 3 %} + Approved by Dean + {% endif %} + {% if courseProposal.status == 4 %} + Rejected by Dean + {% endif %} + {% if courseProposal.status == 6%} + Course Added! + {% endif %} + +
No Courses Proposals Submitted
+
+
+
+ +
+
+
+ + + + + + + + + + + + {% for updateProposal in updateProposals %} + + + + + + + + {% empty %} + + {% endfor %} + +

Faculty Name

Faculty Name

Course Name

Course Code

Status

{{ updateProposal.faculty_name }}{{ updateProposal.faculty_code }}{{ updateProposal.name }}{{ updateProposal.code }} + {% if updateProposal.status == 0 %} + Pending + {% endif %} + {% if updateProposal.status == 1 %} + Forwarded to Dean + {% endif %} + {% if updateProposal.status == 2 %} + Rejected by HOD + {% endif %} + {% if updateProposal.status == 3 %} + Approved by Dean + {% endif %} + {% if updateProposal.status == 4 %} + Rejected by Dean + {% endif %} + {% if updateProposal.status == 6%} + Course Added! + {% endif %} + +
No Courses Proposals Submitted
+
+
+
+{% endblock %} +{% block rightcontent %} +
+
+ + + + +
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_curriculums_of_a_programme.html b/FusionIIIT/templates/programme_curriculum/faculty/view_curriculums_of_a_programme.html new file mode 100644 index 000000000..1ffc54fba --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_curriculums_of_a_programme.html @@ -0,0 +1,141 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +

{{ program.name }}

Programme Category{{ program.category }}
Programme Name{{ program.name }}
Programme Begin Year{{ program.programme_begin_year }}
+
+
+
+ +
+
+
+ + + + + + + + + + + {% for curriculum in working_curriculums %} + + + + + + + {% empty %} + + {% endfor %} + +

Name

Version

Batch

No. of Semester

{{ curriculum.name }}{{ curriculum.version }} + {% for batch in curriculum.batches %} +

{{ batch }}

+ {% endfor %} +
{{ curriculum.no_of_semester }}
No Curriculum Avaliable
+
+
+
+ + +
+
+
+ + + + + + + + + + + {% for curriculum in past_curriculums %} + + + + + + + {% empty %} + + {% endfor %} + +

Name

Version

Batch

No. of Semester

{{ curriculum.name }}{{ curriculum.version }} + {% for batch in curriculum.batches %} +

{{ batch }}

+ {% endfor %} +
{{ curriculum.no_of_semester }}
No Curriculum Avaliable
+
+
+
+ +{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_semesters_of_a_curriculum.html b/FusionIIIT/templates/programme_curriculum/faculty/view_semesters_of_a_curriculum.html new file mode 100644 index 000000000..72753d692 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_semesters_of_a_curriculum.html @@ -0,0 +1,152 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + {% if curriculum.batches.count > 0 %} + + + + + {% endif %} + + + {% for semester in semesters %} + + {% endfor %} + + + {% for course_slot in semester_slots %} + + + {% for slot in course_slot %} + {% if slot != "" %} + + {% else %} + + {% endif %} + {% endfor %} + + {% endfor %} + + + {% for semester in semesters %} + {% if semester.start_semester == None %} + + {% else %} + + {% endif %} + {% endfor %} + + + + {% for semester in semesters %} + {% if semester.end_semester == None %} + + {% else %} + + {% endif %} + {% endfor %} + + + + {% for total_credits in semester_credits %} + + {% endfor %} + + + + {% for semester in semesters %} + {% if semester.instigate_semester == True %} + + {% else %} + + {% endif %} + {% endfor %} + + +
+

{{ curriculum }}

+
+

+ Batches:     + {% for batch in curriculum.batches.all %} + {{ batch }},     + {% endfor %} +

+
Semester
{{ semester.semester_no }}
+ {% if slot.courses.count != 1 %} + {{ slot.name }} + {% else %} + {% for course in slot.courses.all %} +

{{ course }}
(L: {{ course.lecture_hours }}, T: {{ course.tutorial_hours }}, C: {{ course.credit }})

+ {% endfor %} + {% endif %} +
Start Date{{ semester.start_semester }}
End Date{{ semester.end_semester }}
Total Credits{{ total_credits }}
Instigated + Yes + + Not Yet +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/view_a_course.html b/FusionIIIT/templates/programme_curriculum/view_a_course.html index 01508981f..5be3fde68 100644 --- a/FusionIIIT/templates/programme_curriculum/view_a_course.html +++ b/FusionIIIT/templates/programme_curriculum/view_a_course.html @@ -30,7 +30,7 @@ -

{{ course.code }} - {{ course.name }}

+

{{ course.code }} - {{ course.name }} - v{{course.version}}

{% if course.disciplines.all %} diff --git a/FusionIIIT/templates/programme_curriculum/view_all_courses.html b/FusionIIIT/templates/programme_curriculum/view_all_courses.html index f9c2d339f..754862bba 100644 --- a/FusionIIIT/templates/programme_curriculum/view_all_courses.html +++ b/FusionIIIT/templates/programme_curriculum/view_all_courses.html @@ -37,6 +37,7 @@ background-color: whitesmoke;">

Course Code

Course Name

+

Version

Credits

@@ -45,6 +46,7 @@ {{ course.code }} {{ course.name }} + {{ course.version }} {{ course.credit }} {% empty %} diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 4cc3a0a30..000000000 --- a/requirements.txt +++ /dev/null @@ -1,74 +0,0 @@ -amqp==5.0.2 -arabic-reshaper==2.1.1 -asgiref==3.3.1 -attrs==20.3.0 -beautifulsoup4==4.9.3 -billiard==3.6.3.0 -Brotli==1.0.9 -bs4==0.0.1 -celery==5.0.5 -certifi==2020.12.5 -cffi==1.14.4 -chardet==4.0.0 -click==7.1.2 -click-didyoumean==0.0.3 -click-plugins==1.1.1 -click-repl==0.1.6 -cryptography==36.0.2 -defusedxml==0.6.0 -Django==3.1.5 -django-allauth==0.44.0 -django-cleanup==5.1.0 -django-cors-headers==3.7.0 -django-debug-toolbar==3.2.4 -django-extensions==3.1.1 -django-filter==2.4.0 -django-markdown-deux==1.0.5 -django-model-utils==4.1.1 -django-notifications-hq==1.6.0 -django-pagedown==2.2.0 -djangorestframework==3.12.2 -django-semanticui-forms==1.6.5 -django-unused-media==0.2.2 -future==0.18.2 -# gunicorn -html-text==0.5.2 -html5lib==1.1 -idna==2.10 -ipython==8.2.0 -ipython-genutils==0.2.0 -jsonfield==3.1.0 -jsonschema==3.2.0 -kombu==5.0.2 -lxml==4.8.0 -markdown2==2.4.2 -numpy==1.22.3 -oauthlib==3.1.0 -openpyxl==3.0.7 -Pillow==8.1.0 -prompt-toolkit==3.0.10 -psycopg2-binary==2.8.6 -pycparser==2.20 -PyJWT==2.6.0 -PyPDF2==1.26.0 -pyrsistent==0.17.3 -python-bidi==0.4.2 -python-dateutil==2.8.1 -python3-openid==3.2.0 -pytz==2020.5 -reportlab==3.5.59 -requests==2.25.1 -requests-oauthlib==1.3.0 -six==1.15.0 -soupsieve==2.1 -sqlparse==0.4.2 -swapper==1.1.2.post1 -urllib3==1.26.8 -vine==5.0.0 -wcwidth==0.2.5 -webencodings==0.5.1 -whitenoise==5.2.0 -xhtml2pdf==0.2.5 -xlrd==2.0.1 -XlsxWriter==1.3.7 -xlwt==1.3.0 \ No newline at end of file