mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-10 08:39:28 +00:00
adds a sql query for the grouping algorithm
This commit is contained in:
@@ -90,16 +90,22 @@ class Stundenplan extends FHCAPI_Controller
|
||||
|
||||
$stunden = getData($stunden);
|
||||
|
||||
$result = $this->StundenplanModel->getRoomDataOnDay($ort_kurzbz,$start_date,$end_date);
|
||||
|
||||
if(isError($result)){
|
||||
$result = $this->StundenplanModel->groupedRoomPlanning($ort_kurzbz,$start_date,$end_date);
|
||||
//$this->loglib->logErrorDB(print_r($result,TRUE),"this is the result of the grouped query");
|
||||
|
||||
if(isError($result)){
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$result = hasData($result) ? getData($result) : [];
|
||||
$this->loglib->logInfoDB(print_r(count($result),true),"this is the count of the result");
|
||||
|
||||
|
||||
|
||||
foreach($result as $entry){
|
||||
if(COUNT($entry->lektor)>1){
|
||||
// gruppierung hat stattgefunden und das array muss in einem String konvertiert werden
|
||||
}
|
||||
}
|
||||
/*
|
||||
$final_events = array();
|
||||
$grouped = array();
|
||||
$associative_day_events = $this->filterEventsIntoAssociativeDateArray($result, $start_date, $end_date);
|
||||
@@ -196,9 +202,9 @@ class Stundenplan extends FHCAPI_Controller
|
||||
$final_events[] = $stunden_events[$event_key];
|
||||
}
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
$this->terminateWithSuccess($final_events);
|
||||
$this->terminateWithSuccess($result);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class Stundenplan_model extends DB_Model
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getRoomDataOnDay($ort_kurzbz,$start_date,$end_date){
|
||||
public function getRoomDataOnInterval($ort_kurzbz,$start_date,$end_date){
|
||||
|
||||
|
||||
|
||||
@@ -41,6 +41,98 @@ class Stundenplan_model extends DB_Model
|
||||
return $raum_stundenplan;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $ort_kurzbz The room to query the planning for
|
||||
* @param string $start_date The start date of the query interval
|
||||
* @param string $end_date The end date of the query interval
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function groupedRoomPlanning($ort_kurzbz,$start_date,$end_date){
|
||||
|
||||
|
||||
$gruppierteRaumVerplannung= $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
|
||||
'reservierung' as type,
|
||||
NULL as unr,datum, stunde,
|
||||
titel AS topic,
|
||||
beschreibung as beschreibung,
|
||||
string_agg(DISTINCT gruppe, '/') as gruppe,
|
||||
string_agg(DISTINCT lektor, '/') as lektor,
|
||||
res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit
|
||||
|
||||
FROM
|
||||
|
||||
(
|
||||
SELECT
|
||||
NULL as unr,datum, stunde,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(res.stg_kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/'))
|
||||
END as gruppe,
|
||||
CASE
|
||||
WHEN mit.kurzbz IS NOT NULL THEN mit.kurzbz
|
||||
ELSE uid
|
||||
END as lektor,
|
||||
res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit
|
||||
FROM lehre.vw_reservierung res
|
||||
|
||||
LEFT JOIN public.tbl_mitarbeiter mit ON mit.mitarbeiter_uid=uid
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
|
||||
WHERE
|
||||
res.ort_kurzbz = ?
|
||||
AND res.datum >= ?
|
||||
AND res.datum <= ?
|
||||
) as res
|
||||
|
||||
GROUP BY res.ort_kurzbz,res.studiengang_kz, res.datum, res.stunde, res.titel, res.beschreibung
|
||||
|
||||
UNION ALL
|
||||
|
||||
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 lehre.vw_stundenplan sp
|
||||
|
||||
WHERE ort_kurzbz = ?
|
||||
AND datum >= ?
|
||||
AND datum <= ?
|
||||
|
||||
) 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
|
||||
", [$ort_kurzbz, $start_date, $end_date, $ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
return $gruppierteRaumVerplannung;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $uid
|
||||
*
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
export default {
|
||||
getContentID(ort_kurbz) {
|
||||
return this.$fhcApi.get(
|
||||
FHC_JS_DATA_STORAGE_OBJECT.app_root +
|
||||
FHC_JS_DATA_STORAGE_OBJECT.ci_router +
|
||||
"/api/frontend/v1/Ort/ContentID",
|
||||
{ ort_kurzbz: ort_kurbz }
|
||||
);
|
||||
},
|
||||
}
|
||||
@@ -51,7 +51,13 @@ const app = Vue.createApp({
|
||||
res.data.forEach((el, i) => {
|
||||
|
||||
el.id = i;
|
||||
el.color = '#' + (el.farbe || 'CCCCCC');
|
||||
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;
|
||||
@@ -62,7 +68,8 @@ const app = Vue.createApp({
|
||||
this.events = res.data;
|
||||
}
|
||||
|
||||
this.$fhcApi.factory.stundenplan.getReservierungen('EDV_F4.26', this.weekFirstDay, this.weekLastDay).then(res => {
|
||||
// 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;
|
||||
@@ -77,11 +84,10 @@ const app = Vue.createApp({
|
||||
}
|
||||
|
||||
let reservierungs_events = res.data;
|
||||
console.log(reservierungs_events,"this are the reservierungs events that are getting from the db query")
|
||||
this.events = [...(this.events?this.events:[]),...reservierungs_events];
|
||||
this.events_loaded = true;
|
||||
|
||||
});
|
||||
|
||||
}); */
|
||||
});
|
||||
|
||||
|
||||
@@ -90,22 +96,19 @@ const app = Vue.createApp({
|
||||
},
|
||||
template: /*html*/`
|
||||
<div>
|
||||
<fhc-calendar v-if="events_loaded" v-slot="{event,day}" :initialDate="currentDate" :events="events" initial-mode="week" show-weeks>
|
||||
<fhc-calendar 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" :style="{'background-color':event.orig.color}">
|
||||
<template v-if="event.orig.reservierung">
|
||||
<!-- render content for reservierungen -->
|
||||
<span>{{event.orig.title}}</span>
|
||||
<span>{{event.orig.gruppe_kurzbz?event.orig.gruppe_kurzbz:event.orig.stg}}</span>
|
||||
<span v-for="(item, index) in event.orig.person_kurzbz.split('/')" :key="index">{{item}}</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
|
||||
<!-- render content for stundenplan -->
|
||||
<span>{{event.orig.lv_info}}</span>
|
||||
<span v-for="(item, index) in event.orig.stg.split('/')" :key="index">{{item}}</span>
|
||||
<span >{{event.orig.lektor}}</span>
|
||||
</template>
|
||||
<span >{{event.orig.topic}}</span>
|
||||
<span v-for="gruppe in event.orig.gruppe.split('/')" :key="gruppe">{{gruppe}}</span>
|
||||
<span v-for="lektor in event.orig.lektor.split('/')" :key="lektor">{{lektor}}</span>
|
||||
<!-- add the beschreibung if the event is a reservierung -->
|
||||
<span v-if="event.orig.type === 'reservierung'">{{event.orig.beschreibung}}</span>
|
||||
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</fhc-calendar>
|
||||
|
||||
@@ -48,7 +48,6 @@ export default {
|
||||
nextDay.setDate(nextDay.getDate()+1);
|
||||
nextDay.setMilliseconds(nextDay.getMilliseconds()-1);
|
||||
let d = {events:[],lanes:1};
|
||||
console.log("this are the events",this.events, "and this is the key",key)
|
||||
if (this.events[key]) {
|
||||
this.events[key].forEach(evt => {
|
||||
let event = {orig:evt,lane:1,maxLane:1,start: evt.start < day ? day : evt.start, end: evt.end > nextDay ? nextDay : evt.end,shared:[],setSharedMaxRecursive(doneItems) {
|
||||
@@ -78,9 +77,7 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
printTest:function(param){
|
||||
console.log("HERE",param)
|
||||
},
|
||||
|
||||
changeToMonth(day) {
|
||||
if (!this.noMonthView) {
|
||||
this.date.set(day);
|
||||
|
||||
Reference in New Issue
Block a user