diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index 42de1b02f..e0d9daf26 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -128,6 +128,11 @@ class Config extends FHCAPI_Controller 'component' => './Stv/Studentenverwaltung/Details/Mobility.js' ]; + $result['jointstudies'] = [ + 'title' => $this->p->t('stv', 'tab_jointstudies'), + 'component' => './Stv/Studentenverwaltung/Details/JointStudies.js' + ]; + Events::trigger('stv_conf_student', function & () use (&$result) { return $result; }); diff --git a/application/controllers/api/frontend/v1/stv/GemeinsameStudien.php b/application/controllers/api/frontend/v1/stv/GemeinsameStudien.php new file mode 100644 index 000000000..dbf9efce1 --- /dev/null +++ b/application/controllers/api/frontend/v1/stv/GemeinsameStudien.php @@ -0,0 +1,283 @@ + ['admin:r', 'assistenz:r'], + 'loadStudie' => ['admin:r', 'assistenz:r'], + 'insertStudie' => ['admin:rw', 'assistenz:rw'], + 'updateStudie' => ['admin:rw', 'assistenz:rw'], + 'deleteStudie' => ['admin:rw', 'assistenz:rw'], + 'getProgramsStudien' => ['admin:r', 'assistenz:r'], + 'getTypenMobility' => ['admin:r', 'assistenz:r'], + 'getStudiensemester' => ['admin:r', 'assistenz:r'], + 'getStudienprogramme' => ['admin:r', 'assistenz:r'], + 'getPartnerfirmen' => ['admin:r', 'assistenz:r'], + 'getStatiPrestudent' => ['admin:r', 'assistenz:r'], + ]); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + $this->load->library('form_validation'); + + // Load language phrases + $this->loadPhrases([ + 'ui', + 'jointstudies' + ]); + + // Load models + $this->load->model('codex/Mobilitaet_model', 'MobilitaetModel'); + + //TODO(check if additional Permissions necessary): 'student/stammdaten' + } + + public function getStudien($prestudent_id) + { + $this->MobilitaetModel->addSelect('mobilitaet_id'); + $this->MobilitaetModel->addSelect('mobilitaetstyp_kurzbz'); + $this->MobilitaetModel->addSelect('prestudent_id'); + $this->MobilitaetModel->addSelect('studiensemester_kurzbz'); + $this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.mobilitaetsprogramm_code'); + $this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.gsprogramm_id'); + $this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.firma_id'); + $this->MobilitaetModel->addSelect('status_kurzbz'); + $this->MobilitaetModel->addSelect('ausbildungssemester'); + $this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.insertvon'); + $this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.insertamum'); + $this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.updatevon'); + $this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.updateamum'); + $this->MobilitaetModel->addSelect('mp.kurzbz'); + $this->MobilitaetModel->addSelect('gp.gsprogrammtyp_kurzbz'); + $this->MobilitaetModel->addSelect('gp.bezeichnung as studienprogramm'); + $this->MobilitaetModel->addSelect('f.name as partner'); + + $this->MobilitaetModel->addJoin('bis.tbl_mobilitaetsprogramm mp', 'ON (mp.mobilitaetsprogramm_code = bis.tbl_mobilitaet.mobilitaetsprogramm_code)', 'LEFT'); + $this->MobilitaetModel->addJoin('bis.tbl_gsprogramm gp', 'ON (gp.gsprogramm_id = bis.tbl_mobilitaet.gsprogramm_id)', 'LEFT'); + $this->MobilitaetModel->addJoin('public.tbl_firma f', 'ON (f.firma_id = bis.tbl_mobilitaet.firma_id)', 'LEFT'); + + $result = $this->MobilitaetModel->loadWhere([ + 'prestudent_id' => $prestudent_id, + ]); + + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function getTypenMobility() + { + $this->load->model('codex/Mobilitaetstyp_model', 'MobilitaetstypModel'); + + $result = $this->MobilitaetstypModel->load(); + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function getStudiensemester() + { + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + $this->StudiensemesterModel->addOrder('studienjahr_kurzbz', 'DESC'); + $result = $this->StudiensemesterModel->load(); + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function getStudienprogramme() + { + $this->load->model('codex/Gsprogramm_model', 'GsprogrammModel'); + + $result = $this->GsprogrammModel->load(); + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function getPartnerfirmen() + { + $this->load->model('ressource/Firma_model', 'FirmaModel'); + + $result = $this->FirmaModel->loadWhere( + ['partner_code !=' => null] + ); + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function getStatiPrestudent() + { + $this->load->model('crm/Status_model', 'StatusModel'); + + $result = $this->StatusModel->load(); + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function loadStudie($mobilitaet_id) + { + $result = $this->MobilitaetModel->load($mobilitaet_id); + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess(current($data)); + } + + public function insertStudie() + { + $this->load->library('form_validation'); + $authUID = getAuthUID(); + + $prestudent_id = $this->input->post('prestudent_id'); + if(!$prestudent_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL); + } + + $formData = $this->input->post('formData'); + $_POST['ausbildungssemester'] = (isset($formData['ausbildungssemester']) && !empty($formData['ausbildungssemester'])) + ? $formData['ausbildungssemester'] + : null; + $_POST['mobilitaetstyp_kurzbz'] = (isset($formData['mobilitaetstyp_kurzbz']) && !empty($formData['mobilitaetstyp_kurzbz'])) + ? $formData['mobilitaetstyp_kurzbz'] + : null; + $_POST['studiensemester_kurzbz'] = (isset($formData['studiensemester_kurzbz']) && !empty($formData['studiensemester_kurzbz'])) + ? $formData['studiensemester_kurzbz'] : null; + + $this->form_validation->set_rules('mobilitaetstyp_kurzbz', 'Typ', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ']) + ]); + + $this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester']) + ]); + + $this->form_validation->set_rules('ausbildungssemester', 'Ausbildungssemester', 'required|numeric', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausbildungssemester']), + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ausbildungssemester']), + ]); + + if ($this->form_validation->run() == false) + { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + + $status_kurzbz = (isset($formData['status_kurzbz']) && !empty($formData['status_kurzbz'])) + ? $formData['status_kurzbz'] + : null; + $mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) + ? $formData['mobilitaetsprogramm_code'] + : null; + $gsprogramm_id = (isset($formData['gsprogramm_id']) && !empty($formData['gsprogramm_id'])) + ? $formData['gsprogramm_id'] + : null; + $firma_id= (isset($formData['firma_id']) && !empty($formData['firma_id'])) ? $formData['firma_id'] : null; + + $result = $this->MobilitaetModel->insert([ + 'prestudent_id' => $prestudent_id, + 'mobilitaetstyp_kurzbz' => $_POST['mobilitaetstyp_kurzbz'], + 'status_kurzbz' => $status_kurzbz, + 'studiensemester_kurzbz' => $_POST['studiensemester_kurzbz'], + 'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code, + 'gsprogramm_id' => $gsprogramm_id, + 'firma_id' => $firma_id, + 'ausbildungssemester' => $_POST['ausbildungssemester'], + 'insertvon' => $authUID, + 'insertamum' => date('c'), + ]); + + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function updateStudie() + { + $this->load->library('form_validation'); + $authUID = getAuthUID(); + + $prestudent_id = $this->input->post('prestudent_id'); + if(!$prestudent_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL); + } + + $formData = $this->input->post('formData'); + + $_POST['mobilitaet_id'] = (isset($formData['mobilitaet_id']) && !empty($formData['mobilitaet_id'])) + ? $formData['mobilitaet_id'] : + $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Mobilitaet ID']), self::ERROR_TYPE_GENERAL); + $_POST['ausbildungssemester'] = (isset($formData['ausbildungssemester']) && !empty($formData['ausbildungssemester'])) + ? $formData['ausbildungssemester'] + : null; + $_POST['mobilitaetstyp_kurzbz'] = (isset($formData['mobilitaetstyp_kurzbz']) && !empty($formData['mobilitaetstyp_kurzbz'])) + ? $formData['mobilitaetstyp_kurzbz'] + : null; + $_POST['studiensemester_kurzbz'] = (isset($formData['studiensemester_kurzbz']) && !empty($formData['studiensemester_kurzbz'])) + ? $formData['studiensemester_kurzbz'] + : null; + + $this->form_validation->set_rules('mobilitaetstyp_kurzbz', 'Typ', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ']) + ]); + + $this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester']) + ]); + + $this->form_validation->set_rules('ausbildungssemester', 'Ausbildungssemester', 'required|numeric', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausbildungssemester']), + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ausbildungssemester']), + ]); + + if ($this->form_validation->run() == false) + { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + + $status_kurzbz = (isset($formData['status_kurzbz']) && !empty($formData['status_kurzbz'])) ? $formData['status_kurzbz'] : null; + $mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) + ? $formData['mobilitaetsprogramm_code'] + : null; + $gsprogramm_id = (isset($formData['gsprogramm_id']) && !empty($formData['gsprogramm_id'])) + ? $formData['gsprogramm_id'] + : null; + $firma_id= (isset($formData['firma_id']) && !empty($formData['firma_id'])) ? $formData['firma_id'] : null; + + $result = $this->MobilitaetModel->update( + [ + 'mobilitaet_id' => $_POST['mobilitaet_id'], + ], + [ + 'prestudent_id' => $prestudent_id, + 'mobilitaetstyp_kurzbz' => $_POST['mobilitaetstyp_kurzbz'], + 'status_kurzbz' => $status_kurzbz, + 'studiensemester_kurzbz' => $_POST['studiensemester_kurzbz'], + 'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code, + 'gsprogramm_id' => $gsprogramm_id, + 'firma_id' => $firma_id, + 'ausbildungssemester' => $_POST['ausbildungssemester'], + 'updatevon' => $authUID, + 'updateamum' => date('c'), + ] + ); + + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } + + public function deleteStudie($mobilitaet_id) + { + if(!$mobilitaet_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Mobilität ID']), self::ERROR_TYPE_GENERAL); + } + $result = $this->MobilitaetModel->delete( + array('mobilitaet_id' => $mobilitaet_id) + ); + + $data = $this->getDataOrTerminateWithError($result); + $this->terminateWithSuccess($data); + } +} diff --git a/application/models/codex/Mobilitaetstyp_model.php b/application/models/codex/Mobilitaetstyp_model.php new file mode 100644 index 000000000..f93f588a0 --- /dev/null +++ b/application/models/codex/Mobilitaetstyp_model.php @@ -0,0 +1,14 @@ +dbTable = 'bis.tbl_mobilitaetstyp'; + $this->pk = 'mobilitaetstyp_kurzbz'; + } +} diff --git a/public/js/api/stv.js b/public/js/api/stv.js index ae88b0516..89a69c84e 100644 --- a/public/js/api/stv.js +++ b/public/js/api/stv.js @@ -10,6 +10,7 @@ import exam from './stv/exam.js'; import abschlusspruefung from './stv/abschlusspruefung.js'; import grades from './stv/grades.js'; import mobility from './stv/mobility.js'; +import jointstudies from "./stv/jointstudies.js"; export default { verband, @@ -24,6 +25,7 @@ export default { abschlusspruefung, grades, mobility, + jointstudies, configStudent() { return this.$fhcApi.get('api/frontend/v1/stv/config/student'); }, diff --git a/public/js/api/stv/jointstudies.js b/public/js/api/stv/jointstudies.js new file mode 100644 index 000000000..b550852df --- /dev/null +++ b/public/js/api/stv/jointstudies.js @@ -0,0 +1,33 @@ +export default { + getStudies(url, config, params) { + return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id); + }, + getTypenMobility(){ + return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/'); + }, + getStudiensemester(){ + return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/'); + }, + getStudyprograms(){ + return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/'); + }, + getListPartner(){ + return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/'); + }, + getStatiPrestudent(){ + return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/'); + }, + loadStudy(id){ + return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id); + }, + insertStudy(form, data){ + return this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data); + }, + updateStudy(form, data){ + return this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data); + }, + deleteStudy(id){ + return this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id); + }, + +} \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/JointStudies.js b/public/js/components/Stv/Studentenverwaltung/Details/JointStudies.js new file mode 100644 index 000000000..e80ae34f6 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/JointStudies.js @@ -0,0 +1,16 @@ +import TblJointStudies from "./JointStudies/JointStudies.js"; + +export default { + name: 'Tab_JointStudies', + components: { + TblJointStudies + }, + props: { + modelValue: Object, + }, + template: ` +
+ +
+ ` +} \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/JointStudies/JointStudies.js b/public/js/components/Stv/Studentenverwaltung/Details/JointStudies/JointStudies.js new file mode 100644 index 000000000..1c75486de --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/JointStudies/JointStudies.js @@ -0,0 +1,467 @@ +import {CoreFilterCmpt} from "../../../../filter/Filter.js"; +import BsModal from "../../../../Bootstrap/Modal.js"; +import FormForm from "../../../../Form/Form.js"; +import FormInput from "../../../../Form/Input.js"; + +export default { + name: 'Tbl_JointStudies', + components: { + CoreFilterCmpt, + BsModal, + FormForm, + FormInput, + }, + inject: { + currentSemester: { + from: 'currentSemester', + }, + }, + props: { + student: Object + }, + data(){ + return { + tabulatorOptions: { + ajaxURL: 'dummy', + ajaxRequestFunc: this.$fhcApi.factory.stv.jointstudies.getStudies, + ajaxParams: () => { + return { + id: this.student.prestudent_id + }; + }, + ajaxResponse: (url, params, response) => response.data, + columns: [ + {title: "mobilitaet_id", field: "mobilitaet_id", visible: false}, + {title: "StSem", field: "studiensemester_kurzbz"}, + // {title: "mobilitaetstyp_kurzbz", field: "mobilitaetstyp_kurzbz"}, + {title: "kurzbz", field: "kurzbz"}, + {title: "prestudent_id", field: "prestudent_id", visible: false}, + {title: "Status", field: "status_kurzbz"}, + {title: "Partner", field: "partner", visible: false}, + {title: "Sem", field: "ausbildungssemester"}, + {title: "gsprogrammtyp_kurzbz", field: "gsprogrammtyp_kurzbz"}, + {title: "studienprogramm", field: "studienprogramm", visible: false}, + {title: "insertvon", field: "insertvon", visible: false}, + { + title: "insertamum", field: "insertamum", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + }); + }, + visible: false + }, + {title: "updatevon", field: "updatevon", visible: false}, + { + title: "updateamum", field: "updateamum", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + }); + }, + visible: false + }, + { + title: 'Aktionen', + field: 'actions', + minWidth: 150, + maxWidth: 150, + formatter: (cell, formatterParams, onRendered) => { + let container = document.createElement('div'); + container.className = "d-flex gap-2"; + + let button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('exam', 'newFromOld_studies'); + button.addEventListener( + 'click', + (event) => + this.actionNewFromOldJointStudy(cell.getData().mobilitaet_id) + ); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('exam', 'edit_studies'); + button.addEventListener( + 'click', + (event) => + this.actionEditJointStudy(cell.getData().mobilitaet_id) + ); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('exam', 'delete_studies'); + button.addEventListener( + 'click', + () => + this.actionDeleteJointStudy(cell.getData().mobilitaet_id) + ); + container.append(button); + + return container; + }, + frozen: true + }, + ], + }, + tabulatorEvents: [ + { + event: 'tableBuilt', + handler: async() => { + await this.$p.loadCategory(['global', 'jointstudies', 'ui', 'lehre', 'mobility']); + + + let cm = this.$refs.table.tabulator.columnManager; + + cm.getColumnByField('mobilitaet_id').component.updateDefinition({ + title: this.$p.t('global', 'mobilitaet_id') + }); +/* cm.getColumnByField('studiensemester_kurzbz').component.updateDefinition({ + title: this.$p.t('lehre', 'studiensemester') + });*/ + cm.getColumnByField('gsprogrammtyp_kurzbz').component.updateDefinition({ + title: this.$p.t('global', 'typ') + }); +/* cm.getColumnByField('ausbildungssemester').component.updateDefinition({ + title: this.$p.t('lehre', 'semester') + });*/ + cm.getColumnByField('prestudent_id').component.updateDefinition({ + title: this.$p.t('global', 'prestudentID') + }); + cm.getColumnByField('kurzbz').component.updateDefinition({ + title: this.$p.t('mobility', 'mobilitaetsprogramm') + }); + cm.getColumnByField('studienprogramm').component.updateDefinition({ + title: this.$p.t('jointstudies', 'studienprogramm') + }); + cm.getColumnByField('insertamum').component.updateDefinition({ + title: this.$p.t('global', 'insertamum') + }); + cm.getColumnByField('insertvon').component.updateDefinition({ + title: this.$p.t('global', 'insertvon') + }); + cm.getColumnByField('updateamum').component.updateDefinition({ + title: this.$p.t('global', 'updateamum') + }); + cm.getColumnByField('updatevon').component.updateDefinition({ + title: this.$p.t('global', 'updatevon') + }); + +/* cm.getColumnByField('actions').component.updateDefinition({ + title: this.$p.t('global', 'aktionen') + });*/ + } + } + ], + formData: { + mobilitaetstyp_kurzbz: "GS", + studiensemester_kurzbz: this.currentSemester, + status_kurzbz: 'Student', + mobilitaet_id: null + }, + statusNew: true, + listTypenMobility: [], + listStudiensemester: [], + programsMobility: [], + listStudienprogramme: [], + listPartner: [], + statiPrestudent: [], + } + }, + methods: { + actionDeleteJointStudy(mobilitaet_id) { + this.$fhcAlert + .confirmDelete() + .then(result => result + ? mobilitaet_id + : Promise.reject({handled: true})) + .then(this.deleteJointStudy) + .catch(this.$fhcAlert.handleSystemError); + }, + actionEditJointStudy(mobilitaet_id) { + this.resetForm(); + this.statusNew = false; + this.loadJointStudy(mobilitaet_id); + this.$refs.jointstudyModal.show(); + }, + actionNewFromOldJointStudy(mobilitaet_id) { + this.resetForm(); + this.loadJointStudy(mobilitaet_id); + this.statusNew = true; + this.$refs.jointstudyModal.show(); + }, + actionNewJointStudy() { + this.resetForm(); + this.statusNew = true; + this.$refs.jointstudyModal.show(); + }, + addNewJointStudy() { + const data = { + prestudent_id: this.student.prestudent_id, + formData: this.formData + }; + return this.$fhcApi.factory.stv.jointstudies.insertStudy(this.$refs.formJointStudies, data) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.hideModal("jointstudyModal"); + this.resetForm(); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { + this.reload(); + }); + }, + updateJointStudy() { + const data = { + prestudent_id: this.student.prestudent_id, + formData: this.formData + }; + return this.$fhcApi.factory.stv.jointstudies.updateStudy(this.$refs.formJointStudies, data) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.hideModal("jointstudyModal"); + this.resetForm(); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { + this.reload(); + }); + }, + loadJointStudy(mobilitaet_id) { + return this.$fhcApi.factory.stv.jointstudies.loadStudy(mobilitaet_id) + .then(result => { + this.formData = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + deleteJointStudy(mobilitaet_id) { + return this.$fhcApi.factory.stv.jointstudies.deleteStudy(mobilitaet_id) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { + this.reload(); + }); + }, + hideModal(modalRef){ + this.$refs[modalRef].hide(); + }, + reload() { + this.$refs.table.reloadTable(); + }, + resetForm() { + this.formData = {}; + this.formData.mobilitaetstyp_kurzbz = "GS"; + this.formData.status_kurzbz = 'Student'; + this.formData.studiensemester_kurzbz = this.currentSemester; + this.formData.prestudent_id = this.student.prestudent_id; + } + }, + created(){ + this.$fhcApi.factory.stv.jointstudies.getTypenMobility() + .then(result => { + this.listTypenMobility = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + this.$fhcApi.factory.stv.jointstudies.getStudiensemester() + .then(result => { + this.listStudiensemester = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + this.$fhcApi.factory.stv.mobility.getProgramsMobility() + .then(result => { + this.programsMobility = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + this.$fhcApi.factory.stv.jointstudies.getStudyprograms() + .then(result => { + this.listStudienprogramme = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + this.$fhcApi.factory.stv.jointstudies.getListPartner() + .then(result => { + this.listPartner = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + this.$fhcApi.factory.stv.jointstudies.getStatiPrestudent() + .then(result => { + this.statiPrestudent = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + }, + template: ` +
+

