feature(Studium LvModal): checks whether the lv has stundenplan entries and disables menu option if not/ checks the lvevaluierung information and adds it to the lvmodal information

This commit is contained in:
SimonGschnell
2025-05-07 11:03:12 +02:00
parent b5d3bf3f1e
commit 7d095b4998
6 changed files with 93 additions and 11 deletions
@@ -17,6 +17,9 @@
*/
if (! defined('BASEPATH')) exit('No direct script access allowed');
use CI3_Events as Events;
class Studium extends FHCAPI_Controller
{
@@ -29,6 +32,7 @@ class Studium extends FHCAPI_Controller
'getStudienAllSemester'=> self::PERM_LOGGED,
'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED,
'getStudienplaeneBySemester'=> self::PERM_LOGGED,
'getLvEvaluierungInfo'=> self::PERM_LOGGED,
]);
$this->load->model('crm/Student_model', 'StudentModel');
@@ -173,6 +177,14 @@ class Studium extends FHCAPI_Controller
$this->terminateWithSuccess($result);
}
public function getLvEvaluierungInfo($studiensemester_kurzbz, $lehrveranstaltung_id){
$result = [];
Events::trigger('lvEvaluierungsInfo', function & () use (&$result) {
return $result;
},$lehrveranstaltung_id, $studiensemester_kurzbz);
$this->terminateWithSuccess($result);
}
public function getStudiengaengeForStudienSemester($studiensemester){
$studiengaenge = $this->computeStudiengaenge($studiensemester);
$this->terminateWithSuccess($studiengaenge);
@@ -259,6 +271,8 @@ class Studium extends FHCAPI_Controller
},$lektoren);
return $lektoren;
}
}
@@ -36,6 +36,7 @@ class Stundenplan extends FHCAPI_Controller
'StundenplanEvents' => self::PERM_LOGGED,
'getLehreinheitStudiensemester' => self::PERM_LOGGED,
'studiensemesterDateInterval' => self::PERM_LOGGED,
'getLvStundenplanForStudiensemester' => self::PERM_LOGGED,
]);
$this->load->library('LogLib');
@@ -85,11 +86,6 @@ class Stundenplan extends FHCAPI_Controller
{
$stundenplan_events = array();
}
else
{
$stundenplan_events = $this->getDataOrTerminateWithError($stundenplan_events);
}
// fetching moodle events
$moodle_start_date = new DateTime($start_date);
$moodle_start_date = $moodle_start_date->getTimestamp();
@@ -154,6 +150,19 @@ class Stundenplan extends FHCAPI_Controller
$studiensemester =current($this->getDataOrTerminateWithError($studiensemester));
$this->terminateWithSuccess($studiensemester);
}
public function getLvStundenplanForStudiensemester($studiensemester,$lvid){
$this->load->library('StundenplanLib');
$this->load->model('organisation/Studiensemester_model','StudiensemesterModel');
$studiensemester_result = $this->StudiensemesterModel->loadWhere(["studiensemester_kurzbz"=>$studiensemester]);
$studiensemester_result = current($this->getDataOrTerminateWithError($studiensemester_result));
$timespan_start = new DateTime($studiensemester_result->start);
$timespan_ende = new DateTime($studiensemester_result->ende);
$stundenplan = $this->stundenplanlib->getStundenplan(date_format($timespan_start, 'Y-m-d'),date_format($timespan_ende, 'Y-m-d'), $lvid);
$this->terminateWithSuccess($stundenplan);
}
/**
+15
View File
@@ -29,4 +29,19 @@ export default {
}
);
},
getLvStundenplanForStudiensemester: function (studiensemester, lvid) {
return this.$fhcApi.get(
`/api/frontend/v1/Stundenplan/getLvStundenplanForStudiensemester/${studiensemester}/${lvid}`,
{
}
);
},
getLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {
return this.$fhcApi.get(
`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,
{
}
);
},
}
+8
View File
@@ -7,6 +7,11 @@ export default {
},
containerStyles: Array,
rowStyles: Array,
hasLvStundenplanEintraege: {
required:false,
default:true,
type:Boolean,
},
},
data(){
return{
@@ -18,6 +23,9 @@ export default {
if (!this.c4_link(menuItem) && !menuItem.c4_moodle_links?.length) {
return true;
}
if (menuItem.id == "addon_fhtw_menu_lvplan_lva" && !this.hasLvStundenplanEintraege){
return true;
}
return null;
},
c4_target: function (menuItem) {
+30 -4
View File
@@ -33,7 +33,8 @@ export default {
result: false,
menu: [],
isMenuSelected:false,
hasLvStundenplanEintraege: true,
lvEvaluierungMessage: "",
}
},
mixins:[BsModal],
@@ -41,6 +42,7 @@ export default {
BsModal,
LvMenu,
},
inject: ["studium_studiensemester"],
methods:{
hiddenModal: function(){
@@ -58,9 +60,32 @@ export default {
} else {
this.isMenuSelected = true;
}
// check lv evaluierung info
if (this.studium_studiensemester) {
this.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)
.then(data => data.data)
.then(res => {
this.lvEvaluierungMessage = res.message;
})
}
// check if the lv has stundenplan entries for this studiensemester
if (this.studiensemester && this.event) {
return this.$fhcApi.factory.studium.getLvStundenplanForStudiensemester(this.studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)
.then(data => data.data)
.then(res => {
if (Array.isArray(res) && res.length > 0) {
this.hasLvStundenplanEintraege = true;
} else {
this.hasLvStundenplanEintraege = false;
}
});
}
},
},
mounted(){
mounted(){
this.modal = this.$refs.modalContainer;
},
beforeUnmount(){
@@ -68,7 +93,7 @@ export default {
},
template:/*html*/`
<bs-modal :bodyClass="isMenuSelected ? '' : 'px-4 py-5'" @showBsModal="showModal" @hiddenBsModal="hiddenModal" ref="modalContainer" :dialogClass="{'modal-lg': !isMenuSelected, 'modal-fullscreen':isMenuSelected}">
<template #title>
<template v-if="titel">
<span>{{titel}}</span>
@@ -80,8 +105,9 @@ export default {
</template>
<template #default>
<div class="mb-4" v-if="lvEvaluierungMessage" v-html="lvEvaluierungMessage"></div>
<slot name="content"></slot>
<lv-menu v-model:isMenuSelected="isMenuSelected" :preselectedMenu="preselectedMenu" :menu="menu" @hideModal="hide"></lv-menu>
<lv-menu v-model:isMenuSelected="isMenuSelected" :hasLvStundenplanEintraege="hasLvStundenplanEintraege" :preselectedMenu="preselectedMenu" :menu="menu" @hideModal="hide"></lv-menu>
</template>
</bs-modal>
+12 -2
View File
@@ -17,6 +17,15 @@ export default {
menu:null,
}
},
provide(){
return {
studium_studiengang : Vue.computed(()=> this.selectedStudiengang),
studium_studiensemester: Vue.computed(() => this.selectedStudiensemester),
studium_semester: Vue.computed(() => this.selectedSemester),
studium_studienordnung: Vue.computed(() => this.selectedStudienordnung),
}
},
components: {
LvUebersicht,
},
@@ -116,10 +125,11 @@ export default {
//convert lehrveranstaltung properties for compatibility with Stundenplan LvModal
this.selectedLehrveranstaltung.type ="lehreinheit";
this.selectedLehrveranstaltung.lehreinheit_id = this.selectedLehrveranstaltung.lehrveranstaltung_id;
if(this.selectedLehrveranstaltung)
if(this.selectedLehrveranstaltung){
Vue.nextTick(()=>{
this.$refs.lvUebersicht.show();
})
}
},
sortStudienSemester(studienSemester){
@@ -196,7 +206,7 @@ export default {
this.$fhcApi.factory.studium.getAllStudienSemester(studiensemester, studiengang, semester, studienordnung)
.then(data => data.data)
.then(res => {
this. extractPropertyValues(res);
this.extractPropertyValues(res);
})
},