From daeafeb02aa7e6e48ff1a3ddb51e6630412edd8e Mon Sep 17 00:00:00 2001 From: Michael Bauer <michael-bauer@posteo.de> Date: Thu, 24 Aug 2023 18:51:49 +0200 Subject: [PATCH] Implement graphql amend lesson mutation --- .../frontend/components/amendLesson.graphql | 16 +++++++++ .../calendar_feeds/details/LessonDetails.vue | 6 +++- aleksis/apps/chronos/schema/__init__.py | 35 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 aleksis/apps/chronos/frontend/components/amendLesson.graphql diff --git a/aleksis/apps/chronos/frontend/components/amendLesson.graphql b/aleksis/apps/chronos/frontend/components/amendLesson.graphql new file mode 100644 index 00000000..40e30db9 --- /dev/null +++ b/aleksis/apps/chronos/frontend/components/amendLesson.graphql @@ -0,0 +1,16 @@ +mutation gqlAmendLesson($input: LessonEventInput!) { + amendLesson(input: $input) { + lessonEvent { + id + amends + datetimeStart + datetimeEnd + subject + teachers + groups + rooms + cancelled + comment + } + } +} diff --git a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue index 6fe52197..e0dc9147 100644 --- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue +++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue @@ -106,7 +106,7 @@ :default-item="amendEvent.default" :is-create="true" createItemI18nKey="chronos.event.amend.title" - :gql-create-mutation="gqlCreateAmend" + :gql-create-mutation="gqlAmendLesson" @cancel="amendEvent.open = false" /> </v-card-actions> @@ -123,8 +123,11 @@ import EditButton from "aleksis.core/components/generic/buttons/EditButton.vue"; import DialogObjectForm from "aleksis.core/components/generic/dialogs/DialogObjectForm.vue"; import LessonRelatedObjectChip from "../../LessonRelatedObjectChip.vue"; + import lessonEvent from "../mixins/lessonEvent"; import LessonEventSubject from "../../LessonEventSubject.vue"; +import gqlAmendLesson from "../../amendLesson.graphql"; + export default { name: "LessonDetails", components: { @@ -135,6 +138,7 @@ export default { CancelledCalendarStatusChip, EditButton, DialogObjectForm, + gqlAmendLesson, }, mixins: [calendarFeedDetailsMixin, lessonEvent], data() { diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py index e5c7d4e8..4c8f3313 100644 --- a/aleksis/apps/chronos/schema/__init__.py +++ b/aleksis/apps/chronos/schema/__init__.py @@ -1,7 +1,9 @@ import graphene from graphene_django import DjangoObjectType +from graphene_django_cud.mutations import DjangoCreateMutation from aleksis.core.models import Group, Person, Room +from ..models import LessonEvent from ..util.chronos_helpers import get_classes, get_rooms, get_teachers @@ -26,6 +28,35 @@ class TimetableRoomType(DjangoObjectType): fields = ("id", "name", "short_name") skip_registry = True +class LessonEventType(DjangoObjectType): + class Meta: + model = LessonEvent + fields = ("id", + "amends", + "datetime_start", + "datetime_end", + "subject", + "teachers", + "groups", + "rooms", + "cancelled", + "comment") + + +class AmendLessonMutation(DjangoCreateMutation): + class Meta: + model = LessonEvent + permissions = ("chronos.edit_substitution_rule",) + only_fields = ("amends", + "datetime_start", + "datetime_end", + "subject", + "teachers", + "groups", + "rooms", + "cancelled", + "comment") + class TimetableType(graphene.Enum): TEACHER = "teacher" @@ -93,3 +124,7 @@ class Query(graphene.ObjectType): ) return all_timetables + + +class Mutation(graphene.ObjectType): + amend_lesson = AmendLessonMutation.Field() -- GitLab