Skip to content
Snippets Groups Projects
__init__.py 4.07 KiB
Newer Older
Jonathan Weth's avatar
Jonathan Weth committed
from django.apps import apps
from django.db.models import QuerySet
from django.utils import timezone
Jonathan Weth's avatar
Jonathan Weth committed

import graphene
import graphene_django_optimizer
from guardian.shortcuts import get_objects_for_user
Jonathan Weth's avatar
Jonathan Weth committed

from aleksis.apps.kolego.models.absence import Absence, AbsenceReason, AbsenceReasonTag
from aleksis.core.models import Person
Jonathan Weth's avatar
Jonathan Weth committed
from aleksis.core.schema.base import FilterOrderList
from aleksis.core.util.core_helpers import filter_active_school_term_by_date

from .absence import (
    AbsenceBatchCreateMutation,
    AbsenceBatchDeleteMutation,
    AbsenceBatchPatchMutation,
    AbsenceReasonBatchCreateMutation,
    AbsenceReasonBatchDeleteMutation,
Jonathan Weth's avatar
Jonathan Weth committed
    AbsenceReasonBatchPatchMutation,
    AbsenceReasonTagBatchCreateMutation,
    AbsenceReasonTagBatchDeleteMutation,
    AbsenceReasonTagBatchPatchMutation,
    AbsenceReasonTagType,
Jonathan Weth's avatar
Jonathan Weth committed
    AbsenceReasonType,
    AbsenceType,
Jonathan Weth's avatar
Jonathan Weth committed

class Query(graphene.ObjectType):
    app_name = graphene.String()
    absences = FilterOrderList(AbsenceType)
    planned_absences_for_person = FilterOrderList(AbsenceType, person=graphene.ID(required=True))
    absence_reasons = FilterOrderList(AbsenceReasonType)
    absence_reason_tags = FilterOrderList(AbsenceReasonTagType)
    all_absence_reason_tags = FilterOrderList(AbsenceReasonTagType)
Jonathan Weth's avatar
Jonathan Weth committed

    @staticmethod
Jonathan Weth's avatar
Jonathan Weth committed
    def resolve_app_name(root, info, **kwargs) -> str:
        return apps.get_app_config("kolego").verbose_name
    @staticmethod
    def resolve_absences(root, info, **kwargs) -> QuerySet:
        return graphene_django_optimizer.query(
            get_objects_for_user(
                info.context.user,
                "kolego.view_absence",
                filter_active_school_term_by_date(info.context, Absence.objects.all()),
            ),
            info,
        )

    @staticmethod
    def resolve_planned_absences_for_person(root, info, person: str, **kwargs):
        person = Person.objects.get(pk=person)
        if not info.context.user.has_perm("kolego.view_person_absences_rule", person):
            return []
        return graphene_django_optimizer.query(
            filter_active_school_term_by_date(
                info.context,
                Absence.objects.filter(
                    person=person, datetime_end__date__gte=timezone.now().date()
                ).order_by("datetime_start"),
    @staticmethod
    def resolve_absencereasons(root, info, **kwargs) -> QuerySet:
        if not info.context.user.has_perm("kolego.fetch_absencereasons_rule"):
            return []
        return graphene_django_optimizer.query(
            get_objects_for_user(
                info.context.user,
                "kolego.view_absencereason",
                AbsenceReason.objects.all(),
            ),
            info,
        )

    @staticmethod
    def resolve_absence_reason_tags(root, info, **kwargs) -> QuerySet:
        return graphene_django_optimizer.query(
            get_objects_for_user(
                info.context.user,
                "kolego.view_absencereasontag",
                AbsenceReasonTag.objects.all(),
            ),
            info,
        )

    @staticmethod
    def resolve_all_absence_reason_tags(root, info, **kwargs) -> QuerySet:
        return graphene_django_optimizer.query(
            get_objects_for_user(
                info.context.user,
                "kolego.view_absencereasontag",
                AbsenceReasonTag.objects.managed_and_unmanaged(),
            ),
            info,
        )
class Mutation(graphene.ObjectType):
    create_absences = AbsenceBatchCreateMutation.Field()
    delete_absences = AbsenceBatchDeleteMutation.Field()
    update_absences = AbsenceBatchPatchMutation.Field()

    create_absence_reasons = AbsenceReasonBatchCreateMutation.Field()
    delete_absence_reasons = AbsenceReasonBatchDeleteMutation.Field()
    update_absence_reasons = AbsenceReasonBatchPatchMutation.Field()

    create_absence_reason_tags = AbsenceReasonTagBatchCreateMutation.Field()
    delete_absence_reason_tags = AbsenceReasonTagBatchDeleteMutation.Field()
    update_absence_reason_tags = AbsenceReasonTagBatchPatchMutation.Field()