diff --git a/application/models/ressource/Reservierung_model.php b/application/models/ressource/Reservierung_model.php index b4fedba5e..e3bc9a0b6 100755 --- a/application/models/ressource/Reservierung_model.php +++ b/application/models/ressource/Reservierung_model.php @@ -23,11 +23,12 @@ class Reservierung_model extends DB_Model $raum_reservierungen= $this->execReadOnlyQuery(" SELECT - + 'reservierung' as type, beginn, ende, subquery.stunde, datum, + COALESCE(titel, beschreibung) as topic, array_agg(DISTINCT uid) as lektor, array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe, - COALESCE(titel, beschreibung) as topic, - ort_kurzbz, studiengang_kz, reservierungen.stunde, datum, beginn, ende + + ort_kurzbz FROM ( @@ -36,12 +37,17 @@ class Reservierung_model extends DB_Model WHEN res.gruppe_kurzbz IS NOT NULL THEN res.gruppe_kurzbz ELSE CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/')) END as gruppen_kuerzel + FROM lehre.vw_reservierung res JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = res.stunde WHERE res.ort_kurzbz = ? AND datum >= ? AND datum <= ? - ) AS reservierungen - GROUP BY ort_kurzbz, studiengang_kz, reservierungen.stunde, datum, titel, beschreibung, beginn, ende + + ) AS subquery + + GROUP BY datum, subquery.stunde, beginn, ende, ort_kurzbz, titel, beschreibung + + ORDER BY datum, subquery.stunde ", [$ort_kurzbz, $start_date, $end_date]); if(isError($raum_reservierungen)){ diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 482e1a30a..1944feb8a 100755 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -144,18 +144,16 @@ class Stundenplan_model extends DB_Model { $gruppierteEvents = $this->execReadOnlyQuery(" SELECT - + unr, beginn, ende, subquery.stunde, datum, CONCAT(lehrfach,'-',lehrform) as topic, - array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe, array_agg(DISTINCT lektor) as lektor, + array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe, - unr,datum, sp.stunde, ort_kurzbz, titel, lehrfach, lehrform, lehrfach_bez, beginn, ende + ort_kurzbz, titel, lehrfach, lehrform, lehrfach_bez FROM ( - SELECT - unr,datum, sp.stunde,beginn, ende, - + SELECT unr,datum, sp.stunde,beginn, ende, CASE WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz ELSE lektor @@ -169,13 +167,11 @@ class Stundenplan_model extends DB_Model FROM (".$stundenplanViewQuery.") sp JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde - ) as sp + ) as subquery - GROUP BY + GROUP BY unr, datum, subquery.stunde, beginn, ende, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez - unr, datum, sp.stunde, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez, beginn, ende - - ORDER BY datum, sp.stunde + ORDER BY datum, subquery.stunde "); if(isError($gruppierteEvents)){ diff --git a/public/js/components/Cis/Mylv/RoomInformation.js b/public/js/components/Cis/Mylv/RoomInformation.js index 4be66938b..33c37db63 100644 --- a/public/js/components/Cis/Mylv/RoomInformation.js +++ b/public/js/components/Cis/Mylv/RoomInformation.js @@ -35,8 +35,7 @@ export default{ updateRange: function(data){ this.calendarWeek = new CalendarDate(data.start); Vue.nextTick(() => { - this.loadRoomEvents(); - //this.loadReservierungen(); + this.loadEvents(); }); }, @@ -50,80 +49,52 @@ export default{ }, loadStunden: async function(){ - await this.$fhcApi.factory.stundenplan.getStunden().then(res => { + this.$fhcApi.factory.stundenplan.getStunden().then(res => { res.data.forEach(std => { this.stunden[std.stunde] = std; // TODO(chris): geht besser }); }); }, - loadRoomEvents: async function () { - await this.$fhcApi.factory.stundenplan.getRoomInfo(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay).then(res => { - - if (res.data && res.data.forEach) { - res.data.forEach((el, i) => { + loadEvents: function(){ - el.id = i; - if (el.type === 'reservierung') { - el.color = '#' + (el.farbe || 'FFFFFF'); - } else { - el.color = '#' + (el.farbe || 'CCCCCC'); + // bundles the room_events and the reservierungen together into the this.events array + Promise.allSettled([ + this.$fhcApi.factory.stundenplan.getRoomInfo(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay), + this.$fhcApi.factory.stundenplan.getReservierungen(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay) + ]).then((result) => { + let events = []; + result.forEach((promise_result) => { + if(promise_result.status === 'fulfilled' && promise_result.value.meta.status === "success"){ + + let data = promise_result.value.data; + // adding additional information to the events + if (data && data.forEach) { + data.forEach((el, i) => { + + el.id = i; + if (el.type === 'reservierung') { + el.color = '#' + (el.farbe || 'FFFFFF'); + } else { + el.color = '#' + (el.farbe || 'CCCCCC'); + } + + el.start = new Date(el.datum + ' ' + this.stunden[el.stunde].beginn); + el.end = new Date(el.datum + ' ' + this.stunden[el.stunde].ende); + + }); } - - el.start = new Date(el.datum + ' ' + this.stunden[el.stunde].beginn); - el.end = new Date(el.datum + ' ' + this.stunden[el.stunde].ende); - el.title = el.lehrfach; - if (el.lehrform) - el.title += '-' + el.lehrform; - }); - if (this.events){ - this.events = [...this.events, ...res.data]; - }else{ - this.events = res.data; + events = events.concat(data); } - } - }); + }) + this.events = events; + }) }, - - loadReservierungen: async function () { - await this.$fhcApi.factory.stundenplan.getReservierungen(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay).then(res => { - if (res.data && res.data.forEach) { - res.data.forEach((el, i) => { - - el.id = i; - if (el.type === 'reservierung') { - el.color = '#' + (el.farbe || 'FFFFFF'); - } else { - el.color = '#' + (el.farbe || 'CCCCCC'); - } - - el.start = new Date(el.datum + ' ' + this.stunden[el.stunde].beginn); - el.end = new Date(el.datum + ' ' + this.stunden[el.stunde].ende); - if(el.titel){ - - } - el.title = el.lehrfach; - if (el.lehrform) - el.title += '-' + el.lehrform; - }); - - if (this.events) { - this.events = [...this.events, ...res.data]; - } else { - this.events = res.data; - } - } - }); - } - }, async mounted() { - - this.loadStunden(); - this.loadRoomEvents(); - this.loadReservierungen(); - + // the stunden data are required to display the events accordingly on the calendar + await this.loadStunden(); }, template: /*html*/`