signals: add signal to create HOD group

This commit is contained in:
sankalp committed 2025-04-22 04:29:13 +05:45
1 parent 909f793afa
commit 3cdaf2ab0c
1 file changed
+93 -29
+93 -29
View File
@@ -278,48 +278,112 @@ def handle_parent_student_relationship(
@receiver(post_migrate) @receiver(post_migrate)
def create_user_groups(sender, **kwargs): def create_user_groups(sender, **kwargs):
""" """
Create initial user groups and permissions after migrations. Signal handler to create default user groups after database migrations:
This ensures groups exist before any user is created. - Student
- Parent
- Teacher
- HOD
- Admission Officer
""" """
from django.contrib.auth.models import Group, Permission if sender.name == 'app': # Only run for our app's migrations
try:
# Create Student group
student_group, created = Group.objects.get_or_create(name="Student")
if created:
# Add basic student permissions
permissions = Permission.objects.filter(
codename__in=[
"view_routine",
"view_attendance",
"view_notice",
"add_studentleave",
"view_studentleave"
]
)
student_group.permissions.add(*permissions)
logger.info("Created Student group with basic permissions")
# Create the necessary groups # Create Parent group
groups_data = { parent_group, created = Group.objects.get_or_create(name="Parent")
"Student": ["view_attendance", "view_notice", "view_subject"], if created:
"Teacher": [ # Add basic parent permissions
permissions = Permission.objects.filter(
codename__in=[
"view_student",
"view_attendance",
"view_notice",
"view_routine"
]
)
parent_group.permissions.add(*permissions)
logger.info("Created Parent group with basic permissions")
# Create Teacher group
teacher_group, created = Group.objects.get_or_create(name="Teacher")
if created:
# Add teacher permissions
permissions = Permission.objects.filter(
codename__in=[
"view_student", "view_student",
"view_attendance", "view_attendance",
"add_attendance", "add_attendance",
"change_attendance", "change_attendance",
"view_notice", "view_notice",
"add_notice", "view_routine",
"view_subject", "view_subject"
"change_subject", ]
], )
"Parent": ["view_student", "view_attendance", "view_notice"], teacher_group.permissions.add(*permissions)
"Admission Officer": [ logger.info("Created Teacher group with basic permissions")
# Create HOD group
hod_group, created = Group.objects.get_or_create(name="HOD")
if created:
# Add HOD permissions - more permissions than regular teacher
permissions = Permission.objects.filter(
codename__in=[
"view_student",
"add_student",
"change_student",
"view_attendance",
"add_attendance",
"change_attendance",
"view_notice",
"add_notice",
"change_notice",
"view_routine",
"add_routine",
"change_routine",
"view_subject",
"add_subject",
"change_subject",
"view_staff",
"view_course"
]
)
hod_group.permissions.add(*permissions)
logger.info("Created HOD group with administrative permissions")
# Create Admission Officer group
admission_group, created = Group.objects.get_or_create(name="Admission Officer")
if created:
# Add admission officer permissions
permissions = Permission.objects.filter(
codename__in=[
"view_student", "view_student",
"add_student", "add_student",
"change_student", "change_student",
"view_parent",
"add_parent",
"change_parent",
"view_course", "view_course",
"view_batch", "view_batch",
"view_notice", "add_batch",
], "change_batch"
} ]
)
admission_group.permissions.add(*permissions)
logger.info("Created Admission Officer group with admission permissions")
for group_name, permissions in groups_data.items(): except Exception as e:
group, created = Group.objects.get_or_create(name=group_name) logger.error(f"Error creating default user groups: {str(e)}")
if created:
print(f"Created user group: {group_name}")
# Add permissions to group
perms = Permission.objects.filter(codename__in=permissions)
group.permissions.add(*perms)
print(f"Added {perms.count()} permissions to {group_name} group")
# -------------------------------------------------------------------- # --------------------------------------------------------------------