From 6a9aff4c5d0a24e609c8402208ef5fa4c85e3087 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Wed, 20 Mar 2024 14:58:42 +0530 Subject: [PATCH 1/5] Ac-1 updated model.py (#1372) * 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) * Fixing ui bugs (#1335) * Ac1 Updated Dashboard * changes * Changes in model.py * Changes in model.py --------- 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: akshatnema <20bcs022@iiitdmj.ac.in> Co-authored-by: BlackHAWK2001 <150950834+BlackHAWK2001@users.noreply.github.com> Co-authored-by: Arpit Tak <140220904+Ishu-ji@users.noreply.github.com> Co-authored-by: SukulSarve <143542658+SukulSarve@users.noreply.github.com> --- .../programme_curriculum/models.py | 304 ++++++++++++------ .../acad_admin/update_course_form.html | 254 +++++++++++++++ 2 files changed, 467 insertions(+), 91 deletions(-) create mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/update_course_form.html diff --git a/FusionIIIT/applications/programme_curriculum/models.py b/FusionIIIT/applications/programme_curriculum/models.py index 938427f0e..f81349f5c 100644 --- a/FusionIIIT/applications/programme_curriculum/models.py +++ b/FusionIIIT/applications/programme_curriculum/models.py @@ -10,7 +10,7 @@ from django.core.validators import MinValueValidator, MaxValueValidator, DecimalValidator # Create your models here. - +# Create your models here. PROGRAMME_CATEGORY_CHOICES = [ ('UG', 'Undergraduate'), ('PG', 'Postgraduate'), @@ -28,7 +28,7 @@ ('Manufacturing', 'Manufacturing'), ('Management Science', 'Management Science'), ('Open Elective', 'Open Elective'), - ('Swayam', 'Swayam'), + ('Swayam','Swayam'), ('Project', 'Project'), ('Optional', 'Optional'), ('Others', 'Others') @@ -37,17 +37,16 @@ BATCH_NAMES = [ ('B.Tech', 'B.Tech'), ('M.Tech', 'M.Tech'), - ('B.Des', 'B.Des'), - ('M.Des', 'M.Des'), + ('B.Des','B.Des'), + ('M.Des','M.Des'), ('Phd', 'Phd') ] - class Programme(models.Model): ''' Current Purpose : To store the details regardina a programme - - + + ATTRIBUTES : @@ -58,15 +57,12 @@ class Programme(models.Model): ! - the name attribute has ambiguous entries ''' - category = models.CharField( - max_length=3, choices=PROGRAMME_CATEGORY_CHOICES, null=False, blank=False) - name = models.CharField(max_length=70, null=False, - unique=True, blank=False) - programme_begin_year = models.PositiveIntegerField( - default=datetime.date.today().year, null=False) + category = models.CharField(max_length=3, choices=PROGRAMME_CATEGORY_CHOICES, null=False, blank=False) + name = models.CharField(max_length=70, null=False, unique=True, blank=False) + programme_begin_year = models.PositiveIntegerField(default=datetime.date.today().year, null=False) - def _str_(self): - return str(self.category + " - " + self.name) + def __str__(self): + return str(self.category + " - "+ self.name) @property def curriculums(self): @@ -80,8 +76,8 @@ def get_discipline_objects(self): class Discipline(models.Model): ''' Current Purpose : To store the details regarding a discipline - - + + ATTRIBUTES : @@ -91,27 +87,26 @@ class Discipline(models.Model): ''' - name = models.CharField(max_length=100, null=False, - unique=True, blank=False) - acronym = models.CharField( - max_length=10, null=False, default="", blank=False) - programmes = models.ManyToManyField(Programme, blank=True) - def _str_(self): + name = models.CharField(max_length=100, null=False, unique=True, blank=False) + acronym = models.CharField(max_length=10, null=False, default="", blank=False) + programmes = models.ManyToManyField(Programme, blank=True) + + def __str__(self): return str(self.name) + " " + str(self.acronym) @property def batches(self): return Batch.objects.filter(discipline=self.id).order_by('year') - + class Curriculum(models.Model): ''' Current Purpose : To store the details regarding a curriculum Curriculum definition : a set of all courses offered by the institute within a programme - - + + ATTRIBUTES : @@ -122,40 +117,43 @@ class Curriculum(models.Model): no_of_semester(Integer) - the number of semesters defined for the curriculum min_credit(Integer) - the minimum credits required for the curriculum ''' - programme = models.ForeignKey( - Programme, on_delete=models.CASCADE, null=False) + programme = models.ForeignKey(Programme, on_delete=models.CASCADE, null=False) name = models.CharField(max_length=100, null=False, blank=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)]) + 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) class Meta: unique_together = ('name', 'version',) - - def _str_(self): + + def __str__(self): return str(self.name + " v" + str(self.version)) @property def batches(self): return Batch.objects.filter(curriculum=self.id).order_by('year') + @property def semesters(self): return Semester.objects.filter(curriculum=self.id).order_by('semester_no') + class Semester(models.Model): ''' Current Purpose : To store the details regarding a semester + - - - + + ATTRIBUTES : @@ -166,8 +164,7 @@ class Semester(models.Model): end_semester(DateTime) - to store the end date of the semester ''' - curriculum = models.ForeignKey( - Curriculum, null=False, on_delete=models.CASCADE) + curriculum = models.ForeignKey(Curriculum, null=False, on_delete=models.CASCADE) semester_no = models.PositiveIntegerField(null=False) instigate_semester = models.BooleanField(default=False, null=True) start_semester = models.DateField(blank=True, null=True) @@ -176,22 +173,21 @@ class Semester(models.Model): class Meta: unique_together = ('curriculum', 'semester_no',) - - def _str_(self): - return str(Curriculum._str_(self.curriculum) + ", sem-" + str(self.semester_no)) + + def __str__(self): + return str(Curriculum.__str__(self.curriculum) + ", sem-" + str(self.semester_no)) @property def courseslots(self): return CourseSlot.objects.filter(semester=self.id).order_by("id") - class Course(models.Model): ''' Current Purpose : To store the details regarding a course + - - - + + ATTRIBUTES : @@ -222,10 +218,10 @@ class Course(models.Model): code = models.CharField(max_length=10, null=False, blank=False) name = models.CharField(max_length=100, null=False, blank=False) version = models.DecimalField( - max_digits=2, + max_digits=5, decimal_places=1, default=1.0, - validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)]) + validators=[MinValueValidator(1.0), DecimalValidator(max_digits=5, decimal_places=1)]) credit = models.PositiveIntegerField(default=0, null=False, blank=False) lecture_hours = PositiveIntegerField(null=True, ) tutorial_hours = PositiveIntegerField(null=True) @@ -235,20 +231,13 @@ class Course(models.Model): pre_requisits = models.TextField(null=True, blank=True) pre_requisit_courses = models.ManyToManyField('self', 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) + 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) @@ -257,7 +246,7 @@ class Course(models.Model): class Meta: unique_together = ('code','version') - def _str_(self): + def __str__(self): return str(self.code + " - " +self.name+"- v"+str(self.version)) @@ -265,15 +254,16 @@ def _str_(self): def courseslots(self): return CourseSlot.objects.filter(courses=self.id) - class Batch(models.Model): - ''' - Current Purpose : To store the details regarding a batch(eg details of curriculum assigned for batch) - + ''' + Current Purpose : To store the details regarding a batch(eg details of curriculum assigned for batch) + + + ATTRIBUTES : @@ -284,23 +274,19 @@ class Batch(models.Model): running_batch(Boolean) - to denote whether the batch is currently active or has graduated ''' - name = models.CharField(choices=BATCH_NAMES, - max_length=50, null=False, blank=False) - discipline = models.ForeignKey( - Discipline, null=False, on_delete=models.CASCADE) - year = models.PositiveIntegerField( - default=datetime.date.today().year, null=False) - curriculum = models.ForeignKey( - Curriculum, null=True, blank=True, on_delete=models.SET_NULL) + name = models.CharField(choices=BATCH_NAMES, max_length=50, null=False, blank=False) + discipline = models.ForeignKey(Discipline, null=False, on_delete=models.CASCADE) + year = models.PositiveIntegerField(default=datetime.date.today().year, null=False) + curriculum = models.ForeignKey(Curriculum, null=True, blank=True, on_delete=models.SET_NULL) running_batch = models.BooleanField(default=True) class Meta: unique_together = ('name', 'discipline', 'year',) - def _str_(self): + def __str__(self): return str(self.name) + " " + str(self.discipline.acronym) + " " + str(self.year) - + class CourseSlot(models.Model): ''' Current Purpose : To store the details regarding a course slot @@ -318,19 +304,18 @@ class CourseSlot(models.Model): maximum_registration_limit(integer) - maximum students required for a course ''' - semester = models.ForeignKey( - Semester, null=False, on_delete=models.CASCADE) + semester = models.ForeignKey(Semester, null=False, on_delete=models.CASCADE) name = models.CharField(max_length=100, null=False, blank=False) - type = models.CharField( - max_length=70, choices=COURSESLOT_TYPE_CHOICES, null=False) + type = models.CharField(max_length=70, choices=COURSESLOT_TYPE_CHOICES, null=False) course_slot_info = models.TextField(null=True) courses = models.ManyToManyField(Course, blank=True) duration = models.PositiveIntegerField(default=1) - min_registration_limit = models.PositiveIntegerField(default=0) - max_registration_limit = models.PositiveIntegerField(default=1000) + min_registration_limit = models.PositiveIntegerField(default = 0) + max_registration_limit = models.PositiveIntegerField(default = 1000) + - def _str_(self): - return str(Semester._str_(self.semester) + ", " + self.name) + def __str__(self): + return str(Semester.__str__(self.semester) + ", " + self.name) class Meta: unique_together = ('semester', 'name', 'type') @@ -339,16 +324,153 @@ class Meta: def for_batches(self): return ((Semester.objects.get(id=self.semester.id)).curriculum).batches - class CourseInstructor(models.Model): - course_id = models.ForeignKey(Course, on_delete=models.CASCADE) - instructor_id = models.ForeignKey(ExtraInfo, on_delete=models.CASCADE) - batch_id = models.ForeignKey(Batch, on_delete=models.CASCADE, default=1) - # change extra info to faculty(globals) + course_id = models.ForeignKey(Course, on_delete = models.CASCADE) + instructor_id = models.ForeignKey(ExtraInfo, on_delete = models.CASCADE) + batch_id = models.ForeignKey(Batch, on_delete=models.CASCADE, default=1) + #change extra info to faculty(globals) class Meta: unique_together = ('course_id', 'instructor_id', 'batch_id') def __self__(self): - return '{} - {}'.format(self.course_id, self.instructor_id) \ No newline at end of file + return '{} - {}'.format(self.course_id, self.instructor_id) + + +#new + + +class CourseProposal(models.Model): + ''' + Current Purpose : To store the details regarding a course + + + + + + ATTRIBUTES : + + code(char) - the course code (eg CS3005) + name(char) - the name of the course(eg Machine Learning) + credit(Integer) - the credits defined for the course + lecture_hours(integer) - lecture hours defined for the course + tutorial_hours(Integer) - tutorial hours defined for the course + practical_hours(Integer) - practical hours defined for the course + discussion_hours(Integer) - discussion hours + project_hours(Integer) - project hours + pre_requisits(Boolean) - denote whether this course has prerequisites(courses that one should take before opting this ) + pre_requisit_courses(programme_curriculum.Course) - link to set of prerequisite courses + syllabus(text) - syllabus described for the course + percent_quiz_1(+ve int) - defined weightage in marking + percent_midsem(+ve int) - defined weightage in marking + percent_quiz_2(+ve int) - defined weightage in marking + percent_endsem (+ve int) - defined weightage in marking + percent_project(+ve int) - defined weightage in marking + percent_lab_evaluation (+ve int) - defined weightage in marking + percent_course_attendance (+ve int) - defined weightage in marking + ref_books(text) - reference books suggested for the course + working_course(boolean) - to denote whether the course is currently in execution or not + disciplines(programme_curriculum.Discipline) - to store which discipline is offering the course + + + ''' + faculty_name=models.CharField(max_length=100, null=False,blank=False) + faculty_code = models.CharField(max_length=10, null=False, blank=False) + code = models.CharField(max_length=10, null=False, blank=False) + name = models.CharField(max_length=100, null=False,blank=False) + credit = models.PositiveIntegerField(default=3, null=False, blank=False) + lecture_hours = PositiveIntegerField(default=3,null=True, ) + tutorial_hours = PositiveIntegerField(default=0,null=True) + pratical_hours = PositiveIntegerField(default=0,null=True) + discussion_hours = PositiveIntegerField(default=0,null=True) + project_hours = PositiveIntegerField(default=0,null=True) + pre_requisits = models.TextField(null=True, blank=True) + pre_requisit_courses = models.ManyToManyField(Course, blank=True) + syllabus = models.TextField() + percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False) + percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False) + percent_project = models.PositiveIntegerField(default=15, null=False, blank=False) + percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False) + ref_books = models.TextField() + disciplines = models.ManyToManyField(Discipline, blank=True) + status = models.PositiveIntegerField(default=0,null=False, blank=False) + + class Meta: + unique_together = ('code', 'faculty_code',) + + def __str__(self): + return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name) + + # @property + # def courseslots(self): + # return CourseSlot.objects.filter(courses=self.id) + + + +class UpdateCourseProposal(models.Model): + ''' + Current Purpose : To store the details regarding a update course proposal forms + ATTRIBUTES : + + code(char) - the course code (eg CS3005) + name(char) - the name of the course(eg Machine Learning) + credit(Integer) - the credits defined for the course + lecture_hours(integer) - lecture hours defined for the course + tutorial_hours(Integer) - tutorial hours defined for the course + practical_hours(Integer) - practical hours defined for the course + discussion_hours(Integer) - discussion hours + project_hours(Integer) - project hours + pre_requisits(Boolean) - denote whether this course has prerequisites(courses that one should take before opting this ) + pre_requisit_courses(programme_curriculum.Course) - link to set of prerequisite courses + syllabus(text) - syllabus described for the course + percent_quiz_1(+ve int) - defined weightage in marking + percent_midsem(+ve int) - defined weightage in marking + percent_quiz_2(+ve int) - defined weightage in marking + percent_endsem (+ve int) - defined weightage in marking + percent_project(+ve int) - defined weightage in marking + percent_lab_evaluation (+ve int) - defined weightage in marking + percent_course_attendance (+ve int) - defined weightage in marking + ref_books(text) - reference books suggested for the course + working_course(boolean) - to denote whether the course is currently in execution or not + disciplines(programme_curriculum.Discipline) - to store which discipline is offering the course + + + ''' + faculty_name=models.CharField(max_length=100, null=False,blank=False) + faculty_code = models.CharField(max_length=10, null=False, blank=False) + code = models.CharField(max_length=10, null=False, blank=False) + name = models.CharField(max_length=100, null=False,blank=False) + credit = models.PositiveIntegerField(default=0, null=False, blank=False) + lecture_hours = PositiveIntegerField(null=True, ) + tutorial_hours = PositiveIntegerField(null=True) + pratical_hours = PositiveIntegerField(null=True) + discussion_hours = PositiveIntegerField(null=True) + project_hours = PositiveIntegerField(null=True) + pre_requisits = models.TextField(null=True, blank=True) + pre_requisit_courses = models.ManyToManyField(Course, blank=True) + syllabus = models.TextField() + percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False) + percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False) + percent_project = models.PositiveIntegerField(default=15, null=False, blank=False) + percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False) + ref_books = models.TextField() + working_course = models.BooleanField(default=True) + disciplines = models.ManyToManyField(Discipline, blank=True) + status = models.PositiveIntegerField(default=0,null=False, blank=False) + + class Meta: + unique_together = ('code', 'faculty_code',) + + def __str__(self): + return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name) + + # @property + # def courseslots(self): + # return CourseSlot.objects.filter(courses=self.id) diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/update_course_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/update_course_form.html new file mode 100644 index 000000000..3a750e9fc --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/update_course_form.html @@ -0,0 +1,254 @@ +{% extends 'programme_curriculum/acad_admin/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} +
+

Course Form

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

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.version.errors }}

