diff --git a/application/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index fe5ac9e23..243f4b2c5 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -90,16 +90,22 @@ class Stundenplan extends FHCAPI_Controller $stunden = getData($stunden); - $result = $this->StundenplanModel->getRoomDataOnDay($ort_kurzbz,$start_date,$end_date); - - if(isError($result)){ + $result = $this->StundenplanModel->groupedRoomPlanning($ort_kurzbz,$start_date,$end_date); + //$this->loglib->logErrorDB(print_r($result,TRUE),"this is the result of the grouped query"); + + if(isError($result)){ $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } $result = hasData($result) ? getData($result) : []; - $this->loglib->logInfoDB(print_r(count($result),true),"this is the count of the result"); - + + foreach($result as $entry){ + if(COUNT($entry->lektor)>1){ + // gruppierung hat stattgefunden und das array muss in einem String konvertiert werden + } + } + /* $final_events = array(); $grouped = array(); $associative_day_events = $this->filterEventsIntoAssociativeDateArray($result, $start_date, $end_date); @@ -196,9 +202,9 @@ class Stundenplan extends FHCAPI_Controller $final_events[] = $stunden_events[$event_key]; } } - } + } */ - $this->terminateWithSuccess($final_events); + $this->terminateWithSuccess($result); } diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 5ce6a9823..5e5dc779d 100755 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -18,7 +18,7 @@ class Stundenplan_model extends DB_Model * * @return stdClass */ - public function getRoomDataOnDay($ort_kurzbz,$start_date,$end_date){ + public function getRoomDataOnInterval($ort_kurzbz,$start_date,$end_date){ @@ -41,6 +41,98 @@ class Stundenplan_model extends DB_Model return $raum_stundenplan; } + /** + * @param string $ort_kurzbz The room to query the planning for + * @param string $start_date The start date of the query interval + * @param string $end_date The end date of the query interval + * + * @return stdClass + */ + public function groupedRoomPlanning($ort_kurzbz,$start_date,$end_date){ + + + $gruppierteRaumVerplannung= $this->execReadOnlyQuery(" + SELECT + + 'reservierung' as type, + NULL as unr,datum, stunde, + titel AS topic, + beschreibung as beschreibung, + string_agg(DISTINCT gruppe, '/') as gruppe, + string_agg(DISTINCT lektor, '/') as lektor, + res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit + + FROM + + ( + SELECT + NULL as unr,datum, stunde, + CASE + WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz + ELSE CONCAT(UPPER(studg.typ),UPPER(res.stg_kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/')) + END as gruppe, + CASE + WHEN mit.kurzbz IS NOT NULL THEN mit.kurzbz + ELSE uid + END as lektor, + res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit + FROM lehre.vw_reservierung res + + LEFT JOIN public.tbl_mitarbeiter mit ON mit.mitarbeiter_uid=uid + JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz + + WHERE + res.ort_kurzbz = ? + AND res.datum >= ? + AND res.datum <= ? + ) as res + + GROUP BY res.ort_kurzbz,res.studiengang_kz, res.datum, res.stunde, res.titel, res.beschreibung + + UNION ALL + + SELECT + + 'stundenplan' as type, + unr,datum, stunde, + CONCAT(lehrfach,'-',lehrform) as topic, + '' as beschreibung, + string_agg(DISTINCT gruppe, '/') as gruppe, + string_agg(DISTINCT lektor, '/') as lektor, + ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit + + FROM + ( + SELECT + unr,datum, stunde, + CASE + WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz + ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) + END as gruppe, + CASE + WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz + ELSE lektor + END as lektor, + ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit + + FROM lehre.vw_stundenplan sp + + WHERE ort_kurzbz = ? + AND datum >= ? + AND datum <= ? + + ) as sp + + GROUP BY + + ort_kurzbz,unr, datum, stunde, lehreinheit_id, lehrfach_id,studiengang_kz,titel,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit + + ORDER BY datum, stunde + ", [$ort_kurzbz, $start_date, $end_date, $ort_kurzbz, $start_date, $end_date]); + + return $gruppierteRaumVerplannung; + } + /** * @param string $uid * diff --git a/public/js/api/ort.js b/public/js/api/ort.js new file mode 100644 index 000000000..4c8e2ce73 --- /dev/null +++ b/public/js/api/ort.js @@ -0,0 +1,10 @@ +export default { + getContentID(ort_kurbz) { + return this.$fhcApi.get( + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + "/api/frontend/v1/Ort/ContentID", + { ort_kurzbz: ort_kurbz } + ); + }, +} \ No newline at end of file diff --git a/public/js/apps/Cis/RoomInformation.js b/public/js/apps/Cis/RoomInformation.js index af92fe147..b5559047e 100644 --- a/public/js/apps/Cis/RoomInformation.js +++ b/public/js/apps/Cis/RoomInformation.js @@ -51,7 +51,13 @@ const app = Vue.createApp({ res.data.forEach((el, i) => { el.id = i; - el.color = '#' + (el.farbe || 'CCCCCC'); + 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.title = el.lehrfach; @@ -62,7 +68,8 @@ const app = Vue.createApp({ this.events = res.data; } - this.$fhcApi.factory.stundenplan.getReservierungen('EDV_F4.26', this.weekFirstDay, this.weekLastDay).then(res => { + // reservierungen are loaded with the stundenplan + /* this.$fhcApi.factory.stundenplan.getReservierungen('EDV_F4.26', this.weekFirstDay, this.weekLastDay).then(res => { if (res.data && res.data.forEach) { res.data.forEach((el, i) => { el.reservierung = true; @@ -77,11 +84,10 @@ const app = Vue.createApp({ } let reservierungs_events = res.data; - console.log(reservierungs_events,"this are the reservierungs events that are getting from the db query") this.events = [...(this.events?this.events:[]),...reservierungs_events]; - this.events_loaded = true; - }); + + }); */ }); @@ -90,22 +96,19 @@ const app = Vue.createApp({ }, template: /*html*/`