fixed issue with unresponsive reservation delete buttons in widget and my lv plan

This commit is contained in:
adisposkofh
2026-08-10 13:21:48 +02:00
parent e4c52701b7
commit 4e67d7b765
5 changed files with 52 additions and 9 deletions
+1
View File
@@ -236,6 +236,7 @@ class StundenplanLib
if ($is_mitarbeiter && empty($ort_kurzbz)) {
// request for personal lvplan show only reservations of logged in user
$this->_ci->addMeta("meta", "adis");
$reservierungen = $this->_ci->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date, $uid);
} else {
// querying the reservierungen
@@ -96,7 +96,7 @@ class Reservierung_model extends DB_Model
$query_result = $this->execReadOnlyQuery("
SELECT
DISTINCT(insertvon),
'reservierung' as type, beginn, ende, datum,
'reservierung' as type, beginn, ende, datum, array_agg(DISTINCT reservierung_id) AS reservierung_id,
COALESCE(titel, beschreibung) as topic,
array_agg(DISTINCT mitarbeiter_kurzbz) as lektor,
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
+3 -3
View File
@@ -215,18 +215,18 @@ export default {
:style="eventStyle(event)"
>
<component
v-if="mode == 'event'"
v-if="renderers && mode == 'event'"
:is="renderers[event.type]?.modalContent"
:event="event"
@create-event="(event) => $emit('create-event', event)"
></component>
<component
v-else-if="mode == 'eventheader'"
v-else-if="renderers && mode == 'eventheader'"
:is="renderers[event.type]?.modalTitle"
:event="event"
></component>
<component
v-else
v-else-if="renderers"
:is="renderers[event.type]?.calendarEvent"
:event="event"
@delete-event="(event) => $emit('delete-event', event)"
+27 -5
View File
@@ -5,6 +5,8 @@ import { useRenderers } from '../../composables/Renderers.js';
import ModeList from '../Calendar/Mode/List.js';
import ApiRoomPlan from '../../api/factory/calendar/roomPlan.js';
export default {
name: "CalendarWidget",
components: {
@@ -49,17 +51,36 @@ export default {
},
updateRange(rangeInterval) {
this.rangeInterval = rangeInterval;
}
},
deleteEvent(event) {
if (event.type === "reservierung") {
this.deleteReservation(event);
}
},
async deleteReservation(event) {
if (
luxon.DateTime.fromISO(`${event.datum}T${event.beginn}`) <
luxon.DateTime.now()
)
return;
await this.$api.call(
ApiRoomPlan.deleteRoomReservation(event.reservierung_id),
);
this.reset();
},
},
setup(props) {
const rangeInterval = Vue.ref(null);
const { events } = useEventLoader(rangeInterval, props.getPromiseFunc);
const { events, reset } = useEventLoader(rangeInterval, props.getPromiseFunc);
const { renderers } = useRenderers();
return {
rangeInterval,
events,
reset,
renderers
};
},
@@ -80,17 +101,17 @@ export default {
{{ $p.t('lehre/noLvFound') }}
</div>
<component
v-else-if="mode == 'eventheader'"
v-else-if="renderers && mode == 'eventheader'"
:is="renderers[event.type]?.modalTitle"
:event="event"
></component>
<component
v-else-if="mode == 'event'"
v-else-if="renderers && mode == 'event'"
:is="renderers[event.type]?.modalContent"
:event="event"
></component>
<div
v-else
v-else-if="renderers"
:class="'event-type-' + event.type + ' ' + mode + 'PageContainer'"
:style="eventStyle(event)"
>
@@ -98,6 +119,7 @@ export default {
:is="renderers[event.type]?.calendarEvent"
:event="event"
:timeSlotDisplayBehavior="'always'"
@delete-event="(event) => deleteEvent(event)"
></component>
</div>
</template>
@@ -2,6 +2,7 @@ import FhcCalendar from "../../Calendar/LvPlan.js";
import ApiLvPlan from '../../../api/factory/lvPlan.js';
import ApiAuthinfo from '../../../api/factory/authinfo.js';
import ApiRoomPlan from '../../../api/factory/calendar/roomPlan.js';
export const DEFAULT_MODE_LVPLAN_DESKTOP = "Week";
export const DEFAULT_MODE_LVPLAN_MOBILE = "List";
@@ -134,6 +135,24 @@ export default {
this.isMitarbeiter = authInfo.isMitarbeiter;
this.isStudent = authInfo.isStudent;
},
deleteEvent(event) {
if (event.type === "reservierung") {
this.deleteReservation(event);
}
},
async deleteReservation(event) {
if (
luxon.DateTime.fromISO(`${event.datum}T${event.beginn}`) <
luxon.DateTime.now()
)
return;
await this.$api.call(
ApiRoomPlan.deleteRoomReservation(event.reservierung_id),
);
this.$refs.calendar.reset();
},
},
async created() {
await this.fetchAuthInfo();
@@ -157,6 +176,7 @@ export default {
@update:date="handleChangeDate"
@update:mode="handleChangeMode"
@update:range="updateRange"
@delete-event="(event) => deleteEvent(event)"
class="responsive-calendar"
>
<div