{{$p.t('jointstudies', 'gemeinsameStudien')}}

+ + + + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+
+ + +
+ +
+ + + +
+ +
+ ` +} diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index cd17215ee..81089fcd6 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -41393,8 +41393,150 @@ and represent the current state of research on the topic. The prescribed citatio 'insertvon' => 'system' ) ) - ) + ), // PROJEKTARBEITSBEURTEILUNG SS2025 ENDE --------------------------------------------------------------------------- + // FHC4 JOINT STUDIES START ---------------------------------------------------------------------------------------- + array( + 'app' => 'core', + 'category' => 'stv', + 'phrase' => 'tab_jointstudies', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'GS', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Joint Studies', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'jointstudies', + 'phrase' => 'gemeinsamesStudium', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Gemeinsames Studium', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Joint Study', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'jointstudies', + 'phrase' => 'gemeinsameStudien', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Gemeinsame Studien', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Joint Studies', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'jointstudies', + 'phrase' => 'studienprogramm', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Studienprogramm', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Study Program', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'jointstudies', + 'phrase' => 'neuAnlegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Gemeinsames Studium anlegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Add Joint Study', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'jointstudies', + 'phrase' => 'edit', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Gemeinsames Studium bearbeiten', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Edit Joint Study', + 'description' => '', + 'insertvon' => 'system', + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'mobilitaet_id', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Mobilität ID', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Mobility Id', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + // FHC4 JOINT STUDIES END ---------------------------------------------------------------------------------------- );