diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py index c47546e235ce26da6fef88fee0a2e0324d9df75f..74ed22802286eaeccc4d92b6c1e255364c3503b2 100644 --- a/aleksis/apps/alsijil/preferences.py +++ b/aleksis/apps/alsijil/preferences.py @@ -6,6 +6,7 @@ from dynamic_preferences.types import ( BooleanPreference, ChoicePreference, IntegerPreference, + ModelChoicePreference, ModelMultipleChoicePreference, ) @@ -203,3 +204,20 @@ class GroupTypesRegisterAbsence(ModelMultipleChoicePreference): help_text = _( "If you leave it empty, all member of groups the user is an owner of will be shown." ) + + +@site_preferences_registry.register +class GroupTypePriorityCoursebook(ModelChoicePreference): + section = alsijil + name = "group_type_priority_coursebook" + required = False + default = None + model = GroupType + verbose_name = _( + "Group type of groups to be shown first in the group " + "select field on the coursebook overview page" + ) + help_text = _("If you leave it empty, no group type will be used.") + + def get_queryset(self): + return GroupType.objects.managed_and_unmanaged() diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py index c2ed8a2eef99acc833e5680d42fb658c553c352f..f63b8c2c9b8c5c029371e4663f6d70b2e5271bb8 100644 --- a/aleksis/apps/alsijil/schema/__init__.py +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -1,7 +1,7 @@ from datetime import datetime from django.core.exceptions import PermissionDenied -from django.db.models.query_utils import Q +from django.db.models import BooleanField, ExpressionWrapper, Q import graphene @@ -156,6 +156,13 @@ class Query(graphene.ObjectType): Group.objects.for_current_school_term_or_all() .filter(Q(members=person) | Q(owners=person) | Q(parent_groups__owners=person)) .distinct() + .annotate( + is_priority=ExpressionWrapper( + Q(group_type=get_site_preferences()["alsijil__group_type_priority_coursebook"]), + output_field=BooleanField(), + ) + ) + .order_by("is_priority") ) @staticmethod