Newer
Older
from django.db.models import QuerySet
import graphene_django_optimizer
from guardian.shortcuts import get_objects_for_user
from aleksis.apps.kolego.models.absence import Absence, AbsenceReason, AbsenceReasonTag
from aleksis.core.models import Person
from aleksis.core.schema.base import FilterOrderList
from aleksis.core.util.core_helpers import filter_active_school_term_by_date
from .absence import (
AbsenceBatchCreateMutation,
AbsenceBatchPatchMutation,
AbsenceReasonBatchCreateMutation,
AbsenceReasonTagBatchCreateMutation,
AbsenceReasonTagBatchDeleteMutation,
AbsenceReasonTagBatchPatchMutation,
AbsenceReasonTagType,
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)
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()