Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7990c79
Add functionality to add and update courses
Ravichendraa Feb 20, 2024
8906f37
Course version added
Ravichendraa Mar 17, 2024
3b83423
Delete FusionIIIT/Fusion/settings/development.py
Ravichendraa Mar 17, 2024
b03e6d6
Delete FusionIIIT/applications/academic_procedures/migrations/0002_au…
Ravichendraa Mar 17, 2024
82be6ef
Delete FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py
Ravichendraa Mar 17, 2024
df7210b
Delete FusionIIIT/applications/globals/migrations/0002_auto_20240218_…
Ravichendraa Mar 17, 2024
053558e
Delete FusionIIIT/applications/globals/migrations/0003_auto_20240218_…
Ravichendraa Mar 17, 2024
616b7c5
Delete FusionIIIT/applications/globals/migrations/0004_auto_20240218_…
Ravichendraa Mar 17, 2024
d973ac7
Delete FusionIIIT/applications/globals/migrations/0005_auto_20240218_…
Ravichendraa Mar 17, 2024
cfb1e06
Delete FusionIIIT/applications/globals/migrations/0006_auto_20240218_…
Ravichendraa Mar 17, 2024
18f55a0
Delete FusionIIIT/applications/globals/migrations/0007_auto_20240218_…
Ravichendraa Mar 17, 2024
48718c6
Delete FusionIIIT/applications/globals/migrations/0008_auto_20240218_…
Ravichendraa Mar 17, 2024
d50a1e0
Delete FusionIIIT/applications/globals/migrations/0009_auto_20240219_…
Ravichendraa Mar 17, 2024
9aac94f
Delete FusionIIIT/applications/globals/migrations/0010_auto_20240219_…
Ravichendraa Mar 17, 2024
49bf296
Delete FusionIIIT/applications/scholarships/migrations/0002_auto_2024…
Ravichendraa Mar 17, 2024
e2bffa8
Delete requirements.txt
Ravichendraa Mar 17, 2024
73bd368
Delete FusionIIIT/applications/programme_curriculum/migrations/0002_a…
Ravichendraa Mar 17, 2024
e034e53
Delete FusionIIIT/applications/programme_curriculum/migrations/0003_a…
Ravichendraa Mar 17, 2024
886cc68
Delete FusionIIIT/applications/programme_curriculum/migrations/0004_c…
Ravichendraa Mar 17, 2024
2404386
Delete FusionIIIT/applications/programme_curriculum/migrations/0005_a…
Ravichendraa Mar 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 0 additions & 55 deletions FusionIIIT/Fusion/settings/development.py

This file was deleted.

11 changes: 8 additions & 3 deletions FusionIIIT/applications/programme_curriculum/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.contrib import admin
from django.contrib.admin.options import ModelAdmin
from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseInstructor
from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseInstructor, CourseProposal,UpdateCourseProposal


class ProgrammeAdmin(admin.ModelAdmin):
Expand Down Expand Up @@ -29,7 +29,10 @@ class BatchAdmin(admin.ModelAdmin):
class CourseSlotAdmin(admin.ModelAdmin):
list_display = ('name', 'type', 'course_slot_info','semester')
list_filter = ('type', 'courses',)

class CourseProposalAdmin(admin.ModelAdmin):
list_display = ('faculty_name','faculty_code', 'name', 'code',)
class UpdateCourseProposalAdmin(admin.ModelAdmin):
list_display = ('faculty_name','faculty_code', 'name', 'code',)

# Register your models here.
admin.site.register(Discipline, DisciplineAdmin)
Expand All @@ -39,4 +42,6 @@ class CourseSlotAdmin(admin.ModelAdmin):
admin.site.register(Course, CourseAdmin)
admin.site.register(Batch, BatchAdmin)
admin.site.register(CourseSlot, CourseSlotAdmin)
admin.site.register(CourseInstructor)
admin.site.register(CourseInstructor)
admin.site.register(CourseProposal,CourseProposalAdmin)
admin.site.register(UpdateCourseProposal,UpdateCourseProposalAdmin)
2 changes: 2 additions & 0 deletions FusionIIIT/applications/programme_curriculum/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ class Meta:
model = Course
fields = {'code': ['icontains'],
'name': ['icontains'],
'version': ['exact'],
'working_course': ['exact'],
'disciplines': ['exact'],
}
widgets = {
'code' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,})),
'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}),
'name' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,})),
'code' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Version','max_length': 10,})),
'working_course' : django_filters.CharFilter(forms.CheckboxInput(attrs={'class': 'ui checkbox'})),
'disciplines' : django_filters.CharFilter(forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',})),
}
Expand Down
270 changes: 263 additions & 7 deletions FusionIIIT/applications/programme_curriculum/forms.py

Large diffs are not rendered by default.

171 changes: 159 additions & 12 deletions FusionIIIT/applications/programme_curriculum/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
from applications.globals.models import ExtraInfo
from django.core.validators import MinValueValidator, MaxValueValidator, DecimalValidator

