diff --git a/aleksis/apps/kolego/schema/__init__.py b/aleksis/apps/kolego/schema/__init__.py index 471a14e2d15cfd744d3150c61e67ae82382576ad..625c29b0c50c4883e6bb9c792d9fc1520d8b0c80 100644 --- a/aleksis/apps/kolego/schema/__init__.py +++ b/aleksis/apps/kolego/schema/__init__.py @@ -2,9 +2,37 @@ from django.apps import apps import graphene +from aleksis.core.schema.base import DjangoFilterMixin, FilterOrderList + +from .absence import ( + AbsenceType, + AbsenceCreateMutation, + AbsenceBatchCreateMutation, + AbsenceDeleteMutation, + AbsenceBatchPatchMutation, + AbsenceReasonType, + AbsenceReasonCreateMutation, + AbsenceReasonBatchCreateMutation, + AbsenceReasonDeleteMutation, + AbsenceReasonBatchPatchMutation +) + class Query(graphene.ObjectType): app_name = graphene.String() + absences = FilterOrderList(AbsenceType) + absence_reasons = FilterOrderList(AbsenceReasonType) def resolve_app_name(root, info, **kwargs) -> str: return apps.get_app_config("kolego").verbose_name + +class Mutation(graphene.ObjectType): + create_absence = AbsenceCreateMutation.Field() + create_absences = AbsenceBatchCreateMutation.Field() + delete_absence = AbsenceDeleteMutation.Field() + update_absences = AbsenceBatchPatchMutation.Field() + + create_absence_reason = AbsenceReasonCreateMutation.Field() + create_absence_reasons = AbsenceReasonBatchCreateMutation.Field() + delete_absence_reason = AbsenceReasonDeleteMutation.Field() + update_absence_reasons = AbsenceReasonBatchPatchMutation.Field() diff --git a/aleksis/apps/kolego/schema/absence.py b/aleksis/apps/kolego/schema/absence.py new file mode 100644 index 0000000000000000000000000000000000000000..7c9f099d546bb468b4895030f0e810e25be96060 --- /dev/null +++ b/aleksis/apps/kolego/schema/absence.py @@ -0,0 +1,93 @@ +import graphene +from graphene_django import DjangoListField +from graphene_django.types import DjangoObjectType +from graphene_django_cud.mutations import ( + DjangoBatchCreateMutation, + DjangoBatchPatchMutation, + DjangoCreateMutation, +) +from guardian.shortcuts import get_objects_for_user + +from aleksis.core.schema.base import ( + DeleteMutation, + DjangoFilterMixin, + PermissionBatchPatchMixin, + PermissionsTypeMixin, +) + +from ..models import Absence, AbsenceReason + + +class AbsenceReasonType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): + class Meta: + model = AbsenceReason + fields = ("id", "short_name", "name") + filter_fields = { + "short_name": ["icontains", "exact"], + "name": ["icontains", "exact"], + } + + +class AbsenceType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): + class Meta: + model = Absence + fields = ("id", "person", "reason", "comment", "datetime_start", "datetime_end", "date_start", "date_end") + filter_fields = { + "person__full_name": ["icontains", "exact"], + "comment": ["icontains", "exact"], + } + + +class AbsenceCreateMutation(DjangoCreateMutation): + class Meta: + model = Absence + fields = ("person", "reason", "comment", "datetime_start", "datetime_end", "date_start", "date_end") + optional_fields = ("comment", "reason", "datetime_start", "datetime_end", "date_start", "date_end") + permissions = ("",) # FIXME + + +class AbsenceBatchCreateMutation(DjangoBatchCreateMutation): + class Meta: + model = Absence + fields = ("id", "person", "reason", "comment", "datetime_start", "datetime_end", "date_start", "date_end") + permissions = ("",) # FIXME + + +class AbsenceDeleteMutation(DeleteMutation): + klass = Absence + permission_required = "" # FIXME + + +class AbsenceBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): + class Meta: + model = Absence + fields = ("id", "person", "reason", "comment", "datetime_start", "datetime_end", "date_start", "date_end") + permissions = ("",) # FIXME + + +class AbsenceReasonCreateMutation(DjangoCreateMutation): + class Meta: + model = AbsenceReason + fields = ("short_name", "name") + optional_fields = ("name",) + permissions = ("",) # FIXME + + +class AbsenceReasonBatchCreateMutation(DjangoBatchCreateMutation): + class Meta: + model = AbsenceReason + fields = ("short_name", "name") + optional_fields = ("name",) + permissions = ("",) # FIXME + + +class AbsenceReasonDeleteMutation(DeleteMutation): + klass = AbsenceReason + permission_required = "" # FIXME + + +class AbsenceReasonBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): + class Meta: + model = AbsenceReason + fields = ("id", "short_name", "name") + permissions = ("",) # FIXME