From 1e34c9621cf90840c75bad5011d5e647b90a30ba Mon Sep 17 00:00:00 2001 From: EyeOfHorus158 <75492668+EyeOfHorus158@users.noreply.github.com> Date: Fri, 17 Feb 2023 00:16:58 +0530 Subject: [PATCH 01/26] Checked the sidebar after acad-admin login and fixed the (#1113) fix: icons that were disabled or not working. --- FusionIIIT/templates/ais/ais.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FusionIIIT/templates/ais/ais.html b/FusionIIIT/templates/ais/ais.html index e9d3fea7d..be1e8e0ed 100755 --- a/FusionIIIT/templates/ais/ais.html +++ b/FusionIIIT/templates/ais/ais.html @@ -92,7 +92,7 @@ Float Courses for Next Sem --> - + Curriculum @@ -123,7 +123,7 @@ --> - Verify Assistantship   Verify Assistantship   {{assistant_list_length}} From e99bc53e0971be61e047edb690c14ac2c632cb76 Mon Sep 17 00:00:00 2001 From: Yathartha Goenka <75240973+yatharthagoenka@users.noreply.github.com> Date: Fri, 17 Feb 2023 16:25:12 +0530 Subject: [PATCH 02/26] Enabled all modules for access (#1120) --- FusionIIIT/templates/dashboard/modules.html | 24 ++++++------- .../templates/dashboard/sidenavbar.html | 34 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/FusionIIIT/templates/dashboard/modules.html b/FusionIIIT/templates/dashboard/modules.html index 73fc33d85..a8680958a 100755 --- a/FusionIIIT/templates/dashboard/modules.html +++ b/FusionIIIT/templates/dashboard/modules.html @@ -52,7 +52,7 @@ {% comment %}A single modules row starts here!{% endcomment %}
- +
@@ -66,7 +66,7 @@
- +
@@ -84,7 +84,7 @@ {% comment %}A single modules row starts here!{% endcomment %}
- +
@@ -98,7 +98,7 @@
- +
@@ -116,7 +116,7 @@ {% comment %}A single modules row starts here!{% endcomment %}
- +
@@ -130,7 +130,7 @@
- +
@@ -146,7 +146,7 @@ {% comment %}A single modules row ends here!{% endcomment %}
- +
@@ -160,7 +160,7 @@
- +
@@ -177,7 +177,7 @@
- +
- +
@@ -207,7 +207,7 @@
- +
- +
From 54bf66dfb01d7efda7094ab1b957ffbcbb06935f Mon Sep 17 00:00:00 2001 From: Apc010101 <122636844+Apc010101@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:48:49 +0530 Subject: [PATCH 03/26] OS -2 : Week 4 : Addition of important personal information during booking an appointment (#1084) * Date validation added * Date Validation for booking ambulance --------- Co-authored-by: Akshay010203 <92329718+Akshay010203@users.noreply.github.com> --- .../templates/phcModule/appointment.html | 485 +++++++++--------- 1 file changed, 248 insertions(+), 237 deletions(-) diff --git a/FusionIIIT/templates/phcModule/appointment.html b/FusionIIIT/templates/phcModule/appointment.html index ad4688902..e0a9a52d5 100755 --- a/FusionIIIT/templates/phcModule/appointment.html +++ b/FusionIIIT/templates/phcModule/appointment.html @@ -1,243 +1,254 @@ {% load static %} {% block appointment %} - {% comment %}the main tab starts here {% endcomment %} - - - {% comment %}the doctor appointment tab starts here {% endcomment %} -
-
-
{% csrf_token %} - -
- - -
-
- - - - - -

- - -

- - -

- - - - -
- - -
-

-
- -
-
- -
- - -
- -
- -
-
- - - -
-
+{% comment %}the main tab starts here {% endcomment %} + + + +{% comment %}the doctor appointment tab starts here {% endcomment %} +
+
+
{% csrf_token %} +
+ + +
+
+ + + + + +

+ + + +

+ + +

+
+ +
+

+
+
-
-
- -
- {% comment %}the doctor appointment tab ends here {% endcomment %} - - {% comment %}the ambulance appointment tab starts here {% endcomment %} -
-
- {% csrf_token %} -
-
- - -

- -
-
- - - -

- - -
-
- - -
- -
- -

-
-
- -
- -
- -
-
- - - -
-
-
-
-
-
+
+ +
+ +
+ +
- {% comment %}the ambulance appointment tab ends here {% endcomment %} +
+ + + +
+
+
+
+
+
+{% comment %}the doctor appointment tab ends here {% endcomment %} + +{% comment %}the ambulance appointment tab starts here {% endcomment %} +
+
+
{% csrf_token %} +
+
+ + + +

+
+
+ + + +

+
+
+
+ +
+ +

+
+
+ +
+ +
+ +
+
+
+ +
+
+
+
+
+
+{% comment %}the ambulance appointment tab ends here {% endcomment %} {% endblock %} \ No newline at end of file From 0c2392cea614e1a3f3c0942f2440d83237c26032 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Mon, 18 Mar 2024 00:23:29 +0530 Subject: [PATCH 04/26] AC-1 : Add functionality to add and update courses (#1300) * Add functionality to add and update courses * Course version added * Delete FusionIIIT/Fusion/settings/development.py * Delete FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py * Delete FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py * Delete FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py * Delete FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py * Delete FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py * Delete FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py * Delete FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py * Delete FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py * Delete FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py * Delete FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py * Delete FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py * Delete FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py * Delete requirements.txt * Delete FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py * Delete FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py * Delete FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py * Delete FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py --- FusionIIIT/Fusion/settings/development.py | 55 -- .../programme_curriculum/admin.py | 11 +- .../programme_curriculum/filters.py | 2 + .../programme_curriculum/forms.py | 270 +++++++++- .../programme_curriculum/models.py | 171 ++++++- .../applications/programme_curriculum/urls.py | 21 +- .../programme_curriculum/views.py | 476 +++++++++++++++++- .../acad_admin/add_batch_form.html | 3 + .../acad_admin/add_course_form.html | 3 + .../acad_admin/add_courseslot_form.html | 3 + .../acad_admin/add_curriculum_form.html | 3 + .../acad_admin/add_discipline_form.html | 3 + .../acad_admin/add_programme_form.html | 3 + .../acad_admin/admin_view_a_course.html | 3 + .../admin_view_a_course_proposal.html | 241 +++++++++ .../acad_admin/admin_view_a_courseslot.html | 3 + ...admin_view_a_semester_of_a_curriculum.html | 3 + .../admin_view_a_update_course_proposal.html | 241 +++++++++ .../acad_admin/admin_view_all_batches.html | 3 + .../acad_admin/admin_view_all_courses.html | 3 + .../admin_view_all_disciplines.html | 3 + .../acad_admin/admin_view_all_programmes.html | 3 + .../admin_view_all_working_curriculums.html | 3 + .../admin_view_course_proposal_forms.html | 137 +++++ ...admin_view_curriculums_of_a_programme.html | 2 + .../admin_view_semesters_of_a_curriculum.html | 2 + .../acad_admin/instigate_semester_form.html | 2 + .../programme_curriculum/faculty/common.html | 78 +++ .../faculty/course_proposal_form.html | 239 +++++++++ .../faculty/dean_view_a_course_proposal.html | 177 +++++++ .../dean_view_course_proposal_forms.html | 159 ++++++ .../dean_view_update_a_course_proposal.html | 177 +++++++ .../faculty/faculty_view_a_course.html | 166 ++++++ .../faculty/faculty_view_all_courses.html | 88 ++++ .../faculty/head_view_a_course_proposal.html | 180 +++++++ .../head_view_course_proposal_forms.html | 162 ++++++ .../head_view_update_a_course_proposal.html | 180 +++++++ .../faculty/update_course_proposal_form.html | 249 +++++++++ .../faculty/view_a_course.html | 148 ++++++ .../faculty/view_a_courseslot.html | 105 ++++ .../view_a_semester_of_a_curriculum.html | 129 +++++ .../faculty/view_all_batches.html | 120 +++++ .../faculty/view_all_courses.html | 76 +++ .../faculty/view_all_disciplines.html | 61 +++ .../faculty/view_all_programmes.html | 140 ++++++ .../faculty/view_all_working_curriculums.html | 83 +++ .../faculty/view_course_proposal_forms.html | 167 ++++++ .../view_curriculums_of_a_programme.html | 141 ++++++ .../view_semesters_of_a_curriculum.html | 152 ++++++ requirements.txt | 74 --- 50 files changed, 4748 insertions(+), 176 deletions(-) delete mode 100644 FusionIIIT/Fusion/settings/development.py create mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/common.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/faculty_view_all_courses.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_update_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/update_course_proposal_form.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_a_semester_of_a_curriculum.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_curriculums_of_a_programme.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_semesters_of_a_curriculum.html delete mode 100644 requirements.txt diff --git a/FusionIIIT/Fusion/settings/development.py b/FusionIIIT/Fusion/settings/development.py deleted file mode 100644 index 6acc214c1..000000000 --- a/FusionIIIT/Fusion/settings/development.py +++ /dev/null @@ -1,55 +0,0 @@ -from Fusion.settings.common import * - -DEBUG = True - -SECRET_KEY = '=&w9due426k@l^ju1=s1)fj1rnpf0ok8xvjwx+62_nc-f12-8(' - -ALLOWED_HOSTS = ['*'] - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'fusionlab', - 'HOST': os.environ.get("DB_HOST", default='localhost'), - 'USER': 'fusion_admin', - 'PASSWORD': 'hello123', - } -} - -REST_FRAMEWORK = { - 'DEFAULT_AUTHENTICATION_CLASSES': ( - 'rest_framework.authentication.TokenAuthentication', - ), - 'DEFAULT_PERMISSION_CLASSES': ( - 'rest_framework.permissions.IsAuthenticated', - ) -} - -if DEBUG: - MIDDLEWARE += ( - 'debug_toolbar.middleware.DebugToolbarMiddleware', - ) - - INSTALLED_APPS += ( - 'debug_toolbar', - 'django_extensions', - ) - - - ############################### - # DJANGO_EXTENSIONS SETTINGS: # - ############################### - INTERNAL_IPS = [ - '127.0.0.1', - ] - - ############################### - # DJANGO_EXTENSIONS SETTINGS: # - ############################### - SHELL_PLUS = "ipython" - - SHELL_PLUS_PRINT_SQL = True - - DEBUG_TOOLBAR_CONFIG = { - 'INTERCEPT_REDIRECTS': False, - } 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..d4444ff18 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',})), } diff --git a/FusionIIIT/applications/programme_curriculum/forms.py b/FusionIIIT/applications/programme_curriculum/forms.py index 72ccfa2b2..2e50d5154 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,256 @@ 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'}), + '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 248079cd3..40c353605 100644 --- a/FusionIIIT/applications/programme_curriculum/models.py +++ b/FusionIIIT/applications/programme_curriculum/models.py @@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError from applications.globals.models import ExtraInfo +from django.core.validators import MinValueValidator, MaxValueValidator, DecimalValidator # Create your models here. @@ -26,7 +27,8 @@ ('Design', 'Design'), ('Manufacturing', 'Manufacturing'), ('Management Science', 'Management Science'), - ('Optional Elective', 'Optional Elective'), + ('Open Elective', 'Open Elective'), + ('Swayam','Swayam'), ('Project', 'Project'), ('Optional', 'Optional'), ('Others', 'Others') @@ -117,7 +119,13 @@ 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.PositiveIntegerField(default=1, null=False) + # version = models.FloatField(default=1.0, null=False) + # version = models.PositiveIntegerField(default=1, null=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) no_of_semester = models.PositiveIntegerField(default=1, null=False) min_credit = models.PositiveIntegerField(default=0, null=False) @@ -207,8 +215,13 @@ class Course(models.Model): ''' - code = models.CharField(max_length=10, null=False, unique=True, blank=False) - name = models.CharField(max_length=100, null=False, unique=True, blank=False) + 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=5, + decimal_places=1, + default=1.0, + 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) @@ -228,12 +241,14 @@ class Course(models.Model): ref_books = models.TextField() working_course = models.BooleanField(default=True) disciplines = models.ManyToManyField(Discipline, blank=True) + latest_version = models.BooleanField(default=True) class Meta: - unique_together = ('code', 'name',) + unique_together = ('code','version') def __str__(self): - return str(self.code + " - " +self.name) + return str(self.code + " - " +self.name+"- v"+str(self.version)) + @property def courseslots(self): @@ -277,11 +292,6 @@ class CourseSlot(models.Model): Current Purpose : To store the details regarding a course slot Course slot : is defined as per the curriculum for a programme to have specific type of courses for a given semester - - - - - ATTRIBUTES : semester(programme_curriculum.Semester) - [not nullable] to denote link to the semester details for which the courseslot is made @@ -326,4 +336,141 @@ class Meta: def __self__(self): return '{} - {}'.format(self.course_id, self.instructor_id) - \ No newline at end of file + + +#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..d2ed3637a 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, @@ -30,7 +31,7 @@ def programme_curriculum(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 str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : return HttpResponseRedirect('/programme_curriculum/admin_programmes') @@ -51,12 +52,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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "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 +82,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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' + program = get_object_or_404(Programme, Q(id=programme_id)) curriculums = program.curriculums @@ -81,19 +100,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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "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 +136,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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' curriculum = get_object_or_404(Curriculum, Q(id=curriculum_id)) semesters = curriculum.semesters semester_slots = [] @@ -138,49 +175,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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "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 str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + + url+='faculty/' batches = Batch.objects.all().order_by('year') @@ -192,7 +275,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}) @@ -664,17 +747,28 @@ def update_course_form(request, course_id): 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') @@ -896,4 +990,338 @@ 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 str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + pass + elif str(request.user) == "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(): + form.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 str(des.designation) == "student": +# return HttpResponseRedirect('/programme_curriculum/programmes/') +# elif str(request.user) == "acadadmin" : +# return HttpResponseRedirect('/programme_curriculum/admin_programmes') +# elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "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 str(des.designation) == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif str(request.user) == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "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 str(des.designation) == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif str(request.user) == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "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 str(des.designation) == "CSE HOD" : +# pass +# elif str(request.user) == "acadadmin" : +# return HttpResponseRedirect('/programme_curriculum/admin_programmes') +# elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "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 str(request.user) == "CSE HOD" : + pass + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + + if(str(des.designation) == "Dean Academic"): + # poposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + form = CourseProposalForm(instance=proposalform) + 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 str(request.user) == "CSE HOD" : + pass + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + + if(str(des.designation) == "Dean Academic"): + + course = get_object_or_404(Course, Q(code=proposalform.code)) + form = CourseProposalForm(instance=proposalform) + 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 str(des.designation) == "CSE HOD" or str(des.designation) == "Dean Academic": + pass + elif str(request.user) == "acadadmin" or str(request.user) == "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 str(des.designation) == "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 str(des.designation) == "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 str(des.designation) == "CSE HOD" or str(des.designation) == "Dean Academic": + pass + elif str(request.user) == "acadadmin" or str(request.user) == "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 str(des.designation) == "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 str(des.designation) == "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 str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + pass + elif str(request.user) == "acadadmin" or str(request.user) == "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(str(des.designation) == "CSE HOD"): + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) + elif(str(des.designation) == "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 str(des.designation) == "student": + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif str(request.user) == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "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/programme_curriculum/acad_admin/add_batch_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_batch_form.html index 1159944eb..90eeb464a 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_batch_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_batch_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html index 35ffa3493..0b6d59993 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html index 0d007cc63..136a63850 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html index 81c6aca98..45a51b928 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html index 4629ec121..fd5978c9a 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html index 35c1b9870..504e1fa16 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html index 1b664426d..edb1780fe 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html new file mode 100644 index 000000000..283cc5703 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html @@ -0,0 +1,241 @@ +{% extends 'programme_curriculum/acad_admin/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.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/acad_admin/admin_view_a_courseslot.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_courseslot.html index 6bd1707b7..1620a4b8b 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_courseslot.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_courseslot.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html index bf3ba45e0..4327a5d05 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html new file mode 100644 index 000000000..7fae41d5a --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html @@ -0,0 +1,241 @@ +{% extends 'programme_curriculum/acad_admin/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 %} +
+
+ + {{ 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.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/acad_admin/admin_view_all_batches.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_batches.html index dfedd63c0..bcebdf026 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_batches.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_batches.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} 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..2e87e23a4 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 @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html index f629a476a..48b5e07da 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html index 76656008c..d0176527e 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html index 105bc73a6..fe5924eaa 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html new file mode 100644 index 000000000..ecaf585c0 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html @@ -0,0 +1,137 @@ +{% extends 'programme_curriculum/acad_admin/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+
+
+ Cancel +
+ +
+
+
+ Cancel +
+ +
+
+ + + + + + + + + + + {% for courseProposal in courseProposals %} + + {% if courseProposal.status == 3 %} + + + + + + + {% endif %} + + {% empty %} + + {% endfor %} + + + +

Faculty Name

Faculty Code

Course Name

Status

{{ courseProposal.faculty_name }}{{ courseProposal.faculty_code }}{{ courseProposal.name }} + Approved by Dean + + {% if courseProposal.status == 3 %} + + +
ADD
+ +
+ {% endif %} + +
+
No Courses Proposals to add
+
+
+
+ +
+
+
+ + + + + + + + + + + + {% for updateProposal in updateProposals %} + {% if updateProposal.status == 3 %} + + + + + + + {% endif %} + {% empty %} + + {% endfor %} + +

Faculty Name

Faculty Code

Course Name

Status

{{ updateProposal.faculty_name }}{{ updateProposal.faculty_code }}{{ updateProposal.name }} + Approved by Dean + + {% if updateProposal.status == 3 %} + + +
Update
+ +
+ {% endif %} + +
+
No Courses Proposals Submitted
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html index f7711d5a2..30a71e848 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html @@ -19,6 +19,8 @@ Courses + Course Proposal_Forms +
{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html index b66c65e1b..d1a3b9834 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html @@ -19,6 +19,8 @@ Courses + Course Proposal_Forms +
{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html index 91995e288..151f1791d 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html @@ -19,6 +19,8 @@ Courses + Course Proposal_Forms +
{% endblock %} 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 }} +
+
+ + + +
+ Cancel +
+ +
+ +
+
+ + + +{% 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..890a74889 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html @@ -0,0 +1,177 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+
+
+ + + + + + + + + {% if course.disciplines.all %} + + + + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Course Proposal Form By

{{ course.faculty_name }}({{ course.faculty_code }})

+

{{ 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/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 %} + +
+
+
+ + + + + + + + + + + + + {% 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..d4d2c96ad --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html @@ -0,0 +1,177 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+
+
+ + + + + + + + + {% if course.disciplines.all %} + + + + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Course Proposal Form By

{{ course.faculty_name }}({{ course.faculty_code }})

+

{{ 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_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..e82f0ca7f --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_all_courses.html @@ -0,0 +1,88 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + + + {% for course in courses %} + + + + + + + + {% empty %} + + {% endfor %} + +

index

Course Code

Course Name

Credits

{{ forloop.counter }}{{ course.code }}{{ course.name }}{{ 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..21b9b6bc8 --- /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 }}

+
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..db7b0b810 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html @@ -0,0 +1,76 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+ + + + + + + + + + {% for course in courses %} + + + + + + {% empty %} + + {% endfor %} + +

Course Code

Course Name

Credits

{{ course.code }}{{ course.name }}{{ 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/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 From 01bf0c96f9d41ef57a6daf183d466d3bc9208aee Mon Sep 17 00:00:00 2001 From: Abhikumar Gupta <97209802+abhi87374@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:46:34 +0530 Subject: [PATCH 05/26] Gad 5 (#1341) * Enabled all modules for access (#1120) * GAD-5: Fix responsiveness (#1125) Co-authored-by: A Anunaya <76819712+Anunaya07@users.noreply.github.com> Co-authored-by: Aksh Bansal <63552235+Aksh-Bansal-dev@users.noreply.github.com> * GAD -5 Dashboard Changes (#1325) * dashboard and usercard updated (#1329) --------- Co-authored-by: Yathartha Goenka <75240973+yatharthagoenka@users.noreply.github.com> Co-authored-by: akshatnema <20bcs022@iiitdmj.ac.in> Co-authored-by: Harshvardhan Singh <73544247+Lawful2002@users.noreply.github.com> Co-authored-by: A Anunaya <76819712+Anunaya07@users.noreply.github.com> Co-authored-by: Aksh Bansal <63552235+Aksh-Bansal-dev@users.noreply.github.com> Co-authored-by: BlackHAWK2001 <150950834+BlackHAWK2001@users.noreply.github.com> Co-authored-by: Arpit Tak <140220904+Ishu-ji@users.noreply.github.com> --- FusionIIIT/Fusion/context_processors.py | 5 + .../Fusion/middleware/custom_middleware.py | 48 +++ FusionIIIT/Fusion/settings/common.py | 2 + FusionIIIT/applications/globals/urls.py | 3 +- FusionIIIT/applications/globals/views.py | 87 +++++- .../academic_procedures/academic.html | 44 ++- FusionIIIT/templates/dashboard/dashboard.html | 11 +- FusionIIIT/templates/dashboard/modules.html | 279 ++++++++++++++---- FusionIIIT/templates/dashboard/navbar.html | 213 +++++++------ .../templates/dashboard/sidenavbar.html | 80 ++--- FusionIIIT/templates/globals/usercard.html | 95 +++--- 11 files changed, 602 insertions(+), 265 deletions(-) create mode 100644 FusionIIIT/Fusion/context_processors.py create mode 100644 FusionIIIT/Fusion/middleware/custom_middleware.py mode change 100755 => 100644 FusionIIIT/templates/academic_procedures/academic.html mode change 100755 => 100644 FusionIIIT/templates/dashboard/dashboard.html mode change 100755 => 100644 FusionIIIT/templates/dashboard/modules.html mode change 100755 => 100644 FusionIIIT/templates/dashboard/navbar.html mode change 100755 => 100644 FusionIIIT/templates/globals/usercard.html 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/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 %} -