diff --git a/application/controllers/Cis/Studium.php b/application/controllers/Cis/Studium.php new file mode 100644 index 000000000..a298de648 --- /dev/null +++ b/application/controllers/Cis/Studium.php @@ -0,0 +1,40 @@ + ['basis/cis:r'], + + ]); + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + + + /** + * index loads the Studium view + * @access public + * @return void + */ + public function index() + { + $viewData = array( + + ); + $this->load->view('CisRouterView/CisRouterView.php',['viewData' => $viewData, 'route' => 'studium']); + } + + + +} diff --git a/application/controllers/api/frontend/v1/Studium.php b/application/controllers/api/frontend/v1/Studium.php new file mode 100644 index 000000000..7541a823b --- /dev/null +++ b/application/controllers/api/frontend/v1/Studium.php @@ -0,0 +1,217 @@ +. + */ + +if (! defined('BASEPATH')) exit('No direct script access allowed'); +class Studium extends FHCAPI_Controller +{ + + /** + * Object initialization + */ + public function __construct() + { + parent::__construct([ + 'getStudienAllSemester'=> self::PERM_LOGGED, + 'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED, + 'getStudienplaeneBySemester'=> self::PERM_LOGGED, + ]); + + $this->load->model('crm/Student_model', 'StudentModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $this->load->model('organisation/Studienordnung_model','StudienordnungModel'); + $this->load->model('organisation/Studiensemester_model',"StudiensemesterModel"); + $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->load->model('codex/Orgform_model','OrgformModel'); + + + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + public function getStudienAllSemester(){ + + $parameter_studiensemester = $this->input->get('studiensemester',true); + $parameter_studiengang = $this->input->get('studiengang',true); + $parameter_semester = $this->input->get('semester',true); + $parameter_studienplan = $this->input->get('studienplan',true); + + $test1=null; + $test2=null; + $test3=null; + $test4=null; + + if(isset($parameter_studiensemester)){ + $parameter_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->loadWhere(["studiensemester_kurzbz" => $parameter_studiensemester]))); + } + + if(isset($parameter_studiengang)){ + $parameter_studiengang = current($this->getDataOrTerminateWithError($this->StudiengangModel->loadWhere(["studiengang_kz" => $parameter_studiengang]))); + } + + if(isset($parameter_studienplan)){ + $this->StudienplanModel->addJoin("lehre.tbl_studienordnung", "studienordnung_id"); + $this->StudienplanModel->addJoin("lehre.tbl_studienplan_semester", "studienplan_id"); + $parameter_studienplan = $this->StudienplanModel->loadWhere(["studienplan_id" => $parameter_studienplan, "aktiv" => TRUE]); + $parameter_studienplan = current($this->getDataOrTerminateWithError($parameter_studienplan)); + } + + // fetch studiensemester + $allStudienSemester = $this->getDataOrTerminateWithError($this->StudiensemesterModel->load()); + + $aktuelles_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->getAkt())); + if(isset($parameter_studiensemester) && !empty(array_filter($allStudienSemester, function($studiensemester) use($parameter_studiensemester){ + return $studiensemester->studiensemester_kurzbz == $parameter_studiensemester->studiensemester_kurzbz; + }))){ + $test1=true; + $aktuelles_studiensemester = $parameter_studiensemester; + } + + // fetch studiengaenge + $studiengaenge = $this->computeStudiengaenge($aktuelles_studiensemester->studiensemester_kurzbz); + $aktuelles_studiengang = current($studiengaenge); + if(!$aktuelles_studiengang){ + $aktuelles_studiengang = null; + } + if(isset($parameter_studiengang) && !empty(array_filter( $studiengaenge,function($studiengang)use($parameter_studiengang){ + return $studiengang->studiengang_kz == $parameter_studiengang->studiengang_kz; + }))){ + $test2=true; + $aktuelles_studiengang = $parameter_studiengang; + } + + // compute semester and studienplaene + if($aktuelles_studiengang){ + $studienplaene = $this->computeStudienplaene($aktuelles_studiengang->studiengang_kz, $aktuelles_studiensemester->studiensemester_kurzbz); + }else{ + $studienplaene =[]; + } + + $semester = array_values(array_unique(array_map(function($item){ + return $item->semester; + }, $studienplaene))); + $aktuelles_semester = current($semester); + if(!$aktuelles_semester){ + $aktuelles_semester = null; + } + if(isset($parameter_semester) && in_array($parameter_semester, $semester)){ + $test3=true; + $aktuelles_semester = $parameter_semester; + } + + $semester_studienplan = array_filter($studienplaene, function($item) use($aktuelles_semester){ + return $item->semester == $aktuelles_semester; + }); + + // fetch current studienplan based on semester + $aktuelles_studienplan = current($semester_studienplan); + if(!$aktuelles_studienplan){ + $aktuelles_studienplan = null; + } + if(isset($parameter_studienplan) && !empty(array_filter( $semester_studienplan, function($stundenplan) use($parameter_studienplan){ + return $stundenplan->studienplan_id == $parameter_studienplan->studienplan_id; + }))){ + $test4=true; + $aktuelles_studienplan = $parameter_studienplan ; + } + + // result object + $result = new stdClass(); + $result->studienSemester = []; + $result->studienSemester["all"]= $allStudienSemester; + $result->studienSemester["preselected"]=$aktuelles_studiensemester; + $result->studiengang["all"]=$studiengaenge; + $result->studiengang["preselected"]=$aktuelles_studiengang; + $result->semester["all"] =$semester; + $result->semester["preselected"] =$aktuelles_semester; + $result->studienplan["all"]=$semester_studienplan; + $result->studienplan["preselected"]=$aktuelles_studienplan; + $result->test1=$test1; + $result->test2=$test2; + $result->test3=$test3; + $result->test4=$test4; + + /* if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){ + $studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester_kz]); + $studentLehrverband = current($this->getDataOrTerminateWithError($studentLehrverband)); + $result->studentLehrverband = $studentLehrverband; + //$currentStudienplan = $this->StudienplanModel->loadWhere(["studiengang_kz"=>$studentLehrverband->studiengang_kz,"semester"=>$studentLehrverband->semester, "verband"=>$studentLehrverband->verband, "gruppe"=>$studentLehrverband->gruppe]); + $studienplaene = $this->getDataOrTerminateWithError($this->computeStudienplaene($studentLehrverband->studiengang_kz, $studentLehrverband->studiensemester_kurzbz)); + $result->studienPleane = $studienplaene; + + //get the studienplan for the user + $preselectedStudienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId()); + + //set the preselected semester + $preselectedSemester = $preselectedStudienplan->semester; + + //get the studienordnung for the studienplan + $preselectedStudienordnung = $this->getStudienOrdnungForStudienplan($preselectedStudienplan->studienplan_id); + + } */ + $this->terminateWithSuccess($result); + } + + public function getStudiengaengeForStudienSemester($studiensemester){ + $studiengaenge = $this->computeStudiengaenge($studiensemester); + $this->terminateWithSuccess($studiengaenge); + } + + public function getStudienplaeneBySemester(){ + $this->load->library('form_validation'); + $this->form_validation->set_data($this->input->get()); + $this->form_validation->set_rules('studiengang', 'studiengang', 'required'); + $this->form_validation->set_rules('studiensemester', 'studiensemester', 'required'); + if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array()); + + $studiengang = $this->input->get('studiengang',true); + $studiensemester = $this->input->get('studiensemester',true); + $studienplaene = $this->computeStudienplaene($studiengang, $studiensemester); + $this->terminateWithSuccess($studienplaene); + } + + //------------------------------------------------------------------------------------------------------------------ + // Private methods + + private function computeStudienplaene($studiengang, $studiensemester){ + $studienplaene = $this->StudienplanModel->getStudienplaeneBySemester($studiengang, $studiensemester); + $studienplaene = $this->getDataOrTerminateWithError($studienplaene); + $studienplaene = array_map(function($studienplan){ + $orgform = current($this->getDataOrTerminateWithError($this->OrgformModel->loadWhere(["orgform_kurzbz" => $studienplan->orgform_kurzbz]))); + $studienplan->orgform_bezeichnung = $orgform->bezeichnung; + return $studienplan; + },$studienplaene); + return $studienplaene; + } + + private function computeStudiengaenge($studiensemester){ + $studiengang_studiensemester_result = $this->StudiengangModel->getStudiengaengeByStudiensemester($studiensemester); + $studiengang_studiensemester_result = $this->getDataOrTerminateWithError($studiengang_studiensemester_result); + return $studiengang_studiensemester_result; + } + + private function getStudienPlanFromPrestudentStatus($person_id){ + $studienplan_id = current($this->getDataOrTerminateWithError($this->PrestudentstatusModel->getLastStatusPerson($person_id)))->studienplan_id; + $studienplan =current($this->getDataOrTerminateWithError($this->StudienplanModel->loadWhere(["studienplan_id"=>$studienplan_id]))); + return $studienplan; + } + +} + diff --git a/public/js/api/fhcapifactory.js b/public/js/api/fhcapifactory.js index fe90a73fc..0b7b6631c 100644 --- a/public/js/api/fhcapifactory.js +++ b/public/js/api/fhcapifactory.js @@ -37,6 +37,7 @@ import studiengang from "./studiengang.js"; import menu from "./menu.js"; import dashboard from "./dashboard.js"; import authinfo from "./authinfo.js"; +import studium from "./studium.js"; export default { search, @@ -60,5 +61,6 @@ export default { addons, studiengang, menu, - authinfo + authinfo, + studium, }; diff --git a/public/js/api/studium.js b/public/js/api/studium.js new file mode 100644 index 000000000..1789c449d --- /dev/null +++ b/public/js/api/studium.js @@ -0,0 +1,33 @@ +export default { + + getStudiensemester: function () { + return this.$fhcApi.get( + '/components/Cis/Mylv/Studiensemester', + {} + ); + }, + + getAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) { + console.log(studiensemester, studiengang, semester, studienplan) + return this.$fhcApi.get( + '/api/frontend/v1/Studium/getStudienAllSemester', + {studiensemester, studiengang, semester, studienplan} + ); + }, + + getStudiengaengeForStudienSemester: function (studiensemester) { + return this.$fhcApi.get( + `/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`, + {} + ); + }, + getStudienplaeneBySemester: function (studiengang, studiensemester) { + return this.$fhcApi.get( + `/api/frontend/v1/Studium/getStudienplaeneBySemester`, + { + studiengang, + studiensemester, + } + ); + }, +} \ No newline at end of file diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js index 5e6b006b9..fc25fbdfe 100644 --- a/public/js/apps/Dashboard/Fhc.js +++ b/public/js/apps/Dashboard/Fhc.js @@ -13,14 +13,19 @@ import RoomInformation, {DEFAULT_MODE_RAUMINFO} from "../../components/Cis/Mylv/ import AbgabetoolStudent from "../../components/Cis/Abgabetool/AbgabetoolStudent.js"; import AbgabetoolMitarbeiter from "../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js"; import DeadlineOverview from "../../components/Cis/Abgabetool/DeadlineOverview.js"; - - +import Studium from "../../components/Cis/Studium/Studium.js"; const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router; const router = VueRouter.createRouter({ history: VueRouter.createWebHistory(`/${ciPath}`), routes: [ + { + path: `/Cis/Studium`, + name: 'Studium', + component: Studium, + props: true + }, { path: `/Cis/Profil/View/:uid`, name: 'ProfilView', diff --git a/public/js/components/Cis/Studium/Studium.js b/public/js/components/Cis/Studium/Studium.js new file mode 100644 index 000000000..94a012fc9 --- /dev/null +++ b/public/js/components/Cis/Studium/Studium.js @@ -0,0 +1,194 @@ +export default { + data(){ + return { + studienSemester :[], + selectedStudiensemester: null, + studiengaenge:[], + selectedStudiengang:null, + studienOrdnung: [], + selectedStudienordnung: null, + semester:[], + selectedSemester:null, + } + }, + methods:{ + changeSelectedStudienSemester(studiensemester) { + this.$fhcApi.factory.studium.getAllStudienSemester(studiensemester.studiensemester_kurzbz, this.selectedStudiengang, this.selectedSemester, this.selectedStudienordnung) + .then(data => data.data) + .then(res => { + this.extractPropertyValues(res); + }) + }, + changeSelectedStudienGang(studiengang) { + this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, studiengang.studiengang_kz, this.selectedSemester, this.selectedStudienordnung) + .then(data => data.data) + .then(res => { + this.extractPropertyValues(res); + }) + }, + changeSelectedSemester(semester) { + this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, semester, this.selectedStudienordnung) + .then(data => data.data) + .then(res => { + this.extractPropertyValues(res); + }) + }, + changeSelectedStudienPlan(studienplan) { + this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, this.selectedSemester, studienplan.studienplan_id) + .then(data => data.data) + .then(res => { + this.extractPropertyValues(res); + }) + }, + /* loadStudienplan(studiengang, studiensemester){ + this.$fhcApi.factory.studium.getStudienplaeneBySemester(studiengang, studiensemester) + .then(data => data.data) + .then(res => { + console.log("This is the result", res) + }) + }, */ + sortStudienSemester(studienSemester){ + let regex = new RegExp(/^(WS|SS)([0-9]{4})/); + studienSemester.sort((sem1,sem2)=>{ + let [sem1Match, sem1Semester, sem1Year] = sem1.studiensemester_kurzbz.match(regex); + let [sem2Match, sem2Semester, sem2Year] = sem2.studiensemester_kurzbz.match(regex); + if(sem1Year == sem2Year){ + return sem1Semester > sem2Semester? -1:1; + } + return sem1Year > sem2Year? -1:1; + }) + }, + setHash(val) { + // TODO: make this a router param to enable history + location.hash = val; + }, + extractPropertyValues(res){ + let { studienSemester, studiengang, semester, studienplan } = res; + this.sortStudienSemester(studienSemester.all); + this.studienSemester = studienSemester.all; + this.selectedStudiensemester = studienSemester.preselected.studiensemester_kurzbz; + + this.studiengaenge = studiengang.all; + this.selectedStudiengang = studiengang.preselected?.studiengang_kz; + + this.semester = semester.all; + this.selectedSemester = semester?.preselected; + + console.log(studienplan.all,"all studienplan") + this.studienOrdnung = studienplan.all; + console.log(this.studienOrdnung,"studienordnung") + this.selectedStudienordnung = studienplan.preselected?.studienplan_id; + }, + studienordnungTitel(studienordnung){ + if(!studienordnung) return ""; + return `${studienordnung?.bezeichnung}-${studienordnung?.orgform_kurzbz} ( ${studienordnung?.orgform_bezeichnung}, ${studienordnung?.sprache} )`; + }, + studiengangTitel(studiengang) { + if (!studiengang) return ""; + return `${studiengang?.kurzbzlang} (${studiengang?.bezeichnung})`; + }, + studiensemesterTitel(studiensemester){ + if (!studiensemester) return ""; + let studiensemester_regex = new RegExp(/^(WS|SS)([0-9]{4})/); + let match = studiensemester.match(studiensemester_regex); + switch(match[1]){ + case "WS": + return `Wintersemester ${match[2]}`; + case "SS": + return `Sommersemester ${match[2]}`; + default: + return `${studiensemester}`; + } + } + }, + + computed:{ + + }, + + created(){ + this.$fhcApi.factory.studium.getAllStudienSemester() + .then(data => data.data) + .then(res => { + this. extractPropertyValues(res); + }) + }, + /* selectedStudiensemester(newStudiensemester, oldStudiensemester) { + if (newStudiensemester !== oldStudiensemester) { + this.$fhcApi.factory.studium.getAllStudienSemester(newStudiensemester, this.selectedStudiengang, this.selectedSemester) + .then(data => data.data) + .then(res => { + this.extractPropertyValues(res); + }) + } + }, + selectedStudiengang(newStudiengang, oldStudiengang) { + if (newStudiengang !== oldStudiengang) { + this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, newStudiengang, this.selectedSemester) + .then(data => data.data) + .then(res => { + this.extractPropertyValues(res); + }) + } + }, + selectedSemester(newSemester, oldSemester) { + if (newSemester !== oldSemester) { + this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, newSemester) + .then(data => data.data) + .then(res => { + this.extractPropertyValues(res); + }) + } + } */ + template: ` +