mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-17 20:19:28 +00:00
bundles the room_events and the reservierungen api calls together with Promise.allSettled
This commit is contained in:
@@ -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)){
|
||||
|
||||
@@ -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)){
|
||||
|
||||
@@ -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*/`
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user