From c92022f0acf764bdc0a46e7b875314243663836d Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Fri, 2 Aug 2024 00:35:55 +0200 Subject: [PATCH] Add preference for priority group type in coursebook select field --- aleksis/apps/alsijil/preferences.py | 18 ++++++++++++++++++ aleksis/apps/alsijil/schema/__init__.py | 9 ++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py index c47546e23..74ed22802 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 c2ed8a2ee..f63b8c2c9 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 -- GitLab