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 3c48211f95dc43e022dccff838100e43d58ea842..2ef03c095e4e46a10fc52c9cc67a0e126a3a1d2e 100644 --- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue +++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue @@ -95,7 +95,7 @@ </v-list-item-title> </v-list-item-content> </v-list-item> - <v-card-actions> + <v-card-actions v-if="checkPermission('chronos.edit_substitution_rule')"> <edit-button i18n-key="chronos.event.amend.button" @click="amendEvent.open = true" @@ -113,10 +113,11 @@ :get-patch-data="transformPatchData" :edit-item="initPatchData" @cancel="amendEvent.open = false" - @save="$emit('refreshCalendar')" + @save="onAmendSave()" > - <template #subject.field="{ attrs, on }"> + <template #subject.field="{ attrs, on, item }"> <v-autocomplete + :disabled="item.cancelled" :items="amendableSubjects" item-text="name" item-value="id" @@ -124,8 +125,9 @@ v-on="on" /> </template> - <template #teachers.field="{ attrs, on }"> + <template #teachers.field="{ attrs, on, item }"> <v-autocomplete + :disabled="item.cancelled" multiple :items="amendableTeachers" item-text="fullName" @@ -136,8 +138,9 @@ deletable-chips /> </template> - <template #rooms.field="{ attrs, on }"> + <template #rooms.field="{ attrs, on, item }"> <v-autocomplete + :disabled="item.cancelled" multiple :items="amendableRooms" item-text="name" @@ -161,6 +164,7 @@ </template> <script> +import permissionsMixin from "aleksis.core/mixins/permissions.js"; import calendarFeedDetailsMixin from "aleksis.core/mixins/calendarFeedDetails.js"; import BaseCalendarFeedDetails from "aleksis.core/components/calendar/BaseCalendarFeedDetails.vue"; import CalendarStatusChip from "aleksis.core/components/calendar/CalendarStatusChip.vue"; @@ -191,7 +195,7 @@ export default { EditButton, DialogObjectForm, }, - mixins: [calendarFeedDetailsMixin, lessonEvent], + mixins: [permissionsMixin, calendarFeedDetailsMixin, lessonEvent], data() { return { amendEvent: { @@ -246,14 +250,18 @@ export default { cancelled: cancelled ? true : false, }; }, + onAmendSave() { + this.$emit('refreshCalendar'); + this.model = false; + }, }, computed: { initPatchData() { return { id: this.selectedEvent.meta.id, - subject: this.selectedEvent.meta.subject, - teachers: this.selectedEvent.meta.teachers, - rooms: this.selectedEvent.meta.rooms, + subject: this.selectedEvent.meta.subject?.id.toString(), + teachers: this.selectedEvent.meta.teachers.map((teacher) => teacher.id.toString()), + rooms: this.selectedEvent.meta.rooms.map((room) => room.id.toString()), cancelled: this.selectedEvent.meta.cancelled, comment: this.selectedEvent.meta.comment, }; @@ -264,5 +272,8 @@ export default { amendableTeachers: gqlPersons, amendableRooms: gqlRooms, }, + mounted() { + this.addPermissions(["chronos.edit_substitution_rule"]); + }, }; </script>