+

{{ form.credit.errors }}

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

{{version_error}}

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

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

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

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ + + +
+ Cancel +
+ +
+ +
+
+ + + +{% endblock %} +{% block rightcontent %} +
+
+
+ +
ADD ANOTHER COURSE
+ +
+
+{% endblock %} \ No newline at end of file From b754b56c920e2e9e53277f87bc8da66e303e33c5 Mon Sep 17 00:00:00 2001 From: Ravichendraa Date: Mon, 15 Apr 2024 01:58:11 +0530 Subject: [PATCH 2/5] new functionality added --- .../programme_curriculum/admin.py | 15 +- .../programme_curriculum/forms.py | 230 +------- .../programme_curriculum/models.py | 148 ++--- .../applications/programme_curriculum/urls.py | 20 +- .../programme_curriculum/views.py | 554 ++++++++---------- .../acad_admin/add_course_form.html | 238 -------- .../acad_admin/add_curriculum_form.html | 7 + .../admin_view_all_working_curriculums.html | 2 +- ...date_course_form.html => course_form.html} | 10 - .../faculty/course_proposal_form.html | 64 +- .../faculty/dean_view_a_course_proposal.html | 76 +-- .../dean_view_course_proposal_forms.html | 159 ----- .../dean_view_update_a_course_proposal.html | 251 -------- .../faculty/faculty_view_a_course.html | 23 +- .../faculty/faculty_view_all_courses.html | 21 +- .../faculty/filetracking.html | 130 ++++ .../programme_curriculum/faculty/forward.html | 354 +++++++++++ .../head_view_course_proposal_forms.html | 162 ----- .../head_view_update_a_course_proposal.html | 180 ------ .../faculty/inward_course_forms.html | 99 ++++ .../faculty/outward_course_forms.html | 96 +++ .../faculty/update_course_proposal_form.html | 24 +- .../faculty/view_a_course.html | 22 +- ...posal.html => view_a_course_proposal.html} | 30 +- .../faculty/view_a_courseslot.html | 22 +- .../view_a_semester_of_a_curriculum.html | 22 +- .../faculty/view_all_batches.html | 22 +- .../faculty/view_all_courses.html | 22 +- .../faculty/view_all_disciplines.html | 22 +- .../faculty/view_all_programmes.html | 22 +- .../faculty/view_all_working_curriculums.html | 22 +- .../faculty/view_course_proposal_forms.html | 127 ++-- .../view_curriculums_of_a_programme.html | 22 +- .../faculty/view_file.html | 369 ++++++++++++ .../view_semesters_of_a_curriculum.html | 22 +- 35 files changed, 1795 insertions(+), 1814 deletions(-) delete mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html rename FusionIIIT/templates/programme_curriculum/acad_admin/{update_course_form.html => course_form.html} (95%) delete mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_course_proposal_forms.html delete mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/filetracking.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/forward.html delete mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_course_proposal_forms.html delete mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_update_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/inward_course_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/outward_course_forms.html rename FusionIIIT/templates/programme_curriculum/faculty/{head_view_a_course_proposal.html => view_a_course_proposal.html} (88%) create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_file.html diff --git a/FusionIIIT/applications/programme_curriculum/admin.py b/FusionIIIT/applications/programme_curriculum/admin.py index 0afbdaf09..26be61196 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, CourseProposal,UpdateCourseProposal +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseInstructor, NewProposalFile,Proposal_Tracking class ProgrammeAdmin(admin.ModelAdmin): @@ -29,10 +29,11 @@ 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',) +class NewProposalFileAdmin(admin.ModelAdmin): + list_display = ('uploader','designation', 'code', 'name',) + +class ProposalTrackingAdmin(admin.ModelAdmin): + list_display = ('current_id','current_design', 'receive_id', 'receive_design',) # Register your models here. admin.site.register(Discipline, DisciplineAdmin) @@ -43,5 +44,5 @@ class UpdateCourseProposalAdmin(admin.ModelAdmin): admin.site.register(Batch, BatchAdmin) admin.site.register(CourseSlot, CourseSlotAdmin) admin.site.register(CourseInstructor) -admin.site.register(CourseProposal,CourseProposalAdmin) -admin.site.register(UpdateCourseProposal,UpdateCourseProposalAdmin) \ No newline at end of file +admin.site.register(NewProposalFile,NewProposalFileAdmin) +admin.site.register(Proposal_Tracking,ProposalTrackingAdmin) \ No newline at end of file diff --git a/FusionIIIT/applications/programme_curriculum/forms.py b/FusionIIIT/applications/programme_curriculum/forms.py index 210789e29..5d423ebc6 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,CourseProposal,UpdateCourseProposal +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot, PROGRAMME_CATEGORY_CHOICES,NewProposalFile,Proposal_Tracking from django.utils.translation import gettext_lazy as _ class ProgrammeForm(ModelForm): @@ -123,11 +123,6 @@ 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 @@ -228,40 +223,12 @@ class Meta: #new - -class Course_Proposal(ModelForm): +class NewCourseProposalFile(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 + model = NewProposalFile 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',}, ), @@ -270,7 +237,6 @@ class Meta: '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'}), @@ -282,98 +248,15 @@ class Meta: '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'},), + 'uploader' : forms.TextInput(attrs={'readonly':'readonly'},), + 'designation' : forms.TextInput(attrs={'readonly':'readonly'},), + 'subject' : forms.Textarea(attrs={'placeholder': 'Subject','class':'field',}), + 'description' : forms.Textarea(attrs={'placeholder': 'Description','class':'field',}), + 'upload_date' : forms.TextInput(), - } - 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', @@ -393,87 +276,36 @@ class Meta: 'percent_project' : 'percent_project', 'percent_lab_evaluation' : 'percent_lab_evaluation', 'percent_course_attendance' : 'percent_course_attendance', - 'disciplines' : 'disciplines', - 'working_course' : 'working_course', - 'status':'status' + 'uploader' : 'Uploader name', + 'designation' : 'Uploader design', + 'subject' : 'title', + 'description' : 'Description', + 'upload_date' : '', + } -class CourseProposalForm(ModelForm): +class CourseProposalTrackingFile(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 + model = Proposal_Tracking fields = '__all__' widgets = { - 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), - 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,'readonly':'readonly'}), - 'version' : forms.NumberInput(attrs={'placeholder': 'version_no',}, ), - 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits','readonly':'readonly'}, ), - 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours','readonly':'readonly'}, ), - 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours','readonly':'readonly'}, ), - 'pratical_hours' : forms.NumberInput(attrs={'placeholder': 'Practical hours','readonly':'readonly'}, ), - 'discussion_hours' : forms.NumberInput(attrs={'placeholder': 'Group Discussion hours','readonly':'readonly'}, ), - 'project_hours' : forms.NumberInput(attrs={'placeholder': 'Project hours','readonly':'readonly'}, ), - 'working_course' : forms.CheckboxInput(attrs={'class': 'ui checkbox','disabled': 'disabled'}), - 'disciplines' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown','disabled': 'disabled'}), - 'pre_requisits' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), - 'pre_requisit_courses' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown','disabled': 'disabled'}), - 'syllabus' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), - 'ref_books' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), - 'percent_quiz_1' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), - 'percent_midsem' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), - 'percent_quiz_2' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), - 'percent_endsem' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), - 'percent_project' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), - 'percent_lab_evaluation' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), - 'percent_course_attendance' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'file_id' :forms.NumberInput(attrs={'placeholder': 'Course Proposal id','readonly':'readonly'}, ), + 'current_id' : forms.TextInput(attrs={'placeholder': 'Enter Uploader','class':'ui fluid search selection dropdown','readonly':'readonly'},), + 'current_design' : forms.TextInput(attrs={'class':'ui fluid search selection dropdown','readonly':'readonly'},), + 'receive_id' : forms.Select(attrs={'class':'ui fluid search selection dropdown',}), + 'receive_design' : forms.Select(attrs={'class':'ui fluid search selection dropdown',}), + 'disciplines' : forms.Select(attrs={'class':'ui fluid search selection dropdown',}), + 'remarks' : forms.Textarea(attrs={'placeholder': 'Remarks','class':'field',}), } 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' + 'file_id' : 'file_id', + 'current_id' : 'Uploader name', + 'current_design' : 'Uploader design', + 'receive_id' : 'receiver name', + 'receive_design' : 'receiver design', + 'disciplines':'disciplines', + 'remarks' : 'remarks', + } - diff --git a/FusionIIIT/applications/programme_curriculum/models.py b/FusionIIIT/applications/programme_curriculum/models.py index f81349f5c..1406e73f5 100644 --- a/FusionIIIT/applications/programme_curriculum/models.py +++ b/FusionIIIT/applications/programme_curriculum/models.py @@ -8,6 +8,10 @@ from django.core.exceptions import ValidationError from applications.globals.models import ExtraInfo from django.core.validators import MinValueValidator, MaxValueValidator, DecimalValidator +from applications.globals.models import (DepartmentInfo, Designation, + ExtraInfo, Faculty, HoldsDesignation) +from django.contrib.auth.models import User + # Create your models here. # Create your models here. @@ -122,13 +126,15 @@ class Curriculum(models.Model): # version = models.FloatField(default=1.0, null=False) # version = models.PositiveIntegerField(default=1, null=False) version = models.DecimalField( - max_digits=2, + max_digits=5, decimal_places=1, default=1.0, - validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)]) + validators=[MinValueValidator(1.0), DecimalValidator(max_digits=5, decimal_places=1)]) 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) + latest_version = models.BooleanField(default=True) + class Meta: unique_together = ('name', 'version',) @@ -339,44 +345,10 @@ def __self__(self): #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) +class NewProposalFile(models.Model): + + uploader = models.CharField(max_length=100, null=False, blank=False) + designation = models.CharField(max_length=100, 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) @@ -396,81 +368,31 @@ class CourseProposal(models.Model): 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) - + subject = models.CharField(max_length=100, null=True, blank=True) + description = models.CharField(max_length=400, null=True, blank=True) + upload_date = models.DateTimeField(auto_now_add=True) + is_read = models.BooleanField(default = False) + is_update= models.BooleanField(default = False) class Meta: - unique_together = ('code', 'faculty_code',) + unique_together = ('code', 'uploader','name') # if code and faculty code matches to another proposal name will take care of it 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 : + return str(self.uploader + " - " +self.designation+" - "+self.code + " - "+self.name) + +class Proposal_Tracking(models.Model): + + file_id = models.CharField(max_length=10, null=False, blank=False) + current_id = models.CharField(max_length=10, null=False, blank=False) + current_design = models.CharField(max_length=10, null=False, blank=False) + receive_id = models.ForeignKey(User,blank=False,on_delete=models.CASCADE) + receive_design = models.ForeignKey(Designation, blank=False,on_delete=models.CASCADE) + disciplines = models.ForeignKey(Discipline, blank=False,on_delete=models.CASCADE) + receive_date = models.DateTimeField(auto_now_add=True) + forward_date = models.DateTimeField(auto_now_add=True) + remarks = models.CharField(max_length=250, null=True, blank=True) + is_added = models.BooleanField(default = False) + is_submitted = models.BooleanField(default = False) + is_rejected = models.BooleanField(default = False) - 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) + unique_together = ('file_id', 'current_id','receive_id','receive_design') diff --git a/FusionIIIT/applications/programme_curriculum/urls.py b/FusionIIIT/applications/programme_curriculum/urls.py index 8dc18adc1..4d06893b1 100644 --- a/FusionIIIT/applications/programme_curriculum/urls.py +++ b/FusionIIIT/applications/programme_curriculum/urls.py @@ -52,19 +52,17 @@ #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('reject_form//', views.reject_form, name='reject_form'), + path('new_course_proposal_file/',views.new_course_proposal_file,name='new_course_proposal_file'), + path('update_course_proposal_file//',views.update_course_proposal_file,name='update_course_proposal_file'), - 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'), + path('view_a_course_proposal_form//',views.view_a_course_proposal_form,name='view_a_course_proposal_form'), + path('filetracking//',views.filetracking,name='filetracking'), + path('inward_files/',views.inward_files,name='inward_files'), + path('forward_course_forms//',views.forward_course_forms,name='forward_course_forms'), + path('view_inward_files//',views.view_inward_files,name='view_inward_files'), + path('outward_files/',views.outward_files,name='outward_files'), ] diff --git a/FusionIIIT/applications/programme_curriculum/views.py b/FusionIIIT/applications/programme_curriculum/views.py index 5efb2314c..3c1fc5e3e 100644 --- a/FusionIIIT/applications/programme_curriculum/views.py +++ b/FusionIIIT/applications/programme_curriculum/views.py @@ -1,19 +1,19 @@ from django.db.models.query_utils import Q from django.http import request -from django.shortcuts import get_object_or_404, render, HttpResponse +from django.shortcuts import get_object_or_404, render, HttpResponse,redirect from django.http import HttpResponse, HttpResponseRedirect -import itertools +# import itertools 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,CourseProposal,UpdateCourseProposal -from .forms import ProgrammeForm, DisciplineForm, CurriculumForm, SemesterForm, CourseForm, BatchForm, CourseSlotForm, ReplicateCurriculumForm,Course_Proposal,Update_Course_Proposal,CourseProposalForm +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,NewProposalFile,Proposal_Tracking +from .forms import ProgrammeForm, DisciplineForm, CurriculumForm, SemesterForm, CourseForm, BatchForm, CourseSlotForm, ReplicateCurriculumForm,NewCourseProposalFile,CourseProposalTrackingFile from .filters import CourseFilter, BatchFilter, CurriculumFilter from django.db import IntegrityError +from django.utils import timezone # from applications.academic_information.models import Student -from applications.globals.models import (DepartmentInfo, Designation, - ExtraInfo, Faculty, HoldsDesignation) +from applications.globals.models import (DepartmentInfo, Designation,ExtraInfo, Faculty, HoldsDesignation) # ------------module-functions---------------# @@ -310,7 +310,6 @@ def admin_view_all_programmes(request): return render(request, 'programme_curriculum/acad_admin/admin_view_all_programmes.html', {'ug': ug, 'pg': pg, "phd": phd}) -@login_required(login_url='/accounts/login') def admin_view_curriculums_of_a_programme(request, programme_id): """ This function is used to Display Curriculum of a specific Programmes. @@ -344,7 +343,6 @@ def admin_view_curriculums_of_a_programme(request, programme_id): return render(request,'programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html', {'program': program, 'past_curriculums': past_curriculums, 'working_curriculums': working_curriculums, 'curriculumfilter': curriculumfilter}) -@login_required(login_url='/accounts/login') def admin_view_all_working_curriculums(request): """ views all the working curriculums offered by the institute """ @@ -364,7 +362,6 @@ def admin_view_all_working_curriculums(request): return render(request,'programme_curriculum/acad_admin/admin_view_all_working_curriculums.html',{'curriculums':curriculums, 'curriculumfilter': curriculumfilter}) -@login_required(login_url='/accounts/login') def admin_view_semesters_of_a_curriculum(request, curriculum_id): """ gets all the semesters of a specfic curriculum """ @@ -410,7 +407,6 @@ def admin_view_semesters_of_a_curriculum(request, curriculum_id): return render(request, 'programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html', {'curriculum': curriculum, 'semesters': semesters, 'semester_slots': transpose_semester_slots, 'semester_credits': semester_credits, 'all_batches':all_batches}) -@login_required(login_url='/accounts/login') def admin_view_a_semester_of_a_curriculum(request, semester_id): """ This function is used to Display all Semester of a Curriculum. @@ -435,8 +431,6 @@ def admin_view_a_semester_of_a_curriculum(request, semester_id): return render(request, 'programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html', {'semester': semester, 'course_slots': course_slots}) - -@login_required(login_url='/accounts/login') def admin_view_a_courseslot(request, courseslot_id): """ view a course slot """ @@ -455,7 +449,6 @@ def admin_view_a_courseslot(request, courseslot_id): return render(request, 'programme_curriculum/acad_admin/admin_view_a_courseslot.html', {'course_slot': course_slot}) -@login_required(login_url='/accounts/login') def admin_view_all_courses(request): """ views all the course slots of a specfic semester """ @@ -476,7 +469,6 @@ def admin_view_all_courses(request): return render(request, 'programme_curriculum/acad_admin/admin_view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) -@login_required(login_url='/accounts/login') def admin_view_a_course(request, course_id): """ views the details of a Course """ @@ -491,7 +483,6 @@ def admin_view_a_course(request, course_id): return render(request, 'programme_curriculum/acad_admin/admin_view_a_course.html', {'course': course}) -@login_required(login_url='/accounts/login') def admin_view_all_discplines(request): """ views the details of a Course """ @@ -506,7 +497,6 @@ def admin_view_all_discplines(request): return render(request, 'programme_curriculum/acad_admin/admin_view_all_disciplines.html', {'disciplines': disciplines}) -@login_required(login_url='/accounts/login') def admin_view_all_batches(request): """ views the details of a Course """ @@ -531,7 +521,7 @@ def admin_view_all_batches(request): return render(request, 'programme_curriculum/acad_admin/admin_view_all_batches.html', {'batches': batches, 'finished_batches': finished_batches, 'batchfilter': batchfilter}) -@login_required(login_url='/accounts/login') + def add_discipline_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -553,7 +543,6 @@ def add_discipline_form(request): return render(request, 'programme_curriculum/acad_admin/add_discipline_form.html',{'form':form}) -@login_required(login_url='/accounts/login') def edit_discipline_form(request, discipline_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -576,7 +565,7 @@ def edit_discipline_form(request, discipline_id): return render(request, 'programme_curriculum/acad_admin/add_discipline_form.html',{'form':form}) -@login_required(login_url='/accounts/login') + def add_programme_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -600,7 +589,7 @@ def add_programme_form(request): return render(request,'programme_curriculum/acad_admin/add_programme_form.html',{'form':form, 'submitbutton': submitbutton}) -@login_required(login_url='/accounts/login') + def edit_programme_form(request, programme_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -623,7 +612,6 @@ def edit_programme_form(request, programme_id): return render(request, 'programme_curriculum/acad_admin/add_programme_form.html',{'form':form, 'submitbutton': submitbutton}) -@login_required(login_url='/accounts/login') def add_curriculum_form(request): """ This function is used to add Curriculum and Semester into Curriculum and Semester table. @@ -716,7 +704,6 @@ def edit_curriculum_form(request, curriculum_id): return render(request, 'programme_curriculum/acad_admin/add_curriculum_form.html',{'form':form, 'submitbutton': submitbutton}) -@login_required(login_url='/accounts/login') def add_course_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -732,18 +719,18 @@ def add_course_form(request): if request.method == 'POST': form = CourseForm(request.POST) if form.is_valid(): - form.save() + new_course = form.save(commit=False) + new_course.version=1.0 + new_course.save() course = Course.objects.last() messages.success(request, "Added successful") return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course.id) + "/") - return render(request,'programme_curriculum/acad_admin/add_course_form.html',{'form':form}) + return render(request,'programme_curriculum/acad_admin/course_form.html',{'form':form,'submitbutton': submitbutton}) -@login_required(login_url='/accounts/login') def update_course_form(request, course_id): - #user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() if request.session['currentDesignationSelected']== "student": # or request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" return HttpResponseRedirect('/programme_curriculum/programmes/') @@ -772,10 +759,9 @@ def update_course_form(request, 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}) + return render(request,'programme_curriculum/acad_admin/course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton,'version_error':version_error}) -@login_required(login_url='/accounts/login') def add_courseslot_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -801,7 +787,6 @@ def add_courseslot_form(request): return render(request, 'programme_curriculum/acad_admin/add_courseslot_form.html',{'form':form, 'submitbutton': submitbutton, 'curriculum_id': curriculum_id}) -@login_required(login_url='/accounts/login') def edit_courseslot_form(request, courseslot_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -847,7 +832,6 @@ def delete_courseslot(request, courseslot_id): return render(request, 'programme_curriculum/view_a_courseslot.html', {'course_slot': courseslot}) -@login_required(login_url='/accounts/login') def add_batch_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -870,7 +854,6 @@ def add_batch_form(request): return render(request, 'programme_curriculum/acad_admin/add_batch_form.html',{'form':form, 'submitbutton': submitbutton}) -@login_required(login_url='/accounts/login') def edit_batch_form(request, batch_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -897,7 +880,6 @@ def edit_batch_form(request, batch_id): return render(request,'programme_curriculum/acad_admin/add_batch_form.html',{'batch':batch, 'form':form, 'submitbutton':submitbutton}) -@login_required(login_url='/accounts/login') def instigate_semester(request, semester_id): """ This function is used to add the semester information. @@ -938,7 +920,6 @@ def instigate_semester(request, semester_id): return render(request,'programme_curriculum/acad_admin/instigate_semester_form.html',{'semester':semester, 'form':form, 'submitbutton':submitbutton, 'curriculum_id':curriculum_id}) -@login_required(login_url='/accounts/login') def replicate_curriculum(request, curriculum_id): """ This function is used to replicate the previous curriculum into a new curriculum. @@ -996,77 +977,22 @@ def replicate_curriculum(request, curriculum_id): 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): +def view_course_proposal_forms(request): user_details = ExtraInfo.objects.get(user = request.user) - des = HoldsDesignation.objects.all().filter(user = request.user).first() - if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : - pass - elif request.session['currentDesignationSelected'] == "acadadmin": - return HttpResponseRedirect('/programme_curriculum/admin_programmes') - faculty_id=user_details.user_id - details=User.objects.get(id=faculty_id) - faculty_name=details.first_name +' '+ details.last_name - + des = HoldsDesignation.objects.all().filter(user = request.user).last() + if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : + pass + elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') - - form=Course_Proposal(initial={'faculty_name': faculty_name,'faculty_code':des.user}) - submitbutton= request.POST.get('Submit') - if submitbutton: - if request.method == 'POST': - form = Course_Proposal(request.POST) - if form.is_valid(): - new_course = form.save(commit=False) - new_course.status=0 - new_course.save() - messages.success(request, " Proposal Added successful") - return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') - - return render(request,'programme_curriculum/faculty/course_proposal_form.html',{'form':form,'submitbutton': submitbutton}) - - -# @login_required(login_url='/accounts/login') -# def update_course_proposal_form(request, course_id): - -# user_details = ExtraInfo.objects.get(user = request.user) -# des = HoldsDesignation.objects.all().filter(user = request.user).first() -# if request.session['currentDesignationSelected']== "student": -# return HttpResponseRedirect('/programme_curriculum/programmes/') -# elif str(request.user) == "acadadmin" : -# return HttpResponseRedirect('/programme_curriculum/admin_programmes') -# elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor": -# pass + courseProposal = NewProposalFile.objects.filter(uploader=des.user,designation=request.session['currentDesignationSelected'],is_update=False) + updatecourseProposal = NewProposalFile.objects.filter(uploader=des.user,designation=request.session['currentDesignationSelected'],is_update=True) -# 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}) + return render(request, 'programme_curriculum/faculty/view_course_proposal_forms.html',{'courseProposals': courseProposal,'updateProposals':updatecourseProposal}) @login_required(login_url='/accounts/login') def faculty_view_all_courses(request): @@ -1081,10 +1007,6 @@ def faculty_view_all_courses(request): elif request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor": pass - # discipline=user_details.department - # courses = Course.objects.filter(disciplines=discipline) - - courses = Course.objects.all() coursefilter = CourseFilter(request.GET, queryset=courses) @@ -1094,7 +1016,6 @@ def faculty_view_all_courses(request): 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 """ @@ -1110,203 +1031,110 @@ def faculty_view_a_course(request, course_id): return render(request, 'programme_curriculum/faculty/faculty_view_a_course.html', {'course': course}) +def view_a_course_proposal_form(request,CourseProposal_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor": + pass + elif request.session['currentDesignationSelected'] == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + else: + return HttpResponseRedirect('/programme_curriculum/programmes') + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + proposalform = get_object_or_404(NewProposalFile, Q(id=CourseProposal_id)) + return render(request, 'programme_curriculum/faculty/view_a_course_proposal.html', {'proposal': proposalform}) -# ##new -# @login_required(login_url='/accounts/login') -# def head_view_a_course(request, proposal_id): -# """ views the details of a Course """ - -# user_details = ExtraInfo.objects.get(user = request.user) -# des = HoldsDesignation.objects.all().filter(user = request.user).last() -# if request.session['currentDesignationSelected']== "CSE HOD" : -# pass -# elif str(request.user) == "acadadmin" : -# return HttpResponseRedirect('/programme_curriculum/admin_programmes') -# elif request.session['currentDesignationSelected']== "Associate Professor" or request.session['currentDesignationSelected']== "Professor" or request.session['currentDesignationSelected']== "Assistant Professor" or str(des.designation)=="student" : -# return HttpResponseRedirect('/programme_curriculum/programmes') -# proposal = get_object_or_404(CourseProposal, Q(id=proposal_id)) -# return render(request, 'programme_curriculum/hod/head_view_a_course.html', {'proposal': proposal}) -def head_view_a_course_proposal(request,CourseProposal_id): - user_details = ExtraInfo.objects.get(user = request.user) +def new_course_proposal_file(request): des = HoldsDesignation.objects.all().filter(user = request.user).first() + # if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor": + # pass + # elif request.session['currentDesignationSelected'] == "acadadmin" : + # return HttpResponseRedirect('/programme_curriculum/admin_programmes') + # else: + # return HttpResponseRedirect('/programme_curriculum/programmes') + + uploader = request.user.extrainfo + design=request.session['currentDesignationSelected'] + form=NewCourseProposalFile(initial={'uploader':des.user,'designation':design}) + + submitbutton= request.POST.get('Submit') + + if submitbutton: + if request.method == 'POST': + form = NewCourseProposalFile(request.POST) + if form.is_valid(): + new_course=form.save(commit=False) + new_course.is_read=False + new_course.save() + messages.success(request, "Added successful") - if request.session['currentDesignationSelected'] == "CSE HOD" : - pass - proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') - if (request.session['currentDesignationSelected'] == "Dean Academic"): - proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) - form = CourseProposalForm(instance=proposalform,initial={'version':1.0}) - submitbutton= request.POST.get('Submit') - if submitbutton: - if request.method == 'POST': - form = CourseProposalForm(request.POST) - if form.is_valid(): - proposalform.status = 3 - proposalform.save() - form.save() - course = get_object_or_404(Course, Q(code=proposalform.code)) - messages.success(request, "Updated "+ proposalform.name +" successful") - return HttpResponseRedirect("/programme_curriculum/course/" + str(course.id) + "/") - return render(request, 'programme_curriculum/faculty/dean_view_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) - return render(request, 'programme_curriculum/faculty/head_view_a_course_proposal.html', {'proposal': proposalform}) + return render(request,'programme_curriculum/faculty/course_proposal_form.html',{'form':form,'submitbutton': submitbutton}) + + + +def filetracking(request,proposal_id): -def head_view_a_update_course_proposal(request,UpdateCourseProposal_id): - user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() + # if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : + # pass + # elif request.session['currentDesignationSelected'] == "acadadmin": + # return HttpResponseRedirect('/programme_curriculum/admin_programmes') + + uploader = request.user.extrainfo + design=request.session['currentDesignationSelected'] + file = get_object_or_404(NewProposalFile, Q(id=proposal_id)) + file_data=file.name+' '+file.code + form=CourseProposalTrackingFile(initial={'current_id':file.uploader,'current_design':file.designation,'file_id':int(proposal_id)}) + + submitbutton= request.POST.get('Submit') + + if submitbutton: + if request.method == 'POST': + form = CourseProposalTrackingFile(request.POST) + if form.is_valid(): + form.is_read=False + form.save() + messages.success(request, "Added successful") + return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') - if request.session['currentDesignationSelected'] == "CSE HOD" : - pass - proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) - if(request.session['currentDesignationSelected'] == "Dean Academic"): - - # course = get_object_or_404(Course, Q(code=proposalform.code)) - course =Course.objects.all().filter(code=proposalform.code).order_by('version').last() - previous = Course.objects.all().filter(code=course.code).order_by('version').last() - course.version=previous.version - version_error='' - form = CourseProposalForm(instance=proposalform,initial={'version':course.version}) - submitbutton= request.POST.get('Submit') - if submitbutton: - if request.method == 'POST': - form = CourseForm(request.POST) - if form.is_valid() : - previous.latest_version=False - previous.save() - form.latest_version=True - new_course = form.save(commit=False) - if(new_course.version>previous.version): - proposalform.status = 3 - proposalform.save() - form.save() - course = Course.objects.last() - messages.success(request, "Added successful") - return HttpResponseRedirect("/programme_curriculum/course/"+ str(course.id) + "/") - else: - version_error+=f'The version should be greater than {previous.version}' - return render(request, 'programme_curriculum/faculty/dean_view_update_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton,'version_error':version_error}) - return render(request, 'programme_curriculum/faculty/head_view_update_a_course_proposal.html', {'proposal': proposalform}) - - #return render(request,'programme_curriculum/acad_admin/update_course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton,'version_error':version_error}) + return render(request,'programme_curriculum/faculty/filetracking.html',{'form':form,'submitbutton': submitbutton,'file_info':file_data}) - - - # 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): +def inward_files(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).last() - if request.session['currentDesignationSelected'] == "CSE HOD" or request.session['currentDesignationSelected'] == "Dean Academic": + if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : pass - elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : + elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : return HttpResponseRedirect('/programme_curriculum/programmes/') - proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) - proposalform.status = 2 - proposalform.save() - courses = CourseProposal.objects.all() - Updatecourses = UpdateCourseProposal.objects.all() - - if request.session['currentDesignationSelected'] == "CSE HOD": - proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) - proposalform.status = 2 - proposalform.save() - courses = CourseProposal.objects.all() - return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) - if request.session['currentDesignationSelected'] == "Dean Academic" : - proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) - proposalform.status = 4 - proposalform.save() - courses = CourseProposal.objects.all() - Updatecourses = UpdateCourseProposal.objects.all() - - return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + id=request.user + user_designation=HoldsDesignation.objects.select_related('user','working','designation').filter(user=request.user) + print(user_designation) -def reject_update_form(request,UpdateCourseProposal_id): - user_details = ExtraInfo.objects.get(user = request.user) - des = HoldsDesignation.objects.all().filter(user = request.user).last() + designation = Designation.objects.get(name=request.session['currentDesignationSelected']) + des_id = designation.id + print(des_id) - if request.session['currentDesignationSelected'] == "CSE HOD" or request.session['currentDesignationSelected'] == "Dean Academic": - pass - elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : - return HttpResponseRedirect('/programme_curriculum/programmes/') + courseProposal = Proposal_Tracking.objects.filter(receive_design = des_id,receive_id= id) + print(courseProposal) + - proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) - proposalform.status = 2 - proposalform.save() - courses = UpdateCourseProposal.objects.all() - if request.session['currentDesignationSelected']== "CSE HOD": - proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) - proposalform.status = 2 - proposalform.save() - Updatecourses = UpdateCourseProposal.objects.all() - courses=CourseProposal.objects.all() - return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) - if request.session['currentDesignationSelected']== "Dean Academic" : - proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) - proposalform.status = 4 - proposalform.save() - courses = CourseProposal.objects.all() - Updatecourses = UpdateCourseProposal.objects.all() - return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) - - -# def approve_form(request,CourseProposal_id): -# proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) -# proposalform.status = 3 -# proposalform.save() -# courses = CourseProposal.objects.all() -# Updatecourses = UpdateCourseProposal.objects.all() - -# return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) -# def approve_update_form(request,UpdateCourseProposal_id): -# proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) -# proposalform.status = 3 -# proposalform.save() -# courses = CourseProposal.objects.all() -# Updatecourses = UpdateCourseProposal.objects.all() - -# return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + return render(request, 'programme_curriculum/faculty/inward_course_forms.html',{'courseProposals': courseProposal}) -@login_required(login_url='/accounts/login') -def view_course_proposal_forms(request): + +def outward_files(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).last() @@ -1315,49 +1143,167 @@ def view_course_proposal_forms(request): elif request.session['currentDesignationSelected'] == "acadadmin" or request.session['currentDesignationSelected'] == "student" : return HttpResponseRedirect('/programme_curriculum/programmes/') - courseProposal = CourseProposal.objects.filter(faculty_code=des.user) - coursefilter = CourseFilter(request.GET, queryset=courseProposal) + id=request.user + user_designation=HoldsDesignation.objects.select_related('user','working','designation').filter(user=request.user) + print(user_designation) + design=request.session['currentDesignationSelected'] - courses = CourseProposal.objects.all() - updatecourses=UpdateCourseProposal.objects.all() - updatecourseProposal = UpdateCourseProposal.objects.filter(faculty_code=des.user) + designation = Designation.objects.get(name=request.session['currentDesignationSelected']) + des_id = designation.id + print(des_id) - if(request.session['currentDesignationSelected'] == "CSE HOD"): - return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) - elif(request.session['currentDesignationSelected'] == "Dean Academic"): - return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) - return render(request, 'programme_curriculum/faculty/view_course_proposal_forms.html',{'courseProposals': courseProposal,'updateProposals':updatecourseProposal}) - - - + courseProposal = Proposal_Tracking.objects.filter(current_design = design,current_id= des.user) + print(courseProposal) + + return render(request, 'programme_curriculum/faculty/outward_course_forms.html',{'courseProposals': courseProposal}) -@login_required(login_url='/accounts/login') -def update_course_proposal_form(request, course_id): - user_details = ExtraInfo.objects.get(user = request.user) +def update_course_proposal_file(request,course_id): des = HoldsDesignation.objects.all().filter(user = request.user).first() - if request.session['currentDesignationSelected'] == "student": - return HttpResponseRedirect('/programme_curriculum/programmes/') - elif request.session['currentDesignationSelected'] == "acadadmin" : - return HttpResponseRedirect('/programme_curriculum/admin_programmes/') - elif request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" : + if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor": pass + elif request.session['currentDesignationSelected'] == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + else: + return HttpResponseRedirect('/programme_curriculum/programmes') - 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}) + uploader = request.user.extrainfo + design=request.session['currentDesignationSelected'] course = get_object_or_404(Course, Q(id=course_id)) - form = Update_Course_Proposal(instance=course) - + file_data=course.code+' - '+course.name + form = NewCourseProposalFile(initial={'uploader':des.user,'designation':design},instance=course) submitbutton= request.POST.get('Submit') + if submitbutton: if request.method == 'POST': - form = Update_Course_Proposal(request.POST) + form = NewCourseProposalFile(request.POST) if form.is_valid(): - form.save() - messages.success(request, "Updated "+ course.name +" successful") + new_course=form.save(commit=False) + new_course.is_read=False + new_course.is_update=True + new_course.save() + messages.success(request, "Added 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 + + + return render(request,'programme_curriculum/faculty/course_proposal_form.html',{'form':form,'submitbutton': submitbutton,'file_info':file_data}) + + + + +def forward_course_forms(request,ProposalId): + de= ProposalId + des = HoldsDesignation.objects.all().filter(user = request.user).first() + + courseform = Proposal_Tracking.objects.all().filter(id=ProposalId) + + uploader = request.user.extrainfo + design=request.session['currentDesignationSelected'] + file = get_object_or_404(Proposal_Tracking, Q(id=ProposalId)) + file_id = int(file.file_id) + file2 = get_object_or_404(NewProposalFile, Q(id=file_id)) + Proposal_D = file.id + + if request.session['currentDesignationSelected'] == "Dean Academic" : + file = get_object_or_404(Proposal_Tracking, Q(id=ProposalId)) + file_id = int(file.file_id) + file2 = get_object_or_404(NewProposalFile, Q(id=file_id)) + + if(file2.is_update==True): + course =Course.objects.all().filter(code=file2.code).last() + 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) + if form.is_valid() : + previous.latest_version=False + previous.save() + file.is_added=True + file.is_submitted=True + file.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/course/" + str(course.id) + "/") + else: + version_error+=f'The version should be greater than {previous.version}' + + return render(request,'programme_curriculum/faculty/dean_view_a_course_proposal.html',{'course':course, 'form':form, 'submitbutton': submitbutton,'version_error':version_error,'id':Proposal_D}) + else: + form = CourseForm(instance=file2,initial={'disciplines':file.disciplines}) + # course1 =Course.objects.filter(code=file2.code,name=file2.name,credit=file2.credit,lecture_hours=file2.lecture_hours,tutorial_hours=file2.tutorial_hours,pratical_hours=file2.pratical_hours,discussion_hours=file2.discussion_hours,project_hours=file2.project_hours,pre_requisits=file2.pre_requisits,syllabus=file2.syllabus,percent_quiz_1=file2.percent_quiz_1,percent_midsem=file2.percent_midsem,percent_quiz_2=file2.percent_quiz_2,percent_project=file2.percent_project,percent_endsem=file2.percent_endsem,percent_lab_evaluation=file2.percent_lab_evaluation,percent_course_attendance=file2.percent_course_attendance,ref_books=file2.ref_books) + submitbutton= request.POST.get('Submit') + + if submitbutton: + if request.method == 'POST': + form = CourseForm(request.POST) + if form.is_valid(): + file.is_added=True + file.is_submitted=True + file.save() + form.save() + course =Course.objects.all().filter(code=file2.code).last() + messages.success(request, "Updated "+ file2.name +" successful") + return HttpResponseRedirect("/programme_curriculum/course/" + str(course.id) + "/") + return render(request, 'programme_curriculum/faculty/dean_view_a_course_proposal.html', {'course': file2 ,'form':form,'submitbutton': submitbutton,'id':Proposal_D}) + + else: + + form=CourseProposalTrackingFile(initial={'current_id':des.user,'current_design':request.session['currentDesignationSelected'],'file_id':file.file_id,'disciplines':file.disciplines}) + + submitbutton= request.POST.get('Submit') + + if submitbutton: + if request.method == 'POST': + form = CourseProposalTrackingFile(request.POST) + if form.is_valid(): + file.is_submitted=True + file.save() + form.is_read=False + form.save() + messages.success(request, "Added successful") + return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') + + return render(request,'programme_curriculum/faculty/forward.html',{'form':form,'receive_date':file.receive_date,'proposal':file2,'submitbutton': submitbutton,'id':Proposal_D}) + + +def view_inward_files(request,ProposalId): + des = HoldsDesignation.objects.all().filter(user = request.user).first() + + uploader = request.user.extrainfo + design=request.session['currentDesignationSelected'] + file = get_object_or_404(Proposal_Tracking, Q(id=ProposalId)) + file_id = int(file.file_id) + file2 = get_object_or_404(NewProposalFile, Q(id=file_id)) + file_data='' + file_data2='' + + if(file.is_rejected): + file_data='"'+str(file2.name) + '"'+' Course Rejected by ' + str(file.receive_id) + ' - ' +str(file.receive_design) + if(file.is_added): + file_data2='"'+str(file2.code)+' - '+str(file2.name) +'" Course Added Succesfully' + + courseProposal = Proposal_Tracking.objects.filter(file_id=file.file_id,disciplines=file.disciplines) + print(courseProposal) + form=CourseProposalTrackingFile(initial={'current_id':des.user,'current_design':request.session['currentDesignationSelected'],'file_id':file.file_id,'disciplines':file.disciplines}) + + return render(request,'programme_curriculum/faculty/view_file.html',{'form':form,'receive_date':file.receive_date,'proposal':file2,'trackings':courseProposal,'file_info':file_data,'file_sucess':file_data2}) + +def reject_form(request,ProposalId): + track=get_object_or_404(Proposal_Tracking, Q(id=ProposalId)) + track.is_rejected=True + track.is_submitted=True + track.save() + messages.success(request, "Course Proposal Form Rejected") + return HttpResponseRedirect('/programme_curriculum/inward_files/') + \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html deleted file mode 100644 index b5597a31a..000000000 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html +++ /dev/null @@ -1,238 +0,0 @@ -{% extends 'programme_curriculum/acad_admin/common.html' %} - -{% block sidetabmenu %} - -{% endblock %} - -{% block content %} -
-

