diff --git a/aleksis/apps/chronos/frontend/components/amendLesson.graphql b/aleksis/apps/chronos/frontend/components/amendLesson.graphql index bf6d16e4820b1f31da4b33a28660ad7036287d33..a93e89186df05efdfa77473b7f1a1751eb614c24 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 3bdd8ab8daa347c1c6156593a58690a2a71eb1d5..492644680bf7b3c7fd3dadbf8ce5154fa1b2b3dc 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 90f35ab79ad1d6a5173b866a17b350dff9a68a29..c9616f68e5a63dcaedb7910c61c3193354627e16 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 84d0348fd9fa901f9414c27d0ca7441d4709a4ca..f7cc25ff46c7fe7018876cc782fb6ad4e92e4eca 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()