mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-19 16:02:15 +00:00
updates roomEvents on change:range / groups the results of a studenplan query
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
|
||||
@@ -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*/`
|
||||
<div>
|
||||
<fhc-calendar v-slot="{event,day}" :initialDate="currentDate" :events="events" initial-mode="week" show-weeks>
|
||||
<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" >
|
||||
|
||||
Reference in New Issue
Block a user