Course Form

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

{{ form.name.errors }}

-

{{ form.code.errors }}

-

{{ form.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 }} -
-
- - - -
- Cancel -
- -
- -
-
- - - -{% endblock %} -{% block rightcontent %} -
-
- -{% endblock %} \ No newline at end of file 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..a44dc5aac 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html @@ -47,6 +47,13 @@ {% endif %} +
+ {% if version_error %} +
+

{{version_error}}

+
+ {% endif %} +
{{ form.name }} 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..f9ced979e 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 @@ -54,7 +54,7 @@ {{ curriculum.no_of_semester }}
EDIT
{% endblock %} @@ -44,22 +59,32 @@
{% if form.name.errors or form.code.errors or form.credit.errors %}
-

{{ form.faculty_name.errors }}

-

{{ form.faculty_code.errors }}

+

{{ form.designation.errors }}

+

{{ form.uploader.errors }}

+

{{ form.subject.errors }}

+

{{ form.description.errors }}

{{ form.name.errors }}

{{ form.code.errors }}

{{ form.credit.errors }}

{% endif %}
-
- - {{ form.faculty_name }} +
+
+ + {{form.uploader}} +
+
+ + {{form.designation}} +
- - {{ form.faculty_code }} -
+ + {{ form.subject }} +
+ + {{ form.description }}
{{ form.name }} @@ -109,7 +134,7 @@ {{ form.project_hours }}
-
+ {% comment %}
{% if form.disciplines.errors %}
{{ form.disciplines.errors }} @@ -117,7 +142,7 @@ {% endif %} {{ form.disciplines }} -
+
{% endcomment %}
{% if form.pre_requisits.errors %}
@@ -154,15 +179,6 @@ {{ form.ref_books }}
-
- {% if form.status.errors %} -
- {{ form.status.errors }} -
- {% endif %} - - {{ form.status }} -
{% if form.percent_quiz_1.errors %}
@@ -214,7 +230,11 @@
Cancel
+ {% comment %} Submit {% endcomment %} + {% comment %} Submit + {% endcomment %} + {% comment %} {% endcomment %}
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 index 509fc8d57..11ffeab6a 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html @@ -18,15 +18,30 @@ Batches - Course Proposal Form - - + +
{% endblock %} {% block content %}
-

