diff --git a/application/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index c624f0944..032519cf6 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -109,14 +109,8 @@ class Stundenplan extends FHCAPI_Controller */ public function getStundenplan(){ - // Query fuer Studenten prototyp ok + // Query fuer Studenten MVP //TODO: getStundenplan fuer Mitarbeiter anpassen - //TODO: viele edge cases die es nicht moeglich machen besseren tbl_stundenplan index zu verwenden als idx_stundenplan_datum - - // include Student model to fetch Studiengang_kz and Semester - $this->load->model('crm/Student_model', 'StudentModel'); - $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); - $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); // form validation $this->load->library('form_validation'); @@ -130,14 +124,81 @@ class Stundenplan extends FHCAPI_Controller $start_date = $this->input->get('start_date', TRUE); $end_date = $this->input->get('end_date', TRUE); - // get Student_uid / Studiengang_kz / Semester in order to use index idx_stundenplan_datum_stgsem - $student_uid = get_uid(); - $student_data = $this->StudentModel->load([$student_uid]); - $student_data = getData($student_data)[0]; - $this->addMeta('studg',$student_data->studiengang_kz); - $this->addMeta('sem', $student_data->semester); + $student_uid = getAuthUID(); + if(is_null($student_uid)) + { + $this->terminateWithError("No UID"); + } - $stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStundenplanQuery(get_uid(),$start_date,$end_date,$student_data->studiengang_kz,$student_data->semester)); + //semester des Studenten ermitteln + $lvplan_load_ueber_semesterhaelfte = false; + if (defined('LVPLAN_LOAD_UEBER_SEMESTERHAELFTE') && LVPLAN_LOAD_UEBER_SEMESTERHAELFTE === true) + $lvplan_load_ueber_semesterhaelfte = true; + else + $lvplan_load_ueber_semesterhaelfte = false; + + $this->load->model('organisation/Studiensemester_model','StudiensemesterModel'); + $aktuelle_studiensemester = current(getData($this->StudiensemesterModel->getAkt()))->studiensemester_kurzbz; + if($lvplan_load_ueber_semesterhaelfte) + { + $next_studiensemester = current(getData($this->StudiensemesterModel->getNext()))->studiensemester_kurzbz; + $previous_studiensemester = current(getData($this->StudiensemesterModel->getPreviousFrom($aktuelle_studiensemester)))->studiensemester_kurzbz; + } + else + { + $nearest_studiensemester = current(getData($this->StudiensemesterModel->getNearestFrom($aktuelle_studiensemester)))->studiensemester_kurzbz; + } + + // getting the gruppen_kurzbz of the student in the different studiensemester + $this->load->model('person/Benutzergruppe_model','BenutzergruppeModel'); + $benutzer_gruppen = null; + if ($lvplan_load_ueber_semesterhaelfte) + { + $benutzer_gruppen = $this->BenutzergruppeModel->execReadOnlyQuery(" + SELECT * FROM tbl_benutzergruppe where uid = ? AND studiensemester_kurzbz IN ?",[$student_uid, [$aktuelle_studiensemester, $next_studiensemester, $previous_studiensemester]]); + $benutzer_gruppen = array_map(function($item){ return "'".$item->gruppe_kurzbz. "'";},getData($benutzer_gruppen)); + } + else + { + $benutzer_gruppen = $this->BenutzergruppeModel->execReadOnlyQuery(" + SELECT * FROM tbl_benutzergruppe where uid = ? AND studiensemester_kurzbz IN ?", [$student_uid, [$aktuelle_studiensemester,$nearest_studiensemester]]); + $benutzer_gruppen = array_map(function ($item) { return "'".$item->gruppe_kurzbz. "'";}, getData($benutzer_gruppen)); + } + + // getting the student_lehrverbaende of the student in the different studiensemester + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $student_lehrverbaende = null; + if ($lvplan_load_ueber_semesterhaelfte) { + $student_lehrverbaende = $this->BenutzergruppeModel->execReadOnlyQuery(" + SELECT * FROM tbl_studentlehrverband where student_uid = ? AND studiensemester_kurzbz IN ?", [$student_uid, [$aktuelle_studiensemester,$next_studiensemester, $previous_studiensemester]]); + $student_lehrverbaende = array_map( + function ($item) + { + $result = new stdClass(); + $result->studiengang_kz = $item->studiengang_kz; + $result->semester = $item->semester; + $result->verband = $item->verband; + $result->gruppe = $item->gruppe; + return $result; + }, + getData($student_lehrverbaende)); + } else { + $student_lehrverbaende = $this->BenutzergruppeModel->execReadOnlyQuery(" + SELECT * FROM tbl_studentlehrverband where student_uid = ? AND studiensemester_kurzbz IN ?", [$student_uid, [$aktuelle_studiensemester,$nearest_studiensemester]]); + $student_lehrverbaende = array_map( + function ($item) { + $result = new stdClass(); + $result->studiengang_kz = $item->studiengang_kz; + $result->semester = $item->semester; + $result->verband = $item->verband; + $result->gruppe = $item->gruppe; + return $result; + }, + getData($student_lehrverbaende) + ); + } + + $stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStundenplanQuery($start_date, $end_date, $benutzer_gruppen, $student_lehrverbaende)); $stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? []; $this->expand_object_information($stundenplan_data); diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 3966a08e1..e2b031870 100755 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -192,52 +192,22 @@ class Stundenplan_model extends DB_Model * * @return string */ - public function getStundenplanQuery($uid, $start_date, $end_date,$studiengang_kz,$semester){ + public function getStundenplanQuery($start_date, $end_date,$gruppen,$studentlehrverbaende){ - $studiensemester = null; - - $check_with_start_date = $this->execReadOnlyQuery("SELECT * FROM public.tbl_studiensemester WHERE " . $this->escape($start_date) . " BETWEEN start AND ende ;"); - $check_with_start_date = getData($check_with_start_date); - if (count($check_with_start_date)>0) - { - $studiensemester = current($check_with_start_date)->studiensemester_kurzbz; - } - else - { - $check_with_end_date = $this->execReadOnlyQuery("SELECT * FROM public.tbl_studiensemester WHERE " . $this->escape($end_date) . " BETWEEN start AND ende ;"); - $check_with_end_date = getData($check_with_end_date); - if (count($check_with_start_date) > 0) - { - $studiensemester = current($check_with_end_date)->studiensemester_kurzbz; - } - } - - if(!is_null($studiensemester)) - { - $semester_with_studiensemester = $this->execReadOnlyQuery("SELECT * FROM public.tbl_studentlehrverband WHERE student_uid = " . $this->escape($uid) . " AND studiensemester_kurzbz = " . $this->escape($studiensemester)); - $semester_with_studiensemester = getData($semester_with_studiensemester); - $semester_with_studiensemester = current($semester_with_studiensemester)->semester; - - return + $query = "select sp.* from lehre.vw_stundenplan sp - left join public.tbl_benutzergruppe bg ON sp.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid =".$this->escape($uid)." - left join public.tbl_studiensemester ss1 ON bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start <=sp.datum AND ss1.ende>= sp.datum - left join public.tbl_studentlehrverband slv ON sp.studiengang_kz=slv.studiengang_kz and slv.student_uid=".$this->escape($uid)." and (slv.semester=sp.semester OR sp.semester IS NULL) AND (slv.verband=sp.verband OR sp.verband IS NULL OR sp.verband='' OR sp.verband='0') AND - (slv.gruppe=sp.gruppe OR sp.gruppe IS NULL OR sp.gruppe='' OR sp.gruppe='0') AND sp.gruppe_kurzbz IS NULL - left join public.tbl_studiensemester ss2 ON slv.studiensemester_kurzbz=ss2.studiensemester_kurzbz AND ss2.start<=sp.datum and ss2.ende >= sp.datum - WHERE + WHERE sp.datum >= ".$this->escape($start_date)." AND sp.datum <= ".$this->escape($end_date)." - AND sp.studiengang_kz = ".$this->escape($studiengang_kz)." - AND sp.semester = ".$this->escape($semester_with_studiensemester)." - AND (ss1.studiensemester_kurzbz IS NOT NULL or ss2.studiensemester_kurzbz IS NOT NULL)"; + AND ( + sp.gruppe_kurzbz IN (".implode(',',$gruppen).")"; + foreach($studentlehrverbaende as $lehrverband){ + $query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe).")"; + } + $query .= ")"; - } - else - { - return error("studiensemester could not be retrieved with the student_uid: ".$uid); - } + return $query; } /** diff --git a/public/js/components/Calendar/Week/Page.js b/public/js/components/Calendar/Week/Page.js index 725a72543..4b7c45952 100755 --- a/public/js/components/Calendar/Week/Page.js +++ b/public/js/components/Calendar/Week/Page.js @@ -97,7 +97,7 @@ export default { template: `