diff --git a/TODO.md b/TODO.md index 34936bb..cd696de 100644 --- a/TODO.md +++ b/TODO.md @@ -10,7 +10,6 @@ - **Integrate the dashboard with dynamic/live data**: - Overall attendance - School demographics - - Gender - Lecturer qualification - Students' level - Students average grade per course: diff --git a/accounts/forms.py b/accounts/forms.py index 1cfeb22..47f6177 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -9,7 +9,7 @@ from django.contrib.auth.forms import ( ) from django.contrib.auth.forms import PasswordResetForm from course.models import Program -from .models import User, Student, Parent, RELATION_SHIP, LEVEL +from .models import User, Student, Parent, RELATION_SHIP, LEVEL, GENDERS class StaffAddForm(UserCreationForm): @@ -200,6 +200,15 @@ class StudentAddForm(UserCreationForm): label="Last name", ) + gender = forms.CharField( + widget=forms.Select( + choices=GENDERS, + attrs={ + "class": "browser-default custom-select form-control", + }, + ), + ) + level = forms.CharField( widget=forms.Select( choices=LEVEL, @@ -266,6 +275,8 @@ class StudentAddForm(UserCreationForm): user.is_lecturer = True user.first_name = self.cleaned_data.get("first_name") user.last_name = self.cleaned_data.get("last_name") + user.gender = self.cleaned_data.get("gender") + user.address = self.cleaned_data.get("address") user.phone = self.cleaned_data.get("phone") user.address = self.cleaned_data.get("address") user.email = self.cleaned_data.get("email") diff --git a/accounts/migrations/0019_user_gender.py b/accounts/migrations/0019_user_gender.py new file mode 100644 index 0000000..e29f8a2 --- /dev/null +++ b/accounts/migrations/0019_user_gender.py @@ -0,0 +1,18 @@ +# 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/accounts/models.py b/accounts/models.py index 2b92825..23e5906 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -55,11 +55,15 @@ class CustomUserManager(UserManager): return queryset +GENDERS = (("M", "Male"), ("F", "Female")) + + class User(AbstractUser): 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(max_length=1, choices=GENDERS, blank=True, null=True) phone = models.CharField(max_length=60, blank=True, null=True) address = models.CharField(max_length=60, blank=True, null=True) picture = models.ImageField( @@ -161,6 +165,13 @@ class Student(models.Model): def __str__(self): return self.student.get_full_name + @classmethod + def get_gender_count(cls): + males_count = Student.objects.filter(student__gender="M").count() + females_count = Student.objects.filter(student__gender="F").count() + + return {"M": males_count, "F": females_count} + def get_absolute_url(self): return reverse("profile_single", kwargs={"id": self.id}) diff --git a/core/views.py b/core/views.py index e2dceeb..241d290 100644 --- a/core/views.py +++ b/core/views.py @@ -4,7 +4,7 @@ from django.contrib.auth.decorators import login_required from django.conf import settings from accounts.decorators import admin_required, lecturer_required -from accounts.models import User +from accounts.models import User, Student from .forms import SessionForm, SemesterForm, NewsAndEventsForm from .models import * @@ -26,10 +26,13 @@ def home_view(request): @admin_required def dashboard_view(request): logs = ActivityLog.objects.all().order_by("-created_at")[:10] + gender_count = Student.get_gender_count() context = { "student_count": User.get_student_count(), "lecturer_count": User.get_lecturer_count(), "superuser_count": User.get_superuser_count(), + "males_count": gender_count["M"], + "females_count": gender_count["F"], "logs": logs, } return render(request, "core/dashboard.html", context) diff --git a/templates/accounts/add_student.html b/templates/accounts/add_student.html index ab6da1a..d39ea12 100644 --- a/templates/accounts/add_student.html +++ b/templates/accounts/add_student.html @@ -26,6 +26,7 @@