Course Proposal Form

+

Course Form

@@ -46,27 +61,37 @@

{{ form.name.errors }}

{{ form.code.errors }}

+

{{ form.version.errors }}

{{ form.credit.errors }}

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

{{version_error}}

+
+ {% endif %} +
{{ form.name }} +
+
-
+
{{ form.code }}
-
- - {{ form.version }} -
-
+
{{ form.credit }}
+
+ + {{ form.version }} +
{% if form.lecture_hours.errors or form.tutorial_hours.errors or form.pratical_hours.errors or form.discussion_hours.errors or form.project_hours.errors %} @@ -76,6 +101,7 @@

{{ form.pratical_hours.errors }}

{{ form.discussion_hours.errors }}

{{ form.project_hours.errors }}

+
{% endif %}
@@ -92,6 +118,8 @@ {{ form.pratical_hours }}
+ +
@@ -206,38 +234,16 @@
- - {% endblock %} -{% comment %} {% block rightcontent %} +{% block rightcontent %}

- -{% endblock %} {% endcomment %} \ No newline at end of file +{% 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 deleted file mode 100644 index 08842798d..000000000 --- a/FusionIIIT/templates/programme_curriculum/faculty/dean_view_course_proposal_forms.html +++ /dev/null @@ -1,159 +0,0 @@ -{% 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 deleted file mode 100644 index 6be107cb8..000000000 --- a/FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html +++ /dev/null @@ -1,251 +0,0 @@ -{% extends 'programme_curriculum/common.html' %} -{% block sidetabmenu %} - -{% endblock %} - -{% block content %} -
-

Update Course Proposal Form

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

{{ form.name.errors }}

-

{{ form.code.errors }}

-

{{ form.credit.errors }}

-

{{ form.version.errors }}

-
- {% endif %} -
-
- {% if version_error %} -
-

{{version_error}}

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

{{ form.lecture_hours.errors }}

-

{{ form.tutorial_hours.errors }}

-

{{ form.pratical_hours.errors }}

-

{{ form.discussion_hours.errors }}

-

{{ form.project_hours.errors }}

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

{{ form.percent_quiz_1.errors }}

-
- {% endif %} -
-
-
- - {{ form.percent_quiz_1 }} -
-
- - - {{ form.percent_midsem }} -
-
- - - {{ form.percent_quiz_2 }} -
-
- - - {{ form.percent_endsem }} -
-
-
-
- - - {{ form.percent_project }} -
-
- - - {{ form.percent_lab_evaluation }} -
-
- - - {{ form.percent_course_attendance }} -
-
- - - -
- Reject -
- -
- -
-
- - - -{% endblock %} -{% comment %} {% block rightcontent %} -
-
- -{% endblock %} {% endcomment %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html b/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html index cc0f295aa..6dff57ef2 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html @@ -21,9 +21,24 @@ Course Proposal Form - Update Courses Proposal Form - - + +
{% endblock %} {% block content %} @@ -153,7 +168,7 @@

{{ discipline }}

EDIT COURSE
{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/filetracking.html b/FusionIIIT/templates/programme_curriculum/faculty/filetracking.html new file mode 100644 index 000000000..ef0815d1a --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/filetracking.html @@ -0,0 +1,130 @@ +{% 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.current_id.errors or form.file_id.errors or form.current_design.errors %} +
+

{{ form.current_id.errors }}

+

{{ form.file_id.errors }}

+

{{ form.current_design.errors }}

+

{{ form.receive_id.errors }}

+

{{ form.receive_design.errors }}

+

{{ form.remarks.errors }}

+
+ {% endif %} +
+
+ + {{ form.file_id }} +
+ {% comment %}
+ + {{ form.file_id}} +
{% endcomment %} +
+ + {{ form.current_id }} +
+ + {{ form.current_design }} +
+
+ + {{ form.receive_id }} +
+
+ + {{ form.receive_design }} +
+
+ + {{ form.remarks }} +
+
+ + {{ form.disciplines }} +
+ + +
+ Cancel +
+ + +
+ + +
+ + + +{% endblock %} +{% block rightcontent %} +
+ +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/forward.html b/FusionIIIT/templates/programme_curriculum/faculty/forward.html new file mode 100644 index 000000000..c523c31d8 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/forward.html @@ -0,0 +1,354 @@ +{% extends 'programme_curriculum/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} +{% block content %} + + + +
+ + + + + + + + {% csrf_token %} +
+ +
+ Receive date:{{receive_date}} +
+ + {% csrf_token %} + {% if form.non_field_errors %} +
+
We had some issues
+ {% for error in form.non_field_errors %} +
    +
  • {{ error }}
  • +
+ {% endfor %} +
+ {% endif %} +
+ {% if form.current_id.errors or form.file_id.errors or form.current_design.errors %} +
+

{{ form.current_id.errors }}

+

{{ form.file_id.errors }}

+

{{ form.current_design.errors }}

+

{{ form.receive_id.errors }}

+

{{ form.receive_design.errors }}

+

{{ form.remarks.errors }}

+
+ {% endif %} +
+ +
+ + {{ form.file_id }} +
+
+ + {{ file_info}} +
+ + {{ form.current_id }} +
+ + {{ form.current_design }} +
+
+ + {{ form.receive_id }} +
+
+ + {{ form.receive_design }} +
+
+ + {{ form.remarks }} +
+
+ + {{ form.disciplines }} +
+ + +
+ Cancel +
+ + + {% comment %} {% endcomment %} +
+ + +
+
+
+ + + + + + + + +{% 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 deleted file mode 100644 index 24863ff3a..000000000 --- a/FusionIIIT/templates/programme_curriculum/faculty/head_view_course_proposal_forms.html +++ /dev/null @@ -1,162 +0,0 @@ -{% 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 deleted file mode 100644 index 1bfb07e83..000000000 --- a/FusionIIIT/templates/programme_curriculum/faculty/head_view_update_a_course_proposal.html +++ /dev/null @@ -1,180 +0,0 @@ - -{% 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/inward_course_forms.html b/FusionIIIT/templates/programme_curriculum/faculty/inward_course_forms.html new file mode 100644 index 000000000..c65565fd8 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/inward_course_forms.html @@ -0,0 +1,99 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} +{% load static %} +{% load static %} + +{% block content %} + + +
+ + + + + + + + + + + + + + + + + {% for courseProposal in courseProposals %} + + + + + + + + {%if not courseProposal.is_submitted %} + {%endif%} + + + + + + + + + {% endfor %} + + +
Received asSend byFile IDRemarkDateView FileSubmit File
{{request.user.extrainfo.user}} - {{courseProposal.receive_design}}{{courseProposal.current_id}} - {{courseProposal.current_design}}{{courseProposal.file_id}}{{courseProposal.remarks}}{{courseProposal.receive_date}}
+ +
+ +{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/outward_course_forms.html b/FusionIIIT/templates/programme_curriculum/faculty/outward_course_forms.html new file mode 100644 index 000000000..2a8340df0 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/outward_course_forms.html @@ -0,0 +1,96 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} + +{% endblock %} +{% load static %} +{% load static %} + +{% block content %} + + +
+ + + + + + + + + + + + + + + + {% for courseProposal in courseProposals %} + + + + + + + + + + + + + + + + + {% endfor %} + + +
Send byReceived asFile IDRemarkDateView File
{{request.user.extrainfo.user}}-{{courseProposal.current_design}} {{courseProposal.receive_id}} - {{courseProposal.receive_design}}{{courseProposal.file_id}}{{courseProposal.remarks}}{{courseProposal.receive_date}}
+ +
+ +{% 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 index b89075517..a9b4ee0c0 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/update_course_proposal_form.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/update_course_proposal_form.html @@ -18,12 +18,24 @@ Batches - Course Proposal Form - - - Update Course Proposal Form - - + +
{% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html b/FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html index f221fe18c..0018bb821 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html b/FusionIIIT/templates/programme_curriculum/faculty/view_a_course_proposal.html similarity index 88% rename from FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html rename to FusionIIIT/templates/programme_curriculum/faculty/view_a_course_proposal.html index b1c8c8018..e05130498 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_a_course_proposal.html @@ -19,12 +19,24 @@ Batches - View Proposal Form - - - Edit Proposal Form - - + +
{% endblock %} {% block content %} @@ -35,7 +47,7 @@ -

Course Proposal Form By

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

+

Course Proposal Form By -> {{ proposal.uploader }} - {{proposal.designation}}

+{% comment %} -
+
{% endcomment %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html b/FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html index 2e73c2014..8dd37ce83 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} 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 index 5ab2fe11b..d55e68930 100644 --- 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 @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html index 277cd9b80..6a6744242 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html index e0e24912e..c63bc8476 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html index 61b583c91..22de51f2e 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html index c4c66fb17..5cf42a58c 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html b/FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html index 15ca0f8c0..e9c7a5d45 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html @@ -3,7 +3,6 @@ {% block sidetabmenu %} {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html b/FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html index 660fb66ab..b7aae1505 100644 --- a/FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html +++ b/FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html @@ -2,7 +2,6 @@ {% block sidetabmenu %} {% endblock %} @@ -37,40 +52,34 @@ -

Faculty Name

-

Faculty Name

+

Created As

Course Name

Course Code

-

Status

+

View

{% for courseProposal in courseProposals %} - {{ courseProposal.faculty_name }} - {{ courseProposal.faculty_code }} + {{ courseProposal.uploader }} - {{ courseProposal.designation }} {{ 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 %} - + +
VIEW
+ +
+ + +
Submit
+ +
{% empty %} @@ -82,7 +91,7 @@
@@ -93,57 +102,55 @@ -

Faculty Name

-

Faculty Name

+

Created As

Course Name

Course Code

-

Status

+

View

- {% for updateProposal in updateProposals %} + {% for courseProposal in updateProposals %} - {{ 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 %} - + {{ courseProposal.uploader }} - {{ courseProposal.designation }} + {{ courseProposal.name }} + {{ courseProposal.code }} + +
VIEW
+ +
+ + +
Submit
+ +
{% empty %} - No Courses Proposals Submitted + No Courses Proposals Submitted {% endfor %}
+ + + + {% endblock %} {% block rightcontent %}

ADD COURSE PROPOSAL FORM