From 7990c79fefafcd754378613d66850b2eaef1634d Mon Sep 17 00:00:00 2001 From: Ravichendraa Date: Tue, 20 Feb 2024 22:27:34 +0530 Subject: [PATCH 01/20] Add functionality to add and update courses --- FusionIIIT/Fusion/settings/development.py | 2 +- .../migrations/0002_auto_20240218_1206.py | 38 ++ .../eis/migrations/0002_auto_20240218_1206.py | 53 ++ .../migrations/0002_auto_20240218_1206.py | 18 + .../migrations/0003_auto_20240218_1235.py | 18 + .../migrations/0004_auto_20240218_1242.py | 18 + .../migrations/0005_auto_20240218_1325.py | 18 + .../migrations/0006_auto_20240218_1336.py | 18 + .../migrations/0007_auto_20240218_1601.py | 18 + .../migrations/0008_auto_20240218_1942.py | 18 + .../migrations/0009_auto_20240219_2217.py | 18 + .../migrations/0010_auto_20240219_2232.py | 18 + .../programme_curriculum/admin.py | 11 +- .../programme_curriculum/forms.py | 259 ++++++++- .../migrations/0002_auto_20240218_1206.py | 55 ++ .../migrations/0003_auto_20240218_1235.py | 18 + .../migrations/0004_auto_20240218_1325.py | 17 + .../migrations/0005_auto_20240218_1336.py | 17 + .../migrations/0006_auto_20240218_1339.py | 23 + .../migrations/0007_updatecourseproposal.py | 46 ++ .../migrations/0008_auto_20240220_1223.py | 43 ++ .../programme_curriculum/models.py | 149 +++++- .../applications/programme_curriculum/urls.py | 31 +- .../programme_curriculum/views.py | 496 +++++++++++++++++- .../migrations/0002_auto_20240218_1206.py | 18 + .../acad_admin/add_batch_form.html | 3 + .../acad_admin/add_course_form.html | 3 + .../acad_admin/add_courseslot_form.html | 3 + .../acad_admin/add_curriculum_form.html | 3 + .../acad_admin/add_discipline_form.html | 3 + .../acad_admin/add_programme_form.html | 3 + .../acad_admin/admin_view_a_course.html | 3 + .../admin_view_a_course_proposal.html | 241 +++++++++ .../acad_admin/admin_view_a_courseslot.html | 3 + ...admin_view_a_semester_of_a_curriculum.html | 3 + .../admin_view_a_update_course_proposal.html | 241 +++++++++ .../acad_admin/admin_view_all_batches.html | 3 + .../acad_admin/admin_view_all_courses.html | 3 + .../admin_view_all_disciplines.html | 3 + .../acad_admin/admin_view_all_programmes.html | 3 + .../admin_view_all_working_curriculums.html | 3 + .../admin_view_course_proposal_forms.html | 137 +++++ ...admin_view_curriculums_of_a_programme.html | 2 + .../admin_view_semesters_of_a_curriculum.html | 2 + .../acad_admin/instigate_semester_form.html | 2 + .../programme_curriculum/faculty/common.html | 78 +++ .../faculty/course_proposal_form.html | 239 +++++++++ .../faculty/dean_view_a_course_proposal.html | 177 +++++++ .../dean_view_course_proposal_forms.html | 159 ++++++ .../dean_view_update_a_course_proposal.html | 177 +++++++ .../faculty/faculty_view_a_course.html | 166 ++++++ .../faculty/faculty_view_all_courses.html | 88 ++++ .../faculty/head_view_a_course_proposal.html | 180 +++++++ .../head_view_course_proposal_forms.html | 162 ++++++ .../head_view_update_a_course_proposal.html | 180 +++++++ .../faculty/update_course_proposal_form.html | 249 +++++++++ .../faculty/view_a_course.html | 148 ++++++ .../faculty/view_a_courseslot.html | 105 ++++ .../view_a_semester_of_a_curriculum.html | 129 +++++ .../faculty/view_all_batches.html | 120 +++++ .../faculty/view_all_courses.html | 76 +++ .../faculty/view_all_disciplines.html | 61 +++ .../faculty/view_all_programmes.html | 140 +++++ .../faculty/view_all_working_curriculums.html | 83 +++ .../faculty/view_course_proposal_forms.html | 167 ++++++ .../view_curriculums_of_a_programme.html | 141 +++++ .../view_semesters_of_a_curriculum.html | 152 ++++++ requirements.txt | 77 ++- 68 files changed, 5326 insertions(+), 33 deletions(-) create mode 100644 FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py create mode 100644 FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py create mode 100644 FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py create mode 100644 FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py create mode 100644 FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py create mode 100644 FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py create mode 100644 FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py create mode 100644 FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py create mode 100644 FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py create mode 100644 FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py create mode 100644 FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py create mode 100644 FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py create mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/common.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/dean_view_update_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/faculty_view_a_course.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/faculty_view_all_courses.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/head_view_update_a_course_proposal.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/update_course_proposal_form.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_a_course.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_a_courseslot.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_a_semester_of_a_curriculum.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_batches.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_courses.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_disciplines.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_programmes.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_all_working_curriculums.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_course_proposal_forms.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_curriculums_of_a_programme.html create mode 100644 FusionIIIT/templates/programme_curriculum/faculty/view_semesters_of_a_curriculum.html diff --git a/FusionIIIT/Fusion/settings/development.py b/FusionIIIT/Fusion/settings/development.py index 6acc214c1..96fc1a468 100644 --- a/FusionIIIT/Fusion/settings/development.py +++ b/FusionIIIT/Fusion/settings/development.py @@ -12,7 +12,7 @@ 'NAME': 'fusionlab', 'HOST': os.environ.get("DB_HOST", default='localhost'), 'USER': 'fusion_admin', - 'PASSWORD': 'hello123', + 'PASSWORD': '123', } } diff --git a/FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py new file mode 100644 index 000000000..39dcfd70c --- /dev/null +++ b/FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py @@ -0,0 +1,38 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('academic_procedures', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='assistantshipclaim', + name='year', + field=models.IntegerField(choices=[(2024, 2024), (2023, 2023)]), + ), + migrations.AlterField( + model_name='course_registration', + name='working_year', + field=models.IntegerField(blank=True, choices=[(2024, 2024), (2023, 2023)], null=True), + ), + migrations.AlterField( + model_name='finalregistrations', + name='batch', + field=models.IntegerField(default=2024), + ), + migrations.AlterField( + model_name='messdue', + name='year', + field=models.IntegerField(choices=[(2024, 2024), (2023, 2023)]), + ), + migrations.AlterField( + model_name='register', + name='year', + field=models.IntegerField(default=2024), + ), + ] diff --git a/FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py new file mode 100644 index 000000000..81c7b1034 --- /dev/null +++ b/FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py @@ -0,0 +1,53 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eis', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='emp_achievement', + name='a_year', + field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), + ), + migrations.AlterField( + model_name='emp_confrence_organised', + name='k_year', + field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), + ), + migrations.AlterField( + model_name='emp_expert_lectures', + name='l_year', + field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), + ), + migrations.AlterField( + model_name='emp_keynote_address', + name='k_year', + field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), + ), + migrations.AlterField( + model_name='emp_mtechphd_thesis', + name='s_year', + field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), + ), + migrations.AlterField( + model_name='emp_patents', + name='p_year', + field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), + ), + migrations.AlterField( + model_name='emp_published_books', + name='pyear', + field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), + ), + migrations.AlterField( + model_name='emp_research_papers', + name='year', + field=models.CharField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], max_length=10, null=True), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py new file mode 100644 index 000000000..054a5bf14 --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py b/FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py new file mode 100644 index 000000000..d7712dc8f --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0002_auto_20240218_1206'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py b/FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py new file mode 100644 index 000000000..9f76762ab --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0003_auto_20240218_1235'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py b/FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py new file mode 100644 index 000000000..01134d81d --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 13:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0004_auto_20240218_1242'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py b/FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py new file mode 100644 index 000000000..23f9f57ac --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 13:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0005_auto_20240218_1325'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py b/FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py new file mode 100644 index 000000000..874ce2f3d --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 16:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0006_auto_20240218_1336'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py b/FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py new file mode 100644 index 000000000..e15bbcf97 --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 19:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0007_auto_20240218_1601'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py b/FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py new file mode 100644 index 000000000..02ef44162 --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-19 22:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0008_auto_20240218_1942'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py b/FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py new file mode 100644 index 000000000..5776a707b --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-19 22:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('globals', '0009_auto_20240219_2217'), + ] + + operations = [ + migrations.AlterField( + model_name='extrainfo', + name='user_status', + field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/admin.py b/FusionIIIT/applications/programme_curriculum/admin.py index 75ab2ca82..0afbdaf09 100644 --- a/FusionIIIT/applications/programme_curriculum/admin.py +++ b/FusionIIIT/applications/programme_curriculum/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from django.contrib.admin.options import ModelAdmin -from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseInstructor +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseInstructor, CourseProposal,UpdateCourseProposal class ProgrammeAdmin(admin.ModelAdmin): @@ -29,7 +29,10 @@ class BatchAdmin(admin.ModelAdmin): class CourseSlotAdmin(admin.ModelAdmin): list_display = ('name', 'type', 'course_slot_info','semester') list_filter = ('type', 'courses',) - +class CourseProposalAdmin(admin.ModelAdmin): + list_display = ('faculty_name','faculty_code', 'name', 'code',) +class UpdateCourseProposalAdmin(admin.ModelAdmin): + list_display = ('faculty_name','faculty_code', 'name', 'code',) # Register your models here. admin.site.register(Discipline, DisciplineAdmin) @@ -39,4 +42,6 @@ class CourseSlotAdmin(admin.ModelAdmin): admin.site.register(Course, CourseAdmin) admin.site.register(Batch, BatchAdmin) admin.site.register(CourseSlot, CourseSlotAdmin) -admin.site.register(CourseInstructor) \ No newline at end of file +admin.site.register(CourseInstructor) +admin.site.register(CourseProposal,CourseProposalAdmin) +admin.site.register(UpdateCourseProposal,UpdateCourseProposalAdmin) \ No newline at end of file diff --git a/FusionIIIT/applications/programme_curriculum/forms.py b/FusionIIIT/applications/programme_curriculum/forms.py index 72ccfa2b2..6ae4c3180 100644 --- a/FusionIIIT/applications/programme_curriculum/forms.py +++ b/FusionIIIT/applications/programme_curriculum/forms.py @@ -3,7 +3,7 @@ from django.forms import ModelForm, widgets from django.forms import Form, ValidationError from django.forms.models import ModelChoiceField -from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot, PROGRAMME_CATEGORY_CHOICES +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot, PROGRAMME_CATEGORY_CHOICES,CourseProposal,UpdateCourseProposal from django.utils.translation import gettext_lazy as _ class ProgrammeForm(ModelForm): @@ -18,8 +18,7 @@ class Meta: 'category' : 'Programme Category', 'name': 'Programme Name' } - - + class DisciplineForm(ModelForm): class Meta: model = Discipline @@ -219,4 +218,256 @@ class Meta: 'duration' : "Course/Project Duration", 'min_registration_limit': 'Min Course Slot Registration Limit', 'max_registration_limit': 'Max Course Slot Registration Limit', - } \ No newline at end of file + } + + + +#new + +class Course_Proposal(ModelForm): + + def clean(self): + cleaned_data = super().clean() + + percentages_sum = ( + cleaned_data.get("percent_quiz_1") + + cleaned_data.get("percent_midsem") + + cleaned_data.get("percent_quiz_2") + + cleaned_data.get("percent_endsem") + + cleaned_data.get("percent_project") + + cleaned_data.get("percent_lab_evaluation") + + cleaned_data.get("percent_course_attendance") + ) + + if percentages_sum != 100: + msg = 'Percentages must add up to 100%, they currently add up to ' + str(percentages_sum) + '%' + self.add_error('percent_quiz_1', msg) + self.add_error('percent_midsem', msg) + self.add_error('percent_quiz_2', msg) + self.add_error('percent_endsem', msg) + self.add_error('percent_project', msg) + self.add_error('percent_lab_evaluation', msg) + self.add_error('percent_course_attendance', msg) + + return cleaned_data + + class Meta: + model = CourseProposal + fields = '__all__' + widgets = { + 'faculty_name' : forms.TextInput(attrs={'max_length': 100,'readonly':'readonly'}), + 'faculty_code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,}), + 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), + 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits',}, ), + 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours',}, ), + 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours',}, ), + 'pratical_hours' : forms.NumberInput(attrs={'placeholder': 'Practical hours',}, ), + 'discussion_hours' : forms.NumberInput(attrs={'placeholder': 'Group Discussion hours',}, ), + 'project_hours' : forms.NumberInput(attrs={'placeholder': 'Project hours',}, ), + 'disciplines' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'pre_requisits' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'pre_requisit_courses' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'syllabus' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'ref_books' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'percent_quiz_1' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_midsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_quiz_2' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_endsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_project' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_lab_evaluation' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_course_attendance' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'status':forms.NumberInput(attrs={'readonly':'readonly'},), + + } + labels = { + 'faculty_name':'Faculty name', + 'faculty_code':'Faculty Code', + 'code' : 'Course Code', + 'name' : 'Course Name', + 'credit' : 'Credits', + 'lecture_hours' : 'Academic Loads', + 'tutorial_hours' : '', + 'pratical_hours' : '', + 'discussion_hours' : '', + 'project_hours' : '', + 'pre_requisits' : 'Pre-requisits', + 'pre_requisit_courses' : 'Pre-requisit Courses', + 'syllabus' : 'Syllabus', + 'ref_books' : 'References & Books', + 'percent_quiz_1' : 'percent_quiz_1', + 'percent_midsem' : 'percent_midsem', + 'percent_quiz_2' : 'percent_quiz_2', + 'percent_endsem' : 'percent_endsem', + 'percent_project' : 'percent_project', + 'percent_lab_evaluation' : 'percent_lab_evaluation', + 'percent_course_attendance' : 'percent_course_attendance', + 'disciplines' : 'disciplines', + 'status':'status' + } + + + + +class Update_Course_Proposal(ModelForm): + + def clean(self): + cleaned_data = super().clean() + + percentages_sum = ( + cleaned_data.get("percent_quiz_1") + + cleaned_data.get("percent_midsem") + + cleaned_data.get("percent_quiz_2") + + cleaned_data.get("percent_endsem") + + cleaned_data.get("percent_project") + + cleaned_data.get("percent_lab_evaluation") + + cleaned_data.get("percent_course_attendance") + ) + + if percentages_sum != 100: + msg = 'Percentages must add up to 100%, they currently add up to ' + str(percentages_sum) + '%' + self.add_error('percent_quiz_1', msg) + self.add_error('percent_midsem', msg) + self.add_error('percent_quiz_2', msg) + self.add_error('percent_endsem', msg) + self.add_error('percent_project', msg) + self.add_error('percent_lab_evaluation', msg) + self.add_error('percent_course_attendance', msg) + + return cleaned_data + + class Meta: + model = UpdateCourseProposal + fields = '__all__' + widgets = { + 'faculty_name' : forms.TextInput(attrs={'max_length': 100,'readonly':'readonly'}), + 'faculty_code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), + 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits',}, ), + 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours',}, ), + 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours',}, ), + 'pratical_hours' : forms.NumberInput(attrs={'placeholder': 'Practical hours',}, ), + 'discussion_hours' : forms.NumberInput(attrs={'placeholder': 'Group Discussion hours',}, ), + 'project_hours' : forms.NumberInput(attrs={'placeholder': 'Project hours',}, ), + 'working_course' : forms.CheckboxInput(attrs={'class': 'ui checkbox'}), + 'disciplines' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'pre_requisits' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'pre_requisit_courses' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',}), + 'syllabus' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'ref_books' : forms.Textarea(attrs={'placeholder': 'Text','class':'field'}), + 'percent_quiz_1' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_midsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_quiz_2' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_endsem' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_project' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_lab_evaluation' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'percent_course_attendance' : forms.NumberInput(attrs={'placeholder': '%'}, ), + 'status':forms.NumberInput(attrs={'readonly':'readonly'},), + + } + labels = { + 'faculty_name':'Faculty name', + 'faculty_code':'Faculty Code', + 'code' : 'Course Code', + 'name' : 'Course Name', + 'credit' : 'Credits', + 'lecture_hours' : 'Academic Loads', + 'tutorial_hours' : '', + 'pratical_hours' : '', + 'discussion_hours' : '', + 'project_hours' : '', + 'pre_requisits' : 'Pre-requisits', + 'pre_requisit_courses' : 'Pre-requisit Courses', + 'syllabus' : 'Syllabus', + 'ref_books' : 'References & Books', + 'percent_quiz_1' : 'percent_quiz_1', + 'percent_midsem' : 'percent_midsem', + 'percent_quiz_2' : 'percent_quiz_2', + 'percent_endsem' : 'percent_endsem', + 'percent_project' : 'percent_project', + 'percent_lab_evaluation' : 'percent_lab_evaluation', + 'percent_course_attendance' : 'percent_course_attendance', + 'disciplines' : 'disciplines', + 'working_course' : 'working_course', + 'status':'status' + } + + +class CourseProposalForm(ModelForm): + + def clean(self): + cleaned_data = super().clean() + + percentages_sum = ( + cleaned_data.get("percent_quiz_1") + + cleaned_data.get("percent_midsem") + + cleaned_data.get("percent_quiz_2") + + cleaned_data.get("percent_endsem") + + cleaned_data.get("percent_project") + + cleaned_data.get("percent_lab_evaluation") + + cleaned_data.get("percent_course_attendance") + ) + + if percentages_sum != 100: + msg = 'Percentages must add up to 100%, they currently add up to ' + str(percentages_sum) + '%' + self.add_error('percent_quiz_1', msg) + self.add_error('percent_midsem', msg) + self.add_error('percent_quiz_2', msg) + self.add_error('percent_endsem', msg) + self.add_error('percent_project', msg) + self.add_error('percent_lab_evaluation', msg) + self.add_error('percent_course_attendance', msg) + + return cleaned_data + + class Meta: + model = Course + fields = '__all__' + widgets = { + 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,'readonly':'readonly'}), + 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,'readonly':'readonly'}), + 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits','readonly':'readonly'}, ), + 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours','readonly':'readonly'}, ), + 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours','readonly':'readonly'}, ), + 'pratical_hours' : forms.NumberInput(attrs={'placeholder': 'Practical hours','readonly':'readonly'}, ), + 'discussion_hours' : forms.NumberInput(attrs={'placeholder': 'Group Discussion hours','readonly':'readonly'}, ), + 'project_hours' : forms.NumberInput(attrs={'placeholder': 'Project hours','readonly':'readonly'}, ), + 'working_course' : forms.CheckboxInput(attrs={'class': 'ui checkbox','disabled': 'disabled'}), + 'disciplines' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown','disabled': 'disabled'}), + 'pre_requisits' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), + 'pre_requisit_courses' : forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown','disabled': 'disabled'}), + 'syllabus' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), + 'ref_books' : forms.Textarea(attrs={'placeholder': 'Text','class':'field','readonly':'readonly'}), + 'percent_quiz_1' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_midsem' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_quiz_2' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_endsem' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_project' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_lab_evaluation' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + 'percent_course_attendance' : forms.NumberInput(attrs={'placeholder': '%','readonly':'readonly'}, ), + } + labels = { + 'code' : 'Course Code', + 'name' : 'Course Name', + 'credit' : 'Credits', + 'lecture_hours' : 'Academic Loads', + 'tutorial_hours' : '', + 'pratical_hours' : '', + 'discussion_hours' : '', + 'project_hours' : '', + 'pre_requisits' : 'Pre-requisits', + 'pre_requisit_courses' : 'Pre-requisit Courses', + 'syllabus' : 'Syllabus', + 'ref_books' : 'References & Books', + 'percent_quiz_1' : 'percent_quiz_1', + 'percent_midsem' : 'percent_midsem', + 'percent_quiz_2' : 'percent_quiz_2', + 'percent_endsem' : 'percent_endsem', + 'percent_project' : 'percent_project', + 'percent_lab_evaluation' : 'percent_lab_evaluation', + 'percent_course_attendance' : 'percent_course_attendance', + 'working_course' : 'working_course', + 'disciplines' : 'disciplines' + } + diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py new file mode 100644 index 000000000..b6858309a --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py @@ -0,0 +1,55 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='batch', + name='year', + field=models.PositiveIntegerField(default=2024), + ), + migrations.AlterField( + model_name='programme', + name='programme_begin_year', + field=models.PositiveIntegerField(default=2024), + ), + migrations.CreateModel( + name='CourseProposal', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('faculty_name', models.CharField(max_length=100)), + ('faculty_code', models.CharField(max_length=10, unique=True)), + ('code', models.CharField(max_length=10, unique=True)), + ('name', models.CharField(max_length=100)), + ('credit', models.PositiveIntegerField(default=0)), + ('lecture_hours', models.PositiveIntegerField(null=True)), + ('tutorial_hours', models.PositiveIntegerField(null=True)), + ('pratical_hours', models.PositiveIntegerField(null=True)), + ('discussion_hours', models.PositiveIntegerField(null=True)), + ('project_hours', models.PositiveIntegerField(null=True)), + ('pre_requisits', models.TextField(blank=True, null=True)), + ('syllabus', models.TextField()), + ('percent_quiz_1', models.PositiveIntegerField(default=10)), + ('percent_midsem', models.PositiveIntegerField(default=20)), + ('percent_quiz_2', models.PositiveIntegerField(default=10)), + ('percent_endsem', models.PositiveIntegerField(default=30)), + ('percent_project', models.PositiveIntegerField(default=15)), + ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), + ('percent_course_attendance', models.PositiveIntegerField(default=5)), + ('ref_books', models.TextField()), + ('status', models.PositiveIntegerField(default=0)), + ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), + ('pre_requisit_courses', models.ManyToManyField(blank=True, related_name='_courseproposal_pre_requisit_courses_+', to='programme_curriculum.CourseProposal')), + ], + options={ + 'unique_together': {('code', 'faculty_code')}, + }, + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py b/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py new file mode 100644 index 000000000..936b7387b --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0002_auto_20240218_1206'), + ] + + operations = [ + migrations.AlterField( + model_name='courseproposal', + name='pre_requisit_courses', + field=models.ManyToManyField(blank=True, to='programme_curriculum.Course'), + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py b/FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py new file mode 100644 index 000000000..3873e7e0b --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1.5 on 2024-02-18 13:25 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0003_auto_20240218_1235'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='courseproposal', + unique_together=set(), + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py b/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py new file mode 100644 index 000000000..899dab725 --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1.5 on 2024-02-18 13:36 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0004_auto_20240218_1325'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='courseproposal', + unique_together={('code', 'faculty_code')}, + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py b/FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py new file mode 100644 index 000000000..05641ee9c --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.5 on 2024-02-18 13:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0005_auto_20240218_1336'), + ] + + operations = [ + migrations.AlterField( + model_name='courseproposal', + name='code', + field=models.CharField(max_length=10), + ), + migrations.AlterField( + model_name='courseproposal', + name='faculty_code', + field=models.CharField(max_length=10), + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py b/FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py new file mode 100644 index 000000000..25e696f49 --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py @@ -0,0 +1,46 @@ +# Generated by Django 3.1.5 on 2024-02-18 16:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0006_auto_20240218_1339'), + ] + + operations = [ + migrations.CreateModel( + name='UpdateCourseProposal', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('faculty_name', models.CharField(max_length=100)), + ('faculty_code', models.CharField(max_length=10)), + ('code', models.CharField(max_length=10)), + ('name', models.CharField(max_length=100)), + ('credit', models.PositiveIntegerField(default=0)), + ('lecture_hours', models.PositiveIntegerField(null=True)), + ('tutorial_hours', models.PositiveIntegerField(null=True)), + ('pratical_hours', models.PositiveIntegerField(null=True)), + ('discussion_hours', models.PositiveIntegerField(null=True)), + ('project_hours', models.PositiveIntegerField(null=True)), + ('pre_requisits', models.TextField(blank=True, null=True)), + ('syllabus', models.TextField()), + ('percent_quiz_1', models.PositiveIntegerField(default=10)), + ('percent_midsem', models.PositiveIntegerField(default=20)), + ('percent_quiz_2', models.PositiveIntegerField(default=10)), + ('percent_endsem', models.PositiveIntegerField(default=30)), + ('percent_project', models.PositiveIntegerField(default=15)), + ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), + ('percent_course_attendance', models.PositiveIntegerField(default=5)), + ('ref_books', models.TextField()), + ('working_course', models.BooleanField(default=True)), + ('status', models.PositiveIntegerField(default=0)), + ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), + ('pre_requisit_courses', models.ManyToManyField(blank=True, to='programme_curriculum.Course')), + ], + options={ + 'unique_together': {('code', 'faculty_code')}, + }, + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py b/FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py new file mode 100644 index 000000000..c8bee8927 --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py @@ -0,0 +1,43 @@ +# Generated by Django 3.1.5 on 2024-02-20 12:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0007_updatecourseproposal'), + ] + + operations = [ + migrations.AlterField( + model_name='courseproposal', + name='credit', + field=models.PositiveIntegerField(default=3), + ), + migrations.AlterField( + model_name='courseproposal', + name='discussion_hours', + field=models.PositiveIntegerField(default=0, null=True), + ), + migrations.AlterField( + model_name='courseproposal', + name='lecture_hours', + field=models.PositiveIntegerField(default=3, null=True), + ), + migrations.AlterField( + model_name='courseproposal', + name='pratical_hours', + field=models.PositiveIntegerField(default=0, null=True), + ), + migrations.AlterField( + model_name='courseproposal', + name='project_hours', + field=models.PositiveIntegerField(default=0, null=True), + ), + migrations.AlterField( + model_name='courseproposal', + name='tutorial_hours', + field=models.PositiveIntegerField(default=0, null=True), + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/models.py b/FusionIIIT/applications/programme_curriculum/models.py index 248079cd3..b046fc518 100644 --- a/FusionIIIT/applications/programme_curriculum/models.py +++ b/FusionIIIT/applications/programme_curriculum/models.py @@ -277,11 +277,6 @@ class CourseSlot(models.Model): Current Purpose : To store the details regarding a course slot Course slot : is defined as per the curriculum for a programme to have specific type of courses for a given semester - - - - - ATTRIBUTES : semester(programme_curriculum.Semester) - [not nullable] to denote link to the semester details for which the courseslot is made @@ -326,4 +321,146 @@ class Meta: def __self__(self): return '{} - {}'.format(self.course_id, self.instructor_id) - \ No newline at end of file + + +#new + + +class CourseProposal(models.Model): + ''' + Current Purpose : To store the details regarding a course + + + + + + ATTRIBUTES : + + code(char) - the course code (eg CS3005) + name(char) - the name of the course(eg Machine Learning) + credit(Integer) - the credits defined for the course + lecture_hours(integer) - lecture hours defined for the course + tutorial_hours(Integer) - tutorial hours defined for the course + practical_hours(Integer) - practical hours defined for the course + discussion_hours(Integer) - discussion hours + project_hours(Integer) - project hours + pre_requisits(Boolean) - denote whether this course has prerequisites(courses that one should take before opting this ) + pre_requisit_courses(programme_curriculum.Course) - link to set of prerequisite courses + syllabus(text) - syllabus described for the course + percent_quiz_1(+ve int) - defined weightage in marking + percent_midsem(+ve int) - defined weightage in marking + percent_quiz_2(+ve int) - defined weightage in marking + percent_endsem (+ve int) - defined weightage in marking + percent_project(+ve int) - defined weightage in marking + percent_lab_evaluation (+ve int) - defined weightage in marking + percent_course_attendance (+ve int) - defined weightage in marking + ref_books(text) - reference books suggested for the course + working_course(boolean) - to denote whether the course is currently in execution or not + disciplines(programme_curriculum.Discipline) - to store which discipline is offering the course + + + ''' + faculty_name=models.CharField(max_length=100, null=False,blank=False) + faculty_code = models.CharField(max_length=10, null=False, blank=False) + code = models.CharField(max_length=10, null=False, blank=False) + name = models.CharField(max_length=100, null=False,blank=False) + credit = models.PositiveIntegerField(default=3, null=False, blank=False) + lecture_hours = PositiveIntegerField(default=3,null=True, ) + tutorial_hours = PositiveIntegerField(default=0,null=True) + pratical_hours = PositiveIntegerField(default=0,null=True) + discussion_hours = PositiveIntegerField(default=0,null=True) + project_hours = PositiveIntegerField(default=0,null=True) + pre_requisits = models.TextField(null=True, blank=True) + pre_requisit_courses = models.ManyToManyField(Course, blank=True) + syllabus = models.TextField() + percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False) + percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False) + percent_project = models.PositiveIntegerField(default=15, null=False, blank=False) + percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False) + ref_books = models.TextField() + disciplines = models.ManyToManyField(Discipline, blank=True) + status = models.PositiveIntegerField(default=0,null=False, blank=False) + + class Meta: + unique_together = ('code', 'faculty_code',) + + def __str__(self): + return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name) + + # @property + # def courseslots(self): + # return CourseSlot.objects.filter(courses=self.id) + + + +class UpdateCourseProposal(models.Model): + ''' + Current Purpose : To store the details regarding a 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=0, null=False, blank=False) + lecture_hours = PositiveIntegerField(null=True, ) + tutorial_hours = PositiveIntegerField(null=True) + pratical_hours = PositiveIntegerField(null=True) + discussion_hours = PositiveIntegerField(null=True) + project_hours = PositiveIntegerField(null=True) + pre_requisits = models.TextField(null=True, blank=True) + pre_requisit_courses = models.ManyToManyField(Course, blank=True) + syllabus = models.TextField() + percent_quiz_1 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_midsem = models.PositiveIntegerField(default=20, null=False, blank=False) + percent_quiz_2 = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_endsem = models.PositiveIntegerField(default=30, null=False, blank=False) + percent_project = models.PositiveIntegerField(default=15, null=False, blank=False) + percent_lab_evaluation = models.PositiveIntegerField(default=10, null=False, blank=False) + percent_course_attendance = models.PositiveIntegerField(default=5, null=False, blank=False) + ref_books = models.TextField() + working_course = models.BooleanField(default=True) + disciplines = models.ManyToManyField(Discipline, blank=True) + status = models.PositiveIntegerField(default=0,null=False, blank=False) + + class Meta: + unique_together = ('code', 'faculty_code',) + + def __str__(self): + return str(self.faculty_name + " - " +self.faculty_code+" - "+self.code + " - "+self.name) + + # @property + # def courseslots(self): + # return CourseSlot.objects.filter(courses=self.id) diff --git a/FusionIIIT/applications/programme_curriculum/urls.py b/FusionIIIT/applications/programme_curriculum/urls.py index 85355b0ca..925d2bb42 100644 --- a/FusionIIIT/applications/programme_curriculum/urls.py +++ b/FusionIIIT/applications/programme_curriculum/urls.py @@ -48,4 +48,33 @@ path('admin_edit_discipline//', views.edit_discipline_form, name='edit_discipline_form'), path('admin_instigate_semester//', views.instigate_semester, name='instigate_semester'), path('admin_replicate_curriculum//', views.replicate_curriculum, name='replicate_curriculum'), -] \ No newline at end of file + + + + #new + path('course_proposal_form/',views.course_proposal_form,name='course_proposal_form'), + path('view_course_proposal_forms/',views.view_course_proposal_forms,name='view_course_proposal_forms'), + path('update_course_proposal_form//',views.update_course_proposal_form,name='update_course_proposal_form'), + path('faculty_view_all_courses/', views.faculty_view_all_courses, name='faculty_view_all_courses'), + path('faculty_view_a_course//',views.faculty_view_a_course,name="faculty_view_a_course"), + # path('hod_view_all_courses/', views.hod_view_all_courses, name='faculty_view_all_courses'), + # path('hod_view_a_course//',views.hod_view_a_course,name="faculty_view_a_course"), + # 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('head_view_a_course_proposal//', views.head_view_a_course_proposal, name='head_view_a_course_proposal'), + path('head_view_a_update_course_proposal//', views.head_view_a_update_course_proposal, name='head_view_a_update_course_proposal'), + + path('forward_form/', views.forward_form, name='forward_form'), + path('reject_form/', views.reject_form, name='reject_form'), + path('approve_form/', views.approve_form, name='approve_form'), + + path('forward_update_form//', views.forward_update_form, name='forward_update_form'), + path('reject_update_form/', views.reject_update_form, name='reject_update_form'), + path('approve_update_form/', views.approve_update_form, name='approve_update_form'), + + + path('admin_view_course_proposal_forms/', views.admin_view_course_proposal_forms, name='admin_view_course_proposal_forms'), + path('admin_view_a_course_proposal//', views.admin_view_a_course_proposal, name='admin_view_a_course_proposal'), + path('admin_view_a_update_course_proposal//', views.admin_view_a_update_course_proposal, name='admin_view_a_update_course_proposal') + +] diff --git a/FusionIIIT/applications/programme_curriculum/views.py b/FusionIIIT/applications/programme_curriculum/views.py index 018e096cd..10dc1df92 100644 --- a/FusionIIIT/applications/programme_curriculum/views.py +++ b/FusionIIIT/applications/programme_curriculum/views.py @@ -6,8 +6,8 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User -from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot -from .forms import ProgrammeForm, DisciplineForm, CurriculumForm, SemesterForm, CourseForm, BatchForm, CourseSlotForm, ReplicateCurriculumForm +from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseProposal,UpdateCourseProposal +from .forms import ProgrammeForm, DisciplineForm, CurriculumForm, SemesterForm, CourseForm, BatchForm, CourseSlotForm, ReplicateCurriculumForm,Course_Proposal,Update_Course_Proposal,CourseProposalForm from .filters import CourseFilter, BatchFilter, CurriculumFilter # from applications.academic_information.models import Student @@ -30,7 +30,7 @@ def programme_curriculum(request): """ user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + if str(des.designation) == "student" or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": return HttpResponseRedirect('/programme_curriculum/programmes/') elif str(request.user) == "acadadmin" : return HttpResponseRedirect('/programme_curriculum/admin_programmes') @@ -51,12 +51,21 @@ def view_all_programmes(request): pg - PG programmes phd - PHD programmes """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' + ug = Programme.objects.filter(category='UG') pg = Programme.objects.filter(category='PG') phd = Programme.objects.filter(category='PHD') + url+='view_all_programmes.html' - - return render(request, 'programme_curriculum/view_all_programmes.html', {'ug': ug, 'pg': pg, 'phd': phd}) + return render(request, url, {'ug': ug, 'pg': pg, 'phd': phd}) def view_curriculums_of_a_programme(request, programme_id): @@ -72,6 +81,15 @@ def view_curriculums_of_a_programme(request, programme_id): working_curriculum - Curriculums that are affective past_curriculum - Curriculums thet are obsolete """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' + program = get_object_or_404(Programme, Q(id=programme_id)) curriculums = program.curriculums @@ -81,19 +99,28 @@ def view_curriculums_of_a_programme(request, programme_id): working_curriculums = curriculums.filter(working_curriculum=1) past_curriculums = curriculums.filter(working_curriculum=0) - - return render(request,'programme_curriculum/view_curriculums_of_a_programme.html', {'program': program, 'past_curriculums': past_curriculums, 'working_curriculums': working_curriculums, 'curriculumfilter': curriculumfilter}) + url+='view_curriculums_of_a_programme.html' + return render(request,url, {'program': program, 'past_curriculums': past_curriculums, 'working_curriculums': working_curriculums, 'curriculumfilter': curriculumfilter}) def view_all_working_curriculums(request): - """ views all the working curriculums offered by the institute """ + """ views all the working curriculums offered by the institute """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + + url+='faculty/' curriculums = Curriculum.objects.filter(working_curriculum=1) curriculumfilter = CurriculumFilter(request.GET, queryset=curriculums) curriculums = curriculumfilter.qs - return render(request,'programme_curriculum/view_all_working_curriculums.html',{'curriculums':curriculums, 'curriculumfilter': curriculumfilter}) + return render(request,url+'view_all_working_curriculums.html',{'curriculums':curriculums, 'curriculumfilter': curriculumfilter}) @@ -108,6 +135,15 @@ def view_semesters_of_a_curriculum(request, curriculum_id): transpose_semester_slots - semester_slots 2D list is transpose for viewing in HTML . semester_credits - Total Credits for each semester. """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' curriculum = get_object_or_404(Curriculum, Q(id=curriculum_id)) semesters = curriculum.semesters semester_slots = [] @@ -138,49 +174,95 @@ def view_semesters_of_a_curriculum(request, curriculum_id): transpose_semester_slots = list(zip(*semester_slots)) - return render(request, 'programme_curriculum/view_semesters_of_a_curriculum.html', {'curriculum': curriculum, 'semesters': semesters, 'semester_slots': transpose_semester_slots, 'semester_credits': semester_credits}) + return render(request, url+'view_semesters_of_a_curriculum.html', {'curriculum': curriculum, 'semesters': semesters, 'semester_slots': transpose_semester_slots, 'semester_credits': semester_credits}) def view_a_semester_of_a_curriculum(request, semester_id): """ views a specfic semester of a specfic curriculum """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' semester = get_object_or_404(Semester, Q(id=semester_id)) course_slots = semester.courseslots - return render(request, 'programme_curriculum/view_a_semester_of_a_curriculum.html', {'semester': semester, 'course_slots': course_slots}) + return render(request, url+'view_a_semester_of_a_curriculum.html', {'semester': semester, 'course_slots': course_slots}) def view_a_courseslot(request, courseslot_id): """ view a course slot """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' course_slot = get_object_or_404(CourseSlot, Q(id=courseslot_id)) - return render(request, 'programme_curriculum/view_a_courseslot.html', {'course_slot': course_slot}) + return render(request, url+'view_a_courseslot.html', {'course_slot': course_slot}) def view_all_courses(request): """ views all the course slots of a specfic semester """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + + url+='faculty/' courses = Course.objects.all() coursefilter = CourseFilter(request.GET, queryset=courses) courses = coursefilter.qs - return render(request, 'programme_curriculum/view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) + return render(request, url+'view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) def view_a_course(request, course_id): """ views the details of a Course """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + + url+='faculty/' course = get_object_or_404(Course, Q(id=course_id)) - return render(request, 'programme_curriculum/view_a_course.html', {'course': course}) + return render(request, url+'view_a_course.html', {'course': course}) def view_all_discplines(request): """ views the details of a Course """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + url+='faculty/' disciplines = Discipline.objects.all() - return render(request, 'programme_curriculum/view_all_disciplines.html', {'disciplines': disciplines}) + return render(request, url+'view_all_disciplines.html', {'disciplines': disciplines}) def view_all_batches(request): """ views the details of a Course """ + url='programme_curriculum/' + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "acadadmin": + return render(request, 'programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic" or str(des.designation) == "CSE HOD": + + url+='faculty/' batches = Batch.objects.all().order_by('year') @@ -192,7 +274,7 @@ def view_all_batches(request): batches = batches.filter(running_batch=True) - return render(request, 'programme_curriculum/view_all_batches.html', {'batches': batches, 'finished_batches': finished_batches, 'batchfilter': batchfilter}) + return render(request, url+'view_all_batches.html', {'batches': batches, 'finished_batches': finished_batches, 'batchfilter': batchfilter}) @@ -896,4 +978,384 @@ def replicate_curriculum(request, curriculum_id): messages.success(request, "Added successful") return HttpResponseRedirect('/programme_curriculum/admin_curriculum_semesters/' + str(curriculum.id) + '/') - return render(request, 'programme_curriculum/acad_admin/add_curriculum_form.html',{'form':form, 'submitbutton': submitbutton}) \ No newline at end of file + return render(request, 'programme_curriculum/acad_admin/add_curriculum_form.html',{'form':form, 'submitbutton': submitbutton}) + + + + + + + + + + + + + + + + +#new + +@login_required(login_url='/accounts/login') +def course_proposal_form(request): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + pass + elif str(request.user) == "acadadmin": + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + faculty_id=user_details.user_id + details=User.objects.get(id=faculty_id) + faculty_name=details.first_name +' '+ details.last_name + + + + + + form=Course_Proposal(initial={'faculty_name': faculty_name,'faculty_code':des.user}) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = Course_Proposal(request.POST) + if form.is_valid(): + form.save() + messages.success(request, " Proposal Added successful") + return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') + + return render(request,'programme_curriculum/faculty/course_proposal_form.html',{'form':form,'submitbutton': submitbutton}) + + +# @login_required(login_url='/accounts/login') +# def update_course_proposal_form(request, course_id): + +# user_details = ExtraInfo.objects.get(user = request.user) +# des = HoldsDesignation.objects.all().filter(user = request.user).first() +# if str(des.designation) == "student": +# return HttpResponseRedirect('/programme_curriculum/programmes/') +# elif str(request.user) == "acadadmin" : +# return HttpResponseRedirect('/programme_curriculum/admin_programmes') +# elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor": +# pass + +# course = get_object_or_404(Course, Q(id=course_id)) +# form = Update_Course_Proposal(instance=course) +# submitbutton= request.POST.get('Submit') +# if submitbutton: +# if request.method == 'POST': +# form = Update_Course_Proposal(request.POST, instance=course) +# if form.is_valid(): +# form.save() +# messages.success(request, "Updated "+ course.name +" successful") +# return HttpResponseRedirect("/programme_curriculum//programme_curriculum/course_proposal_form//") + + # return render(request,'programme_curriculum/faculty/update_course_proposal_form.html',{'form':form,'submitbutton': submitbutton}) + +@login_required(login_url='/accounts/login') +def faculty_view_all_courses(request): + """ views all the course slots of a specfic semester """ + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif str(request.user) == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor": + pass + + # discipline=user_details.department + # courses = Course.objects.filter(disciplines=discipline) + + + courses = Course.objects.all() + + coursefilter = CourseFilter(request.GET, queryset=courses) + + courses = coursefilter.qs + + return render(request, 'programme_curriculum/faculty/faculty_view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) + + +@login_required(login_url='/accounts/login') +def faculty_view_a_course(request, course_id): + """ views the details of a Course """ + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif str(request.user) == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + pass + course = get_object_or_404(Course, Q(id=course_id)) + return render(request, 'programme_curriculum/faculty/faculty_view_a_course.html', {'course': course}) + + + + + +# ##new +# @login_required(login_url='/accounts/login') +# def head_view_a_course(request, proposal_id): +# """ views the details of a Course """ + +# user_details = ExtraInfo.objects.get(user = request.user) +# des = HoldsDesignation.objects.all().filter(user = request.user).last() +# if str(des.designation) == "CSE HOD" : +# pass +# elif str(request.user) == "acadadmin" : +# return HttpResponseRedirect('/programme_curriculum/admin_programmes') +# elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation)=="student" : +# return HttpResponseRedirect('/programme_curriculum/programmes') +# proposal = get_object_or_404(CourseProposal, Q(id=proposal_id)) +# return render(request, 'programme_curriculum/hod/head_view_a_course.html', {'proposal': proposal}) + + + + +###new + +def head_view_a_course_proposal(request,CourseProposal_id): + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + + if str(request.user) == "CSE HOD" : + pass + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + + if(str(des.designation) == "Dean Academic"): + return render(request, 'programme_curriculum/faculty/dean_view_a_course_proposal.html', {'course': proposalform}) + return render(request, 'programme_curriculum/faculty/head_view_a_course_proposal.html', {'proposal': proposalform}) + +def head_view_a_update_course_proposal(request,UpdateCourseProposal_id): + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + + if str(request.user) == "CSE HOD" : + pass + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + + if(str(des.designation) == "Dean Academic"): + return render(request, 'programme_curriculum/faculty/dean_view_update_a_course_proposal.html', {'course': proposalform}) + return render(request, 'programme_curriculum/faculty/head_view_update_a_course_proposal.html', {'proposal': proposalform}) + +def forward_form(request,CourseProposal_id): + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status =1 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + +def forward_update_form(request,UpdateCourseProposal_id): + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status =1 + proposalform.save() + Updatecourses = UpdateCourseProposal.objects.all() + courses = CourseProposal.objects.all() + # return HttpResponseRedirect('/programme_curriculum/head_view_a_update_course_proposal/'), + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + +@login_required(login_url='/accounts/login') +def reject_form(request,CourseProposal_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).last() + + if str(des.designation) == "CSE HOD" or str(des.designation) == "Dean Academic": + pass + elif str(request.user) == "acadadmin" or str(request.user) == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status = 2 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + + if str(des.designation) == "CSE HOD": + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status = 2 + proposalform.save() + courses = CourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + if str(des.designation) == "Dean Academic" : + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status = 4 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + +def reject_update_form(request,UpdateCourseProposal_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).last() + + if str(des.designation) == "CSE HOD" or str(des.designation) == "Dean Academic": + pass + elif str(request.user) == "acadadmin" or str(request.user) == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status = 2 + proposalform.save() + courses = UpdateCourseProposal.objects.all() + if str(des.designation) == "CSE HOD": + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status = 2 + proposalform.save() + Updatecourses = UpdateCourseProposal.objects.all() + courses=CourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + if str(des.designation) == "Dean Academic" : + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status = 4 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + + +def approve_form(request,CourseProposal_id): + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + proposalform.status = 3 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) +def approve_update_form(request,UpdateCourseProposal_id): + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + proposalform.status = 3 + proposalform.save() + courses = CourseProposal.objects.all() + Updatecourses = UpdateCourseProposal.objects.all() + + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) + + +@login_required(login_url='/accounts/login') +def view_course_proposal_forms(request): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).last() + + if str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + pass + elif str(request.user) == "acadadmin" or str(request.user) == "student" : + return HttpResponseRedirect('/programme_curriculum/programmes/') + + courseProposal = CourseProposal.objects.filter(faculty_code=des.user) + coursefilter = CourseFilter(request.GET, queryset=courseProposal) + + courses = CourseProposal.objects.all() + updatecourses=UpdateCourseProposal.objects.all() + + updatecourseProposal = UpdateCourseProposal.objects.filter(faculty_code=des.user) + + if(str(des.designation) == "CSE HOD"): + return render(request, 'programme_curriculum/faculty/head_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) + elif(str(des.designation) == "Dean Academic"): + return render(request, 'programme_curriculum/faculty/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) + return render(request, 'programme_curriculum/faculty/view_course_proposal_forms.html',{'courseProposals': courseProposal,'updateProposals':updatecourseProposal}) + + + + + +@login_required(login_url='/accounts/login') +def update_course_proposal_form(request, course_id): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "student": + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif str(request.user) == "acadadmin" : + return HttpResponseRedirect('/programme_curriculum/admin_programmes/') + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" : + pass + faculty_id=user_details.user_id + details=User.objects.get(id=faculty_id) + faculty_name=details.first_name +' '+ details.last_name + faculty_details=Update_Course_Proposal(initial={'faculty_name': faculty_name,'faculty_code':des.user}) + course = get_object_or_404(Course, Q(id=course_id)) + form = Update_Course_Proposal(instance=course) + + submitbutton= request.POST.get('Submit') + + if submitbutton: + if request.method == 'POST': + form = Update_Course_Proposal(request.POST) + if form.is_valid(): + form.save() + messages.success(request, "Updated "+ course.name +" successful") + return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') + return render(request,'programme_curriculum/faculty/update_course_proposal_form.html',{'faculty_details':faculty_details,'form':form, 'submitbutton': submitbutton}) + + + +def admin_view_course_proposal_forms(request): + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).last() + + if str(request.user) == "acadadmin" : + pass + elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic": + return HttpResponseRedirect('/programme_curriculum/programmes/') + + courses = CourseProposal.objects.all() + updatecourses=UpdateCourseProposal.objects.all() + + + return render(request, 'programme_curriculum/acad_admin/admin_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) + # return render(request, 'programme_curriculum/faculty/view_course_proposal_forms.html',{'courseProposals': courseProposal}) + + +def admin_view_a_course_proposal(request,CourseProposal_id): + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + + proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + form = CourseProposalForm(instance=proposalform) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = CourseProposalForm(request.POST) + if form.is_valid(): + proposalform.status = 6 + proposalform.save() + form.save() + course = get_object_or_404(Course, Q(code=proposalform.code)) + + messages.success(request, proposalform.name +"Added Successful") + return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course.id) + "/") + return render(request, 'programme_curriculum/acad_admin/admin_view_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) + + +def admin_view_a_update_course_proposal(request,UpdateCourseProposal_id): + + user_details = ExtraInfo.objects.get(user = request.user) + des = HoldsDesignation.objects.all().filter(user = request.user).first() + if str(des.designation) == "student": # or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" + return HttpResponseRedirect('/programme_curriculum/programmes/') + elif str(request.user) == "acadadmin" : + pass + + proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) + + course = get_object_or_404(Course, Q(code=proposalform.code)) + form = CourseProposalForm(instance=proposalform) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = CourseProposalForm(request.POST,instance=course) + if form.is_valid(): + proposalform.status = 6 + proposalform.save() + form.save() + messages.success(request, "Updated "+ proposalform.name +" successful") + return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course.id) + "/") + return render(request, 'programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) diff --git a/FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py new file mode 100644 index 000000000..67c13da39 --- /dev/null +++ b/FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-02-18 12:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('scholarships', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='previous_winner', + name='year', + field=models.IntegerField(default=2024), + ), + ] diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_batch_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_batch_form.html index 1159944eb..90eeb464a 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_batch_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_batch_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html index 35ffa3493..0b6d59993 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_course_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html index 0d007cc63..136a63850 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_courseslot_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html index 81c6aca98..45a51b928 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_curriculum_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html index 4629ec121..fd5978c9a 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_discipline_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html index 35c1b9870..504e1fa16 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/add_programme_form.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html index 1b664426d..edb1780fe 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html new file mode 100644 index 000000000..283cc5703 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_course_proposal.html @@ -0,0 +1,241 @@ +{% extends 'programme_curriculum/acad_admin/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + + +{% block content %} +
+

Course Proposal Form

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

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

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

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

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

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ +
+ + + + + + +{% endblock %} +{% comment %} {% block rightcontent %} +
+
+ +{% endblock %} {% endcomment %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_courseslot.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_courseslot.html index 6bd1707b7..1620a4b8b 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_courseslot.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_courseslot.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html index bf3ba45e0..4327a5d05 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html new file mode 100644 index 000000000..7fae41d5a --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html @@ -0,0 +1,241 @@ +{% extends 'programme_curriculum/acad_admin/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + + +{% block content %} +
+

Course Update Proposal Form

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

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

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

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

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

{{ form.percent_quiz_1.errors }}

+
+ {% endif %} +
+
+
+ + {{ form.percent_quiz_1 }} +
+
+ + + {{ form.percent_midsem }} +
+
+ + + {{ form.percent_quiz_2 }} +
+
+ + + {{ form.percent_endsem }} +
+
+
+
+ + + {{ form.percent_project }} +
+
+ + + {{ form.percent_lab_evaluation }} +
+
+ + + {{ form.percent_course_attendance }} +
+
+ +
+ + + + + + +{% endblock %} +{% comment %} {% block rightcontent %} +
+
+ +{% endblock %} {% endcomment %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_batches.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_batches.html index dfedd63c0..bcebdf026 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_batches.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_batches.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html index 8a9b28673..2e87e23a4 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_courses.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html index f629a476a..48b5e07da 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_disciplines.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html index 76656008c..d0176527e 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_programmes.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html index 105bc73a6..fe5924eaa 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_all_working_curriculums.html @@ -19,6 +19,9 @@ Courses + Course Proposal_Forms + + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html new file mode 100644 index 000000000..ecaf585c0 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_course_proposal_forms.html @@ -0,0 +1,137 @@ +{% extends 'programme_curriculum/acad_admin/common.html' %} + +{% block sidetabmenu %} + +{% endblock %} + +{% block content %} + +
+
+
+
+
+ Cancel +
+ +
+
+
+ Cancel +
+ +
+
+ + + + + + + + + + + {% for courseProposal in courseProposals %} + + {% if courseProposal.status == 3 %} + + + + + + + {% endif %} + + {% empty %} + + {% endfor %} + + + +

Faculty Name

Faculty Code

Course Name

Status

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

Faculty Name

Faculty Code

Course Name

Status

{{ updateProposal.faculty_name }}{{ updateProposal.faculty_code }}{{ updateProposal.name }} + Approved by Dean + + {% if updateProposal.status == 3 %} + + +
Update
+ +
+ {% endif %} + +
+
No Courses Proposals Submitted
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html index f7711d5a2..30a71e848 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html @@ -19,6 +19,8 @@ Courses + Course Proposal_Forms + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html index b66c65e1b..d1a3b9834 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html @@ -19,6 +19,8 @@ Courses + Course Proposal_Forms + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html b/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html index 91995e288..151f1791d 100644 --- a/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html +++ b/FusionIIIT/templates/programme_curriculum/acad_admin/instigate_semester_form.html @@ -19,6 +19,8 @@ Courses + Course Proposal_Forms + {% endblock %} diff --git a/FusionIIIT/templates/programme_curriculum/faculty/common.html b/FusionIIIT/templates/programme_curriculum/faculty/common.html new file mode 100644 index 000000000..22f83d34a --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/common.html @@ -0,0 +1,78 @@ +{% extends 'globals/base.html' %} +{% load static %} + +{% block title %} + Programme & Curriculum +{% endblock %} + +{% block css %} + +{% endblock %} + +{% block body %} + {% block navBar %} + {% include 'dashboard/navbar.html' %} + {% endblock %} + +
+ + {% comment %}The left-margin segment!{% endcomment %} +
+ + {% comment %}The left-rail segment starts here!{% endcomment %} +
+ + {% comment %}The user image card starts here!{% endcomment %} + {% block usercard %} + {% include 'globals/usercard.html' %} + {% endblock %} + {% comment %}The user image card ends here!{% endcomment %} + +
+ + {% comment %}The Tab-Menu starts here!{% endcomment %} + {% block sidetabmenu %} + {% endblock %} + {% comment %}The Tab-Menu ends here!{% endcomment %} +
+ + {% comment %} + The left-rail segment ends here! + {% endcomment %} + + {% comment %} + The central-rail segment starts here! + {% endcomment %} + +
+ + {% block content %} + {% endblock %} + +
+ {% comment %}The central-rail segment ends here!{% endcomment %} + + {% comment %}The right-rail segment starts here!{% endcomment %} +
+
+ {% comment %} + TODO: the right rail! + {% endcomment %} + {% block rightcontent %} + {% endblock %} +
+
+ {% comment %}The right-rail segment ends here!{% endcomment %} + + {% comment %}The right-margin segment!{% endcomment %} +
+ +
+ {% comment %}The grid ends here!{% endcomment %} +{% endblock %} + +{% block javascript %} + + + +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html b/FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html new file mode 100644 index 000000000..17a638108 --- /dev/null +++ b/FusionIIIT/templates/programme_curriculum/faculty/course_proposal_form.html @@ -0,0 +1,239 @@ +{% extends 'programme_curriculum/common.html' %} +{% block sidetabmenu %} +
+{% endblock %} + +{% block content %} +
+

New Course Proposal Form

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

{{ form.faculty_name.errors }}

+

{{ form.faculty_code.errors }}

+

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

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

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

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

{{ form.percent_quiz_1.errors }}

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

Course Proposal Form By

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

+

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

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

{{ discipline }}

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

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

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

Faculty Name

Faculty Name

Course Name

Course Code

Status

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

Faculty Name

Faculty Name

Course Name

Course Code

Status

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

Course Proposal Form By

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

+

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

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

{{ discipline }}

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

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

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

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

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

{{ discipline }}

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

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

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

index

Course Code

Course Name

Credits

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

Course Proposal Form By

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

+

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

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

{{ discipline }}

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

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

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

Faculty Name

Faculty Name

Course Name

Course Code

Status

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

Faculty Name

Faculty Name

Course Name

Course Code

Status

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

Course Proposal Form By

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

+

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

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

{{ discipline }}

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

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

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

Course Update Proposal Form

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

{{ form.name.errors }}

+

{{ form.code.errors }}

+

{{ form.credit.errors }}

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

{{ form.lecture_hours.errors }}

+

{{ form.tutorial_hours.errors }}

+

{{ form.pratical_hours.errors }}

+

{{ form.discussion_hours.errors }}

+

{{ form.project_hours.errors }}

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

{{ form.percent_quiz_1.errors }}

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

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

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

{{ discipline }}

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

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

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

Course Slot: {{ course_slot.name }}

Semester: {{ course_slot.semester }}

Type : {{ course_slot.type }}

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

Course Code

Course Name

Credits

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

Curriculum : {{ semester.curriculum }}

Semester : {{ semester.semester_no }}

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

{{ slot.name }}

Type : {{ slot.type }}

Course Code

Course Name

Credits

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

No Courses Avaliable for this slot

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

Name

Discipline

Year

Curriculum

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

Name

Discipline

Year

Curriculum

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

Course Code

Course Name

Credits

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

Discipline Name

Programmes

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

{{ programme.name }}

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

Programmes

Discipline

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

{{ discipline.name }}

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

Programmes

Discipline

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

{{ discipline.name }}

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

Programmes

Discipline

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

{{ discipline.name }}

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

Name

Version

Batch

No. of Semester

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

{{ batch }}

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

Faculty Name

Faculty Name

Course Name

Course Code

Status

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

Faculty Name

Faculty Name

Course Name

Course Code

Status

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

{{ program.name }}

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

Name

Version

Batch

No. of Semester

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

{{ batch }}

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

Name

Version

Batch

No. of Semester

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

{{ batch }}

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

{{ curriculum }}

+
+

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

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

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

+ {% endfor %} + {% endif %} +
Start Date{{ semester.start_semester }}
End Date{{ semester.end_semester }}
Total Credits{{ total_credits }}
Instigated + Yes + + Not Yet +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 4cc3a0a30..2f3150fec 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,80 @@ +# amqp==5.0.2 +# # arabic-reshaper==2.1.1 +# asgiref==3.3.1 +# attrs==20.3.0 +# beautifulsoup4==4.9.3 +# billiard==3.6.3.0 +# Brotli==1.0.9 +# bs4==0.0.1 +# celery==5.0.5 +# certifi==2020.12.5 +# cffi==1.14.4 +# chardet==4.0.0 +# click==7.1.2 +# click-didyoumean==0.0.3 +# click-plugins==1.1.1 +# click-repl==0.1.6 +# cryptography==36.0.2 +# defusedxml==0.6.0 +# Django==3.1.5 +# django-allauth==0.44.0 +# django-cleanup==5.1.0 +# django-cors-headers==3.7.0 +# django-debug-toolbar==3.2.4 +# django-extensions==3.1.1 +# django-filter==2.4.0 +# django-markdown-deux==1.0.5 +# django-model-utils==4.1.1 +# django-notifications-hq==1.6.0 +# django-pagedown==2.2.0 +# djangorestframework==3.12.2 +# django-semanticui-forms==1.6.5 +# django-unused-media==0.2.2 +# future==0.18.2 +# # gunicorn +# html-text==0.5.2 +# html5lib==1.1 +# idna==2.10 +# ipython==8.2.0 +# ipython-genutils==0.2.0 +# jsonfield==3.1.0 +# jsonschema==3.2.0 +# kombu==5.0.2 +# # lxml==4.8.0 +# markdown2==2.4.2 +# # numpy==1.22.3 +# oauthlib==3.1.0 +# openpyxl==3.0.7 +# # Pillow==8.1.0 +# prompt-toolkit==3.0.10 +# # psycopg2-binary==2.8.6 +# pycparser==2.20 +# PyJWT==2.6.0 +# PyPDF2==1.26.0 +# pyrsistent==0.17.3 +# python-bidi==0.4.2 +# python-dateutil==2.8.1 +# python3-openid==3.2.0 +# pytz==2020.5 +# # reportlab==3.5.59 +# requests==2.25.1 +# requests-oauthlib==1.3.0 +# six==1.15.0 +# soupsieve==2.1 +# sqlparse==0.4.2 +# swapper==1.1.2.post1 +# urllib3==1.26.8 +# vine==5.0.0 +# wcwidth==0.2.5 +# webencodings==0.5.1 +# whitenoise==5.2.0 +# xhtml2pdf==0.2.5 +# xlrd==2.0.1 +# XlsxWriter==1.3.7 +# xlwt==1.3.0 + + amqp==5.0.2 -arabic-reshaper==2.1.1 asgiref==3.3.1 attrs==20.3.0 beautifulsoup4==4.9.3 From 8906f37497f66be36e20169d86be72c5c3db9c5d Mon Sep 17 00:00:00 2001 From: Ravichendraa Date: Sun, 17 Mar 2024 22:56:46 +0530 Subject: [PATCH 02/20] Course version added --- .../programme_curriculum/filters.py | 2 + .../programme_curriculum/forms.py | 11 +- .../migrations/0002_auto_20240218_1206.py | 55 ------ .../migrations/0002_auto_20240312_1929.py | 118 ++++++++++++ .../migrations/0003_auto_20240218_1235.py | 18 -- .../migrations/0003_auto_20240312_1944.py | 17 ++ .../migrations/0004_auto_20240218_1325.py | 17 -- .../migrations/0004_course_latest_version.py | 18 ++ .../migrations/0005_auto_20240218_1336.py | 17 -- .../migrations/0005_auto_20240313_0128.py | 19 ++ .../migrations/0006_auto_20240218_1339.py | 23 --- .../migrations/0007_updatecourseproposal.py | 46 ----- .../migrations/0008_auto_20240220_1223.py | 43 ----- .../programme_curriculum/models.py | 34 ++-- .../applications/programme_curriculum/urls.py | 14 +- .../programme_curriculum/views.py | 168 +++++++----------- 16 files changed, 273 insertions(+), 347 deletions(-) delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py create mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py diff --git a/FusionIIIT/applications/programme_curriculum/filters.py b/FusionIIIT/applications/programme_curriculum/filters.py index 2959c61b9..d4444ff18 100644 --- a/FusionIIIT/applications/programme_curriculum/filters.py +++ b/FusionIIIT/applications/programme_curriculum/filters.py @@ -7,6 +7,7 @@ class Meta: model = Course fields = {'code': ['icontains'], 'name': ['icontains'], + 'version': ['exact'], 'working_course': ['exact'], 'disciplines': ['exact'], } @@ -14,6 +15,7 @@ class Meta: 'code' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,})), 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), 'name' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,})), + 'code' : django_filters.CharFilter(forms.TextInput(attrs={'placeholder': 'Version','max_length': 10,})), 'working_course' : django_filters.CharFilter(forms.CheckboxInput(attrs={'class': 'ui checkbox'})), 'disciplines' : django_filters.CharFilter(forms.SelectMultiple(attrs={'class':'ui fluid search selection dropdown',})), } diff --git a/FusionIIIT/applications/programme_curriculum/forms.py b/FusionIIIT/applications/programme_curriculum/forms.py index 6ae4c3180..2e50d5154 100644 --- a/FusionIIIT/applications/programme_curriculum/forms.py +++ b/FusionIIIT/applications/programme_curriculum/forms.py @@ -43,7 +43,7 @@ class Meta: widgets = { 'name' : forms.TextInput(attrs={'placeholder': 'Enter New Curriculum Name','max_length': 70,'class':'field'}), 'programme' : forms.Select(attrs={'class':'ui fluid search selection dropdown',}), - 'version' : forms.NumberInput(attrs={'placeholder': 'Enter the latest version',' class': 'field'}, ), + 'version' : forms.NumberInput(attrs={'placeholder': 'Enter the latest version',' class': 'field','min': '1.0'}, ), 'working_curriculum' : forms.CheckboxInput(attrs={'class': 'ui checkbox'}), 'no_of_semester' : forms.NumberInput(attrs={'placeholder': 'Enter the number of semesters',' class': 'field'}, ), 'min_credit' : forms.NumberInput(attrs={'placeholder': 'Minimum Number of Credits',' class': 'field'}, ), @@ -123,15 +123,19 @@ def clean(self): self.add_error('percent_project', msg) self.add_error('percent_lab_evaluation', msg) self.add_error('percent_course_attendance', msg) - + + # version = cleaned_data.get('version') + # previous_version = self.instance.version if self.instance else None + # if version < previous_version: + # self.add_error('version', 'The version should be greater than the previous version.') return cleaned_data - class Meta: model = Course fields = '__all__' widgets = { 'code' : forms.TextInput(attrs={'placeholder': 'Course Code','max_length': 10,}), 'name' : forms.TextInput(attrs={'placeholder': 'Course/Project Name','max_length': 100,}), + 'version' : forms.NumberInput(attrs={'placeholder': 'version_no'}, ), 'credit' : forms.NumberInput(attrs={'placeholder': 'Course Credits',}, ), 'lecture_hours' : forms.NumberInput(attrs={'placeholder': 'Lecture hours',}, ), 'tutorial_hours' : forms.NumberInput(attrs={'placeholder': 'Tutorial hours',}, ), @@ -155,6 +159,7 @@ class Meta: labels = { 'code' : 'Course Code', 'name' : 'Course Name', + 'version':'version', 'credit' : 'Credits', 'lecture_hours' : 'Academic Loads', 'tutorial_hours' : '', diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py deleted file mode 100644 index b6858309a..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240218_1206.py +++ /dev/null @@ -1,55 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='batch', - name='year', - field=models.PositiveIntegerField(default=2024), - ), - migrations.AlterField( - model_name='programme', - name='programme_begin_year', - field=models.PositiveIntegerField(default=2024), - ), - migrations.CreateModel( - name='CourseProposal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('faculty_name', models.CharField(max_length=100)), - ('faculty_code', models.CharField(max_length=10, unique=True)), - ('code', models.CharField(max_length=10, unique=True)), - ('name', models.CharField(max_length=100)), - ('credit', models.PositiveIntegerField(default=0)), - ('lecture_hours', models.PositiveIntegerField(null=True)), - ('tutorial_hours', models.PositiveIntegerField(null=True)), - ('pratical_hours', models.PositiveIntegerField(null=True)), - ('discussion_hours', models.PositiveIntegerField(null=True)), - ('project_hours', models.PositiveIntegerField(null=True)), - ('pre_requisits', models.TextField(blank=True, null=True)), - ('syllabus', models.TextField()), - ('percent_quiz_1', models.PositiveIntegerField(default=10)), - ('percent_midsem', models.PositiveIntegerField(default=20)), - ('percent_quiz_2', models.PositiveIntegerField(default=10)), - ('percent_endsem', models.PositiveIntegerField(default=30)), - ('percent_project', models.PositiveIntegerField(default=15)), - ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), - ('percent_course_attendance', models.PositiveIntegerField(default=5)), - ('ref_books', models.TextField()), - ('status', models.PositiveIntegerField(default=0)), - ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), - ('pre_requisit_courses', models.ManyToManyField(blank=True, related_name='_courseproposal_pre_requisit_courses_+', to='programme_curriculum.CourseProposal')), - ], - options={ - 'unique_together': {('code', 'faculty_code')}, - }, - ), - ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py b/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py new file mode 100644 index 000000000..89651b6cd --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py @@ -0,0 +1,118 @@ +# Generated by Django 3.1.5 on 2024-03-12 19:29 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='course', + name='version', + field=models.DecimalField(decimal_places=1, default=1.0, max_digits=2, validators=[django.core.validators.MinValueValidator(1.0), django.core.validators.DecimalValidator(decimal_places=1, max_digits=2)]), + ), + migrations.AlterField( + model_name='batch', + name='year', + field=models.PositiveIntegerField(default=2024), + ), + migrations.AlterField( + model_name='course', + name='code', + field=models.CharField(max_length=10), + ), + migrations.AlterField( + model_name='course', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='courseslot', + name='type', + field=models.CharField(choices=[('Professional Core', 'Professional Core'), ('Professional Elective', 'Professional Elective'), ('Professional Lab', 'Professional Lab'), ('Engineering Science', 'Engineering Science'), ('Natural Science', 'Natural Science'), ('Humanities', 'Humanities'), ('Design', 'Design'), ('Manufacturing', 'Manufacturing'), ('Management Science', 'Management Science'), ('Open Elective', 'Open Elective'), ('Swayam', 'Swayam'), ('Project', 'Project'), ('Optional', 'Optional'), ('Others', 'Others')], max_length=70), + ), + migrations.AlterField( + model_name='curriculum', + name='version', + field=models.DecimalField(decimal_places=1, default=1.0, max_digits=2, validators=[django.core.validators.MinValueValidator(1.0), django.core.validators.DecimalValidator(decimal_places=1, max_digits=2)]), + ), + migrations.AlterField( + model_name='programme', + name='programme_begin_year', + field=models.PositiveIntegerField(default=2024), + ), + migrations.AlterUniqueTogether( + name='course', + unique_together={('code', 'name', 'version')}, + ), + migrations.CreateModel( + name='UpdateCourseProposal', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('faculty_name', models.CharField(max_length=100)), + ('faculty_code', models.CharField(max_length=10)), + ('code', models.CharField(max_length=10)), + ('name', models.CharField(max_length=100)), + ('credit', models.PositiveIntegerField(default=0)), + ('lecture_hours', models.PositiveIntegerField(null=True)), + ('tutorial_hours', models.PositiveIntegerField(null=True)), + ('pratical_hours', models.PositiveIntegerField(null=True)), + ('discussion_hours', models.PositiveIntegerField(null=True)), + ('project_hours', models.PositiveIntegerField(null=True)), + ('pre_requisits', models.TextField(blank=True, null=True)), + ('syllabus', models.TextField()), + ('percent_quiz_1', models.PositiveIntegerField(default=10)), + ('percent_midsem', models.PositiveIntegerField(default=20)), + ('percent_quiz_2', models.PositiveIntegerField(default=10)), + ('percent_endsem', models.PositiveIntegerField(default=30)), + ('percent_project', models.PositiveIntegerField(default=15)), + ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), + ('percent_course_attendance', models.PositiveIntegerField(default=5)), + ('ref_books', models.TextField()), + ('working_course', models.BooleanField(default=True)), + ('status', models.PositiveIntegerField(default=0)), + ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), + ('pre_requisit_courses', models.ManyToManyField(blank=True, to='programme_curriculum.Course')), + ], + options={ + 'unique_together': {('code', 'faculty_code')}, + }, + ), + migrations.CreateModel( + name='CourseProposal', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('faculty_name', models.CharField(max_length=100)), + ('faculty_code', models.CharField(max_length=10)), + ('code', models.CharField(max_length=10)), + ('name', models.CharField(max_length=100)), + ('credit', models.PositiveIntegerField(default=3)), + ('lecture_hours', models.PositiveIntegerField(default=3, null=True)), + ('tutorial_hours', models.PositiveIntegerField(default=0, null=True)), + ('pratical_hours', models.PositiveIntegerField(default=0, null=True)), + ('discussion_hours', models.PositiveIntegerField(default=0, null=True)), + ('project_hours', models.PositiveIntegerField(default=0, null=True)), + ('pre_requisits', models.TextField(blank=True, null=True)), + ('syllabus', models.TextField()), + ('percent_quiz_1', models.PositiveIntegerField(default=10)), + ('percent_midsem', models.PositiveIntegerField(default=20)), + ('percent_quiz_2', models.PositiveIntegerField(default=10)), + ('percent_endsem', models.PositiveIntegerField(default=30)), + ('percent_project', models.PositiveIntegerField(default=15)), + ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), + ('percent_course_attendance', models.PositiveIntegerField(default=5)), + ('ref_books', models.TextField()), + ('status', models.PositiveIntegerField(default=0)), + ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), + ('pre_requisit_courses', models.ManyToManyField(blank=True, to='programme_curriculum.Course')), + ], + options={ + 'unique_together': {('code', 'faculty_code')}, + }, + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py b/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py deleted file mode 100644 index 936b7387b..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240218_1235.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0002_auto_20240218_1206'), - ] - - operations = [ - migrations.AlterField( - model_name='courseproposal', - name='pre_requisit_courses', - field=models.ManyToManyField(blank=True, to='programme_curriculum.Course'), - ), - ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py b/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py new file mode 100644 index 000000000..fe0ca36ab --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1.5 on 2024-03-12 19:44 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0002_auto_20240312_1929'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='course', + unique_together={('code', 'version')}, + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py b/FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py deleted file mode 100644 index 3873e7e0b..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0004_auto_20240218_1325.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 13:25 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0003_auto_20240218_1235'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='courseproposal', - unique_together=set(), - ), - ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py b/FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py new file mode 100644 index 000000000..05e50f6bd --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.5 on 2024-03-12 22:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0003_auto_20240312_1944'), + ] + + operations = [ + migrations.AddField( + model_name='course', + name='latest_version', + field=models.BooleanField(default=True), + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py b/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py deleted file mode 100644 index 899dab725..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240218_1336.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 13:36 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0004_auto_20240218_1325'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='courseproposal', - unique_together={('code', 'faculty_code')}, - ), - ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py b/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py new file mode 100644 index 000000000..edbfd0211 --- /dev/null +++ b/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.5 on 2024-03-13 01:28 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programme_curriculum', '0004_course_latest_version'), + ] + + operations = [ + migrations.AlterField( + model_name='course', + name='version', + field=models.DecimalField(decimal_places=1, default=1.0, max_digits=5, validators=[django.core.validators.MinValueValidator(1.0), django.core.validators.DecimalValidator(decimal_places=1, max_digits=5)]), + ), + ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py b/FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py deleted file mode 100644 index 05641ee9c..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0006_auto_20240218_1339.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 13:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0005_auto_20240218_1336'), - ] - - operations = [ - migrations.AlterField( - model_name='courseproposal', - name='code', - field=models.CharField(max_length=10), - ), - migrations.AlterField( - model_name='courseproposal', - name='faculty_code', - field=models.CharField(max_length=10), - ), - ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py b/FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py deleted file mode 100644 index 25e696f49..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0007_updatecourseproposal.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 16:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0006_auto_20240218_1339'), - ] - - operations = [ - migrations.CreateModel( - name='UpdateCourseProposal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('faculty_name', models.CharField(max_length=100)), - ('faculty_code', models.CharField(max_length=10)), - ('code', models.CharField(max_length=10)), - ('name', models.CharField(max_length=100)), - ('credit', models.PositiveIntegerField(default=0)), - ('lecture_hours', models.PositiveIntegerField(null=True)), - ('tutorial_hours', models.PositiveIntegerField(null=True)), - ('pratical_hours', models.PositiveIntegerField(null=True)), - ('discussion_hours', models.PositiveIntegerField(null=True)), - ('project_hours', models.PositiveIntegerField(null=True)), - ('pre_requisits', models.TextField(blank=True, null=True)), - ('syllabus', models.TextField()), - ('percent_quiz_1', models.PositiveIntegerField(default=10)), - ('percent_midsem', models.PositiveIntegerField(default=20)), - ('percent_quiz_2', models.PositiveIntegerField(default=10)), - ('percent_endsem', models.PositiveIntegerField(default=30)), - ('percent_project', models.PositiveIntegerField(default=15)), - ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), - ('percent_course_attendance', models.PositiveIntegerField(default=5)), - ('ref_books', models.TextField()), - ('working_course', models.BooleanField(default=True)), - ('status', models.PositiveIntegerField(default=0)), - ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), - ('pre_requisit_courses', models.ManyToManyField(blank=True, to='programme_curriculum.Course')), - ], - options={ - 'unique_together': {('code', 'faculty_code')}, - }, - ), - ] diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py b/FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py deleted file mode 100644 index c8bee8927..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0008_auto_20240220_1223.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-20 12:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0007_updatecourseproposal'), - ] - - operations = [ - migrations.AlterField( - model_name='courseproposal', - name='credit', - field=models.PositiveIntegerField(default=3), - ), - migrations.AlterField( - model_name='courseproposal', - name='discussion_hours', - field=models.PositiveIntegerField(default=0, null=True), - ), - migrations.AlterField( - model_name='courseproposal', - name='lecture_hours', - field=models.PositiveIntegerField(default=3, null=True), - ), - migrations.AlterField( - model_name='courseproposal', - name='pratical_hours', - field=models.PositiveIntegerField(default=0, null=True), - ), - migrations.AlterField( - model_name='courseproposal', - name='project_hours', - field=models.PositiveIntegerField(default=0, null=True), - ), - migrations.AlterField( - model_name='courseproposal', - name='tutorial_hours', - field=models.PositiveIntegerField(default=0, null=True), - ), - ] diff --git a/FusionIIIT/applications/programme_curriculum/models.py b/FusionIIIT/applications/programme_curriculum/models.py index b046fc518..40c353605 100644 --- a/FusionIIIT/applications/programme_curriculum/models.py +++ b/FusionIIIT/applications/programme_curriculum/models.py @@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError from applications.globals.models import ExtraInfo +from django.core.validators import MinValueValidator, MaxValueValidator, DecimalValidator # Create your models here. @@ -26,7 +27,8 @@ ('Design', 'Design'), ('Manufacturing', 'Manufacturing'), ('Management Science', 'Management Science'), - ('Optional Elective', 'Optional Elective'), + ('Open Elective', 'Open Elective'), + ('Swayam','Swayam'), ('Project', 'Project'), ('Optional', 'Optional'), ('Others', 'Others') @@ -117,7 +119,13 @@ class Curriculum(models.Model): ''' programme = models.ForeignKey(Programme, on_delete=models.CASCADE, null=False) name = models.CharField(max_length=100, null=False, blank=False) - version = models.PositiveIntegerField(default=1, null=False) + # version = models.FloatField(default=1.0, null=False) + # version = models.PositiveIntegerField(default=1, null=False) + version = models.DecimalField( + max_digits=2, + decimal_places=1, + default=1.0, + validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)]) working_curriculum = models.BooleanField(default=True, null=False) no_of_semester = models.PositiveIntegerField(default=1, null=False) min_credit = models.PositiveIntegerField(default=0, null=False) @@ -207,8 +215,13 @@ class Course(models.Model): ''' - code = models.CharField(max_length=10, null=False, unique=True, blank=False) - name = models.CharField(max_length=100, null=False, unique=True, blank=False) + code = models.CharField(max_length=10, null=False, blank=False) + name = models.CharField(max_length=100, null=False, blank=False) + version = models.DecimalField( + max_digits=5, + decimal_places=1, + default=1.0, + validators=[MinValueValidator(1.0), DecimalValidator(max_digits=5, decimal_places=1)]) credit = models.PositiveIntegerField(default=0, null=False, blank=False) lecture_hours = PositiveIntegerField(null=True, ) tutorial_hours = PositiveIntegerField(null=True) @@ -228,12 +241,14 @@ class Course(models.Model): ref_books = models.TextField() working_course = models.BooleanField(default=True) disciplines = models.ManyToManyField(Discipline, blank=True) + latest_version = models.BooleanField(default=True) class Meta: - unique_together = ('code', 'name',) + unique_together = ('code','version') def __str__(self): - return str(self.code + " - " +self.name) + return str(self.code + " - " +self.name+"- v"+str(self.version)) + @property def courseslots(self): @@ -398,12 +413,7 @@ def __str__(self): class UpdateCourseProposal(models.Model): ''' - Current Purpose : To store the details regarding a course - - - - - + Current Purpose : To store the details regarding a update course proposal forms ATTRIBUTES : code(char) - the course code (eg CS3005) diff --git a/FusionIIIT/applications/programme_curriculum/urls.py b/FusionIIIT/applications/programme_curriculum/urls.py index 925d2bb42..8dc18adc1 100644 --- a/FusionIIIT/applications/programme_curriculum/urls.py +++ b/FusionIIIT/applications/programme_curriculum/urls.py @@ -57,24 +57,14 @@ 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('hod_view_all_courses/', views.hod_view_all_courses, name='faculty_view_all_courses'), - # path('hod_view_a_course//',views.hod_view_a_course,name="faculty_view_a_course"), - # 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('head_view_a_course_proposal//', views.head_view_a_course_proposal, name='head_view_a_course_proposal'), path('head_view_a_update_course_proposal//', views.head_view_a_update_course_proposal, name='head_view_a_update_course_proposal'), path('forward_form/', views.forward_form, name='forward_form'), path('reject_form/', views.reject_form, name='reject_form'), - path('approve_form/', views.approve_form, name='approve_form'), + # path('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('admin_view_course_proposal_forms/', views.admin_view_course_proposal_forms, name='admin_view_course_proposal_forms'), - path('admin_view_a_course_proposal//', views.admin_view_a_course_proposal, name='admin_view_a_course_proposal'), - path('admin_view_a_update_course_proposal//', views.admin_view_a_update_course_proposal, name='admin_view_a_update_course_proposal') - + # path('approve_update_form/', views.approve_update_form, name='approve_update_form'), ] diff --git a/FusionIIIT/applications/programme_curriculum/views.py b/FusionIIIT/applications/programme_curriculum/views.py index 10dc1df92..d2ed3637a 100644 --- a/FusionIIIT/applications/programme_curriculum/views.py +++ b/FusionIIIT/applications/programme_curriculum/views.py @@ -9,6 +9,7 @@ from .models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot,CourseProposal,UpdateCourseProposal from .forms import ProgrammeForm, DisciplineForm, CurriculumForm, SemesterForm, CourseForm, BatchForm, CourseSlotForm, ReplicateCurriculumForm,Course_Proposal,Update_Course_Proposal,CourseProposalForm from .filters import CourseFilter, BatchFilter, CurriculumFilter +from django.db import IntegrityError # from applications.academic_information.models import Student from applications.globals.models import (DepartmentInfo, Designation, @@ -746,17 +747,28 @@ def update_course_form(request, course_id): pass course = get_object_or_404(Course, Q(id=course_id)) + previous = Course.objects.all().filter(code=course.code).order_by('version').last() + course.version=previous.version + version_error='' form = CourseForm(instance=course) submitbutton= request.POST.get('Submit') if submitbutton: if request.method == 'POST': - form = CourseForm(request.POST, instance=course) - if form.is_valid(): - form.save() - messages.success(request, "Updated "+ course.name +" successful") - return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course_id) + "/") - - return render(request,'programme_curriculum/acad_admin/add_course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton}) + form = CourseForm(request.POST) + if form.is_valid() : + previous.latest_version=False + previous.save() + form.latest_version=True + new_course = form.save(commit=False) + if(new_course.version>previous.version): + form.save() + course = Course.objects.last() + messages.success(request, "Added successful") + return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course.id) + "/") + else: + version_error+=f'The version should be greater than {previous.version}' + + return render(request,'programme_curriculum/acad_admin/update_course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton,'version_error':version_error}) @login_required(login_url='/accounts/login') @@ -991,7 +1003,7 @@ def replicate_curriculum(request, curriculum_id): - + @@ -1112,35 +1124,55 @@ def faculty_view_a_course(request, course_id): # proposal = get_object_or_404(CourseProposal, Q(id=proposal_id)) # return render(request, 'programme_curriculum/hod/head_view_a_course.html', {'proposal': proposal}) - - - -###new - def head_view_a_course_proposal(request,CourseProposal_id): - user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - + if str(request.user) == "CSE HOD" : pass proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) - + if(str(des.designation) == "Dean Academic"): - return render(request, 'programme_curriculum/faculty/dean_view_a_course_proposal.html', {'course': proposalform}) + # poposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) + form = CourseProposalForm(instance=proposalform) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = CourseProposalForm(request.POST) + if form.is_valid(): + proposalform.status = 3 + proposalform.save() + form.save() + course = get_object_or_404(Course, Q(code=proposalform.code)) + messages.success(request, "Updated "+ proposalform.name +" successful") + return HttpResponseRedirect("/programme_curriculum/course/" + str(course.id) + "/") + return render(request, 'programme_curriculum/faculty/dean_view_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) return render(request, 'programme_curriculum/faculty/head_view_a_course_proposal.html', {'proposal': proposalform}) def head_view_a_update_course_proposal(request,UpdateCourseProposal_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() - + if str(request.user) == "CSE HOD" : pass proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) - + if(str(des.designation) == "Dean Academic"): - return render(request, 'programme_curriculum/faculty/dean_view_update_a_course_proposal.html', {'course': proposalform}) + + course = get_object_or_404(Course, Q(code=proposalform.code)) + form = CourseProposalForm(instance=proposalform) + submitbutton= request.POST.get('Submit') + if submitbutton: + if request.method == 'POST': + form = CourseProposalForm(request.POST,instance=course) + if form.is_valid(): + proposalform.status = 3 + proposalform.save() + form.save() + messages.success(request, "Updated "+ proposalform.name +" successful") + return HttpResponseRedirect("/programme_curriculum/course/"+ str(course.id) + "/") + return render(request, 'programme_curriculum/faculty/dean_view_update_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) return render(request, 'programme_curriculum/faculty/head_view_update_a_course_proposal.html', {'proposal': proposalform}) def forward_form(request,CourseProposal_id): @@ -1220,22 +1252,22 @@ def reject_update_form(request,UpdateCourseProposal_id): 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() +# 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}) +# 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/dean_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals': Updatecourses}) @login_required(login_url='/accounts/login') @@ -1292,70 +1324,4 @@ def update_course_proposal_form(request, course_id): form.save() messages.success(request, "Updated "+ course.name +" successful") return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') - return render(request,'programme_curriculum/faculty/update_course_proposal_form.html',{'faculty_details':faculty_details,'form':form, 'submitbutton': submitbutton}) - - - -def admin_view_course_proposal_forms(request): - user_details = ExtraInfo.objects.get(user = request.user) - des = HoldsDesignation.objects.all().filter(user = request.user).last() - - if str(request.user) == "acadadmin" : - pass - elif str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" or str(des.designation) == "Dean Academic": - return HttpResponseRedirect('/programme_curriculum/programmes/') - - courses = CourseProposal.objects.all() - updatecourses=UpdateCourseProposal.objects.all() - - - return render(request, 'programme_curriculum/acad_admin/admin_view_course_proposal_forms.html',{'courseProposals': courses,'updateProposals':updatecourses}) - # return render(request, 'programme_curriculum/faculty/view_course_proposal_forms.html',{'courseProposals': courseProposal}) - - -def admin_view_a_course_proposal(request,CourseProposal_id): - - user_details = ExtraInfo.objects.get(user = request.user) - des = HoldsDesignation.objects.all().filter(user = request.user).first() - - proposalform = get_object_or_404(CourseProposal, Q(id=CourseProposal_id)) - form = CourseProposalForm(instance=proposalform) - submitbutton= request.POST.get('Submit') - if submitbutton: - if request.method == 'POST': - form = CourseProposalForm(request.POST) - if form.is_valid(): - proposalform.status = 6 - proposalform.save() - form.save() - course = get_object_or_404(Course, Q(code=proposalform.code)) - - messages.success(request, proposalform.name +"Added Successful") - return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course.id) + "/") - return render(request, 'programme_curriculum/acad_admin/admin_view_a_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) - - -def admin_view_a_update_course_proposal(request,UpdateCourseProposal_id): - - user_details = ExtraInfo.objects.get(user = request.user) - des = HoldsDesignation.objects.all().filter(user = request.user).first() - if str(des.designation) == "student": # or str(des.designation) == "Associate Professor" or str(des.designation) == "Professor" or str(des.designation) == "Assistant Professor" - return HttpResponseRedirect('/programme_curriculum/programmes/') - elif str(request.user) == "acadadmin" : - pass - - proposalform = get_object_or_404(UpdateCourseProposal, Q(id=UpdateCourseProposal_id)) - - course = get_object_or_404(Course, Q(code=proposalform.code)) - form = CourseProposalForm(instance=proposalform) - submitbutton= request.POST.get('Submit') - if submitbutton: - if request.method == 'POST': - form = CourseProposalForm(request.POST,instance=course) - if form.is_valid(): - proposalform.status = 6 - proposalform.save() - form.save() - messages.success(request, "Updated "+ proposalform.name +" successful") - return HttpResponseRedirect("/programme_curriculum/admin_course/" + str(course.id) + "/") - return render(request, 'programme_curriculum/acad_admin/admin_view_a_update_course_proposal.html', {'course': proposalform ,'form':form,'submitbutton': submitbutton}) + 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 From 3b83423da158098b24daa11db3cae80936fee147 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:07:10 +0530 Subject: [PATCH 03/20] Delete FusionIIIT/Fusion/settings/development.py --- FusionIIIT/Fusion/settings/development.py | 55 ----------------------- 1 file changed, 55 deletions(-) delete mode 100644 FusionIIIT/Fusion/settings/development.py diff --git a/FusionIIIT/Fusion/settings/development.py b/FusionIIIT/Fusion/settings/development.py deleted file mode 100644 index 96fc1a468..000000000 --- a/FusionIIIT/Fusion/settings/development.py +++ /dev/null @@ -1,55 +0,0 @@ -from Fusion.settings.common import * - -DEBUG = True - -SECRET_KEY = '=&w9due426k@l^ju1=s1)fj1rnpf0ok8xvjwx+62_nc-f12-8(' - -ALLOWED_HOSTS = ['*'] - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'fusionlab', - 'HOST': os.environ.get("DB_HOST", default='localhost'), - 'USER': 'fusion_admin', - 'PASSWORD': '123', - } -} - -REST_FRAMEWORK = { - 'DEFAULT_AUTHENTICATION_CLASSES': ( - 'rest_framework.authentication.TokenAuthentication', - ), - 'DEFAULT_PERMISSION_CLASSES': ( - 'rest_framework.permissions.IsAuthenticated', - ) -} - -if DEBUG: - MIDDLEWARE += ( - 'debug_toolbar.middleware.DebugToolbarMiddleware', - ) - - INSTALLED_APPS += ( - 'debug_toolbar', - 'django_extensions', - ) - - - ############################### - # DJANGO_EXTENSIONS SETTINGS: # - ############################### - INTERNAL_IPS = [ - '127.0.0.1', - ] - - ############################### - # DJANGO_EXTENSIONS SETTINGS: # - ############################### - SHELL_PLUS = "ipython" - - SHELL_PLUS_PRINT_SQL = True - - DEBUG_TOOLBAR_CONFIG = { - 'INTERCEPT_REDIRECTS': False, - } From b03e6d618ed5511b65ad89a654ec7672f607b9c5 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:08:03 +0530 Subject: [PATCH 04/20] Delete FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py --- .../migrations/0002_auto_20240218_1206.py | 38 ------------------- 1 file changed, 38 deletions(-) delete mode 100644 FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py diff --git a/FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py deleted file mode 100644 index 39dcfd70c..000000000 --- a/FusionIIIT/applications/academic_procedures/migrations/0002_auto_20240218_1206.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('academic_procedures', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='assistantshipclaim', - name='year', - field=models.IntegerField(choices=[(2024, 2024), (2023, 2023)]), - ), - migrations.AlterField( - model_name='course_registration', - name='working_year', - field=models.IntegerField(blank=True, choices=[(2024, 2024), (2023, 2023)], null=True), - ), - migrations.AlterField( - model_name='finalregistrations', - name='batch', - field=models.IntegerField(default=2024), - ), - migrations.AlterField( - model_name='messdue', - name='year', - field=models.IntegerField(choices=[(2024, 2024), (2023, 2023)]), - ), - migrations.AlterField( - model_name='register', - name='year', - field=models.IntegerField(default=2024), - ), - ] From 82be6ef6e44c033cff86c9453c2963766c5673fc Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:09:00 +0530 Subject: [PATCH 05/20] Delete FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py --- .../eis/migrations/0002_auto_20240218_1206.py | 53 ------------------- 1 file changed, 53 deletions(-) delete mode 100644 FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py diff --git a/FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py deleted file mode 100644 index 81c7b1034..000000000 --- a/FusionIIIT/applications/eis/migrations/0002_auto_20240218_1206.py +++ /dev/null @@ -1,53 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eis', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='emp_achievement', - name='a_year', - field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), - ), - migrations.AlterField( - model_name='emp_confrence_organised', - name='k_year', - field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), - ), - migrations.AlterField( - model_name='emp_expert_lectures', - name='l_year', - field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), - ), - migrations.AlterField( - model_name='emp_keynote_address', - name='k_year', - field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), - ), - migrations.AlterField( - model_name='emp_mtechphd_thesis', - name='s_year', - field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), - ), - migrations.AlterField( - model_name='emp_patents', - name='p_year', - field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), - ), - migrations.AlterField( - model_name='emp_published_books', - name='pyear', - field=models.IntegerField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], null=True, verbose_name='year'), - ), - migrations.AlterField( - model_name='emp_research_papers', - name='year', - field=models.CharField(blank=True, choices=[(1995, 1995), (1996, 1996), (1997, 1997), (1998, 1998), (1999, 1999), (2000, 2000), (2001, 2001), (2002, 2002), (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009), (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016), (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021), (2022, 2022), (2023, 2023), (2024, 2024)], max_length=10, null=True), - ), - ] From df7210b961bdef846317a7ee16ee12de500a37f5 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:09:51 +0530 Subject: [PATCH 06/20] Delete FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py --- .../migrations/0002_auto_20240218_1206.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py diff --git a/FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py deleted file mode 100644 index 054a5bf14..000000000 --- a/FusionIIIT/applications/globals/migrations/0002_auto_20240218_1206.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), - ), - ] From 053558e034859326cd47842bcb41d33ae36a1fd0 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:10:19 +0530 Subject: [PATCH 07/20] Delete FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py --- .../migrations/0003_auto_20240218_1235.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py diff --git a/FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py b/FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py deleted file mode 100644 index d7712dc8f..000000000 --- a/FusionIIIT/applications/globals/migrations/0003_auto_20240218_1235.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0002_auto_20240218_1206'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), - ), - ] From 616b7c53e56fa30f96e17e960561c0d791efce8b Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:10:39 +0530 Subject: [PATCH 08/20] Delete FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py --- .../migrations/0004_auto_20240218_1242.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py diff --git a/FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py b/FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py deleted file mode 100644 index 9f76762ab..000000000 --- a/FusionIIIT/applications/globals/migrations/0004_auto_20240218_1242.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0003_auto_20240218_1235'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), - ), - ] From d973ac792e4abe8dffef6a3e1f72849d9874a01f Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:11:14 +0530 Subject: [PATCH 09/20] Delete FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py --- .../migrations/0005_auto_20240218_1325.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py diff --git a/FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py b/FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py deleted file mode 100644 index 01134d81d..000000000 --- a/FusionIIIT/applications/globals/migrations/0005_auto_20240218_1325.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 13:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0004_auto_20240218_1242'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), - ), - ] From cfb1e0661eb84fa257ad762549138e72d7871bdb Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:11:35 +0530 Subject: [PATCH 10/20] Delete FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py --- .../migrations/0006_auto_20240218_1336.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py diff --git a/FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py b/FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py deleted file mode 100644 index 23f9f57ac..000000000 --- a/FusionIIIT/applications/globals/migrations/0006_auto_20240218_1336.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 13:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0005_auto_20240218_1325'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), - ), - ] From 18f55a08c6cda337ad4506e53dd8d495dd5cea97 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:11:54 +0530 Subject: [PATCH 11/20] Delete FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py --- .../migrations/0007_auto_20240218_1601.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py diff --git a/FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py b/FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py deleted file mode 100644 index 874ce2f3d..000000000 --- a/FusionIIIT/applications/globals/migrations/0007_auto_20240218_1601.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 16:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0006_auto_20240218_1336'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), - ), - ] From 48718c65203b2a081fa3ed9f00b07fc33dad0838 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:12:21 +0530 Subject: [PATCH 12/20] Delete FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py --- .../migrations/0008_auto_20240218_1942.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py diff --git a/FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py b/FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py deleted file mode 100644 index e15bbcf97..000000000 --- a/FusionIIIT/applications/globals/migrations/0008_auto_20240218_1942.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 19:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0007_auto_20240218_1601'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), - ), - ] From d50a1e03fab16b3aadef127d8917b724c51644db Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:12:44 +0530 Subject: [PATCH 13/20] Delete FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py --- .../migrations/0009_auto_20240219_2217.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py diff --git a/FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py b/FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py deleted file mode 100644 index 02ef44162..000000000 --- a/FusionIIIT/applications/globals/migrations/0009_auto_20240219_2217.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-19 22:17 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0008_auto_20240218_1942'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50), - ), - ] From 9aac94f1690f7b7a0201f5f9c9c09dafcac69a1a Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:13:22 +0530 Subject: [PATCH 14/20] Delete FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py --- .../migrations/0010_auto_20240219_2232.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py diff --git a/FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py b/FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py deleted file mode 100644 index 5776a707b..000000000 --- a/FusionIIIT/applications/globals/migrations/0010_auto_20240219_2232.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-19 22:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('globals', '0009_auto_20240219_2217'), - ] - - operations = [ - migrations.AlterField( - model_name='extrainfo', - name='user_status', - field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50), - ), - ] From 49bf296b64d2077140119bd6653a1c33301f54fe Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:14:17 +0530 Subject: [PATCH 15/20] Delete FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py --- .../migrations/0002_auto_20240218_1206.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py diff --git a/FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py b/FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py deleted file mode 100644 index 67c13da39..000000000 --- a/FusionIIIT/applications/scholarships/migrations/0002_auto_20240218_1206.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-02-18 12:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('scholarships', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='previous_winner', - name='year', - field=models.IntegerField(default=2024), - ), - ] From e2bffa8c080fa0140d62c2c16a725350bddf775c Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:15:21 +0530 Subject: [PATCH 16/20] Delete requirements.txt --- requirements.txt | 149 ----------------------------------------------- 1 file changed, 149 deletions(-) delete mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 2f3150fec..000000000 --- a/requirements.txt +++ /dev/null @@ -1,149 +0,0 @@ -# amqp==5.0.2 -# # arabic-reshaper==2.1.1 -# asgiref==3.3.1 -# attrs==20.3.0 -# beautifulsoup4==4.9.3 -# billiard==3.6.3.0 -# Brotli==1.0.9 -# bs4==0.0.1 -# celery==5.0.5 -# certifi==2020.12.5 -# cffi==1.14.4 -# chardet==4.0.0 -# click==7.1.2 -# click-didyoumean==0.0.3 -# click-plugins==1.1.1 -# click-repl==0.1.6 -# cryptography==36.0.2 -# defusedxml==0.6.0 -# Django==3.1.5 -# django-allauth==0.44.0 -# django-cleanup==5.1.0 -# django-cors-headers==3.7.0 -# django-debug-toolbar==3.2.4 -# django-extensions==3.1.1 -# django-filter==2.4.0 -# django-markdown-deux==1.0.5 -# django-model-utils==4.1.1 -# django-notifications-hq==1.6.0 -# django-pagedown==2.2.0 -# djangorestframework==3.12.2 -# django-semanticui-forms==1.6.5 -# django-unused-media==0.2.2 -# future==0.18.2 -# # gunicorn -# html-text==0.5.2 -# html5lib==1.1 -# idna==2.10 -# ipython==8.2.0 -# ipython-genutils==0.2.0 -# jsonfield==3.1.0 -# jsonschema==3.2.0 -# kombu==5.0.2 -# # lxml==4.8.0 -# markdown2==2.4.2 -# # numpy==1.22.3 -# oauthlib==3.1.0 -# openpyxl==3.0.7 -# # Pillow==8.1.0 -# prompt-toolkit==3.0.10 -# # psycopg2-binary==2.8.6 -# pycparser==2.20 -# PyJWT==2.6.0 -# PyPDF2==1.26.0 -# pyrsistent==0.17.3 -# python-bidi==0.4.2 -# python-dateutil==2.8.1 -# python3-openid==3.2.0 -# pytz==2020.5 -# # reportlab==3.5.59 -# requests==2.25.1 -# requests-oauthlib==1.3.0 -# six==1.15.0 -# soupsieve==2.1 -# sqlparse==0.4.2 -# swapper==1.1.2.post1 -# urllib3==1.26.8 -# vine==5.0.0 -# wcwidth==0.2.5 -# webencodings==0.5.1 -# whitenoise==5.2.0 -# xhtml2pdf==0.2.5 -# xlrd==2.0.1 -# XlsxWriter==1.3.7 -# xlwt==1.3.0 - - -amqp==5.0.2 -asgiref==3.3.1 -attrs==20.3.0 -beautifulsoup4==4.9.3 -billiard==3.6.3.0 -Brotli==1.0.9 -bs4==0.0.1 -celery==5.0.5 -certifi==2020.12.5 -cffi==1.14.4 -chardet==4.0.0 -click==7.1.2 -click-didyoumean==0.0.3 -click-plugins==1.1.1 -click-repl==0.1.6 -cryptography==36.0.2 -defusedxml==0.6.0 -Django==3.1.5 -django-allauth==0.44.0 -django-cleanup==5.1.0 -django-cors-headers==3.7.0 -django-debug-toolbar==3.2.4 -django-extensions==3.1.1 -django-filter==2.4.0 -django-markdown-deux==1.0.5 -django-model-utils==4.1.1 -django-notifications-hq==1.6.0 -django-pagedown==2.2.0 -djangorestframework==3.12.2 -django-semanticui-forms==1.6.5 -django-unused-media==0.2.2 -future==0.18.2 -# gunicorn -html-text==0.5.2 -html5lib==1.1 -idna==2.10 -ipython==8.2.0 -ipython-genutils==0.2.0 -jsonfield==3.1.0 -jsonschema==3.2.0 -kombu==5.0.2 -lxml==4.8.0 -markdown2==2.4.2 -numpy==1.22.3 -oauthlib==3.1.0 -openpyxl==3.0.7 -Pillow==8.1.0 -prompt-toolkit==3.0.10 -psycopg2-binary==2.8.6 -pycparser==2.20 -PyJWT==2.6.0 -PyPDF2==1.26.0 -pyrsistent==0.17.3 -python-bidi==0.4.2 -python-dateutil==2.8.1 -python3-openid==3.2.0 -pytz==2020.5 -reportlab==3.5.59 -requests==2.25.1 -requests-oauthlib==1.3.0 -six==1.15.0 -soupsieve==2.1 -sqlparse==0.4.2 -swapper==1.1.2.post1 -urllib3==1.26.8 -vine==5.0.0 -wcwidth==0.2.5 -webencodings==0.5.1 -whitenoise==5.2.0 -xhtml2pdf==0.2.5 -xlrd==2.0.1 -XlsxWriter==1.3.7 -xlwt==1.3.0 \ No newline at end of file From 73bd368cfba449dff1ff606e514d4e2585e1d234 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:18:20 +0530 Subject: [PATCH 17/20] Delete FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py --- .../migrations/0002_auto_20240312_1929.py | 118 ------------------ 1 file changed, 118 deletions(-) delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py b/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py deleted file mode 100644 index 89651b6cd..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0002_auto_20240312_1929.py +++ /dev/null @@ -1,118 +0,0 @@ -# Generated by Django 3.1.5 on 2024-03-12 19:29 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='version', - field=models.DecimalField(decimal_places=1, default=1.0, max_digits=2, validators=[django.core.validators.MinValueValidator(1.0), django.core.validators.DecimalValidator(decimal_places=1, max_digits=2)]), - ), - migrations.AlterField( - model_name='batch', - name='year', - field=models.PositiveIntegerField(default=2024), - ), - migrations.AlterField( - model_name='course', - name='code', - field=models.CharField(max_length=10), - ), - migrations.AlterField( - model_name='course', - name='name', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='courseslot', - name='type', - field=models.CharField(choices=[('Professional Core', 'Professional Core'), ('Professional Elective', 'Professional Elective'), ('Professional Lab', 'Professional Lab'), ('Engineering Science', 'Engineering Science'), ('Natural Science', 'Natural Science'), ('Humanities', 'Humanities'), ('Design', 'Design'), ('Manufacturing', 'Manufacturing'), ('Management Science', 'Management Science'), ('Open Elective', 'Open Elective'), ('Swayam', 'Swayam'), ('Project', 'Project'), ('Optional', 'Optional'), ('Others', 'Others')], max_length=70), - ), - migrations.AlterField( - model_name='curriculum', - name='version', - field=models.DecimalField(decimal_places=1, default=1.0, max_digits=2, validators=[django.core.validators.MinValueValidator(1.0), django.core.validators.DecimalValidator(decimal_places=1, max_digits=2)]), - ), - migrations.AlterField( - model_name='programme', - name='programme_begin_year', - field=models.PositiveIntegerField(default=2024), - ), - migrations.AlterUniqueTogether( - name='course', - unique_together={('code', 'name', 'version')}, - ), - migrations.CreateModel( - name='UpdateCourseProposal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('faculty_name', models.CharField(max_length=100)), - ('faculty_code', models.CharField(max_length=10)), - ('code', models.CharField(max_length=10)), - ('name', models.CharField(max_length=100)), - ('credit', models.PositiveIntegerField(default=0)), - ('lecture_hours', models.PositiveIntegerField(null=True)), - ('tutorial_hours', models.PositiveIntegerField(null=True)), - ('pratical_hours', models.PositiveIntegerField(null=True)), - ('discussion_hours', models.PositiveIntegerField(null=True)), - ('project_hours', models.PositiveIntegerField(null=True)), - ('pre_requisits', models.TextField(blank=True, null=True)), - ('syllabus', models.TextField()), - ('percent_quiz_1', models.PositiveIntegerField(default=10)), - ('percent_midsem', models.PositiveIntegerField(default=20)), - ('percent_quiz_2', models.PositiveIntegerField(default=10)), - ('percent_endsem', models.PositiveIntegerField(default=30)), - ('percent_project', models.PositiveIntegerField(default=15)), - ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), - ('percent_course_attendance', models.PositiveIntegerField(default=5)), - ('ref_books', models.TextField()), - ('working_course', models.BooleanField(default=True)), - ('status', models.PositiveIntegerField(default=0)), - ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), - ('pre_requisit_courses', models.ManyToManyField(blank=True, to='programme_curriculum.Course')), - ], - options={ - 'unique_together': {('code', 'faculty_code')}, - }, - ), - migrations.CreateModel( - name='CourseProposal', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('faculty_name', models.CharField(max_length=100)), - ('faculty_code', models.CharField(max_length=10)), - ('code', models.CharField(max_length=10)), - ('name', models.CharField(max_length=100)), - ('credit', models.PositiveIntegerField(default=3)), - ('lecture_hours', models.PositiveIntegerField(default=3, null=True)), - ('tutorial_hours', models.PositiveIntegerField(default=0, null=True)), - ('pratical_hours', models.PositiveIntegerField(default=0, null=True)), - ('discussion_hours', models.PositiveIntegerField(default=0, null=True)), - ('project_hours', models.PositiveIntegerField(default=0, null=True)), - ('pre_requisits', models.TextField(blank=True, null=True)), - ('syllabus', models.TextField()), - ('percent_quiz_1', models.PositiveIntegerField(default=10)), - ('percent_midsem', models.PositiveIntegerField(default=20)), - ('percent_quiz_2', models.PositiveIntegerField(default=10)), - ('percent_endsem', models.PositiveIntegerField(default=30)), - ('percent_project', models.PositiveIntegerField(default=15)), - ('percent_lab_evaluation', models.PositiveIntegerField(default=10)), - ('percent_course_attendance', models.PositiveIntegerField(default=5)), - ('ref_books', models.TextField()), - ('status', models.PositiveIntegerField(default=0)), - ('disciplines', models.ManyToManyField(blank=True, to='programme_curriculum.Discipline')), - ('pre_requisit_courses', models.ManyToManyField(blank=True, to='programme_curriculum.Course')), - ], - options={ - 'unique_together': {('code', 'faculty_code')}, - }, - ), - ] From e034e530c5bded83bb536d1e3837a30a8f200af0 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:18:43 +0530 Subject: [PATCH 18/20] Delete FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py --- .../migrations/0003_auto_20240312_1944.py | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py b/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py deleted file mode 100644 index fe0ca36ab..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0003_auto_20240312_1944.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.1.5 on 2024-03-12 19:44 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0002_auto_20240312_1929'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='course', - unique_together={('code', 'version')}, - ), - ] From 886cc68708b3173d08db801fd096775612cf16d6 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:19:07 +0530 Subject: [PATCH 19/20] Delete FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py --- .../migrations/0004_course_latest_version.py | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py b/FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py deleted file mode 100644 index 05e50f6bd..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0004_course_latest_version.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.5 on 2024-03-12 22:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0003_auto_20240312_1944'), - ] - - operations = [ - migrations.AddField( - model_name='course', - name='latest_version', - field=models.BooleanField(default=True), - ), - ] From 2404386a01c105d111fce251d5ef76575aab7b04 Mon Sep 17 00:00:00 2001 From: Ravichendraa <112809862+Ravichendraa@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:19:30 +0530 Subject: [PATCH 20/20] Delete FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py --- .../migrations/0005_auto_20240313_0128.py | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py b/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py deleted file mode 100644 index edbfd0211..000000000 --- a/FusionIIIT/applications/programme_curriculum/migrations/0005_auto_20240313_0128.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.1.5 on 2024-03-13 01:28 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programme_curriculum', '0004_course_latest_version'), - ] - - operations = [ - migrations.AlterField( - model_name='course', - name='version', - field=models.DecimalField(decimal_places=1, default=1.0, max_digits=5, validators=[django.core.validators.MinValueValidator(1.0), django.core.validators.DecimalValidator(decimal_places=1, max_digits=5)]), - ), - ]