diff --git a/application/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index 7b67dbeb3..c624f0944 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -108,8 +108,15 @@ class Stundenplan extends FHCAPI_Controller * */ public function getStundenplan(){ + + // Query fuer Studenten prototyp ok + //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'); @@ -128,7 +135,8 @@ class Stundenplan extends FHCAPI_Controller $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); + $this->addMeta('sem', $student_data->semester); + $stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStundenplanQuery(get_uid(),$start_date,$end_date,$student_data->studiengang_kz,$student_data->semester)); $stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? []; diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 039b8fdb8..3966a08e1 100755 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -193,20 +193,51 @@ class Stundenplan_model extends DB_Model * @return string */ public function getStundenplanQuery($uid, $start_date, $end_date,$studiengang_kz,$semester){ - return - "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 - 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)." - AND (ss1.studiensemester_kurzbz IS NOT NULL or ss2.studiensemester_kurzbz IS NOT NULL)"; + + $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 + "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 + 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)"; + + } + else + { + return error("studiensemester could not be retrieved with the student_uid: ".$uid); + } } /**