diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index f10d94a8a..f87bedb75 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -53,6 +53,12 @@ class InfoCenter extends Auth_Controller 'message' => 'ZGV saved for degree program %s, prestudentid %s', 'success' => null ), + 'savekarrierepfad' => array( + 'logtype' => 'Action', + 'name' => 'Karrierepfad changed', + 'message' => 'Karrierepfad of prestudentid %s changed from %s to %s', + 'success' => null + ), 'abgewiesen' => array( 'logtype' => 'Processstate', 'name' => 'Interessent rejected', @@ -162,6 +168,7 @@ class InfoCenter extends Auth_Controller $this->load->model('crm/Dokument_model', 'DokumentModel'); $this->load->model('crm/Prestudent_model', 'PrestudentModel'); $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $this->load->model('crm/Karrierepfad_model', 'KarrierepfadModel'); $this->load->model('crm/Statusgrund_model', 'StatusgrundModel'); $this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel'); $this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel'); @@ -545,7 +552,8 @@ class InfoCenter extends Auth_Controller } /** - * Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master + * Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master. + * Also saves the Karrierepfad, if the panel has the select. */ public function saveZgvPruefung() { @@ -570,6 +578,21 @@ class InfoCenter extends Auth_Controller $prestudent = $this->PrestudentModel->getPrestudentWithZgv($prestudent_id); $prestudentdata = getData($prestudent); + // Only the select of an editable panel posts karrierepfad_id + // Rule: empty, or aktiv and linked to the Studienplan of the last status + $karrierepfad_id = $this->input->post('karrierepfad_id') === '' ? null : $this->input->post('karrierepfad_id'); + $karrierepfadChanged = $this->input->post('karrierepfad_id') !== null && $karrierepfad_id != $prestudentdata->karrierepfad_id; + $karrierepfadSelectable = true; + + if ($karrierepfadChanged && $karrierepfad_id !== null) + { + $karrierepfade = isset($prestudentdata->prestudentstatus->studienplan_id) ? + $this->KarrierepfadModel->getByStudienplan($prestudentdata->prestudentstatus->studienplan_id) : + null; + $karrierepfadSelectable = hasData($karrierepfade) + && in_array($karrierepfad_id, array_column(getData($karrierepfade), 'karrierepfad_id')); + } + if ($prestudentdata->studiengangtyp === 'm') { // zgvmasterdata @@ -614,6 +637,9 @@ class InfoCenter extends Auth_Controller $updateArray = array_merge($updateArray, $updateMasterArray); } + if ($karrierepfadChanged && $karrierepfadSelectable) + $updateArray['karrierepfad_id'] = $karrierepfad_id; + $prestresult = $this->PrestudentModel->update( $prestudent_id, $updateArray @@ -623,6 +649,8 @@ class InfoCenter extends Auth_Controller $json = error('Error when updating Prestudent!'); elseif (isError($semresult)) $json = error('Error when updating Ausbildungssemester!'); + elseif (!$karrierepfadSelectable) + $json = error('Karrierepfad is not selectable for the Studienplan'); else $json = success('Zgv saved successfully!'); @@ -632,6 +660,19 @@ class InfoCenter extends Auth_Controller $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); $this->_log($logdata['person_id'], 'savezgv', array($logdata['studiengang_kurzbz'], $prestudent_id)); + + if ($karrierepfadChanged && $karrierepfadSelectable && isSuccess($prestresult)) + { + $this->_log( + $logdata['person_id'], + 'savekarrierepfad', + array( + $prestudent_id, + $this->_getKarrierepfadBezeichnung($prestudentdata->karrierepfad_id), + $this->_getKarrierepfadBezeichnung($karrierepfad_id) + ) + ); + } } } @@ -2099,6 +2140,14 @@ class InfoCenter extends Auth_Controller $zgvpruefung = getData($prestudentWithZgv); + // Karrierepfad: the stored one, and the selectable ones of the Studienplan of the last status + $karrierepfad = isset($zgvpruefung->karrierepfad_id) ? getData($this->KarrierepfadModel->load($zgvpruefung->karrierepfad_id)) : null; + $zgvpruefung->karrierepfad = isset($karrierepfad[0]) ? $karrierepfad[0] : null; + $karrierepfade = isset($zgvpruefung->prestudentstatus->studienplan_id) ? + $this->KarrierepfadModel->getByStudienplan($zgvpruefung->prestudentstatus->studienplan_id) : + null; + $zgvpruefung->karrierepfade = hasData($karrierepfade) ? getData($karrierepfade) : array(); + if (isset($zgvpruefung->prestudentstatus)) { //get orgform for german and english @@ -2348,6 +2397,21 @@ class InfoCenter extends Auth_Controller return array('person_id' => $person_id, 'studiengang_kurzbz' => $studiengang_kurzbz, 'studiengang_bezeichnung' => $studiengang_bezeichnung, 'studiengang_mail' => $studiengang_mail, 'studiengang_typ' => $studiengang_typ); } + /** + * Helper function retrieves the German Bezeichnung of a Karrierepfad for the log + * @param $karrierepfad_id + * @return string 'none' if no Karrierepfad + */ + private function _getKarrierepfadBezeichnung($karrierepfad_id) + { + if ($karrierepfad_id === null) + return 'none'; + + $karrierepfad = getData($this->KarrierepfadModel->load($karrierepfad_id)); + + return isset($karrierepfad[0]->bezeichnung_mehrsprachig[0]) ? $karrierepfad[0]->bezeichnung_mehrsprachig[0] : $karrierepfad_id; + } + /** * Helper function for logging * @param $person_id diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index d1ce87422..24f79a345 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -303,7 +303,20 @@ WHERE konto.person_id = p.person_id AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .' - ) AS "Kaution" + ) AS "Kaution", + ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(sg.typ || sg.kurzbz) || \':\' || kp.bezeichnung_mehrsprachig[1]), \', \') + FROM public.tbl_prestudent ps + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN public.tbl_karrierepfad kp USING(karrierepfad_id) + WHERE ps.person_id = p.person_id + AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus pss + WHERE pss.prestudent_id = ps.prestudent_id + AND pss.studiensemester_kurzbz = '.$STUDIENSEMESTER.' + ) + ) AS "Karrierepfad" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -396,7 +409,8 @@ 'InfoCenter Mitarbeiter', ucfirst($this->p->t('infocenter', 'rueckstelldatum')), ucfirst($this->p->t('infocenter', 'rueckstellgrund')), - ucfirst($this->p->t('infocenter', 'kaution')) + ucfirst($this->p->t('infocenter', 'kaution')), + ucfirst($this->p->t('infocenter', 'karrierepfad')) ), 'formatRow' => function($datasetRaw) { @@ -519,6 +533,11 @@ $datasetRaw->{'Kaution'} = 'Offen'; } + if ($datasetRaw->{'Karrierepfad'} === null) + { + $datasetRaw->{'Karrierepfad'} = '-'; + } + return $datasetRaw; }, 'markRow' => function($datasetRaw) { diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index b021379a8..b8075a91a 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -66,7 +66,8 @@

- prestudentstatus->status_kurzbz) ? $zgvpruefung->prestudentstatus->status_kurzbz : ''); + karrierepfad) ? '' : ' class="hidden"' ?>>, p->t('infocenter', 'karrierepfad')) ?>: karrierepfad) ? html_escape($zgvpruefung->karrierepfad->bezeichnung_mehrsprachig[0]) : '' ?>prestudentstatus->status_kurzbz) ? $zgvpruefung->prestudentstatus->status_kurzbz : ''); ?>

