diff --git a/aleksis/apps/cursus/apps.py b/aleksis/apps/cursus/apps.py index 2100153526771424e6b04addd6bc55b3baa2d960..ba7bf20152de28ca8df9fabe8a80506b643af1d8 100644 --- a/aleksis/apps/cursus/apps.py +++ b/aleksis/apps/cursus/apps.py @@ -11,3 +11,12 @@ class DefaultConfig(AppConfig): } licence = "EUPL-1.2+" copyright_info = (([2023], "Jonathan Weth", "dev@jonathanweth.de"),) + + def _maintain_default_data(self): + super()._maintain_default_data() + + # Ensure that default group types for school structure exist + from .util.group_types import get_school_class_group_type, get_school_grade_group_type + + get_school_grade_group_type() + get_school_class_group_type() diff --git a/aleksis/apps/cursus/schema.py b/aleksis/apps/cursus/schema.py index 0e2a3d3269218fffa7d39f8694ab4236614d80e9..711ddd0db21bd72c815dfd93ccfc05c27a678c7a 100644 --- a/aleksis/apps/cursus/schema.py +++ b/aleksis/apps/cursus/schema.py @@ -1,4 +1,3 @@ -from django.apps import apps from django.core.exceptions import PermissionDenied from django.db.models import Q @@ -11,7 +10,12 @@ from graphene_django_cud.mutations import ( ) from guardian.shortcuts import get_objects_for_user -from aleksis.core.models import Group, GroupType, Person +from aleksis.apps.cursus.settings import SCHOOL_CLASS_GROUP_TYPE_NAME, SCHOOL_GRADE_GROUP_TYPE_NAME +from aleksis.apps.cursus.util.group_types import ( + get_school_class_group_type, + get_school_grade_group_type, +) +from aleksis.core.models import Group, Person from aleksis.core.schema.base import ( DjangoFilterMixin, FilterOrderList, @@ -25,8 +29,6 @@ from aleksis.core.util.core_helpers import has_person from .models import Course, Subject -SCHOOL_GRADE_GROUP_TYPE_NAME = "School grade" - class SubjectType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): class Meta: @@ -185,10 +187,7 @@ class CreateSchoolClassMutation(DjangoBatchCreateMutation): @classmethod def before_mutate(cls, root, info, input): # noqa - app_label = apps.get_containing_app_config(cls.__module__).label - group_type, __ = GroupType.objects.managed_by_app(app_label).get_or_create( - name="School class", managed_by_app_label=app_label - ) + group_type = get_school_class_group_type() for school_class in input: school_class["group_type"] = group_type.pk return input @@ -202,10 +201,7 @@ class CreateSchoolGradeMutation(DjangoBatchCreateMutation): @classmethod def before_mutate(cls, root, info, input): # noqa - app_label = apps.get_containing_app_config(cls.__module__).label - group_type, __ = GroupType.objects.managed_by_app(app_label).get_or_create( - name=SCHOOL_GRADE_GROUP_TYPE_NAME, managed_by_app_label=app_label - ) + group_type = get_school_grade_group_type() for school_grade in input: school_grade["group_type"] = group_type.pk return input @@ -235,7 +231,7 @@ class Query(graphene.ObjectType): return get_objects_for_user( info.context.user, "core.view_group", - Group.objects.filter(group_type__name="School class"), + Group.objects.filter(group_type__name=SCHOOL_CLASS_GROUP_TYPE_NAME), ) @staticmethod diff --git a/aleksis/apps/cursus/settings.py b/aleksis/apps/cursus/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..1065c8c679515b92214f591ca8c1962a2ff4bfba --- /dev/null +++ b/aleksis/apps/cursus/settings.py @@ -0,0 +1,2 @@ +SCHOOL_GRADE_GROUP_TYPE_NAME = "School grade" +SCHOOL_CLASS_GROUP_TYPE_NAME = "School class" diff --git a/aleksis/apps/cursus/util/group_types.py b/aleksis/apps/cursus/util/group_types.py new file mode 100644 index 0000000000000000000000000000000000000000..71f1ebbcc4d4c7613aa678af24b1b3e154d01f24 --- /dev/null +++ b/aleksis/apps/cursus/util/group_types.py @@ -0,0 +1,17 @@ +from aleksis.core.models import GroupType + +from ..settings import SCHOOL_CLASS_GROUP_TYPE_NAME, SCHOOL_GRADE_GROUP_TYPE_NAME + + +def get_school_grade_group_type(): + group_type, __ = GroupType.objects.managed_by_app("cursus").get_or_create( + name=SCHOOL_GRADE_GROUP_TYPE_NAME, managed_by_app_label="cursus" + ) + return group_type + + +def get_school_class_group_type(): + group_type, __ = GroupType.objects.managed_by_app("cursus").get_or_create( + name=SCHOOL_CLASS_GROUP_TYPE_NAME, managed_by_app_label="cursus" + ) + return group_type