diff --git a/.env.example b/.env.example index 9aee6d7..5776613 100644 --- a/.env.example +++ b/.env.example @@ -1,12 +1,3 @@ -# ============================= -# Database config - -DB_NAME=dj_lms -DB_USER=postgres -DB_PASSWORD=pass123 -DB_HOST=localhost -DB_PORT=5432 - # ============================= # Email config diff --git a/README.md b/README.md index 43f1aaf..116647c 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,6 @@ If you would like to contribute, simply begin by implementing one from the list > The following programs are required to run the project - [Python3.8+](https://www.python.org/downloads/) -- [PostgreSQL database](https://www.postgresql.org/download/) - [Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) # Installation diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py index 2d6f928..453a42b 100644 --- a/accounts/migrations/0001_initial.py +++ b/accounts/migrations/0001_initial.py @@ -1,6 +1,6 @@ -# Generated by Django 2.2.3 on 2020-07-29 15:25 +# Generated by Django 4.0.8 on 2024-08-31 11:51 -import django.contrib.auth.models +import accounts.models import django.contrib.auth.validators from django.db import migrations, models import django.utils.timezone @@ -17,37 +17,64 @@ class Migration(migrations.Migration): migrations.CreateModel( name='User', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('password', models.CharField(max_length=128, verbose_name='password')), ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), ('is_student', models.BooleanField(default=False)), ('is_lecturer', models.BooleanField(default=False)), + ('is_parent', models.BooleanField(default=False)), + ('is_dep_head', models.BooleanField(default=False)), + ('gender', models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female')], max_length=1, null=True)), ('phone', models.CharField(blank=True, max_length=60, null=True)), ('address', models.CharField(blank=True, max_length=60, null=True)), - ('picture', models.ImageField(default='default.png', null=True, upload_to='profile_pictures')), + ('picture', models.ImageField(default='default.png', null=True, upload_to='profile_pictures/%y/%m/%d/')), ('email', models.EmailField(blank=True, max_length=254, null=True)), ], options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, + 'ordering': ('-date_joined',), }, managers=[ - ('objects', django.contrib.auth.models.UserManager()), + ('objects', accounts.models.CustomUserManager()), ], ), + migrations.CreateModel( + name='DepartmentHead', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'ordering': ('-user__date_joined',), + }, + ), + migrations.CreateModel( + name='Parent', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('first_name', models.CharField(max_length=120)), + ('last_name', models.CharField(max_length=120)), + ('phone', models.CharField(blank=True, max_length=60, null=True)), + ('email', models.EmailField(blank=True, max_length=254, null=True)), + ('relation_ship', models.TextField(blank=True, choices=[('Father', 'Father'), ('Mother', 'Mother'), ('Brother', 'Brother'), ('Sister', 'Sister'), ('Grand mother', 'Grand mother'), ('Grand father', 'Grand father'), ('Other', 'Other')])), + ], + options={ + 'ordering': ('-user__date_joined',), + }, + ), migrations.CreateModel( name='Student', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('level', models.CharField(choices=[('Level course', 'Level course'), ('Bachloar', 'Bachloar'), ('Master', 'Master')], max_length=25, null=True)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('level', models.CharField(choices=[('Bachelor', 'Bachelor Degree'), ('Master', 'Master Degree')], max_length=25, null=True)), ], + options={ + 'ordering': ('-student__date_joined',), + }, ), ] diff --git a/accounts/migrations/0002_auto_20200729_1825.py b/accounts/migrations/0002_initial.py similarity index 51% rename from accounts/migrations/0002_auto_20200729_1825.py rename to accounts/migrations/0002_initial.py index 1b3fed5..ab45868 100644 --- a/accounts/migrations/0002_auto_20200729_1825.py +++ b/accounts/migrations/0002_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.3 on 2020-07-29 15:25 +# Generated by Django 4.0.8 on 2024-08-31 11:51 from django.conf import settings from django.db import migrations, models @@ -11,29 +11,49 @@ class Migration(migrations.Migration): dependencies = [ ('accounts', '0001_initial'), - ('auth', '0011_update_proxy_permissions'), + ('auth', '0012_alter_user_first_name_max_length'), ('course', '0001_initial'), ] operations = [ migrations.AddField( model_name='student', - name='department', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Program'), + name='program', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.program'), ), migrations.AddField( model_name='student', name='student', field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), ), + migrations.AddField( + model_name='parent', + name='student', + field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.student'), + ), + migrations.AddField( + model_name='parent', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='departmenthead', + name='department', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.program'), + ), + migrations.AddField( + model_name='departmenthead', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), migrations.AddField( model_name='user', name='groups', - field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), + field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups'), ), migrations.AddField( model_name='user', name='user_permissions', - field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), + field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions'), ), ] diff --git a/accounts/migrations/0003_auto_20200730_0740.py b/accounts/migrations/0003_auto_20200730_0740.py deleted file mode 100644 index f0eaaea..0000000 --- a/accounts/migrations/0003_auto_20200730_0740.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2020-07-30 04:40 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0002_auto_20200729_1825'), - ] - - operations = [ - migrations.AlterField( - model_name='student', - name='level', - field=models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True), - ), - ] diff --git a/accounts/migrations/0004_auto_20200822_2238.py b/accounts/migrations/0004_auto_20200822_2238.py deleted file mode 100644 index bfbf2d9..0000000 --- a/accounts/migrations/0004_auto_20200822_2238.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2020-08-22 19:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0003_auto_20200730_0740'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='picture', - field=models.ImageField(default='default.png', null=True, upload_to='profile_pictures/%y/%m/%d/'), - ), - ] diff --git a/accounts/migrations/0005_auto_20200822_2246.py b/accounts/migrations/0005_auto_20200822_2246.py deleted file mode 100644 index 9e7546e..0000000 --- a/accounts/migrations/0005_auto_20200822_2246.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2020-08-22 19:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0004_auto_20200822_2238'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='picture', - field=models.ImageField(blank=True, null=True, upload_to='profile_pictures/%y/%m/%d/'), - ), - ] diff --git a/accounts/migrations/0006_auto_20200822_2308.py b/accounts/migrations/0006_auto_20200822_2308.py deleted file mode 100644 index c161d39..0000000 --- a/accounts/migrations/0006_auto_20200822_2308.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2020-08-22 20:08 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0005_auto_20200822_2246'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='picture', - field=models.ImageField(default='default.png', null=True, upload_to='profile_pictures/%y/%m/%d/'), - ), - ] diff --git a/accounts/migrations/0007_auto_20200825_1248.py b/accounts/migrations/0007_auto_20200825_1248.py deleted file mode 100644 index f4abdfd..0000000 --- a/accounts/migrations/0007_auto_20200825_1248.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1 on 2020-08-25 09:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0006_auto_20200822_2308'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='first_name', - field=models.CharField(blank=True, max_length=150, verbose_name='first name'), - ), - ] diff --git a/accounts/migrations/0008_auto_20200831_1315.py b/accounts/migrations/0008_auto_20200831_1315.py deleted file mode 100644 index 724c835..0000000 --- a/accounts/migrations/0008_auto_20200831_1315.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 2.2 on 2020-08-31 10:15 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0007_auto_20200825_1248'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='is_parent', - field=models.BooleanField(default=False), - ), - migrations.AlterField( - model_name='user', - name='first_name', - field=models.CharField(blank=True, max_length=30, verbose_name='first name'), - ), - migrations.CreateModel( - name='Family', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('first_name', models.CharField(max_length=120)), - ('last_name', models.CharField(max_length=120)), - ('phone', models.CharField(blank=True, max_length=60, null=True)), - ('address', models.CharField(blank=True, max_length=60, null=True)), - ('email', models.EmailField(blank=True, max_length=254, null=True)), - ('relation_ship', models.TextField(blank=True, choices=[('Father', 'Father'), ('Mother', 'Mother'), ('Brother', 'Brother'), ('Sister', 'Sister'), ('Grand mother', 'Grand mother'), ('Grand father', 'Grand father'), ('Other', 'Other')])), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/accounts/migrations/0009_auto_20200906_1403.py b/accounts/migrations/0009_auto_20200906_1403.py deleted file mode 100644 index 0d07b7e..0000000 --- a/accounts/migrations/0009_auto_20200906_1403.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 2.2 on 2020-09-06 11:03 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0008_auto_20200831_1315'), - ] - - operations = [ - migrations.CreateModel( - name='Parent', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('relation_ship', models.TextField(blank=True, choices=[('Father', 'Father'), ('Mother', 'Mother'), ('Brother', 'Brother'), ('Sister', 'Sister'), ('Grand mother', 'Grand mother'), ('Grand father', 'Grand father'), ('Other', 'Other')])), - ('student', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.Student')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.DeleteModel( - name='Family', - ), - ] diff --git a/accounts/migrations/0010_auto_20210401_1718.py b/accounts/migrations/0010_auto_20210401_1718.py deleted file mode 100644 index db9d022..0000000 --- a/accounts/migrations/0010_auto_20210401_1718.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.1.3 on 2021-04-01 14:18 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0009_auto_20200906_1403'), - ] - - operations = [ - migrations.AlterField( - model_name='parent', - name='student', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.student'), - ), - migrations.AlterField( - model_name='parent', - name='user', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - migrations.AlterField( - model_name='user', - name='first_name', - field=models.CharField(blank=True, max_length=150, verbose_name='first name'), - ), - ] diff --git a/accounts/migrations/0011_auto_20210823_0825.py b/accounts/migrations/0011_auto_20210823_0825.py deleted file mode 100644 index 61d2468..0000000 --- a/accounts/migrations/0011_auto_20210823_0825.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 3.1.3 on 2021-08-23 05:25 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('course', '0004_auto_20200822_2238'), - ('accounts', '0010_auto_20210401_1718'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='is_dep_head', - field=models.BooleanField(default=False), - ), - migrations.CreateModel( - name='DepHead', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('department', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.program')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/accounts/migrations/0012_auto_20230112_2238.py b/accounts/migrations/0012_auto_20230112_2238.py deleted file mode 100644 index 0e1e2ef..0000000 --- a/accounts/migrations/0012_auto_20230112_2238.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 3.1.3 on 2023-01-12 19:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('course', '0004_auto_20200822_2238'), - ('accounts', '0011_auto_20210823_0825'), - ] - - operations = [ - migrations.RenameModel( - old_name='DepHead', - new_name='DepartmentHead', - ), - migrations.AddField( - model_name='parent', - name='email', - field=models.EmailField(blank=True, max_length=254, null=True), - ), - migrations.AddField( - model_name='parent', - name='first_name', - field=models.CharField(default='first', max_length=120), - preserve_default=False, - ), - migrations.AddField( - model_name='parent', - name='last_name', - field=models.CharField(default='last', max_length=120), - preserve_default=False, - ), - migrations.AddField( - model_name='parent', - name='phone', - field=models.CharField(blank=True, max_length=60, null=True), - ), - ] diff --git a/accounts/migrations/0013_alter_departmenthead_id_alter_parent_id_and_more.py b/accounts/migrations/0013_alter_departmenthead_id_alter_parent_id_and_more.py deleted file mode 100644 index 16f4fba..0000000 --- a/accounts/migrations/0013_alter_departmenthead_id_alter_parent_id_and_more.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 4.1.6 on 2023-02-01 12:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0012_auto_20230112_2238'), - ] - - operations = [ - migrations.AlterField( - model_name='departmenthead', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='parent', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='student', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='user', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/accounts/migrations/0014_alter_user_managers.py b/accounts/migrations/0014_alter_user_managers.py deleted file mode 100644 index 28fefe8..0000000 --- a/accounts/migrations/0014_alter_user_managers.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.1.6 on 2023-05-14 08:05 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ("accounts", "0013_alter_departmenthead_id_alter_parent_id_and_more"), - ] - - operations = [ - migrations.AlterModelManagers( - name="user", - managers=[], - ), - ] diff --git a/accounts/migrations/0015_alter_user_managers.py b/accounts/migrations/0015_alter_user_managers.py deleted file mode 100644 index bc3f8b3..0000000 --- a/accounts/migrations/0015_alter_user_managers.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.0.8 on 2023-12-25 20:16 - -import accounts.models -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0014_alter_user_managers'), - ] - - operations = [ - migrations.AlterModelManagers( - name='user', - managers=[ - ('objects', accounts.models.UserManager()), - ], - ), - ] diff --git a/accounts/migrations/0016_alter_user_managers.py b/accounts/migrations/0016_alter_user_managers.py deleted file mode 100644 index fe47888..0000000 --- a/accounts/migrations/0016_alter_user_managers.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.0.8 on 2023-12-30 19:04 - -import accounts.models -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0015_alter_user_managers'), - ] - - operations = [ - migrations.AlterModelManagers( - name='user', - managers=[ - ('objects', accounts.models.CustomUserManager()), - ], - ), - ] diff --git a/accounts/migrations/0017_alter_departmenthead_options_alter_parent_options_and_more.py b/accounts/migrations/0017_alter_departmenthead_options_alter_parent_options_and_more.py deleted file mode 100644 index f1dbe29..0000000 --- a/accounts/migrations/0017_alter_departmenthead_options_alter_parent_options_and_more.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 4.0.8 on 2023-12-31 07:50 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0016_alter_user_managers'), - ] - - operations = [ - migrations.AlterModelOptions( - name='departmenthead', - options={'ordering': ('-user__date_joined',)}, - ), - migrations.AlterModelOptions( - name='parent', - options={'ordering': ('-user__date_joined',)}, - ), - migrations.AlterModelOptions( - name='student', - options={'ordering': ('-student__date_joined',)}, - ), - migrations.AlterModelOptions( - name='user', - options={'ordering': ('-date_joined',)}, - ), - ] diff --git a/accounts/migrations/0018_rename_department_student_program.py b/accounts/migrations/0018_rename_department_student_program.py deleted file mode 100644 index d6451ed..0000000 --- a/accounts/migrations/0018_rename_department_student_program.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.8 on 2024-01-06 13:41 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0017_alter_departmenthead_options_alter_parent_options_and_more'), - ] - - operations = [ - migrations.RenameField( - model_name='student', - old_name='department', - new_name='program', - ), - ] diff --git a/accounts/migrations/0019_user_gender.py b/accounts/migrations/0019_user_gender.py deleted file mode 100644 index e29f8a2..0000000 --- a/accounts/migrations/0019_user_gender.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0.8 on 2024-01-31 21:17 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0018_rename_department_student_program'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='gender', - field=models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female')], max_length=1, null=True), - ), - ] diff --git a/config/settings.py b/config/settings.py index fe2c2d0..6d06412 100644 --- a/config/settings.py +++ b/config/settings.py @@ -37,7 +37,6 @@ AUTH_USER_MODEL = "accounts.User" DJANGO_APPS = [ "jet.dashboard", "jet", - "django_extensions", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", @@ -109,24 +108,10 @@ ASGI_APPLICATION = "config.asgi.application" # Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases -# DATABASES = { -# 'default': { -# 'ENGINE': 'django.db.backends.sqlite3', -# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), -# } -# } - -# ----------------------------- -# NOTE: Some model fields may not work on sqlite db, -# so consider using postgresql instead DATABASES = { "default": { - "ENGINE": config("DB_ENGINE", default="django.db.backends.postgresql_psycopg2"), - "NAME": config("DB_NAME"), - "USER": config("DB_USER"), - "PASSWORD": config("DB_PASSWORD"), - "HOST": config("DB_HOST", default="localhost"), - "PORT": config("DB_PORT", default=5432), + "ENGINE": "django.db.backends.sqlite3", + "NAME": os.path.join(BASE_DIR, "db.sqlite3"), } } diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index bc657b7..ee2c6d9 100644 --- a/core/migrations/0001_initial.py +++ b/core/migrations/0001_initial.py @@ -1,97 +1,53 @@ -# Generated by Django 2.2.3 on 2020-07-29 15:25 +# Generated by Django 4.0.8 on 2024-08-31 11:51 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): + initial = True - dependencies = [] + dependencies = [ + ] operations = [ migrations.CreateModel( - name="NewsAndEvents", + name='ActivityLog', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("title", models.CharField(max_length=200, null=True)), - ("summary", models.TextField(blank=True, max_length=200, null=True)), - ( - "posted_as", - models.CharField( - choices=[("News", "News"), ("Event", "Event")], max_length=10 - ), - ), - ("updated_date", models.DateTimeField(auto_now=True, null=True)), - ("upload_time", models.DateTimeField(auto_now_add=True, null=True)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message', models.TextField()), + ('created_at', models.DateTimeField(auto_now=True)), ], ), migrations.CreateModel( - name="Session", + name='NewsAndEvents', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("session", models.CharField(max_length=200, unique=True)), - ( - "is_current_session", - models.BooleanField(blank=True, default=False, null=True), - ), - ("next_session_begins", models.DateField(blank=True, null=True)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200, null=True)), + ('summary', models.TextField(blank=True, max_length=200, null=True)), + ('posted_as', models.CharField(choices=[('News', 'News'), ('Event', 'Event')], max_length=10)), + ('updated_date', models.DateTimeField(auto_now=True, null=True)), + ('upload_time', models.DateTimeField(auto_now_add=True, null=True)), ], ), migrations.CreateModel( - name="Semester", + name='Session', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "semester", - models.CharField( - blank=True, - choices=[ - ("First", "First"), - ("Second", "Second"), - ("Third", "Third"), - ], - max_length=10, - ), - ), - ( - "is_current_semester", - models.BooleanField(blank=True, default=False, null=True), - ), - ("next_semester_begins", models.DateField(blank=True, null=True)), - ( - "session", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - to="core.Session", - ), - ), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('session', models.CharField(max_length=200, unique=True)), + ('is_current_session', models.BooleanField(blank=True, default=False, null=True)), + ('next_session_begins', models.DateField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='Semester', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('semester', models.CharField(blank=True, choices=[('First', 'First'), ('Second', 'Second'), ('Third', 'Third')], max_length=10)), + ('is_current_semester', models.BooleanField(blank=True, default=False, null=True)), + ('next_semester_begins', models.DateField(blank=True, null=True)), + ('session', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.session')), ], ), ] diff --git a/core/migrations/0002_auto_20200730_0746.py b/core/migrations/0002_auto_20200730_0746.py deleted file mode 100644 index 9200d37..0000000 --- a/core/migrations/0002_auto_20200730_0746.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 2.2.3 on 2020-07-30 04:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("core", "0001_initial"), - ] - - operations = [ - migrations.AlterField( - model_name="semester", - name="semester", - field=models.CharField( - blank=True, - choices=[("First", "First"), ("Second", "Second"), ("Third", "Third")], - max_length=10, - unique=True, - ), - ), - ] diff --git a/core/migrations/0003_auto_20200730_0756.py b/core/migrations/0003_auto_20200730_0756.py deleted file mode 100644 index 7e89eb9..0000000 --- a/core/migrations/0003_auto_20200730_0756.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 2.2.3 on 2020-07-30 04:56 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("core", "0002_auto_20200730_0746"), - ] - - operations = [ - migrations.AlterField( - model_name="semester", - name="semester", - field=models.CharField( - blank=True, - choices=[("First", "First"), ("Second", "Second"), ("Third", "Third")], - max_length=10, - ), - ), - ] diff --git a/core/migrations/0004_alter_newsandevents_id_alter_semester_id_and_more.py b/core/migrations/0004_alter_newsandevents_id_alter_semester_id_and_more.py deleted file mode 100644 index 4f8f4aa..0000000 --- a/core/migrations/0004_alter_newsandevents_id_alter_semester_id_and_more.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 4.1.6 on 2023-02-01 12:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("core", "0003_auto_20200730_0756"), - ] - - operations = [ - migrations.AlterField( - model_name="newsandevents", - name="id", - field=models.BigAutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="semester", - name="id", - field=models.BigAutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="session", - name="id", - field=models.BigAutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - ] diff --git a/core/migrations/0005_activitylog.py b/core/migrations/0005_activitylog.py deleted file mode 100644 index 3fee87b..0000000 --- a/core/migrations/0005_activitylog.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.0.8 on 2024-01-12 15:04 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0004_alter_newsandevents_id_alter_semester_id_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='ActivityLog', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('message', models.TextField()), - ('created_at', models.DateTimeField(auto_now=True)), - ], - ), - ] diff --git a/course/migrations/0001_initial.py b/course/migrations/0001_initial.py index 7d813e2..3534754 100644 --- a/course/migrations/0001_initial.py +++ b/course/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.3 on 2020-07-29 15:25 +# Generated by Django 4.0.8 on 2024-08-31 11:51 from django.conf import settings import django.core.validators @@ -7,177 +7,81 @@ import django.db.models.deletion class Migration(migrations.Migration): + initial = True dependencies = [ + ('accounts', '0001_initial'), + ('core', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ("core", "0001_initial"), ] operations = [ migrations.CreateModel( - name="Course", + name='Course', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("slug", models.SlugField(blank=True, unique=True)), - ("title", models.CharField(max_length=200, null=True)), - ("code", models.CharField(max_length=200, null=True, unique=True)), - ("credit", models.IntegerField(default=0, null=True)), - ("summary", models.TextField(blank=True, max_length=200, null=True)), - ( - "level", - models.CharField( - choices=[ - ("Level course", "Level course"), - ("Bachloar", "Bachloar"), - ("Master", "Master"), - ], - max_length=25, - null=True, - ), - ), - ( - "year", - models.IntegerField( - choices=[ - (1, "1"), - (2, "2"), - (3, "3"), - (4, "4"), - (4, "5"), - (4, "6"), - ], - default=0, - ), - ), - ( - "semester", - models.CharField( - choices=[ - ("First", "First"), - ("Second", "Second"), - ("Third", "Third"), - ], - max_length=200, - ), - ), - ( - "is_elective", - models.BooleanField(blank=True, default=False, null=True), - ), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('slug', models.SlugField(blank=True, unique=True)), + ('title', models.CharField(max_length=200, null=True)), + ('code', models.CharField(max_length=200, null=True, unique=True)), + ('credit', models.IntegerField(default=0, null=True)), + ('summary', models.TextField(blank=True, max_length=200, null=True)), + ('level', models.CharField(choices=[('Bachelor', 'Bachelor Degree'), ('Master', 'Master Degree')], max_length=25, null=True)), + ('year', models.IntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (4, '5'), (4, '6')], default=0)), + ('semester', models.CharField(choices=[('First', 'First'), ('Second', 'Second'), ('Third', 'Third')], max_length=200)), + ('is_elective', models.BooleanField(blank=True, default=False, null=True)), ], ), migrations.CreateModel( - name="Program", + name='Program', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("title", models.CharField(max_length=150, unique=True)), - ("summary", models.TextField(blank=True, null=True)), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=150, unique=True)), + ('summary', models.TextField(blank=True, null=True)), ], ), migrations.CreateModel( - name="Upload", + name='UploadVideo', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("title", models.CharField(max_length=100)), - ( - "file", - models.FileField( - upload_to="course_files/", - validators=[ - django.core.validators.FileExtensionValidator( - [ - "pdf", - "docx", - "doc", - "xls", - "xlsx", - "ppt", - "pptx", - "zip", - "rar", - "7zip", - ] - ) - ], - ), - ), - ("updated_date", models.DateTimeField(auto_now=True, null=True)), - ("upload_time", models.DateTimeField(auto_now_add=True, null=True)), - ( - "course", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, to="course.Course" - ), - ), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100)), + ('slug', models.SlugField(blank=True, unique=True)), + ('video', models.FileField(help_text='Valid video formats: mp4, mkv, wmv, 3gp, f4v, avi, mp3', upload_to='course_videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])])), + ('summary', models.TextField(blank=True, null=True)), + ('timestamp', models.DateTimeField(auto_now_add=True, null=True)), + ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.course')), ], ), migrations.CreateModel( - name="CourseAllocation", + name='Upload', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "courses", - models.ManyToManyField( - related_name="allocated_course", to="course.Course" - ), - ), - ( - "lecturer", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name="allocated_lecturer", - to=settings.AUTH_USER_MODEL, - ), - ), - ( - "session", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - to="core.Session", - ), - ), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100)), + ('file', models.FileField(help_text='Valid Files: pdf, docx, doc, xls, xlsx, ppt, pptx, zip, rar, 7zip', upload_to='course_files/', validators=[django.core.validators.FileExtensionValidator(['pdf', 'docx', 'doc', 'xls', 'xlsx', 'ppt', 'pptx', 'zip', 'rar', '7zip'])])), + ('updated_date', models.DateTimeField(auto_now=True, null=True)), + ('upload_time', models.DateTimeField(auto_now_add=True, null=True)), + ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.course')), + ], + ), + migrations.CreateModel( + name='CourseOffer', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('dep_head', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.departmenthead')), + ], + ), + migrations.CreateModel( + name='CourseAllocation', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('courses', models.ManyToManyField(related_name='allocated_course', to='course.course')), + ('lecturer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allocated_lecturer', to=settings.AUTH_USER_MODEL)), + ('session', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.session')), ], ), migrations.AddField( - model_name="course", - name="program", - field=models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, to="course.Program" - ), + model_name='course', + name='program', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.program'), ), ] diff --git a/course/migrations/0002_uploadvideo.py b/course/migrations/0002_uploadvideo.py deleted file mode 100644 index 0930890..0000000 --- a/course/migrations/0002_uploadvideo.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 2.2.3 on 2020-08-03 09:24 - -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('course', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='UploadVideo', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100)), - ('slug', models.SlugField(blank=True, unique=True)), - ('video', models.FileField(upload_to='videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])])), - ('summary', models.TextField(blank=True, null=True)), - ('timestamp', models.DateTimeField(auto_now_add=True, null=True)), - ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.Course')), - ], - ), - ] diff --git a/course/migrations/0003_auto_20200803_1335.py b/course/migrations/0003_auto_20200803_1335.py deleted file mode 100644 index b213821..0000000 --- a/course/migrations/0003_auto_20200803_1335.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.3 on 2020-08-03 10:35 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('course', '0002_uploadvideo'), - ] - - operations = [ - migrations.AlterField( - model_name='uploadvideo', - name='video', - field=models.FileField(upload_to='course_videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])]), - ), - ] diff --git a/course/migrations/0004_auto_20200822_2238.py b/course/migrations/0004_auto_20200822_2238.py deleted file mode 100644 index 1f8a15b..0000000 --- a/course/migrations/0004_auto_20200822_2238.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2020-08-22 19:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('course', '0003_auto_20200803_1335'), - ] - - operations = [ - migrations.AlterField( - model_name='course', - name='level', - field=models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True), - ), - ] diff --git a/course/migrations/0005_alter_course_id_alter_courseallocation_id_and_more.py b/course/migrations/0005_alter_course_id_alter_courseallocation_id_and_more.py deleted file mode 100644 index cda518b..0000000 --- a/course/migrations/0005_alter_course_id_alter_courseallocation_id_and_more.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 4.1.6 on 2023-02-01 12:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('course', '0004_auto_20200822_2238'), - ] - - operations = [ - migrations.AlterField( - model_name='course', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='courseallocation', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='program', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='upload', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='uploadvideo', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/course/migrations/0006_courseoffer.py b/course/migrations/0006_courseoffer.py deleted file mode 100644 index 5e63ed2..0000000 --- a/course/migrations/0006_courseoffer.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 4.1.6 on 2023-05-14 08:05 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("accounts", "0014_alter_user_managers"), - ("course", "0005_alter_course_id_alter_courseallocation_id_and_more"), - ] - - operations = [ - migrations.CreateModel( - name="CourseOffer", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "dep_head", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="accounts.departmenthead", - ), - ), - ], - ), - ] diff --git a/course/migrations/0007_alter_upload_file_alter_uploadvideo_video.py b/course/migrations/0007_alter_upload_file_alter_uploadvideo_video.py deleted file mode 100644 index 872ba5d..0000000 --- a/course/migrations/0007_alter_upload_file_alter_uploadvideo_video.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.0.8 on 2024-01-16 20:14 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('course', '0006_courseoffer'), - ] - - operations = [ - migrations.AlterField( - model_name='upload', - name='file', - field=models.FileField(help_text='Valid Files: pdf, docx, doc, xls, xlsx, ppt, pptx, zip, rar, 7zip', upload_to='course_files/', validators=[django.core.validators.FileExtensionValidator(['pdf', 'docx', 'doc', 'xls', 'xlsx', 'ppt', 'pptx', 'zip', 'rar', '7zip'])]), - ), - migrations.AlterField( - model_name='uploadvideo', - name='video', - field=models.FileField(help_text='Valid video formats: mp4, mkv, wmv, 3gp, f4v, avi, mp3', upload_to='course_videos/', validators=[django.core.validators.FileExtensionValidator(['mp4', 'mkv', 'wmv', '3gp', 'f4v', 'avi', 'mp3'])]), - ), - ] diff --git a/payments/migrations/0001_initial.py b/payments/migrations/0001_initial.py index ede3bdf..8e085a9 100644 --- a/payments/migrations/0001_initial.py +++ b/payments/migrations/0001_initial.py @@ -1,7 +1,6 @@ -# Generated by Django 3.1.3 on 2021-04-11 09:30 +# Generated by Django 4.0.8 on 2024-08-31 11:51 from django.conf import settings -import django.contrib.postgres.fields from django.db import migrations, models import django.db.models.deletion @@ -15,17 +14,10 @@ class Migration(migrations.Migration): ] operations = [ - migrations.CreateModel( - name='TestClass', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('test_name', models.CharField(blank=True, max_length=120, null=True)), - ], - ), migrations.CreateModel( name='Invoice', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('total', models.FloatField(blank=True, null=True)), ('amount', models.FloatField(blank=True, null=True)), ('payment_complete', models.BooleanField(default=False)), diff --git a/payments/migrations/0002_testclass_array.py b/payments/migrations/0002_testclass_array.py deleted file mode 100644 index 250e2d8..0000000 --- a/payments/migrations/0002_testclass_array.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.1.3 on 2021-04-16 09:14 - -from django.db import migrations, models - -# Function to create initial data for array field in PostgreSQL -def create_array_field_for_postgres(apps, schema_editor): - TestClass = apps.get_model('payments', 'TestClass') - TestClass.objects.create(array=[]) - -class Migration(migrations.Migration): - - dependencies = [ - ('payments', '0001_initial'), - ] - - operations = [ - # Adding a JSONField for array, which is supported by both PostgreSQL and MySQL - migrations.AddField( - model_name='testclass', - name='array', - field=models.JSONField(blank=True, default=list, null=True), - ), - # Running the create_array_field_for_postgres function to populate initial data in PostgreSQL - migrations.RunPython(create_array_field_for_postgres), - ] diff --git a/payments/migrations/0003_delete_testclass.py b/payments/migrations/0003_delete_testclass.py deleted file mode 100644 index 6454837..0000000 --- a/payments/migrations/0003_delete_testclass.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.1.3 on 2021-04-16 09:18 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('payments', '0002_testclass_array'), - ] - - operations = [ - migrations.DeleteModel( - name='TestClass', - ), - ] diff --git a/payments/migrations/0004_alter_invoice_id.py b/payments/migrations/0004_alter_invoice_id.py deleted file mode 100644 index 27c3646..0000000 --- a/payments/migrations/0004_alter_invoice_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.6 on 2023-02-01 12:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('payments', '0003_delete_testclass'), - ] - - operations = [ - migrations.AlterField( - model_name='invoice', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/quiz/migrations/0001_initial.py b/quiz/migrations/0001_initial.py index 2db3dc3..7ab6fb3 100644 --- a/quiz/migrations/0001_initial.py +++ b/quiz/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.3 on 2020-07-29 15:25 +# Generated by Django 4.0.8 on 2024-08-31 11:51 from django.conf import settings import django.core.validators @@ -12,16 +12,16 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('course', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Question', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('figure', models.ImageField(blank=True, null=True, upload_to='uploads/%Y/%m/%d', verbose_name='Figure')), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('figure', models.ImageField(blank=True, help_text="Add an image for the question if it's necessary.", null=True, upload_to='uploads/%Y/%m/%d', verbose_name='Figure')), ('content', models.CharField(help_text='Enter the question text that you want displayed', max_length=1000, verbose_name='Question')), ('explanation', models.TextField(blank=True, help_text='Explanation to be shown after the question has been answered.', max_length=2000, verbose_name='Explanation')), ], @@ -33,10 +33,10 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Quiz', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=60, verbose_name='Title')), ('slug', models.SlugField(blank=True, unique=True)), - ('description', models.TextField(blank=True, help_text='a description of the quiz', verbose_name='Description')), + ('description', models.TextField(blank=True, help_text='A detailed description of the quiz', verbose_name='Description')), ('category', models.TextField(blank=True, choices=[('assignment', 'Assignment'), ('exam', 'Exam'), ('practice', 'Practice Quiz')])), ('random_order', models.BooleanField(default=False, help_text='Display the questions in a random order or as they are set?', verbose_name='Random Order')), ('answers_at_end', models.BooleanField(default=False, help_text='Correct answer is NOT shown after question. Answers displayed at the end.', verbose_name='Answers at end')), @@ -45,7 +45,7 @@ class Migration(migrations.Migration): ('pass_mark', models.SmallIntegerField(blank=True, default=50, help_text='Percentage required to pass exam.', validators=[django.core.validators.MaxValueValidator(100)], verbose_name='Pass Mark')), ('draft', models.BooleanField(blank=True, default=False, help_text='If yes, the quiz is not displayed in the quiz list and can only be taken by users who can edit quizzes.', verbose_name='Draft')), ('timestamp', models.DateTimeField(auto_now=True)), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Course')), + ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.course')), ], options={ 'verbose_name': 'Quiz', @@ -53,9 +53,9 @@ class Migration(migrations.Migration): }, ), migrations.CreateModel( - name='Essay_Question', + name='EssayQuestion', fields=[ - ('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.Question')), + ('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.question')), ], options={ 'verbose_name': 'Essay style question', @@ -66,7 +66,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='MCQuestion', fields=[ - ('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.Question')), + ('question_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='quiz.question')), ('choice_order', models.CharField(blank=True, choices=[('content', 'Content'), ('random', 'Random'), ('none', 'None')], help_text='The order in which multichoice choice options are displayed to the user', max_length=30, null=True, verbose_name='Choice Order')), ], options={ @@ -78,7 +78,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Sitting', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('question_order', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Question Order')), ('question_list', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Question List')), ('incorrect_questions', models.CharField(blank=True, max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Incorrect questions')), @@ -87,8 +87,8 @@ class Migration(migrations.Migration): ('user_answers', models.TextField(blank=True, default='{}', verbose_name='User Answers')), ('start', models.DateTimeField(auto_now_add=True, verbose_name='Start')), ('end', models.DateTimeField(blank=True, null=True, verbose_name='End')), - ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.Course', verbose_name='Course')), - ('quiz', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.Quiz', verbose_name='Quiz')), + ('course', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='course.course', verbose_name='Course')), + ('quiz', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.quiz', verbose_name='Quiz')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User')), ], options={ @@ -98,12 +98,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='question', name='quiz', - field=models.ManyToManyField(blank=True, to='quiz.Quiz', verbose_name='Quiz'), + field=models.ManyToManyField(blank=True, to='quiz.quiz', verbose_name='Quiz'), ), migrations.CreateModel( name='Progress', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('score', models.CharField(max_length=1024, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:,\\d+)*\\Z'), code='invalid', message='Enter only digits separated by commas.')], verbose_name='Score')), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='User')), ], @@ -115,10 +115,10 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Choice', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('choice', models.CharField(help_text='Enter the choice text that you want displayed', max_length=1000, verbose_name='Content')), ('correct', models.BooleanField(default=False, help_text='Is this a correct answer?', verbose_name='Correct')), - ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.MCQuestion', verbose_name='Question')), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.mcquestion', verbose_name='Question')), ], options={ 'verbose_name': 'Choice', diff --git a/quiz/migrations/0002_alter_choice_id_alter_progress_id_alter_question_id_and_more.py b/quiz/migrations/0002_alter_choice_id_alter_progress_id_alter_question_id_and_more.py deleted file mode 100644 index 714888e..0000000 --- a/quiz/migrations/0002_alter_choice_id_alter_progress_id_alter_question_id_and_more.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 4.1.6 on 2023-02-01 12:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('quiz', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='choice', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='progress', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='question', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='quiz', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='sitting', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/quiz/migrations/0003_rename_essay_question_essayquestion.py b/quiz/migrations/0003_rename_essay_question_essayquestion.py deleted file mode 100644 index d6648d5..0000000 --- a/quiz/migrations/0003_rename_essay_question_essayquestion.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.0.8 on 2023-12-30 19:04 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('quiz', '0002_alter_choice_id_alter_progress_id_alter_question_id_and_more'), - ] - - operations = [ - migrations.RenameModel( - old_name='Essay_Question', - new_name='EssayQuestion', - ), - ] diff --git a/quiz/migrations/0004_alter_question_figure_alter_quiz_description.py b/quiz/migrations/0004_alter_question_figure_alter_quiz_description.py deleted file mode 100644 index 52d7af1..0000000 --- a/quiz/migrations/0004_alter_question_figure_alter_quiz_description.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.0.8 on 2023-12-31 07:50 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('quiz', '0003_rename_essay_question_essayquestion'), - ] - - operations = [ - migrations.AlterField( - model_name='question', - name='figure', - field=models.ImageField(blank=True, help_text="Add an image for the question if it's necessary.", null=True, upload_to='uploads/%Y/%m/%d', verbose_name='Figure'), - ), - migrations.AlterField( - model_name='quiz', - name='description', - field=models.TextField(blank=True, help_text='A detailed description of the quiz', verbose_name='Description'), - ), - ] diff --git a/requirements/local.txt b/requirements/local.txt index 0e80f85..1a3e4fc 100644 --- a/requirements/local.txt +++ b/requirements/local.txt @@ -1,10 +1,5 @@ -r base.txt -psycopg2==2.9.5 # https://github.com/psycopg/psycopg2 - # Code quality # ------------------------------------------------------------------------------ -black==22.12.0 # https://github.com/psf/black - -# Django Extensions -django-extensions==3.1.3 # https://github.com/django-extensions/django-extensions \ No newline at end of file +black==22.12.0 # https://github.com/psf/black \ No newline at end of file diff --git a/requirements/production.txt b/requirements/production.txt index 2dea78c..f484806 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -3,7 +3,6 @@ -r base.txt gunicorn==20.1.0 # https://github.com/benoitc/gunicorn -psycopg2==2.9.5 # https://github.com/psycopg/psycopg2 # Django # ------------------------------------------------------------------------------ diff --git a/result/migrations/0001_initial.py b/result/migrations/0001_initial.py index ed80896..8c2dd6a 100644 --- a/result/migrations/0001_initial.py +++ b/result/migrations/0001_initial.py @@ -1,158 +1,46 @@ -# Generated by Django 2.2.3 on 2020-07-29 15:25 +# Generated by Django 4.0.8 on 2024-08-31 11:51 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): + initial = True dependencies = [ - ("accounts", "0001_initial"), - ("course", "0001_initial"), - ("core", "0001_initial"), + ('accounts', '0001_initial'), + ('course', '0001_initial'), ] operations = [ migrations.CreateModel( - name="TakenCourse", + name='TakenCourse', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "assignment", - models.DecimalField(decimal_places=2, default=0.0, max_digits=5), - ), - ( - "mid_exam", - models.DecimalField(decimal_places=2, default=0.0, max_digits=5), - ), - ( - "quiz", - models.DecimalField(decimal_places=2, default=0.0, max_digits=5), - ), - ( - "attendance", - models.DecimalField(decimal_places=2, default=0.0, max_digits=5), - ), - ( - "final_exam", - models.DecimalField(decimal_places=2, default=0.0, max_digits=5), - ), - ( - "total", - models.DecimalField(decimal_places=2, default=0.0, max_digits=5), - ), - ( - "grade", - models.CharField( - blank=True, - choices=[ - ("A+", "A+"), - ("A", "A"), - ("A-", "A-"), - ("B+", "B+"), - ("B", "B"), - ("B-", "B-"), - ("C+", "C+"), - ("C", "C"), - ("C-", "C-"), - ("D", "D"), - ("F", "F"), - ("NG", "NG"), - ], - max_length=1, - ), - ), - ( - "point", - models.DecimalField(decimal_places=2, default=0.0, max_digits=5), - ), - ( - "comment", - models.CharField( - blank=True, - choices=[("PASS", "PASS"), ("FAIL", "FAIL")], - max_length=200, - ), - ), - ( - "course", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name="taken_courses", - to="course.Course", - ), - ), - ( - "student", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="accounts.Student", - ), - ), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('assignment', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), + ('mid_exam', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), + ('quiz', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), + ('attendance', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), + ('final_exam', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), + ('total', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), + ('grade', models.CharField(blank=True, choices=[('A+', 'A+'), ('A', 'A'), ('A-', 'A-'), ('B+', 'B+'), ('B', 'B'), ('B-', 'B-'), ('C+', 'C+'), ('C', 'C'), ('C-', 'C-'), ('D', 'D'), ('F', 'F'), ('NG', 'NG')], max_length=2)), + ('point', models.DecimalField(decimal_places=2, default=0.0, max_digits=5)), + ('comment', models.CharField(blank=True, choices=[('PASS', 'PASS'), ('FAIL', 'FAIL')], max_length=200)), + ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='taken_courses', to='course.course')), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.student')), ], ), migrations.CreateModel( - name="Result", + name='Result', fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ("gpa", models.FloatField(null=True)), - ("cgpa", models.FloatField(null=True)), - ( - "semester", - models.CharField( - choices=[ - ("First", "First"), - ("Second", "Second"), - ("Third", "Third"), - ], - max_length=100, - ), - ), - ( - "level", - models.CharField( - choices=[ - ("Level course", "Level course"), - ("Bachloar", "Bachloar"), - ("Master", "Master"), - ], - max_length=25, - null=True, - ), - ), - ( - "session", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - to="core.Session", - ), - ), - ( - "student", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="accounts.Student", - ), - ), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('gpa', models.FloatField(null=True)), + ('cgpa', models.FloatField(null=True)), + ('semester', models.CharField(choices=[('First', 'First'), ('Second', 'Second'), ('Third', 'Third')], max_length=100)), + ('session', models.CharField(blank=True, max_length=100, null=True)), + ('level', models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True)), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.student')), ], ), ] diff --git a/result/migrations/0002_auto_20200729_2233.py b/result/migrations/0002_auto_20200729_2233.py deleted file mode 100644 index 0cec2e8..0000000 --- a/result/migrations/0002_auto_20200729_2233.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2020-07-29 19:33 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('result', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='result', - name='session', - field=models.CharField(blank=True, max_length=100, null=True), - ), - ] diff --git a/result/migrations/0003_auto_20200822_2238.py b/result/migrations/0003_auto_20200822_2238.py deleted file mode 100644 index 979e811..0000000 --- a/result/migrations/0003_auto_20200822_2238.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2020-08-22 19:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('result', '0002_auto_20200729_2233'), - ] - - operations = [ - migrations.AlterField( - model_name='result', - name='level', - field=models.CharField(choices=[('Bachloar', 'Bachloar Degree'), ('Master', 'Master Degree')], max_length=25, null=True), - ), - ] diff --git a/result/migrations/0004_auto_20200825_1248.py b/result/migrations/0004_auto_20200825_1248.py deleted file mode 100644 index 6e43823..0000000 --- a/result/migrations/0004_auto_20200825_1248.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1 on 2020-08-25 09:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('result', '0003_auto_20200822_2238'), - ] - - operations = [ - migrations.AlterField( - model_name='takencourse', - name='grade', - field=models.CharField(blank=True, choices=[('A+', 'A+'), ('A', 'A'), ('A-', 'A-'), ('B+', 'B+'), ('B', 'B'), ('B-', 'B-'), ('C+', 'C+'), ('C', 'C'), ('C-', 'C-'), ('D', 'D'), ('F', 'F'), ('NG', 'NG')], max_length=2), - ), - ] diff --git a/result/migrations/0005_alter_result_id_alter_takencourse_id.py b/result/migrations/0005_alter_result_id_alter_takencourse_id.py deleted file mode 100644 index 54d2b10..0000000 --- a/result/migrations/0005_alter_result_id_alter_takencourse_id.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.1.6 on 2023-02-01 12:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('result', '0004_auto_20200825_1248'), - ] - - operations = [ - migrations.AlterField( - model_name='result', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='takencourse', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/templates/quiz/sitting_list.html b/templates/quiz/sitting_list.html index 69f2085..7de7005 100644 --- a/templates/quiz/sitting_list.html +++ b/templates/quiz/sitting_list.html @@ -18,7 +18,7 @@ {% for student in students %}

{{ student.student.user.get_full_name }}

{% endfor %} {% for marking in marking_list %}

{{ marking }} {{ forloop.counter }}

{% endfor %} -
+