diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py index 62440a144a86e09ae7abf9a1d189cd79c6925d7f..4ecfef27ee460548e31b017fff80d262d1202410 100644 --- a/aleksis/apps/alsijil/schema/__init__.py +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -18,6 +18,11 @@ from .extra_marks import ( ExtraMarkBatchDeleteMutation, ExtraMarkType, ) +from .personal_note import ( + PersonalNoteBatchCreateMutation, + PersonalNoteBatchDeleteMutation, + PersonalNoteBatchPatchMutation, +) from ..models import Documentation from .documentation import ( @@ -183,3 +188,7 @@ class Mutation(graphene.ObjectType): create_extra_marks = ExtraMarkBatchCreateMutation.Field() update_extra_marks = ExtraMarkBatchPatchMutation.Field() delete_extra_marks = ExtraMarkBatchDeleteMutation.Field() + + create_personal_note = PersonalNoteBatchCreateMutation.Field() + update_personal_note = PersonalNoteBatchPatchMutation.Field() + delete_personal_note = PersonalNoteBatchDeleteMutation.Field() diff --git a/aleksis/apps/alsijil/schema/participation_status.py b/aleksis/apps/alsijil/schema/participation_status.py index e99586e2ef26e663cdd51da2261af14acb0660d8..2e5a99faf3c60fca55b112d3b5ed2e1a96e1e57f 100644 --- a/aleksis/apps/alsijil/schema/participation_status.py +++ b/aleksis/apps/alsijil/schema/participation_status.py @@ -1,6 +1,8 @@ +import graphene from graphene_django import DjangoObjectType -from aleksis.apps.alsijil.models import ParticipationStatus +from aleksis.apps.alsijil.models import ParticipationStatus, NewPersonalNote +from aleksis.apps.alsijil.schema.personal_note import PersonalNoteType from aleksis.core.schema.base import ( BaseBatchPatchMutation, DjangoFilterMixin, @@ -25,6 +27,24 @@ class ParticipationStatusType( "base_absence", ) + extra_mark_notes = graphene.List(PersonalNoteType) + note_notes = graphene.List(PersonalNoteType) + + @staticmethod + def resolve_extra_mark_notes(root: ParticipationStatus, info, **kwargs): + return NewPersonalNote.objects.filter( + person=root.person, + documentation=root.related_documentation, + extra_mark__isnull=False, + ) + @staticmethod + def resolve_note_notes(root: ParticipationStatus, info, **kwargs): + return NewPersonalNote.objects.filter( + person=root.person, + documentation=root.related_documentation, + note__isnull=False, + ) + class ParticipationStatusBatchPatchMutation(BaseBatchPatchMutation): class Meta: diff --git a/aleksis/apps/alsijil/schema/personal_note.py b/aleksis/apps/alsijil/schema/personal_note.py new file mode 100644 index 0000000000000000000000000000000000000000..33f44b5effd24f37a70733994b2089b3bd785582 --- /dev/null +++ b/aleksis/apps/alsijil/schema/personal_note.py @@ -0,0 +1,44 @@ +from graphene_django import DjangoObjectType + +from aleksis.apps.alsijil.models import NewPersonalNote +from aleksis.core.schema.base import ( + DjangoFilterMixin, + BaseBatchCreateMutation, + BaseBatchDeleteMutation, + BaseBatchPatchMutation, + OptimisticResponseTypeMixin, + PermissionsTypeMixin, +) + + +class PersonalNoteType( + OptimisticResponseTypeMixin, + PermissionsTypeMixin, + DjangoFilterMixin, + DjangoObjectType, +): + class Meta: + model = NewPersonalNote + fields = ( + "id", + "note", + "extra_mark", + ) + +class PersonalNoteBatchCreateMutation(BaseBatchCreateMutation): + class Meta: + model = NewPersonalNote + fields = ("note", "extra_mark", "documentation", "person") + permissions = ("alsijil.create_personal_note",) # FIXME + + +class PersonalNoteBatchPatchMutation(BaseBatchPatchMutation): + class Meta: + model = NewPersonalNote + fields = ("id", "note", "extra_mark", "documentation", "person") + permissions = ("alsijil.change_personal_note",) # FIXME + +class PersonalNoteBatchDeleteMutation(BaseBatchDeleteMutation): + class Meta: + model = NewPersonalNote + permission_required = "alsijil.delete_personal_note" # FIXME