diff --git a/application/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index c55b225c9..77e7e9a0f 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -84,16 +84,20 @@ class Stundenplan extends FHCAPI_Controller $this->load->model('ressource/Stundenplan_model', 'StundenplanModel'); $this->load->model('ressource/Stunde_model', 'StundeModel'); + $stunden = $this->StundeModel->load(); if(isError($stunden)){ $this->terminateWithError(getError($stunden), self::ERROR_TYPE_GENERAL); } $stunden = getData($stunden); - $this->loglib->logInfoDB(print_r($stunden,true),"stunden"); - - + $result = $this->StundenplanModel->getRoomDataOnDay($ort_kurzbz,$start_date,$end_date); + + $this->loglib->logErrorDB(print_r($result,true),"this is an entry of a reservierung"); + + return; + if(isError($result)){ $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } @@ -111,6 +115,7 @@ class Stundenplan extends FHCAPI_Controller $testEndDate = new DateTime($end_date); $count =0; $final_events = array(); + $grouped = array(); while($testStartDate <= $testEndDate && $count <7){ $date = $testStartDate->format('Y-m-d'); //TODO: array filtering for every day and hour could be too time consuming causing slow response @@ -123,24 +128,16 @@ class Stundenplan extends FHCAPI_Controller return $entry->stunde == $stunde->stunde; }); - // aenderung aller events die am gleichen tag und zur gleichen Stunde gehalten werden - foreach($stunden_events as $event_key => $stunden_event){ - $this->loglib->logInfoDB(print_r($stunden_event,true),"this is the stunden evnet"); - - // lektor bestimmen - if($stunden_event->mitarbeiter_kurzbz == null){ - $simml_lektor = $stunden_event->lektor; - }else{ - $simml_lektor = $stunden_event->mitarbeiter_kurzbz; - } - - + $lehrverband_array = array(); + + // for loop that is just used to fill the lehrverband_array + foreach($stunden_events as $key=>$stunden_event){ // lehrverband bestimmen if(strlen($stunden_event->gruppe_kurzbz)>0){ $lehrverband = $stunden_event->gruppe_kurzbz; }else{ - $lehrverband=$stunden_event->stg.'-'.$stunden_event->sem; + $lehrverband=$stunden_event->stg_typ . $stunden_event->stg_kurzbz .'-'.$stunden_event->semester; // checks whether the verband is not null, '' or '0' if($stunden_event->verband !=null && $stunden_event->verband != '0' && $stunden_event->verband != ''){ $lehrverband.=$stunden_event->verband; @@ -148,7 +145,24 @@ class Stundenplan extends FHCAPI_Controller $lehrverband.=$stunden_event->gruppe; } } + $lehrverband_array[$key] = $lehrverband; + } + + + // aenderung aller events die am gleichen tag und zur gleichen Stunde gehalten werden + foreach($stunden_events as $event_key => $stunden_event){ + if(isset($grouped[$event_key])){ + continue; + } + + // lektor bestimmen + if($stunden_event->mitarbeiter_kurzbz == null){ + $simml_lektor = $stunden_event->lektor; + }else{ + $simml_lektor = $stunden_event->mitarbeiter_kurzbz; + } + // lehrfach bestimmen $lehrfach = $stunden_event->lehrfach; if(isset($stunden_event->lehrform)){ @@ -158,26 +172,64 @@ class Stundenplan extends FHCAPI_Controller // GRUPIEREN DER GLEICHEN EVENTS // vergleiche das aktuelle Event mit allen anderen Events die am gleichen Tag und zur gleichen Stunde gehalten werden foreach($stunden_events as $compare_key => $stunden_event_compare){ + if($compare_key != $event_key){ - + + // will be used to skip the loop iteration with this index because it was already grouped + $grouped[$compare_key] = 1; + // this if checks if the events can be grouped if ( // the unr's have to be equal to be grouped $stunden_event->unr==$stunden_event_compare->unr && // and either the lektor or the ort_kurzbz have to be equal ($stunden_event->ort_kurzbz==$stunden_event_compare->ort_kurzbz || $stunden_event->lektor==$stunden_event_compare->lektor) + // reservierungen muessen auch beachtet werden, wenn der eintrag eine reservierung ist dann koennen die eintraege nicht gruppiert werden + //&& !$stunden_event->reservierung && !$stunden_event_compare->reservierung + ) { + + + // Bezeichnung des Events zusammenfuehren + // change the event with the $event_key if the compared_event has different properties but is still groupable + + //Lektoren + if(!mb_strstr($stunden_event->lektor,$stunden_event_compare->lektor)){ + $this->loglib->logErrorDB($stunden_event->datum ."-". $stunden_event->stunde,"entered lektor - first if"); + $stunden_events[$event_key]->lektor = $stunden_event->lektor . ' \ ' . $stunden_event_compare->lektor; + $stunden_events[$event_key]->mitarbeiter_kurzbz = $stunden_event->mitarbeiter_kurzbz . ' \ ' . $stunden_event_compare->mitarbeiter_kurzbz; + } + + //Ort + if(!mb_strstr($stunden_event->ort_kurzbz,$stunden_event_compare->ort_kurzbz)){ + $this->loglib->logErrorDB($stunden_event->datum ."-". $stunden_event->stunde,"entered ort - second if"); + $stunden_events[$event_key]->ort_kurzbz = $stunden_event->ort_kurzbz . ' \ ' . $stunden_event_compare->ort_kurzbz; + } + + //unset the compared and grouped event + unset($stunden_events[$compare_key]); + + + //Lehrverband + if(!mb_strstr($lehrverband_array[$event_key],$lehrverband_array[$compare_key])){ + $this->loglib->logErrorDB($stunden_event->datum ."-". $stunden_event->stunde,"entered gruppe - third if"); + $lehrverband_array[$event_key] .= ' \ ' . $lehrverband_array[$compare_key]; + } + } } } - + + // add the grouped lehrverband entry to the event + $stunden_events[$event_key]->stg = $lehrverband_array[$event_key]; + $final_events[] = $stunden_events[$event_key]; } - if (count($stunden_events) == 1){ + /* if (count($stunden_events) == 1){ $final_events[] = current($stunden_events); }else if(count($stunden_events) > 1){ $gruppe = ''; @@ -186,7 +238,7 @@ class Stundenplan extends FHCAPI_Controller } current($stunden_events)->gruppe = $gruppe; $final_events[] = current($stunden_events); - } + } */ //$this->loglib->logInfoDB(print_r($stunden_events,true),"date: " . $date . " - stunde:" .$stunde->stunde); } /* $this->loglib->logInfoDB(print_r($testStartDate,true),"startdate"); @@ -197,8 +249,7 @@ class Stundenplan extends FHCAPI_Controller $count++; } - $this->loglib->logInfoDB(print_r($final_events,true),"final_events"); - + $this->groupTheCalendar($result); //php start date $phpStartDate = new DateTime($start_date); diff --git a/application/core/FHCAPI_Controller.php b/application/core/FHCAPI_Controller.php index 647032795..d5e3ca0ce 100644 --- a/application/core/FHCAPI_Controller.php +++ b/application/core/FHCAPI_Controller.php @@ -141,6 +141,19 @@ class FHCAPI_Controller extends Auth_Controller $this->returnObj['meta'][$key] = $value; } + /** + * @param string $key + * @return mixed + */ + public function getMeta($key) + { + if (!isset($this->returnObj['meta'])) + return null; + if (!isset($this->returnObj['meta'][$key])) + return null; + return $this->returnObj['meta'][$key]; + } + /** * @param string $status * @return void diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 077201f0f..0205b1472 100755 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -21,7 +21,27 @@ class Stundenplan_model extends DB_Model public function getRoomDataOnDay($ort_kurzbz='EDV_A2.06',$start_date,$end_date){ - $this->addSelect(['*',"CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) as stg","lektor","CONCAT(lehrfach,'-',lehrform) as lv_info" ]); + //$this->addSelect(['*',"CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) as stg","lektor","CONCAT(lehrfach,'-',lehrform) as lv_info" ]); + $result = $this->execReadOnlyQuery(" + + SELECT 'stundenplan_eintrag' as eintrags_type, CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) AS stg, lektor, CONCAT(lehrfach,'-',lehrform) AS lv_info, ort_kurzbz , * FROM lehre.vw_stundenplan sp + WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ? + UNION ALL + SELECT 'reservierungs_eintrag' as eintrags_type, titel, uid, NULL, ort_kurzbz FROM lehre.vw_reservierung res + WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ? + + ", [$ort_kurzbz, $start_date, $end_date,$ort_kurzbz, $start_date, $end_date]); + return $result; + + + /* + "SELECT 'stundenplan_eintrag' as eintrags_type ort_kurzbz studiengang_kz uid stunde datum titel NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL" + "SELECT 'reservierungs_eintrag' as eintrags_type, ort_kurzbz studiengang_kz uid stunde datum titel NULL NULL NULL NULL NULL" + + */ + //to add reservierungen to the query, we have to join the table vw_reservierung to the vw_stundenplan and use the datum/stunde/ort_kurzbz keys + + /* $this->addSelect(["lehre.tbl_stundenplan.*","CONCAT(UPPER(sg.typ),UPPER(sg.kurzbz),'-',lehre.tbl_stundenplan.semester,lehre.tbl_stundenplan.verband) as simml"]); $this->addJoin("public.tbl_lehrverband as lv","lv.studiengang_kz=lehre.tbl_stundenplan.studiengang_kz AND lv.gruppe=lehre.tbl_stundenplan.gruppe AND lv.verband=lehre.tbl_stundenplan.verband AND lv.semester=lehre.tbl_stundenplan.semester","LEFT"); $this->addJoin("public.tbl_studiengang as sg","sg.studiengang_kz=lehre.tbl_stundenplan.studiengang_kz","LEFT"); @@ -34,7 +54,16 @@ class Stundenplan_model extends DB_Model $query = $this->db->get_compiled_select('lehre.vw_stundenplan sp'); + $raum_stundenplan= $this->execQuery($query, [$ort_kurzbz, $start_date, $end_date]); + + // reseting the query and query reservierungen information + $this->resetQuery(); + $this->db->where('ort_kurzbz',$ort_kurzbz,true); + $this->db->where('datum >=',$start_date,true); + $this->db->where('datum <=',$end_date,true); + $query = $this->db->get_compiled_select('lehre.vw_reservierung res'); return $this->execQuery($query, [$ort_kurzbz, $start_date, $end_date]); + } /** diff --git a/public/js/apps/Cis/RoomInformation.js b/public/js/apps/Cis/RoomInformation.js index c3ce80a75..f0edefa73 100644 --- a/public/js/apps/Cis/RoomInformation.js +++ b/public/js/apps/Cis/RoomInformation.js @@ -10,7 +10,7 @@ const app = Vue.createApp({ return { stunden: [], events: null, - calendarWeek: new CalendarDate(new Date()), + calendarWeek: new CalendarDate(new Date("2024-03-06")), } }, computed:{