changes how the reservierungen are fetched from the database to have the same information as the room events

This commit is contained in:
SimonGschnell
2024-09-05 14:57:57 +02:00
parent e33162d20e
commit f9b69fe08c
4 changed files with 58 additions and 22 deletions
@@ -143,8 +143,8 @@ class Stundenplan extends FHCAPI_Controller
$result = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($result);
// loop over the days
$day_events = $this->filterEventsIntoAssociativeDateArray($result, $start_date, $end_date);
// imperative approach
/* $day_events = $this->filterEventsIntoAssociativeDateArray($result, $start_date, $end_date);
$final_reservierungen = array();
foreach($day_events as $date => $day_eventArray){
@@ -203,7 +203,7 @@ class Stundenplan extends FHCAPI_Controller
}
}
$this->terminateWithSuccess($final_reservierungen);
$this->terminateWithSuccess($final_reservierungen); */
}
private function filterEventsIntoAssociativeDateArray($events, $start_date, $end_date){
@@ -22,21 +22,26 @@ class Reservierung_model extends DB_Model
{
$raum_reservierungen= $this->execReadOnlyQuery("
SELECT ort_kurzbz, studiengang_kz, array_agg(uid) as lektor, stunde, datum, titel, beschreibung, gruppe, gruppe_kurzbz, stg_kurzbz, stg
SELECT
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
FROM
(
SELECT res.* ,
SELECT res.*, beginn, ende,
CASE
WHEN res.verband IS NOT NULL OR res.semester IS NOT NULL THEN
CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',res.verband,res.semester)
ELSE
CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz))
END AS stg
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, stunde, datum, titel, beschreibung, gruppe, stg, gruppe_kurzbz, stg_kurzbz
GROUP BY ort_kurzbz, studiengang_kz, reservierungen.stunde, datum, titel, beschreibung, beginn, ende
", [$ort_kurzbz, $start_date, $end_date]);
if(isError($raum_reservierungen)){
@@ -46,19 +51,48 @@ class Reservierung_model extends DB_Model
$raum_reservierungen = getData($raum_reservierungen) ?? [];
$this->load->model("ressrouce/Mitarbeiter_model","MitarbeiterModel");
foreach($raum_reservierungen as $reservierung){
$lektoren_array = array();
foreach($reservierung->lektor as $lektor){
$lektor_obj_array = array();
$gruppe_obj_array = array();
// load lektor object
foreach ($reservierung->lektor as $lektor) {
$this->MitarbeiterModel->addLimit(1);
$lektor_obj= $this->MitarbeiterModel->load($lektor);
if(isError($lektor_obj)){
show_error(getError($lektor_obj));
$lektor_object = $this->execReadOnlyQuery("
SELECT mitarbeiter_uid, vorname, nachname, kurzbz
FROM public.tbl_mitarbeiter
JOIN public.tbl_benutzer benutzer ON benutzer.uid = mitarbeiter_uid
JOIN public.tbl_person person ON person.person_id = benutzer.person_id
WHERE mitarbeiter_uid = ?", [$lektor]);
if (isError($lektor_object)) {
$this->show_error(getError($lektor_object));
}
$lektor_obj = current(getData($lektor_obj));
$lektoren_array[] = $lektor_obj;
$lektor_object = current(getData($lektor_object));
// only provide needed information of the mitarbeiter object
$lektor_obj_array[] = $lektor_object;
}
$reservierung->lektor = $lektoren_array;
// load gruppe object
foreach ($reservierung->gruppe as $lv_gruppe) {
$lv_gruppe = strtr($lv_gruppe, ['(' => '', ')' => '', '"' => '']);
$lv_gruppe_array = explode(",", $lv_gruppe);
list($gruppe, $verband, $semester, $studiengang_kz, $gruppen_kuerzel) = $lv_gruppe_array;
$lv_gruppe_object = new stdClass();
$lv_gruppe_object->gruppe = $gruppe;
$lv_gruppe_object->verband = $verband;
$lv_gruppe_object->semester = $semester;
$lv_gruppe_object->studiengang_kz = $studiengang_kz;
$lv_gruppe_object->kuerzel = $gruppen_kuerzel;
$gruppe_obj_array[] = $lv_gruppe_object;
}
$reservierung->gruppe = $gruppe_obj_array;
$reservierung->lektor = $lektor_obj_array;
}
return success($raum_reservierungen);
@@ -145,12 +145,11 @@ class Stundenplan_model extends DB_Model
$gruppierteEvents = $this->execReadOnlyQuery("
SELECT
unr,datum, sp.stunde,
CONCAT(lehrfach,'-',lehrform) as topic,
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
array_agg(DISTINCT lektor) as lektor,
ort_kurzbz, titel, lehrfach, lehrform, lehrfach_bez, beginn, ende
unr,datum, sp.stunde, ort_kurzbz, titel, lehrfach, lehrform, lehrfach_bez, beginn, ende
FROM
(
@@ -100,6 +100,9 @@ export default{
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;
@@ -130,7 +133,7 @@ export default{
<!-- render content for stundenplan -->
<span >{{event.orig.topic}}</span>
<span v-for="gruppe_kurzbz in event.orig.gruppen_kurzbz" >{{gruppe_kurzbz}}</span>
<span v-for="gruppe in event.orig.gruppe" >{{gruppe.kuerzel}} </span>
<span v-for="lektor in event.orig.lektor" >{{lektor.kurzbz}}</span>
<!-- add the beschreibung if the event is a reservierung
<span v-if="event.orig.type === 'reservierung'">{{event.orig.beschreibung}}</span>-->