From 0faf8d8cc8e5f1fc30c044d154db846611bc8567 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Tue, 16 Jul 2024 17:52:29 +0200 Subject: [PATCH] Add custom query for Alsijil absence reasons --- aleksis/apps/alsijil/apps.py | 13 +++++++++++++ .../coursebook/absences/absenceReasons.graphql | 2 +- aleksis/apps/alsijil/schema/__init__.py | 10 ++++++++++ aleksis/apps/alsijil/util/alsijil_helpers.py | 9 +++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/aleksis/apps/alsijil/apps.py b/aleksis/apps/alsijil/apps.py index ab0877f2f..c52e13fde 100644 --- a/aleksis/apps/alsijil/apps.py +++ b/aleksis/apps/alsijil/apps.py @@ -19,3 +19,16 @@ class AlsijilConfig(AppConfig): ([2021], "Lloyd Meins", "meinsll@katharineum.de"), ([2024], "Michael Bauer", "michael-bauer@posteo.de"), ) + + def post_migrate( + self, + app_config: AppConfig, + verbosity: int, + interactive: bool, + using: str, + **kwargs, + ) -> None: + super().post_migrate(app_config, verbosity, interactive, using, **kwargs) + from .util.alsijil_helpers import get_absence_reason_tag + + get_absence_reason_tag() diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql index 2a651a968..a86f608ec 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql @@ -1,5 +1,5 @@ query absenceReasons($orderBy: [String], $filters: JSONString) { - items: absenceReasons(orderBy: $orderBy, filters: $filters) { + items: coursebookAbsenceReasons(orderBy: $orderBy, filters: $filters) { id shortName name diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py index 49bfbe7ab..c2ed8a2ee 100644 --- a/aleksis/apps/alsijil/schema/__init__.py +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -8,6 +8,8 @@ import graphene from aleksis.apps.chronos.models import LessonEvent from aleksis.apps.cursus.models import Course from aleksis.apps.cursus.schema import CourseType +from aleksis.apps.kolego.models import AbsenceReason +from aleksis.apps.kolego.schema.absence import AbsenceReasonType from aleksis.core.models import Group, Person from aleksis.core.schema.base import FilterOrderList from aleksis.core.schema.group import GroupType @@ -67,6 +69,8 @@ class Query(graphene.ObjectType): extra_marks = FilterOrderList(ExtraMarkType) + coursebook_absence_reasons = FilterOrderList(AbsenceReasonType) + def resolve_documentations_by_course_id(root, info, course_id, **kwargs): documentations = Documentation.objects.filter( Q(course__pk=course_id) | Q(amends__course__pk=course_id) @@ -210,6 +214,12 @@ class Query(graphene.ObjectType): return lessons_for_person + @staticmethod + def resolve_coursebook_absence_reasons(root, info, **kwargs): + if not info.context.user.has_perm("kolego.fetch_absencereasons_rule"): + return [] + return AbsenceReason.objects.filter(tags__short_name="class_register") + class Mutation(graphene.ObjectType): create_or_update_documentations = DocumentationBatchCreateOrUpdateMutation.Field() diff --git a/aleksis/apps/alsijil/util/alsijil_helpers.py b/aleksis/apps/alsijil/util/alsijil_helpers.py index 8e203e8f6..118b70af8 100644 --- a/aleksis/apps/alsijil/util/alsijil_helpers.py +++ b/aleksis/apps/alsijil/util/alsijil_helpers.py @@ -15,6 +15,7 @@ from aleksis.apps.alsijil.forms import FilterRegisterObjectForm from aleksis.apps.alsijil.models import LessonDocumentation from aleksis.apps.chronos.models import Event, ExtraLesson, Holiday, LessonPeriod from aleksis.apps.chronos.util.chronos_helpers import get_el_by_pk +from aleksis.apps.kolego.models import AbsenceReasonTag from aleksis.core.models import Group from aleksis.core.util.core_helpers import get_site_preferences @@ -401,3 +402,11 @@ def generate_list_of_all_register_objects(filter_dict: Dict[str, Any]) -> List[D register_objects = sorted(register_objects, key=itemgetter("date_sort", "period_sort")) return register_objects return [] + + +def get_absence_reason_tag(): + return AbsenceReasonTag.objects.managed_by_app("alsijil").get_or_create( + managed_by_app_label="alsijil", + short_name="class_register", + defaults={"name": "Class Register"}, + ) -- GitLab