diff --git a/application/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index 1e6aa494d..923c7f6bb 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -87,22 +87,11 @@ class Stundenplan extends FHCAPI_Controller $ort_kurzbz = $this->input->get('ort_kurzbz', TRUE); $start_date = $this->input->get('start_date', TRUE); $end_date = $this->input->get('end_date', TRUE); - - // querying the stunden - $stunden = $this->StundeModel->load(); - $stunden = $this->getDataOrTerminateWithError($stunden); - - $result = $this->StundenplanModel->groupedCalendarEvents($ort_kurzbz,$start_date,$end_date); + $result = $this->StundenplanModel->stundenPlanGruppierung($this->StundenplanModel->getRoomQuery($ort_kurzbz, $start_date, $end_date)); $result = $this->getDataOrTerminateWithError($result); - foreach($result as $entry){ - if(COUNT($entry->lektor)>1){ - // gruppierung hat stattgefunden und das array muss in einem String konvertiert werden - } - } - $this->terminateWithSuccess($result); } diff --git a/application/controllers/components/Cis/Stundenplan.php b/application/controllers/components/Cis/Stundenplan.php index 6a89458a7..31ed34dbd 100755 --- a/application/controllers/components/Cis/Stundenplan.php +++ b/application/controllers/components/Cis/Stundenplan.php @@ -30,12 +30,14 @@ class Stundenplan extends Auth_Controller { $this->load->model('ressource/Stundenplan_model', 'StundenplanModel'); - $result = $this->StundenplanModel->loadForUid(get_uid()); + /* $result = $this->StundenplanModel->loadForUid(get_uid()); if (isError($result)) return $this->outputJsonError(getError($result)); - - $this->outputJsonSuccess(getData($result)); + */ + $res = $this->StundenplanModel->stundenPlanGruppierung($this->StundenplanModel->getStudenPlanQuery(get_uid())); + $res = getData($res); + $this->outputJsonSuccess($res); } /** diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 693825e79..fed70ac74 100755 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -133,6 +133,71 @@ class Stundenplan_model extends DB_Model return $gruppierteEvents; } + public function stundenPlanGruppierung($stundenplanViewQuery) + { + + + $gruppierteEvents = $this->execReadOnlyQuery(" + 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 (".$stundenplanViewQuery.") sp + + ) 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 + "); + + return $gruppierteEvents; + } + + public function getStudenPlanQuery($uid){ + 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 ss1.studiensemester_kurzbz IS NOT NULL or ss2.studiensemester_kurzbz IS NOT NULL"; + } + + public function getRoomQuery($ort_kurzbz, $start_date, $end_date) + { + return + "select sp.* + FROM lehre.vw_stundenplan sp + WHERE ort_kurzbz = ".$this->escape($ort_kurzbz)." + AND datum >= ".$this->escape($start_date)." + AND datum <= ".$this->escape($end_date); + } + /** * @param string $uid * @@ -149,7 +214,7 @@ class Stundenplan_model extends DB_Model $this->db->or_where('ss2.studiensemester_kurzbz IS NOT NULL', null, false); $query = $this->db->get_compiled_select('lehre.vw_stundenplan sp'); - + return $this->execQuery($query, [$uid, $uid]); } diff --git a/public/js/components/Cis/Mylv/RoomInformation.js b/public/js/components/Cis/Mylv/RoomInformation.js index 885130a5f..c905dabd8 100644 --- a/public/js/components/Cis/Mylv/RoomInformation.js +++ b/public/js/components/Cis/Mylv/RoomInformation.js @@ -32,6 +32,13 @@ export default{ }, }, methods:{ + updateRange: function(data){ + this.calendarWeek = new CalendarDate(data.start); + Vue.nextTick(() => { + this.loadRoomEvents(); + }); + }, + // returns the string YYYY-MM-DD if param is instance of CalendarDate and null otherwise calendarDateToString: function(calendarDate){ @@ -40,69 +47,50 @@ export default{ null; }, + + loadStunden: async function(){ + await this.$fhcApi.factory.stundenplan.getStunden().then(res => { + res.data.forEach(std => { + this.stunden[std.stunde] = std; // TODO(chris): geht besser + }); + }); + }, + + loadRoomEvents: function(){ + this.$fhcApi.factory.stundenplan.getRoomInfo(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay).then(res => { + let events; + if (res.data && res.data.forEach) { + res.data.forEach((el, i) => { + + el.id = i; + 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; + if (el.lehrform) + el.title += '-' + el.lehrform; + }); + + this.events = res.data; + } + }); + } }, - created() { + async mounted() { - this.$fhcApi.factory.stundenplan.getStunden().then(res =>{ - res.data.forEach(std => { - this.stunden[std.stunde] = std; // TODO(chris): geht besser - }); - - - // old testing room EDV_A6.09 - this.$fhcApi.factory.stundenplan.getRoomInfo(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay).then(res =>{ - let events; - if (res.data && res.data.forEach) { - res.data.forEach((el, i) => { - - el.id = i; - 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; - if (el.lehrform) - el.title += '-' + el.lehrform; - }); - - this.events = res.data; - } - - // 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; - el.color = '#' + (el.farbe || 'ffffff'); - 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.titel; - if (el.lehrform) - el.title += '-' + el.lehrform; - }); - - } - - let reservierungs_events = res.data; - this.events = [...(this.events?this.events:[]),...reservierungs_events]; - - - }); */ - }); - - - }); + this.loadStunden(); + this.loadRoomEvents(); }, template: /*html*/`