@@ -202,6 +203,38 @@ + + karrierepfade) || isset($zgvpruefung->karrierepfad)): ?> +
+
+
+ + karrierepfad) ? html_escape($zgvpruefung->karrierepfad->bezeichnung_mehrsprachig[0]) : $this->p->t('infocenter', 'karrierepfadOhne'); + else: + // The stored one stays selectable, also if the Studienplan no longer offers it + $karrierepfadOptionen = $zgvpruefung->karrierepfade; + if (isset($zgvpruefung->karrierepfad) + && !in_array($zgvpruefung->karrierepfad->karrierepfad_id, array_column($karrierepfadOptionen, 'karrierepfad_id'))) + $karrierepfadOptionen[] = $zgvpruefung->karrierepfad; + + echo ""; + endif; ?> +
+
+
+
diff --git a/public/js/UDFWidget.js b/public/js/UDFWidget.js index 82c29de35..edb3e3125 100644 --- a/public/js/UDFWidget.js +++ b/public/js/UDFWidget.js @@ -17,7 +17,11 @@ var FHC_UDFWidget = { $("div[type*='UDFWidget']").each(function(i, udfWidgetDiv) { - var saveButton = $(''); + // No button without an editable UDF: fields without write permission are disabled + if ($(udfWidgetDiv).find("[name^='udf_']:enabled").length === 0) return; + + // The label names what it saves, the page can have another save button + var saveButton = $(''); saveButton.on('click', function() { diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 35da8f584..e296b0b0e 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -215,6 +215,15 @@ var InfocenterDetails = { if (FHC_AjaxClient.hasData(data)) { $("#zgvSpeichern_" + prestudentid).before("" + FHC_PhrasesLib.t('ui', 'gespeichert') + "  "); + + // The panel heading shows the saved Karrierepfad + var karrierepfad = $("#karrierepfad_" + prestudentid + " option:selected"); + if (karrierepfad.length) + { + $("#karrierepfadHeading_" + prestudentid + " .karrierepfadName").text(karrierepfad.attr('data-bezeichnung') || ''); + $("#karrierepfadHeading_" + prestudentid).toggleClass('hidden', karrierepfad.val() === ''); + } + InfocenterDetails._refreshLog(); } else