mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
changes the structure of the JSON data from the stundenplan
This commit is contained in:
@@ -28,9 +28,10 @@ class Stundenplan extends FHCAPI_Controller
|
||||
{
|
||||
|
||||
parent::__construct([
|
||||
'roomInformation' => self::PERM_LOGGED,
|
||||
'getRoomplan' => self::PERM_LOGGED,
|
||||
'Stunden' => self::PERM_LOGGED,
|
||||
'Reservierungen' => self::PERM_LOGGED
|
||||
'Reservierungen' => self::PERM_LOGGED,
|
||||
'getStundenplan' => self::PERM_LOGGED,
|
||||
]);
|
||||
|
||||
$this->load->library('LogLib');
|
||||
@@ -69,7 +70,7 @@ class Stundenplan extends FHCAPI_Controller
|
||||
* @access public
|
||||
*
|
||||
*/
|
||||
public function roomInformation()
|
||||
public function getRoomplan()
|
||||
{
|
||||
|
||||
$this->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
||||
@@ -88,7 +89,7 @@ class Stundenplan extends FHCAPI_Controller
|
||||
$start_date = $this->input->get('start_date', TRUE);
|
||||
$end_date = $this->input->get('end_date', TRUE);
|
||||
|
||||
$result = $this->StundenplanModel->stundenPlanGruppierung($this->StundenplanModel->getRoomQuery($ort_kurzbz, $start_date, $end_date));
|
||||
$result = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getRoomQuery($ort_kurzbz, $start_date, $end_date));
|
||||
|
||||
$result = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
@@ -96,6 +97,22 @@ class Stundenplan extends FHCAPI_Controller
|
||||
|
||||
}
|
||||
|
||||
public function getStundenplan(){
|
||||
|
||||
$this->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
||||
|
||||
/* $result = $this->StundenplanModel->loadForUid(get_uid());
|
||||
|
||||
if (isError($result))
|
||||
return $this->outputJsonError(getError($result));
|
||||
*/
|
||||
$res = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStundenplanQuery(get_uid()));
|
||||
|
||||
$res = getData($res);
|
||||
|
||||
$this->outputJsonSuccess($res);
|
||||
}
|
||||
|
||||
// reservierungen is not used in the prototype for the students
|
||||
public function Reservierungen()
|
||||
{
|
||||
@@ -125,7 +142,7 @@ class Stundenplan extends FHCAPI_Controller
|
||||
$result = $this->ReservierungModel->getRoomReservierungen($ort_kurzbz, $start_date, $end_date);
|
||||
|
||||
$result = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
// loop over the days
|
||||
$day_events = $this->filterEventsIntoAssociativeDateArray($result, $start_date, $end_date);
|
||||
$final_reservierungen = array();
|
||||
@@ -173,7 +190,6 @@ class Stundenplan extends FHCAPI_Controller
|
||||
$grouped_uids[]= $entry->uid;
|
||||
}
|
||||
|
||||
// grouping the
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ class Stundenplan extends Auth_Controller
|
||||
'index' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
||||
'Reservierungen' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
||||
'Stunden' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
||||
'RoomInformation'=> ['student/anrechnung_beantragen:r','user:r'],
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -34,52 +33,10 @@ class Stundenplan extends Auth_Controller
|
||||
|
||||
if (isError($result))
|
||||
return $this->outputJsonError(getError($result));
|
||||
*/
|
||||
|
||||
|
||||
$res = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStudenPlanQuery(get_uid()));
|
||||
*/
|
||||
$res = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStundenplanQuery(get_uid()));
|
||||
|
||||
$res = getData($res);
|
||||
|
||||
// get the benutzer object for the lektor of the lv
|
||||
$this->load->model('ressource/Mitarbeiter_model','MitarbeiterModel');
|
||||
$this->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
|
||||
foreach($res as $item){
|
||||
$lektor_obj_array = array();
|
||||
$gruppe_obj_array = array();
|
||||
// load lektor object
|
||||
foreach($item->lektor as $lv_lektor){
|
||||
$this->MitarbeiterModel->addLimit(1);
|
||||
$lektor_obj = $this->MitarbeiterModel->loadWhere(["kurzbz"=>$lv_lektor]);
|
||||
if (isError($lektor_obj)) {
|
||||
$this->outputJsonError(getError($lektor_obj));
|
||||
}
|
||||
$lektor_obj = current(getData($lektor_obj));
|
||||
$lektor_obj_array[] = $lektor_obj;
|
||||
}
|
||||
// load gruppe object
|
||||
foreach ($item->gruppe as $lv_gruppe) {
|
||||
$lv_gruppe = strtr($lv_gruppe,['('=>'',')'=>'','"'=>'']);
|
||||
$lv_gruppe_array = explode(",",$lv_gruppe);
|
||||
list($gruppe,$verband, $semester,$studiengang_kz) = $lv_gruppe_array;
|
||||
$this->LehrverbandModel->addLimit(1);
|
||||
$lehrverband_obj = $this->LehrverbandModel->loadWhere(["gruppe" => $gruppe, "verband" => $verband, "semester" => $semester, "studiengang_kz" => $studiengang_kz]);
|
||||
if (isError($lehrverband_obj)) {
|
||||
$this->outputJsonError(getError($lehrverband_obj));
|
||||
}
|
||||
$lehrverband_obj = current(getData($lehrverband_obj));
|
||||
$gruppe_obj_array[] = $lehrverband_obj;
|
||||
}
|
||||
// studiengangs object
|
||||
$this->load->model('organisation/Studiengang_model','StudiengangModel');
|
||||
$this->StudiengangModel->addLimit(1);
|
||||
$studiengang_object = $this->StudiengangModel->load($item->studiengang_kz);
|
||||
$studiengang_object = current(getData($studiengang_object));
|
||||
$item->studiengang = $studiengang_object;
|
||||
$item->lektor = $lektor_obj_array;
|
||||
$item->gruppe = $gruppe_obj_array;
|
||||
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess($res);
|
||||
}
|
||||
|
||||
@@ -22,20 +22,46 @@ class Reservierung_model extends DB_Model
|
||||
{
|
||||
|
||||
$raum_reservierungen= $this->execReadOnlyQuery("
|
||||
SELECT res.*, mit.kurzbz as person_kurzbz ,
|
||||
CASE
|
||||
WHEN res.verband IS NOT NULL OR res.semester IS NOT NULL THEN
|
||||
CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',res.verband,res.semester)
|
||||
ELSE
|
||||
CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz))
|
||||
END AS stg
|
||||
FROM lehre.vw_reservierung res
|
||||
JOIN public.tbl_mitarbeiter mit ON mit.mitarbeiter_uid=res.uid
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
WHERE res.ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
SELECT ort_kurzbz, studiengang_kz, array_agg(uid) as lektor, stunde, datum, titel, beschreibung, gruppe, gruppe_kurzbz, stg_kurzbz, stg
|
||||
FROM
|
||||
(
|
||||
SELECT res.* ,
|
||||
CASE
|
||||
WHEN res.verband IS NOT NULL OR res.semester IS NOT NULL THEN
|
||||
CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',res.verband,res.semester)
|
||||
ELSE
|
||||
CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz))
|
||||
END AS stg
|
||||
FROM lehre.vw_reservierung res
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
WHERE res.ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
) AS reservierungen
|
||||
GROUP BY ort_kurzbz, studiengang_kz, stunde, datum, titel, beschreibung, gruppe, stg, gruppe_kurzbz, stg_kurzbz
|
||||
", [$ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
return $raum_reservierungen;
|
||||
if(isError($raum_reservierungen)){
|
||||
show_error(getError($raum_reservierungen));
|
||||
}
|
||||
|
||||
$raum_reservierungen = getData($raum_reservierungen) ?? [];
|
||||
|
||||
$this->load->model("ressrouce/Mitarbeiter_model","MitarbeiterModel");
|
||||
foreach($raum_reservierungen as $reservierung){
|
||||
$lektoren_array = array();
|
||||
foreach($reservierung->lektor as $lektor){
|
||||
$this->MitarbeiterModel->addLimit(1);
|
||||
$lektor_obj= $this->MitarbeiterModel->load($lektor);
|
||||
if(isError($lektor_obj)){
|
||||
show_error(getError($lektor_obj));
|
||||
}
|
||||
$lektor_obj = current(getData($lektor_obj));
|
||||
$lektoren_array[] = $lektor_obj;
|
||||
}
|
||||
|
||||
$reservierung->lektor = $lektoren_array;
|
||||
|
||||
}
|
||||
return success($raum_reservierungen);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -145,18 +145,17 @@ class Stundenplan_model extends DB_Model
|
||||
$gruppierteEvents = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
|
||||
unr,datum, stunde,
|
||||
unr,datum, sp.stunde,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
array_agg(DISTINCT gruppen_kurzbz) as gruppen_kurzbz,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz)) as gruppe,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
array_agg(DISTINCT lektor) as lektor,
|
||||
|
||||
ort_kurzbz, studiengang_kz, titel, lehrfach, lehrform, lehrfach_bez
|
||||
ort_kurzbz, titel, lehrfach, lehrform, lehrfach_bez, beginn, ende
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
unr,datum, stunde,
|
||||
unr,datum, sp.stunde,beginn, ende,
|
||||
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
@@ -165,30 +164,84 @@ class Stundenplan_model extends DB_Model
|
||||
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 gruppen_kurzbz,
|
||||
END as gruppen_kuerzel,
|
||||
ort_kurzbz, studiengang_kz, titel,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit,gruppe, verband, semester,stg_kurzbz
|
||||
|
||||
FROM (".$stundenplanViewQuery.") sp
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde
|
||||
|
||||
) as sp
|
||||
|
||||
GROUP BY
|
||||
|
||||
unr, datum, stunde, ort_kurzbz, titel, studiengang_kz, lehrform, lehrfach, lehrfach_bez
|
||||
unr, datum, sp.stunde, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez, beginn, ende
|
||||
|
||||
ORDER BY datum, stunde
|
||||
ORDER BY datum, sp.stunde
|
||||
");
|
||||
|
||||
return $gruppierteEvents;
|
||||
if(isError($gruppierteEvents)){
|
||||
$this->output(getError($gruppierteEvents));
|
||||
}
|
||||
|
||||
$gruppierteEvents = getData($gruppierteEvents) ?? [];
|
||||
|
||||
// get the benutzer object for the lektor of the lv
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
$this->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||
|
||||
foreach ($gruppierteEvents as $item) {
|
||||
$lektor_obj_array = array();
|
||||
$gruppe_obj_array = array();
|
||||
|
||||
// load lektor object
|
||||
foreach ($item->lektor as $lv_lektor) {
|
||||
$this->MitarbeiterModel->addLimit(1);
|
||||
$lektor_object = $this->execReadOnlyQuery("
|
||||
SELECT mitarbeiter_uid, vorname, nachname, kurzbz
|
||||
FROM public.tbl_mitarbeiter
|
||||
JOIN public.tbl_benutzer benutzer ON benutzer.uid = mitarbeiter_uid
|
||||
JOIN public.tbl_person person ON person.person_id = benutzer.person_id
|
||||
WHERE kurzbz = ?",[$lv_lektor]);
|
||||
if (isError($lektor_object)) {
|
||||
$this->show_error(getError($lektor_object));
|
||||
}
|
||||
$lektor_object = current(getData($lektor_object));
|
||||
// only provide needed information of the mitarbeiter object
|
||||
$lektor_obj_array[] = $lektor_object;
|
||||
}
|
||||
|
||||
// load gruppe object
|
||||
foreach ($item->gruppe as $lv_gruppe) {
|
||||
$lv_gruppe = strtr($lv_gruppe, ['(' => '', ')' => '', '"' => '']);
|
||||
$lv_gruppe_array = explode(",", $lv_gruppe);
|
||||
list($gruppe, $verband, $semester, $studiengang_kz, $gruppen_kuerzel) = $lv_gruppe_array;
|
||||
|
||||
$lv_gruppe_object = new stdClass();
|
||||
$lv_gruppe_object->gruppe = $gruppe;
|
||||
$lv_gruppe_object->verband = $verband;
|
||||
$lv_gruppe_object->semester = $semester;
|
||||
$lv_gruppe_object->studiengang_kz = $studiengang_kz;
|
||||
$lv_gruppe_object->kuerzel = $gruppen_kuerzel;
|
||||
|
||||
$gruppe_obj_array[] = $lv_gruppe_object;
|
||||
}
|
||||
|
||||
$item->lektor = $lektor_obj_array;
|
||||
$item->gruppe = $gruppe_obj_array;
|
||||
}
|
||||
|
||||
return success($gruppierteEvents);
|
||||
}
|
||||
|
||||
/**
|
||||
* NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific student within the current semester.
|
||||
* @param string $uid the user id that is used to fetch the stundenplan rows from the lehre.vw_studenplan table
|
||||
* @param string $uid the user id that is used to fetch the stundenplan rows from the lehre.vw_stundenplan table
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getStudenPlanQuery($uid){
|
||||
public function getStundenPlanQuery($uid){
|
||||
return
|
||||
"select sp.*
|
||||
from lehre.vw_stundenplan sp
|
||||
|
||||
@@ -1073,7 +1073,7 @@ class lehrstunde extends basis_db
|
||||
}
|
||||
|
||||
/**
|
||||
* Holt Studenplandaten.
|
||||
* Holt Stundenplandaten.
|
||||
*
|
||||
* @param $db_stpl_table
|
||||
* @param null $lehrveranstaltung_id
|
||||
|
||||
@@ -123,7 +123,7 @@ class wochenplan extends basis_db
|
||||
}
|
||||
|
||||
/**
|
||||
* initialisiert den Studenplan
|
||||
* initialisiert den Stundenplan
|
||||
*
|
||||
*/
|
||||
public function init_stdplan()
|
||||
|
||||
@@ -22,7 +22,7 @@ import filter from "./filter.js";
|
||||
import studstatus from "./studstatus.js";
|
||||
import profil from "./profil.js";
|
||||
import profilUpdate from "./profilUpdate.js";
|
||||
import stundenplan from "./studenplan.js";
|
||||
import stundenplan from "./stundenplan.js";
|
||||
|
||||
export default {
|
||||
search,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
export default {
|
||||
getRoomInfo(ort_kurzbz, start_date, end_date) {
|
||||
return this.$fhcApi.get(
|
||||
'/api/frontend/v1/Stundenplan/roomInformation',
|
||||
'/api/frontend/v1/Stundenplan/getRoomplan',
|
||||
{ ort_kurzbz, start_date, end_date}
|
||||
);
|
||||
},
|
||||
@@ -17,7 +17,7 @@ export default{
|
||||
stunden: [],
|
||||
events: null,
|
||||
calendarWeek: new CalendarDate(new Date()),
|
||||
events_loaded:false,
|
||||
|
||||
}
|
||||
},
|
||||
computed:{
|
||||
@@ -36,6 +36,7 @@ export default{
|
||||
this.calendarWeek = new CalendarDate(data.start);
|
||||
Vue.nextTick(() => {
|
||||
this.loadRoomEvents();
|
||||
//this.loadReservierungen();
|
||||
});
|
||||
},
|
||||
|
||||
@@ -56,9 +57,37 @@ export default{
|
||||
});
|
||||
},
|
||||
|
||||
loadRoomEvents: function(){
|
||||
this.$fhcApi.factory.stundenplan.getRoomInfo(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay).then(res => {
|
||||
let events;
|
||||
loadRoomEvents: async function () {
|
||||
await this.$fhcApi.factory.stundenplan.getRoomInfo(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay).then(res => {
|
||||
|
||||
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;
|
||||
});
|
||||
if (this.events){
|
||||
this.events = [...this.events, ...res.data];
|
||||
}else{
|
||||
this.events = res.data;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
loadReservierungen: async function () {
|
||||
await this.$fhcApi.factory.stundenplan.getReservierungen(this.ort_kurzbz, this.weekFirstDay, this.weekLastDay).then(res => {
|
||||
if (res.data && res.data.forEach) {
|
||||
res.data.forEach((el, i) => {
|
||||
|
||||
@@ -76,33 +105,36 @@ export default{
|
||||
el.title += '-' + el.lehrform;
|
||||
});
|
||||
|
||||
this.events = res.data;
|
||||
if (this.events) {
|
||||
this.events = [...this.events, ...res.data];
|
||||
} else {
|
||||
this.events = res.data;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
async mounted() {
|
||||
|
||||
this.loadStunden();
|
||||
this.loadRoomEvents();
|
||||
this.loadReservierungen();
|
||||
|
||||
},
|
||||
template: /*html*/`
|
||||
<div>
|
||||
<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+']'" >
|
||||
<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" >
|
||||
|
||||
|
||||
<!-- render content for stundenplan -->
|
||||
<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>
|
||||
<span v-for="gruppe_kurzbz in event.orig.gruppen_kurzbz" >{{gruppe_kurzbz}}</span>
|
||||
<span v-for="lektor in event.orig.lektor" >{{lektor.kurzbz}}</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>
|
||||
|
||||
Reference in New Issue
Block a user