diff --git a/application/config/stv.php b/application/config/stv.php index e03c00084..2be148621 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -83,10 +83,15 @@ if (!defined('ZGV_DOKTOR_ANZEIGEN') || !ZGV_DOKTOR_ANZEIGEN) { $fieldsZgvDoktor ); } - -$config['tabs']['projektarbeit']['defaultProjektbetreuerStunden'] = '4.0'; -$config['tabs']['projektarbeit']['defaultProjektbetreuerStundenDiplom'] = '5.0'; -$config['tabs']['projektarbeit']['lvLektroinnenzuteilungFixangestelltStundensatz'] = true; +error_log(print_r(defined(FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR), true)); +$config['tabs']['projektarbeit']['defaultProjektbetreuerStunden'] = + defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR') + ? FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR + : '0.0'; +$config['tabs']['projektarbeit']['defaultProjektbetreuerStundenDiplom'] = + defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER') + ? FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER + : '0.0'; $config['tabs']['projektarbeit']['defaultProjektbetreuerStundensatz'] = '80.0'; $config['student_tab_order'] = [ diff --git a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php index 98567ecde..a84248a35 100644 --- a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php +++ b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php @@ -114,18 +114,36 @@ class Projektbetreuer extends FHCAPI_Controller if (!$this->ProjektarbeitModel->hasBerechtigungForProjektarbeit($projektarbeit_id)) return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]); + if (isset($projektbetreuer['stunden']) && !isEmptyString($projektbetreuer['stunden']) && !is_numeric($projektbetreuer['stunden'])) + { + return $this->terminateWithError( + $this->p->t('ui', 'error_fieldNotNumeric', ['field'=> 'Stunden', 'Field'=> 'Stunden']), self::ERROR_TYPE_GENERAL + ); + } + + if (isset($projektbetreuer['stundensatz']) && !isEmptyString($projektbetreuer['stundensatz']) && !is_numeric($projektbetreuer['stundensatz'])) + { + return $this->terminateWithError( + $this->p->t('ui', 'error_fieldNotNumeric', ['field'=> 'Stundensatz', 'Field'=> 'Stundensatz']), self::ERROR_TYPE_GENERAL + ); + } + $projektbetreuer = $this->input->post('projektbetreuer'); if ($this->_validate($projektbetreuer) == false) $this->terminateWithValidationErrors($this->form_validation->error_array()); $result = null; + $stunden = isset($projektbetreuer['stunden']) && !isEmptyString($projektbetreuer['stunden']) ? $projektbetreuer['stunden'] : null; + $stundensatz = + isset($projektbetreuer['stundensatz']) && !isEmptyString($projektbetreuer['stundensatz']) ? $projektbetreuer['stundensatz'] : null; + $betreuer = [ 'projektarbeit_id' => $projektarbeit_id, 'person_id' => $projektbetreuer['person_id'], 'note' => $projektbetreuer['note'], - 'stunden' => $projektbetreuer['stunden'], - 'stundensatz' => $projektbetreuer['stundensatz'], + 'stunden' => $stunden, + 'stundensatz' => $stundensatz, 'betreuerart_kurzbz' => $projektbetreuer['betreuerart_kurzbz'] ]; diff --git a/application/models/ressource/Stundensatz_model.php b/application/models/ressource/Stundensatz_model.php index c8ee367d8..2a7418924 100644 --- a/application/models/ressource/Stundensatz_model.php +++ b/application/models/ressource/Stundensatz_model.php @@ -47,7 +47,6 @@ class Stundensatz_model extends DB_Model { $this->load->config('stv'); - $useFixangestelltStundensatz = $this->config->item('tabs')['projektarbeit']['lvLektroinnenzuteilungFixangestelltStundensatz']; $defaultStundensatz = $this->config->item('tabs')['projektarbeit']['defaultProjektbetreuerStundensatz']; $stundensatz = ''; @@ -63,7 +62,7 @@ class Stundensatz_model extends DB_Model { $studiensemester = getData($result)[0]; - if (isset($useFixangestelltStundensatz) && !$useFixangestelltStundensatz) + if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) { // load Mitarbeiter $params = [$person_id]; @@ -83,19 +82,30 @@ class Stundensatz_model extends DB_Model if (hasData($result)) { - foreach (getData($result) as $ma) - { - if (!$ma->fixangestellt) - { - $stundensatzRes = $this->getStundensatzByDatum( - $ma->mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'lehre' - ); + $ma = getData($result)[0]; - if (hasData($stundensatzRes)) - $stundensatz = getData($stundensatzRes)[0]->stundensatz; - else - $stundensatz = '0.00'; - } + $this->load->model('vertragsbestandteil/Dienstverhaeltnis_model','DienstverhaeltnisModel'); + $echterdv_result = $this->DienstverhaeltnisModel->existsDienstverhaeltnis( + $ma->mitarbeiter_uid, + $studiensemester->start, + $studiensemester->ende, + 'echterdv' + ); + + if (hasData($echterdv_result)) + { + $stundensatz = null; + } + else + { + $stundensatzRes = $this->getStundensatzByDatum( + $ma->mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'lehre' + ); + + if (hasData($stundensatzRes)) + $stundensatz = getData($stundensatzRes)[0]->stundensatz; + else + $stundensatz = '0.00'; } } else diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index adcf2f2a8..f847a1e92 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -152,6 +152,7 @@ export default { stunden: null, stundensatz: null }, + defaultStundensatz: null, newMode: false, editMode: false, initialFormData: null, @@ -179,45 +180,40 @@ export default { actionEditProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz) { this.editMode = true; this.newMode = false; - this.$api - .call(ApiStvProjektbetreuer.getDefaultStundensaetze(person_id, this.studiensemester_kurzbz)) - .then(result => { - this.resetForm(); + this.resetForm(); + this.getDefaultStundensaetze(person_id).finally(() => { - // get betreuer from tabulator list - let projektbetreuerListe = this.$refs.projektbetreuerTable.tabulator.getData(); - const idx = projektbetreuerListe.findIndex( - betr => - betr.person_id === person_id && - betr.projektarbeit_id === projektarbeit_id && - betr.betreuerart_kurzbz === betreuerart_kurzbz - ); + // get betreuer from tabulator list + let projektbetreuerListe = this.$refs.projektbetreuerTable.tabulator.getData(); + const idx = projektbetreuerListe.findIndex( + betr => + betr.person_id === person_id && + betr.projektarbeit_id === projektarbeit_id && + betr.betreuerart_kurzbz === betreuerart_kurzbz + ); - if (idx >= 0) { // if betreuer found + if (idx >= 0) { // if betreuer found - // set currently edited betreuer (deep copy) - this.formData = JSON.parse(JSON.stringify(projektbetreuerListe[idx])); + // set currently edited betreuer (deep copy) + this.formData = JSON.parse(JSON.stringify(projektbetreuerListe[idx])); - // set download link - if (this.formData.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = this.formData.beurteilungDownloadLink; + // set download link + if (this.formData.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = this.formData.beurteilungDownloadLink; - // set betreuer for autocomplete field - this.autocompleteSelectedBetreuer = { - person_id: this.formData.person_id, - name: this.formData.name, - vorname: this.formData.vorname, - nachname: this.formData.nachname, - vertrag_id: this.formData.vertrag_id - }; - } + // set betreuer for autocomplete field + this.autocompleteSelectedBetreuer = { + person_id: this.formData.person_id, + name: this.formData.name, + vorname: this.formData.vorname, + nachname: this.formData.nachname, + vertrag_id: this.formData.vertrag_id + }; + } - // set default stundensatz (if no other is set yet) - if (this.formData.stundensatz == null) this.formData.stundensatz = result.data; + // capture initial form data for detecting changes + this.captureFormData(); + }); - // capture initial form data for detecting changes - this.captureFormData(); - }) - .catch(this.$fhcAlert.handleSystemError); }, actionDeleteProjektbetreuer(betreuer_id, projektarbeit_id, person_id, betreuerart_kurzbz) { this.$fhcAlert @@ -239,6 +235,7 @@ export default { // default Stundensätze from config this.defaultFormDataValues.stunden = this.getDefaultStunden(projekttyp_kurzbz); this.defaultFormDataValues.stundensatz = this.config.defaultProjektbetreuerStundensatz; + this.defaultStundensatz = this.config.defaultProjektbetreuerStundensatz; // get other initial data this.$api @@ -271,7 +268,7 @@ export default { }) .catch(this.$fhcAlert.handleSystemError); } else { - this.emptyBetreuer(); + this.emptyBetreuerList(); } }, saveProjektbetreuer() { @@ -297,11 +294,13 @@ export default { this.filteredBetreuer = result.data; }); }, - emptyBetreuer() { + emptyBetreuerList() { this.$refs.projektbetreuerTable.tabulator.clearData(); }, resetForm() { - this.formData = this.getDefaultFormData(); + const defaultFormData = this.getDefaultFormData(); + this.formData = defaultFormData; + this.defaultStundensatz = defaultFormData.stundensatz; if (this.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = ''; this.autocompleteSelectedBetreuer = null; this.initialFormData = null; @@ -369,6 +368,16 @@ export default { this.formData.stunden = defaultStunden; } }, + getDefaultStundensaetze(person_id) { + return this.$api + .call(ApiStvProjektbetreuer.getDefaultStundensaetze(person_id, this.studiensemester_kurzbz)) + .then(result => { + // set default stundensatz (if no other is set yet) + this.defaultStundensatz = result.data; + this.formData.stundensatz = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, // check if form data has been modified since initial data has been captured formDataModified() { if (this.autocompleteSelectedBetreuer != null) return true; @@ -401,6 +410,9 @@ export default { // disable fields which are dependent on Vertrag status disableVertragFields(statusAkzeptiert) { this.vertragFieldsDisabled = statusAkzeptiert; + }, + onBetreuerSelected(ev) { + this.getDefaultStundensaetze(ev.value.person_id); } }, template: ` @@ -422,7 +434,7 @@ export default { > - +
@@ -502,7 +516,7 @@ export default { container-class="stv-details-projektarbeit-stundensatz" type="text" name="stundensatz" - :label="$p.t('projektarbeit', 'stundensatz')" + :label="$p.t('projektarbeit', 'stundensatz') + (defaultStundensatz ? ' (Default ' + defaultStundensatz + ')' : '')" :disabled="vertragFieldsDisabled" v-model="formData.stundensatz" >