# Create your models here.

Expand All @@ -26,7 +27,8 @@
('Design', 'Design'),
('Manufacturing', 'Manufacturing'),
('Management Science', 'Management Science'),
('Optional Elective', 'Optional Elective'),
('Open Elective', 'Open Elective'),
('Swayam','Swayam'),
('Project', 'Project'),
('Optional', 'Optional'),
('Others', 'Others')
Expand Down Expand Up @@ -117,7 +119,13 @@ class Curriculum(models.Model):
'''
programme = models.ForeignKey(Programme, on_delete=models.CASCADE, null=False)
name = models.CharField(max_length=100, null=False, blank=False)
version = models.PositiveIntegerField(default=1, null=False)
# version = models.FloatField(default=1.0, null=False)
# version = models.PositiveIntegerField(default=1, null=False)
version = models.DecimalField(
max_digits=2,
decimal_places=1,
default=1.0,
validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)])
working_curriculum = models.BooleanField(default=True, null=False)
no_of_semester = models.PositiveIntegerField(default=1, null=False)
min_credit = models.PositiveIntegerField(default=0, null=False)
Expand Down Expand Up @@ -207,8 +215,13 @@ class Course(models.Model):


'''
code = models.CharField(max_length=10, null=False, unique=True, blank=False)
name = models.CharField(max_length=100, null=False, unique=True, blank=False)
code = models.CharField(max_length=10, null=False, blank=False)
name = models.CharField(max_length=100, null=False, blank=False)
version = models.DecimalField(
max_digits=5,
decimal_places=1,
default=1.0,
validators=[MinValueValidator(1.0), DecimalValidator(max_digits=5, decimal_places=1)])
credit = models.PositiveIntegerField(default=0, null=False, blank=False)
lecture_hours = PositiveIntegerField(null=True, )
tutorial_hours = PositiveIntegerField(null=True)
Expand All @@ -228,12 +241,14 @@ class Course(models.Model):
ref_books = models.TextField()
working_course = models.BooleanField(default=True)
disciplines = models.ManyToManyField(Discipline, blank=True)
latest_version = models.BooleanField(default=True)

class Meta:
unique_together = ('code', 'name',)
unique_together = ('code','version')

def __str__(self):
return str(self.code + " - " +self.name)
return str(self.code + " - " +self.name+"- v"+str(self.version))


@property
def courseslots(self):
Expand Down Expand Up @@ -277,11 +292,6 @@ class CourseSlot(models.Model):
Current Purpose : To store the details regarding a course slot
Course slot : is defined as per the curriculum for a programme to have specific type of courses
for a given semester





ATTRIBUTES :

semester(programme_curriculum.Semester) - [not nullable] to denote link to the semester details for which the courseslot is made
Expand Down Expand Up @@ -326,4 +336,141 @@ class Meta:

def __self__(self):
return '{} - {}'.format(self.course_id, self.instructor_id)



#new


class CourseProposal(models.Model):
'''
Current Purpose : To store the details regarding a course





ATTRIBUTES :

code(char) - the course code (eg CS3005)
name(char) - the name of the course(eg Machine Learning)
credit(Integer) - the credits defined for the course
lecture_hours(integer) - lecture hours defined for the course
tutorial_hours(Integer) - tutorial hours defined for the course
practical_hours(Integer) - practical hours defined for the course
discussion_hours(Integer) - discussion hours
project_hours(Integer) - project hours
pre_requisits(Boolean) - denote whether this course has prerequisites(courses that one should take before opting this )
pre_requisit_courses(programme_curriculum.Course) - link to set of prerequisite courses
syllabus(text) - syllabus described for the course
percent_quiz_1(+ve int) - defined weightage in marking
percent_midsem(+ve int) - defined weightage in marking
percent_quiz_2(+ve int) - defined weightage in marking
percent_endsem (+ve int) - defined weightage in marking
percent_project(+ve int) - defined weightage in marking
percent_lab_evaluation (+ve int) - defined weightage in marking
percent_course_attendance (+ve int) - defined weightage in marking
ref_books(text) - reference books suggested for the course
working_course(boolean) - to denote whether the course is currently in execution or not
disciplines(programme_curriculum.Discipline) - to store which discipline is offering the course


'''
faculty_name=models.CharField(max_length=100, null=False,blank=False)
faculty_code = models.CharField(max_length=10, null=False, blank=False)
code = models.CharField(max_length=10, null=False, blank=False)
name = models.CharField(max_length=100, null=False,blank=False)
credit = models.PositiveIntegerField(default=3, null=False, blank=False)
lecture_hours = PositiveIntegerField(default=3,null=True, )
tutorial_hours = PositiveIntegerField(default=0,null=True)
pratical_hours = PositiveIntegerField(default=0,null=True)
discussion_hours = PositiveIntegerField(default=0,null=True)
project_hours = PositiveIntegerField(default=0,null=True)
pre_requisits = models.TextField(null=True, blank=True)
pre_requisit_courses = models.ManyToManyField(Course, blank=True)
syllabus = models.TextField()
percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False)
percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False)
percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False)
percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False)
percent_project = models.PositiveIntegerField(default=15, null=False, blank=False)
percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False)
percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False)
ref_books = models.TextField()
disciplines = models.ManyToManyField(Discipline, blank=True)
status = models.PositiveIntegerField(default=0,null=False, blank=False)

