diff --git a/aleksis/apps/alsijil/apps.py b/aleksis/apps/alsijil/apps.py index ab0877f2f457658463c034e09139d8098df5b8d3..c52e13fde3532817e6b427355978080e3b856ea1 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 2a651a968265d18fa4f35a6550970d14de26885e..a86f608ec78d1bbc50bf558b5e0650cba5b5e8a7 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 49bfbe7abb2b04515c30ccd931c4d9d847578caf..c2ed8a2eef99acc833e5680d42fb658c553c352f 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 8e203e8f61f023af2c812efe0f21cf9a34511c60..118b70af8e1a71f9d5e56a8d251c5a319cae0e02 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"}, + )