From 3ca1e9d307456ec8b23c89425c06e8c3f0897583 Mon Sep 17 00:00:00 2001 From: Michael Bauer <michael-bauer@posteo.de> Date: Sun, 17 Sep 2023 11:42:26 +0200 Subject: [PATCH] Enable deletion of substitution in substitution frontend --- .../frontend/components/amendLesson.graphql | 6 +++++ .../calendar_feeds/details/LessonDetails.vue | 25 ++++++++++++++++--- .../apps/chronos/frontend/messages/en.json | 4 ++- aleksis/apps/chronos/schema/__init__.py | 7 ++++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/aleksis/apps/chronos/frontend/components/amendLesson.graphql b/aleksis/apps/chronos/frontend/components/amendLesson.graphql index bf6d16e4..a93e8918 100644 --- a/aleksis/apps/chronos/frontend/components/amendLesson.graphql +++ b/aleksis/apps/chronos/frontend/components/amendLesson.graphql @@ -67,3 +67,9 @@ mutation patchAmendLesson($input: PatchLessonEventInput!, $id: ID!) { } } } + +mutation deleteAmendLesson($id: ID!) { + deleteAmendLesson(id: $id) { + ok + } +} 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 3bdd8ab8..49264468 100644 --- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue +++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue @@ -98,9 +98,14 @@ </v-list-item> <v-card-actions v-if="checkPermission('chronos.edit_substitution_rule')"> <edit-button - i18n-key="chronos.event.amend.button" + i18n-key="chronos.event.amend.edit_button" @click="amendEvent.open = true" /> + <delete-button + v-if="selectedEvent.meta.amended" + i18n-key="chronos.event.amend.delete_button" + @click="amendEvent.delete = true" + /> <dialog-object-form v-model="amendEvent.open" :fields="amendEvent.fields" @@ -114,7 +119,7 @@ :get-patch-data="transformPatchData" :edit-item="initPatchData" @cancel="amendEvent.open = false" - @save="onAmendSave()" + @save="updateOnSave()" > <template #subject.field="{ attrs, on, item }"> <v-autocomplete @@ -159,6 +164,13 @@ <v-textarea v-bind="attrs" v-on="on" /> </template> </dialog-object-form> + <delete-dialog + deleteSuccessMessageI18nKey="chronos.event.amend.delete_success" + :gql-mutation="amendEvent.gqlDeleteMutation" + v-model="amendEvent.delete" + :item="selectedEvent.meta" + @success="updateOnSave()" + /> </v-card-actions> </template> </base-calendar-feed-details> @@ -172,6 +184,8 @@ import CalendarStatusChip from "aleksis.core/components/calendar/CalendarStatusC import CancelledCalendarStatusChip from "aleksis.core/components/calendar/CancelledCalendarStatusChip.vue"; import EditButton from "aleksis.core/components/generic/buttons/EditButton.vue"; import DialogObjectForm from "aleksis.core/components/generic/dialogs/DialogObjectForm.vue"; +import DeleteButton from "aleksis.core/components/generic/buttons/DeleteButton.vue"; +import DeleteDialog from "aleksis.core/components/generic/dialogs/DeleteDialog.vue"; import LessonRelatedObjectChip from "../../LessonRelatedObjectChip.vue"; @@ -183,6 +197,7 @@ import { gqlRooms, createAmendLesson, patchAmendLesson, + deleteAmendLesson, } from "../../amendLesson.graphql"; export default { @@ -195,6 +210,8 @@ export default { CancelledCalendarStatusChip, EditButton, DialogObjectForm, + DeleteButton, + DeleteDialog, }, mixins: [permissionsMixin, calendarFeedDetailsMixin, lessonEvent], data() { @@ -229,6 +246,8 @@ export default { }, gqlCreateMutation: createAmendLesson, gqlPatchMutation: patchAmendLesson, + delete: false, + gqlDeleteMutation: deleteAmendLesson, }, }; }, @@ -250,7 +269,7 @@ export default { cancelled: cancelled ? true : false, }; }, - onAmendSave() { + updateOnSave() { this.$emit('refreshCalendar'); this.model = false; }, diff --git a/aleksis/apps/chronos/frontend/messages/en.json b/aleksis/apps/chronos/frontend/messages/en.json index 90f35ab7..c9616f68 100644 --- a/aleksis/apps/chronos/frontend/messages/en.json +++ b/aleksis/apps/chronos/frontend/messages/en.json @@ -28,7 +28,9 @@ "no_room": "No room", "current_changes": "Current changes", "amend": { - "button": "Change", + "edit_button": "Change", + "delete_button": "Reset", + "delete_success": "The substitution was deleted successfully.", "title": "Change lesson", "subject": "Subject", "teachers": "Teachers", diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py index 84d0348f..f7cc25ff 100644 --- a/aleksis/apps/chronos/schema/__init__.py +++ b/aleksis/apps/chronos/schema/__init__.py @@ -5,6 +5,7 @@ from graphene_django import DjangoObjectType from graphene_django_cud.mutations import DjangoCreateMutation, DjangoPatchMutation from aleksis.core.models import CalendarEvent, Group, Person, Room +from aleksis.core.schema.base import DeleteMutation from ..models import LessonEvent from ..util.chronos_helpers import get_classes, get_rooms, get_teachers @@ -113,6 +114,11 @@ class AmendLessonPatchMutation(DatetimeTimezoneMixin, DjangoPatchMutation): only_fields = ("subject", "teachers", "groups", "rooms", "cancelled", "comment") +class AmendLessonDeleteMutation(DeleteMutation): + klass = LessonEvent + permission_required = "chronos.edit_substitution_rule" + + class TimetableType(graphene.Enum): TEACHER = "teacher" GROUP = "group" @@ -184,3 +190,4 @@ class Query(graphene.ObjectType): class Mutation(graphene.ObjectType): create_amend_lesson = AmendLessonCreateMutation.Field() patch_amend_lesson = AmendLessonPatchMutation.Field() + delete_amend_lesson = AmendLessonDeleteMutation.Field() -- GitLab