class Meta:
unique_together = ('code', 'faculty_code',)

def __str__(self):
return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name)

# @property
# def courseslots(self):
# return CourseSlot.objects.filter(courses=self.id)



class UpdateCourseProposal(models.Model):
'''
Current Purpose : To store the details regarding a update course proposal forms
ATTRIBUTES :

code(char) - the course code (eg CS3005)
name(char) - the name of the course(eg Machine Learning)
credit(Integer) - the credits defined for the course
lecture_hours(integer) - lecture hours defined for the course
tutorial_hours(Integer) - tutorial hours defined for the course
practical_hours(Integer) - practical hours defined for the course
discussion_hours(Integer) - discussion hours
project_hours(Integer) - project hours
pre_requisits(Boolean) - denote whether this course has prerequisites(courses that one should take before opting this )
pre_requisit_courses(programme_curriculum.Course) - link to set of prerequisite courses
syllabus(text) - syllabus described for the course
percent_quiz_1(+ve int) - defined weightage in marking
percent_midsem(+ve int) - defined weightage in marking
percent_quiz_2(+ve int) - defined weightage in marking
percent_endsem (+ve int) - defined weightage in marking
percent_project(+ve int) - defined weightage in marking
percent_lab_evaluation (+ve int) - defined weightage in marking
percent_course_attendance (+ve int) - defined weightage in marking
ref_books(text) - reference books suggested for the course
working_course(boolean) - to denote whether the course is currently in execution or not
disciplines(programme_curriculum.Discipline) - to store which discipline is offering the course


'''
faculty_name=models.CharField(max_length=100, null=False,blank=False)
faculty_code = models.CharField(max_length=10, null=False, blank=False)
code = models.CharField(max_length=10, null=False, blank=False)
name = models.CharField(max_length=100, null=False,blank=False)
credit = models.PositiveIntegerField(default=0, null=False, blank=False)
lecture_hours = PositiveIntegerField(null=True, )
tutorial_hours = PositiveIntegerField(null=True)
pratical_hours = PositiveIntegerField(null=True)
discussion_hours = PositiveIntegerField(null=True)
project_hours = PositiveIntegerField(null=True)
pre_requisits = models.TextField(null=True, blank=True)
pre_requisit_courses = models.ManyToManyField(Course, blank=True)
syllabus = models.TextField()
percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False)
percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False)
percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False)
percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False)
percent_project = models.PositiveIntegerField(default=15, null=False, blank=False)
percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False)
percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False)
ref_books = models.TextField()
working_course = models.BooleanField(default=True)
disciplines = models.ManyToManyField(Discipline, blank=True)
status = models.PositiveIntegerField(default=0,null=False, blank=False)

class Meta:
unique_together = ('code', 'faculty_code',)

def __str__(self):
return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name)

# @property
# def courseslots(self):
# return CourseSlot.objects.filter(courses=self.id)
21 changes: 20 additions & 1 deletion FusionIIIT/applications/programme_curriculum/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,23 @@
path('admin_edit_discipline/<discipline_id>/', views.edit_discipline_form, name='edit_discipline_form'),
path('admin_instigate_semester/<semester_id>/', views.instigate_semester, name='instigate_semester'),
path('admin_replicate_curriculum/<curriculum_id>/', views.replicate_curriculum, name='replicate_curriculum'),
]



#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/<course_id>/',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/<course_id>/',views.faculty_view_a_course,name="faculty_view_a_course"),
path('head_view_a_course_proposal/<CourseProposal_id>/', views.head_view_a_course_proposal, name='head_view_a_course_proposal'),
path('head_view_a_update_course_proposal/<UpdateCourseProposal_id>/', views.head_view_a_update_course_proposal, name='head_view_a_update_course_proposal'),

path('forward_form/<CourseProposal_id>', views.forward_form, name='forward_form'),
path('reject_form/<CourseProposal_id>', views.reject_form, name='reject_form'),
# path('approve_form/<CourseProposal_id>', views.approve_form, name='approve_form'),

path('forward_update_form/<UpdateCourseProposal_id>/', views.forward_update_form, name='forward_update_form'),
path('reject_update_form/<UpdateCourseProposal_id>', views.reject_update_form, name='reject_update_form'),
# path('approve_update_form/<UpdateCourseProposal_id>', views.approve_update_form, name='approve_update_form'),
]
Loading