From d96cc5672e55be87c8a91980140f57c849dc58bb Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 28 Jan 2025 09:39:24 +0100 Subject: [PATCH] child components Zweck/Purpose and Aufenthaltsfoerderung/Support --- .../api/frontend/v1/stv/Mobility.php | 90 ++++++- public/js/api/stv/mobility.js | 12 +- .../Details/Mobility/List/Foerderung.js | 0 .../Details/Mobility/List/Purpose.js | 174 +++++-------- .../Details/Mobility/List/Support.js | 232 ++++++++++++++++++ .../Details/Mobility/Mobility.js | 203 ++++++--------- system/phrasesupdate.php | 100 ++++++++ 7 files changed, 563 insertions(+), 248 deletions(-) delete mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Foerderung.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Support.js diff --git a/application/controllers/api/frontend/v1/stv/Mobility.php b/application/controllers/api/frontend/v1/stv/Mobility.php index 343bc4b9e..be8acfdba 100644 --- a/application/controllers/api/frontend/v1/stv/Mobility.php +++ b/application/controllers/api/frontend/v1/stv/Mobility.php @@ -17,12 +17,13 @@ class Mobility extends FHCAPI_Controller 'getProgramsMobility' => ['admin:r', 'assistenz:r'], 'getLVList' => ['admin:r', 'assistenz:r'], 'getPurposes' => ['admin:r', 'assistenz:r'], + 'getSupports' => ['admin:r', 'assistenz:r'], 'getListPurposes' => ['admin:r', 'assistenz:r'], 'getListSupports' => ['admin:r', 'assistenz:r'], 'deleteMobilityPurpose' => ['admin:r', 'assistenz:r'], 'addMobilityPurpose' => ['admin:r', 'assistenz:r'], - - + 'deleteMobilitySupport' => ['admin:r', 'assistenz:r'], + 'addMobilitySupport' => ['admin:r', 'assistenz:r'], ]); // Load Libraries @@ -73,14 +74,15 @@ class Mobility extends FHCAPI_Controller $formData = $this->input->post('formData'); $von = (isset($formData['von']) && !empty($formData['von'])) ? $formData['von'] : null; -$nation_code = (isset($formData['nation_code']) && !empty($formData['nation_code'])) ? $formData['nation_code'] : 'A'; -$mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) ? $formData['mobilitaetsprogramm_code'] : null; -$herkunftsland_code = (isset($formData['herkunftsland_code']) && !empty($formData['herkunftsland_code'])) ? $formData['herkunftsland_code'] : 'A'; -$ort = (isset($formData['ort']) && !empty($formData['ort'])) ? $formData['ort'] : null; -$universitaet = (isset($formData['universitaet']) && !empty($formData['universitaet'])) ? $formData['universitaet'] : null; -$ects_erworben = (isset($formData['ects_erworben']) && !empty($formData['ects_erworben'])) ? $formData['ects_erworben'] : null; -$ects_angerechnet = (isset($formData['ects_angerechnet']) && !empty($formData['ects_angerechnet'])) ? $formData['ects_angerechnet'] : null; -$localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPurposes'])) ? $formData['localPurposes'] : null; + $nation_code = (isset($formData['nation_code']) && !empty($formData['nation_code'])) ? $formData['nation_code'] : 'A'; + $mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code'])) ? $formData['mobilitaetsprogramm_code'] : null; + $herkunftsland_code = (isset($formData['herkunftsland_code']) && !empty($formData['herkunftsland_code'])) ? $formData['herkunftsland_code'] : 'A'; + $ort = (isset($formData['ort']) && !empty($formData['ort'])) ? $formData['ort'] : null; + $universitaet = (isset($formData['universitaet']) && !empty($formData['universitaet'])) ? $formData['universitaet'] : null; + $ects_erworben = (isset($formData['ects_erworben']) && !empty($formData['ects_erworben'])) ? $formData['ects_erworben'] : null; + $ects_angerechnet = (isset($formData['ects_angerechnet']) && !empty($formData['ects_angerechnet'])) ? $formData['ects_angerechnet'] : null; + $localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPurposes'])) ? $formData['localPurposes'] : null; + $localSupports = (isset($formData['localSupports']) && !empty($formData['localSupports'])) ? $formData['localSupports'] : null; //strange fields @@ -110,14 +112,19 @@ $localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPu //check if localData (purposes) if(count($localPurposes) > 0){ - // $this->terminateWithError('Speichern von Zweck notwendig mit neuer bisio_id ' . $bisio_id, self::ERROR_TYPE_GENERAL); - foreach ($localPurposes as $zweck){ $zweck = (int) $zweck; $this->addMobilityPurpose($bisio_id, $zweck); } } + //check if localData (supports) + if(count($localSupports) > 0){ + foreach ($localSupports as $support){ + $this->addMobilitySupport($bisio_id, $support); + } + } + $this->terminateWithSuccess(); } @@ -169,7 +176,7 @@ $localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPu ); //TODO(Manu) foreign key restraint - //nämlich Extension mo + //check Extension mo //fk_mobisioidzuordnung_prestudent_id" on table "tbl_mo_bisioidzuordnung" $data = $this->getDataOrTerminateWithError($result); @@ -206,6 +213,24 @@ $localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPu $this->terminateWithSuccess($data); } + public function getSupports($bisio_id) + { + $bisio_id = (int) $bisio_id; + + $this->load->model('codex/Bisioaufenthaltfoerderung_model', 'BisioaufenthaltfoerderungModel'); + + $this->BisioaufenthaltfoerderungModel->addSelect("*"); + $this->BisioaufenthaltfoerderungModel->addJoin('bis.tbl_aufenthaltfoerderung af', 'ON (af.aufenthaltfoerderung_code = bis.tbl_bisio_aufenthaltfoerderung.aufenthaltfoerderung_code)'); + + $result = $this->BisioaufenthaltfoerderungModel->loadWhere( + array('bisio_id' => $bisio_id) + ); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } + public function getListPurposes() { $this->load->model('codex/Zweck_model', 'ZweckModel'); @@ -268,4 +293,43 @@ $localPurposes = (isset($formData['localPurposes']) && !empty($formData['localPu return $this->terminateWithSuccess(current($data)); } + + public function addMobilitySupport($bisio_id, $local_support = null) + { + $aufenthaltfoerderung_code = $this->input->post('aufenthaltfoerderung_code'); + + if($local_support){ + $aufenthaltfoerderung_code = $local_support; + } + + $this->load->model('codex/Bisioaufenthaltfoerderung_model', 'BisioaufenthaltfoerderungModel'); + + $result = $this->BisioaufenthaltfoerderungModel->insert( + array( + 'bisio_id' => $bisio_id, + 'aufenthaltfoerderung_code' => $aufenthaltfoerderung_code + ) + ); + + $data = $this->getDataOrTerminateWithError($result); + + return $this->terminateWithSuccess(current($data)); + } + + public function deleteMobilitySupport($bisio_id) + { + $aufenthaltfoerderung_code = $this->input->post('aufenthaltfoerderung_code'); + + $this->load->model('codex/Bisioaufenthaltfoerderung_model', 'BisioaufenthaltfoerderungModel'); + + $result = $this->BisioaufenthaltfoerderungModel->delete( + array( + 'bisio_id' => $bisio_id, + 'aufenthaltfoerderung_code' => $aufenthaltfoerderung_code + ) + ); + $data = $this->getDataOrTerminateWithError($result); + + return $this->terminateWithSuccess(current($data)); + } } diff --git a/public/js/api/stv/mobility.js b/public/js/api/stv/mobility.js index 657256b30..1139aa275 100644 --- a/public/js/api/stv/mobility.js +++ b/public/js/api/stv/mobility.js @@ -6,7 +6,6 @@ export default { return this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/'); }, addNewMobility(data){ - //TODO(Manu) formvalidation return this.$fhcApi.post('api/frontend/v1/stv/mobility/insertMobility/', data); }, loadMobility(bisio_id){ @@ -22,10 +21,11 @@ export default { return this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz); }, getPurposes(url, config, params){ - console.log("in getPurposes"); - //console.log(params); return this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id); }, + getSupports(url, config, params){ + return this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id); + }, getListPurposes() { return this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/'); }, @@ -38,5 +38,11 @@ export default { addMobilityPurpose(params) { return this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params); }, + deleteMobilitySupport(params) { + return this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params); + }, + addMobilitySupport(params) { + return this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params); + }, } \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Foerderung.js b/public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Foerderung.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Purpose.js b/public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Purpose.js index 20751fdb0..b1a80d7b2 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Purpose.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Mobility/List/Purpose.js @@ -20,29 +20,46 @@ export default { type: Array, required: true }, - formDataParent: { - type: Object, - required: true - } }, data() { return { tabulatorOptions: { ajaxURL: 'dummy', - ajaxRequestFunc: this.$fhcApi.factory.stv.mobility.getPurposes, + ajaxRequestFunc: (url, config, params) => { + if (this.bisio_id) { + //fake params for getting api call with tabulator to run + const config = { + method: "get", + }; + const params = { + id: this.bisio_id, + }; + return this.$fhcApi.factory.stv.mobility.getPurposes('dummy', config, params) + } + else + { + // use local data + return new Promise((resolve) => { + const localData = this.localData; + resolve(localData); + }); + } + }, ajaxParams: () => { return { - id: this.bisio_id + id: this.bisio_id || "local" }; }, - ajaxResponse: (url, params, response) => response.data, + ajaxResponse: (url, params, response) => response.data || this.localData, + + columns: [ {title: "Zweck_code", field: "zweck_code", visible: false}, {title: "Kurzbz", field: "kurzbz", visible: false}, {title: "Bezeichnung", field: "bezeichnung"}, { title: 'Aktionen', field: 'actions', - minWidth: 150, + minWidth: 50, formatter: (cell, formatterParams, onRendered) => { let container = document.createElement('div'); @@ -66,7 +83,7 @@ export default { ], layout: 'fitColumns', layoutColumnsOnNewData: false, - height: '300', + height: '200', selectableRangeMode: 'click', selectable: true, persistenceID: 'core-mobility-purpose' @@ -76,104 +93,35 @@ export default { event: 'tableBuilt', handler: async() => { - await this.$p.loadCategory(['ui', 'global', 'vertrag']); -/* + await this.$p.loadCategory(['ui', 'global', 'mobility']); + let cm = this.$refs.table.tabulator.columnManager; cm.getColumnByField('bezeichnung').component.updateDefinition({ - title: this.$p.t('global', 'status') + title: this.$p.t('ui', 'bezeichnung') }); - cm.getColumnByField('format_datum').component.updateDefinition({ - title: this.$p.t('global', 'datum') + cm.getColumnByField('kurzbz').component.updateDefinition({ + title: this.$p.t('mobility', 'kurzbz') }); - cm.getColumnByField('mitarbeiter_uid').component.updateDefinition({ - title: this.$p.t('person', 'uid') - }); - cm.getColumnByField('vertrag_id').component.updateDefinition({ - title: this.$p.t('ui', 'vertrag_id') - }); - cm.getColumnByField('vertragsstatus_kurzbz').component.updateDefinition({ - title: this.$p.t('vertrag', 'vertragStatus') - }); - cm.getColumnByField('actions').component.updateDefinition({ +/* cm.getColumnByField('actions').component.updateDefinition({ title: this.$p.t('global', 'aktionen') - }); - cm.getColumnByField('updatevon').component.updateDefinition({ - title: this.$p.t('global', 'updatevon') - }); - cm.getColumnByField('format_updateamum').component.updateDefinition({ - title: this.$p.t('global', 'updateamum') - }); - cm.getColumnByField('insertvon').component.updateDefinition({ - title: this.$p.t('global', 'insertvon') - }); - cm.getColumnByField('format_insertamum').component.updateDefinition({ - title: this.$p.t('global', 'insertamum') - }); */ + });*/ } } ], clickedRows: [], - formData: {}, - localData: [] + formData: { + zweck_code: "" + }, + localData: [], } }, watch: { -/* bisio_id(newVal) { - if (!newVal) { - console.log("activate local Data"); - // Lokale Daten direkt in die Tabelle laden - this.$refs.table.instance.setData(this.localData); - } else { - console.log("data with api" + newVal); - let params = { - bisio_id: newVal, - }; - // Daten aus der API abrufen und in die Tabelle laden - this.$fhcApi.factory.stv.mobility.getPurposes(params) - .then(result => { - this.$refs.table.instance.setData(result.data); - }) - .catch(this.$fhcAlert.handleSystemError); - } - },*/ - - -/* bisio_id(newVal) { - if (!newVal) { - console.log("activate local Data"); - this.tabulatorOptions.ajaxRequestFunc = null; - this.tabulatorOptions.data = this.localData; - } else { - console.log("data with api" + newVal); - let params = { - bisio_id : newVal, - }; - //this.tabulatorOptions.ajaxRequestFunc = this.$fhcApi.factory.stv.mobility.getPurposes, newVal; - this.$fhcApi.factory.stv.mobility.getPurposes(params) - .then(result => { - this.tabulatorOptions = result.data; - }) - .catch(this.$fhcAlert.handleSystemError); - } - },*/ bisio_id() { if (this.$refs.table) { this.$refs.table.reloadTable(); } }, - /* bisio_id() { - //this.reloadTable(); - //this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + this.vertrag_id); - },*/ - formDataParent: { - handler(newVal, oldVal) - { - this.formData = this.formDataParent; - } - , - deep: true - } }, methods: { actionNewPurpose() { @@ -181,10 +129,21 @@ export default { this.$refs.mobilityPurpose.show(); }, actionDeletePurpose(zweck_code) { - this.$emit('deleteMobilityPurpose', { - bisio_id: this.bisio_id, - zweck_code: zweck_code - }); + if (this.bisio_id) + { + this.$emit('deleteMobilityPurpose', { + bisio_id: this.bisio_id, + zweck_code: zweck_code + }); + } + else + { + const index = this.localData.findIndex(item => item.zweck_code === zweck_code); + + if (index !== -1) { + this.localData.splice(index, 1); + } + } }, handleSubmitAction() { if (this.bisio_id) { @@ -194,11 +153,14 @@ export default { bisio_id: this.bisio_id }); } else { - //not working - // this.$refs.table.addRow({id: 123, zweck_code: this.formData.zweck_code}); - //this.formData.zweck_code - this.localData.push(this.formData.zweck_code); //not working: this.$refs.table.addRow is not a function - console.log("action without Bisio_id " + this.formData.zweck_code); + const purpose = this.listPurposes.find(item => item.zweck_code === this.formData.zweck_code); + const newEntry = { + zweck_code: this.formData.zweck_code, + kurzbz: purpose.kurzbz, + bezeichnung: purpose.bezeichnung + }; + this.localData.push(newEntry); + this.$emit('setMobilityPurposeToNewMobility', { zweck_code: this.formData.zweck_code, }); @@ -220,19 +182,13 @@ export default { }, resetModal(){ this.formData = {}; - this.formData.vertragsstatus_kurzbz = null; - this.formData.datum = new Date(); - this.statusNew = true; + this.formData.zweck_code = null; } }, template: ` -
+

- - - bisio: {{bisio_id}} - @@ -259,9 +215,9 @@ export default { type="select" :label="$p.t('mobility/zweck')" v-model="formData.zweck_code" - name="zweck" + name="zweck_code" > - +
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index a1847f679..9754398c2 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -37459,6 +37459,106 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'mobility', + 'phrase' => 'zweck_neu', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Mobilitätszweck anlegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Create motivation for mobility', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mobility', + 'phrase' => 'foerderung_neu', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Förderung für Aufenthalt anlegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Create funding for mobility', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mobility', + 'phrase' => 'kurzbz_program', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Programmkurzbezeichnung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Program short description', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mobility', + 'phrase' => 'bisio_id', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bisio ID', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Bisio ID', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mobility', + 'phrase' => 'kurzbz', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Kurzbezeichnung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Short Name', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), // FHC4 Phrases Mobility End );