fixes the errors with the stundenplan/reservierungen data query

This commit is contained in:
SimonGschnell
2024-09-11 10:19:46 +02:00
parent ac35ba3e27
commit f2a57f85a8
4 changed files with 50 additions and 92 deletions
@@ -44,6 +44,12 @@ class Stundenplan extends FHCAPI_Controller
));
$this->load->library('form_validation');
//load models
$this->load->model('ressource/Stundenplan_model', 'StundenplanModel');
$this->load->model('ressource/Reservierung_model', 'ReservierungModel');
}
//------------------------------------------------------------------------------------------------------------------
@@ -72,10 +78,6 @@ class Stundenplan extends FHCAPI_Controller
*/
public function getRoomplan()
{
$this->load->model('ressource/Stundenplan_model', 'StundenplanModel');
$this->load->model('ressource/Stunde_model', 'StundeModel');
// form validation
$this->load->library('form_validation');
$this->form_validation->set_data($_GET);
@@ -89,11 +91,13 @@ class Stundenplan extends FHCAPI_Controller
$start_date = $this->input->get('start_date', TRUE);
$end_date = $this->input->get('end_date', TRUE);
$result = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getRoomQuery($ort_kurzbz, $start_date, $end_date));
$roomplan_data = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getRoomQuery($ort_kurzbz, $start_date, $end_date));
$result = $this->getDataOrTerminateWithError($result);
$roomplan_data = $this->getDataOrTerminateWithError($roomplan_data);
$this->terminateWithSuccess($result);
$this->expand_object_information($roomplan_data);
$this->terminateWithSuccess($roomplan_data);
}
@@ -104,12 +108,6 @@ class Stundenplan extends FHCAPI_Controller
*/
public function getStundenplan(){
$this->load->model('ressource/Stundenplan_model', 'StundenplanModel');
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
$this->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$this->load->model('person/Benutzer_model', 'BenutzerModel');
// form validation
$this->load->library('form_validation');
$this->form_validation->set_data($_GET);
@@ -126,8 +124,39 @@ class Stundenplan extends FHCAPI_Controller
$stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStundenplanQuery(get_uid(),$start_date,$end_date));
$stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? [];
// get the benutzer object for the lektor of the lv
foreach ($stundenplan_data as $item) {
$this->expand_object_information($stundenplan_data);
$this->terminateWithSuccess($stundenplan_data);
}
// gets the reservierungen of a room if the ort_kurzbz parameter is supplied otherwise gets the reservierungen of the stundenplan of a student
public function Reservierungen($ort_kurzbz = null)
{
//form validation
$this->load->library('form_validation');
$this->form_validation->set_data($_GET);
$this->form_validation->set_rules('start_date', "StartDate", "required");
$this->form_validation->set_rules('end_date', "EndDate", "required");
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
// storing the get parameter in local variables
$start_date = $this->input->get('start_date', TRUE);
$end_date = $this->input->get('end_date', TRUE);
// querying the reservierungen
$reservierungen = $this->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz);
$reservierungen = $this->getDataOrTerminateWithError($reservierungen) ?? [];
$this->expand_object_information($reservierungen);
$this->terminateWithSuccess($reservierungen);
}
private function expand_object_information($data){
foreach ($data as $item) {
$lektor_obj_array = array();
$gruppe_obj_array = array();
@@ -164,81 +193,10 @@ class Stundenplan extends FHCAPI_Controller
$gruppe_obj_array[] = $lv_gruppe_object;
}
$item->lektor = $lektor_obj_array;
$item->gruppe = $gruppe_obj_array;
}
$this->terminateWithSuccess($stundenplan_data);
}
// gets the reservierungen of a room if the ort_kurzbz parameter is supplied otherwise gets the reservierungen of the stundenplan of a student
public function Reservierungen($ort_kurzbz = null)
{
$this->load->model('ressource/Reservierung_model', 'ReservierungModel');
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
//form validation
$this->load->library('form_validation');
$this->form_validation->set_data($_GET);
$this->form_validation->set_rules('start_date', "StartDate", "required");
$this->form_validation->set_rules('end_date', "EndDate", "required");
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
// storing the get parameter in local variables
$start_date = $this->input->get('start_date', TRUE);
$end_date = $this->input->get('end_date', TRUE);
// querying the reservierungen
$reservierungen = $this->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz);
$reservierungen = $this->getDataOrTerminateWithError($reservierungen) ?? [];
foreach ($reservierungen as $reservierung) {
$lektor_obj_array = array();
$gruppe_obj_array = array();
// load lektor object
foreach ($reservierung->lektor as $lektor) {
$this->MitarbeiterModel->addLimit(1);
$lektor_object = $this->MitarbeiterModel->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_object = current(getData($lektor_object));
// only provide needed information of the mitarbeiter object
$lektor_obj_array[] = $lektor_object;
}
// 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;
$item->lektor = $lektor_obj_array;
}
$this->terminateWithSuccess($reservierungen);
}
@@ -41,7 +41,7 @@ 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
FROM campus.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 <= ?";
@@ -52,7 +52,7 @@ class Reservierung_model extends DB_Model
SELECT
'reservierung' as type, beginn, ende, datum,
COALESCE(titel, beschreibung) as topic,
array_agg(DISTINCT uid) as lektor,
array_agg(DISTINCT mitarbeiter_kurzbz) as lektor,
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
ort_kurzbz, 'FFFFFF' as farbe
+2 -2
View File
@@ -76,8 +76,8 @@ const app = Vue.createApp({
<h2>Stundenplan</h2>
<hr>
<fhc-calendar v-slot="{event, day}" :events="events" initial-mode="week" show-weeks>
<div class="d-flex flex-column align-items-center justify-content-evenly h-100">
<span>{{event.orig.title}}</span>
<div type="button" class="d-flex flex-column align-items-center justify-content-evenly h-100">
<span>{{event.orig.topic}}</span>
<span v-for="lektor in event.orig.lektor">{{lektor.kurzbz}}</span>
<span>{{event.orig.ort_kurzbz}}</span>
</div>
@@ -87,7 +87,7 @@ export default{
<div>
<fhc-calendar @change:range="updateRange" v-slot="{event,day}" :initialDate="currentDate" :events="events" initial-mode="week" show-weeks>
<a class="text-decoration-none text-dark" href="#" :title="event.orig.title + ' - ' + event.orig.lehrfach_bez + ' [' + event.orig.ort_kurzbz+']'" >
<div class="d-flex flex-column align-items-center justify-content-evenly h-100" >
<div type="button" class="d-flex flex-column align-items-center justify-content-evenly h-100" >
<!-- render content for stundenplan -->
<span >{{event.orig.topic}}</span>