From e9664c179ae046dd18074344e59949f8c229f530 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 4 Feb 2021 10:24:08 +0100 Subject: [PATCH] Added Genehmigungs GUI + Begreundungsnotiz for rejected Anrechnungen in STGL VIEWS Signed-off-by: cris-technikum --- .../anrechnung/ApproveAnrechnungDetail.php | 31 ++++- application/libraries/AnrechnungLib.php | 63 ++++++++++ .../anrechnung/approveAnrechnungDetail.php | 105 ++++++++++++++++- .../anrechnung/approveAnrechnungDetail.js | 109 ++++++++---------- system/phrasesupdate.php | 86 +++++++++++++- 5 files changed, 322 insertions(+), 72 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index 6ed61a6bb..6a5a74dd0 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -85,6 +85,12 @@ class approveAnrechnungDetail extends Auth_Controller show_error('Missing data for recommendation'); } + // Get Genehmigung data + if(!$genehmigungData = getData($this->anrechnunglib->getGenehmigungData($anrechnung_id))) + { + show_error('Missing data for recommendation'); + } + $viewData = array( 'antragData' => $this->anrechnunglib->getAntragData( $student_uid = $this->PrestudentModel->getUID($anrechnungData->prestudent_id), @@ -92,7 +98,8 @@ class approveAnrechnungDetail extends Auth_Controller $anrechnungData->lehrveranstaltung_id ), 'anrechnungData' => $anrechnungData, - 'empfehlungData' => $empfehlungData + 'empfehlungData' => $empfehlungData, + 'genehmigungData' => $genehmigungData ); $this->load->view('lehre/anrechnung/approveAnrechnungDetail.php', $viewData); @@ -117,6 +124,11 @@ class approveAnrechnungDetail extends Auth_Controller ? $approved->bezeichnung_mehrsprachig[0] : $approved->bezeichnung_mehrsprachig[1]; + if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) + { + show_error('Failed retrieving person data'); + } + foreach ($data as $item) { // Approve Anrechnung @@ -125,7 +137,9 @@ class approveAnrechnungDetail extends Auth_Controller $json[]= array( 'anrechnung_id' => $item['anrechnung_id'], 'status_kurzbz' => self::ANRECHNUNGSTATUS_APPROVED, - 'status_bezeichnung' => $approved + 'status_bezeichnung' => $approved, + 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), + 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname ); if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_APPROVED)) @@ -165,15 +179,22 @@ class approveAnrechnungDetail extends Auth_Controller ? $rejected->bezeichnung_mehrsprachig[0] : $rejected->bezeichnung_mehrsprachig[1]; + if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) + { + show_error('Failed retrieving person data'); + } + foreach ($data as $item) { // Reject Anrechnung if(getData($this->anrechnunglib->rejectAnrechnung($item['anrechnung_id'], $item['begruendung']))) { $json[]= array( - 'anrechnung_id' => $item['anrechnung_id'], - 'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED, - 'status_bezeichnung' => $rejected + 'anrechnung_id' => $item['anrechnung_id'], + 'status_kurzbz' => self::ANRECHNUNGSTATUS_REJECTED, + 'status_bezeichnung' => $rejected, + 'abgeschlossen_am' => (new DateTime())->format('d.m.Y'), + 'abgeschlossen_von' => $person->vorname. ' '. $person->nachname ); if(!$this->_sendSanchoMailToStudent($item['anrechnung_id'], self::ANRECHNUNGSTATUS_REJECTED)) diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 48a693211..6b3b200bd 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -266,6 +266,69 @@ class AnrechnungLib } + /** + * Get Genehmigung data object. + * @param $anrechnung_id + * @return array + * @throws Exception + */ + public function getGenehmigungData($anrechnung_id) + { + if (!is_numeric($anrechnung_id)) + { + show_error('Incorrect parameter'); + } + + $genehmigung_data = new stdClass(); + $genehmigung_data->genehmigung = null; + $genehmigung_data->abgeschlossen_von = '-'; + $genehmigung_data->abgeschlossen_am = '-'; + $genehmigung_data->notiz = ''; // Begruendung, if rejected + + + if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0]) + { + show_error('Failed loading Anrechnung'); + } + + // Get date of approvement or rejection + $result = $this->ci->AnrechnungModel->getApprovedOrRejected($anrechnung_id); + + if (!$result = getData($result)[0]) + { + return success($genehmigung_data); + } + + + $genehmigung_data->genehmigung = $result->status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED + ? true + : false; + $genehmigung_data->abgeschlossen_am = (new DateTime($result->insertamum))->format('d.m.Y'); + + // Get full name of lector + $result = $this->ci->PersonModel->getByUID($result->insertvon); + if ($result = getData($result)[0]) + { + $genehmigung_data->abgeschlossen_von = $result->vorname. ' '. $result->nachname; + } + + + // If Anrechnung was rejected, retrieve also Notiz with Begruendung + if (!$genehmigung_data->genehmigung) + { + // Get Ablehnungsbegruendung (only set, if Anrechnung was not recommended yet) + $this->ci->load->model('person/Notiz_model', 'NotizModel'); + $result = $this->ci->NotizModel->getNotizByAnrechnung($anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_NOTIZ_BY_STGL); + if ($notiz = getData($result)[0]) + { + $genehmigung_data->notiz = $notiz->text; + } + } + + return success($genehmigung_data); + + } + /** * Get last Anrechnungstatusbezeichnung in users language. * @param $anrechnung_id diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 89e55ad18..76e707e17 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -143,8 +143,7 @@ $this->load->view(
empfehlung) ? '' : 'hidden' ?>" id="approveAnrechnungDetail-empfehlungDetail-empfehlungIsNull"> p->t('anrechnung', 'keineEmpfehlungAngefordert'); ?>
@@ -181,9 +180,111 @@ $this->load->view( +

+ +
+
+
+ +
+ +
+ p->t('anrechnung', 'genehmigung'); ?> +
+ p->t('anrechnung', 'abgeschlossenVon'); ?>: + abgeschlossen_von ?> +  |  + p->t('anrechnung', 'abschlussdatum'); ?>: + abgeschlossen_am ?> + +
+
+ +
+ +
+ p->t('anrechnung', 'nochKeineGenehmigung'); ?> +
+ +
+ p->t('anrechnung', 'genehmigungPositiv'); ?> +
+ +
+
p->t('anrechnung', 'genehmigungNegativ'); ?>
+
p->t('global', 'begruendung'); ?>: + notiz ?> +
+
+
+
+ + +
+
+
+
+ + +
+ + +
+
diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js index f7fc8b9ff..b211192a5 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js @@ -22,8 +22,8 @@ $(function(){ // Approve Anrechnungen $("#approve-anrechnung").click(function(){ - let genehmigung_panel = $('#approveAnrechnungUebersicht-empfehlung-panel'); - let begruendung_panel = $('#approveAnrechnungUebersicht-begruendung-panel'); + let genehmigung_panel = $('#approveAnrechnungDetail-genehmigung-panel'); + let begruendung_panel = $('#approveAnrechnungDetail-begruendung-panel'); begruendung_panel.css('display', 'none'); @@ -34,25 +34,15 @@ $(function(){ return; } - // Get selected rows data - let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData') - .map(function(data){ - // reduce to necessary fields - return { - 'anrechnung_id' : data.anrechnung_id, - } - }); - - // Alert and exit if no anrechnung is selected - if (selected_data.length == 0) - { - FHC_DialogLib.alertInfo('Bitte wählen Sie erst zumindest einen Antrag auf Anrechnung'); - return; - } + // Get form data + // index 0: anrechnung_id + let form_data = $('form').serializeArray(); // Prepare data object for ajax call let data = { - 'data': selected_data + 'data': [{ + 'anrechnung_id' : form_data[0].value + }] }; // Hide genehmigung panel again @@ -72,11 +62,11 @@ $(function(){ if (!data.error && data.retval != null) { - // Update status 'genehmigt' - $('#tableWidgetTabulator').tabulator('updateData', data.retval); - - // Print success message - FHC_DialogLib.alertSuccess(data.retval.length + " Anrechnungsanträge wurden genehmigt."); + approveAnrechnungDetail.formatGenehmigungIsPositiv( + data.retval[0].abgeschlossen_am, + data.retval[0].abgeschlossen_von, + data.retval[0].status_bezeichnung + ); } }, errorCallback: function (jqXHR, textStatus, errorThrown) @@ -89,9 +79,9 @@ $(function(){ // Reject Anrechnungen $("#reject-anrechnung").click(function(){ - let begruendung_panel = $('#approveAnrechnungUebersicht-begruendung-panel'); - let begruendung = $('#approveAnrechnungUebersicht-begruendung').val(); - let genehmigung_panel = $('#approveAnrechnungUebersicht-empfehlung-panel'); + let begruendung_panel = $('#approveAnrechnungDetail-begruendung-panel'); + let begruendung = $('#approveAnrechnungDetail-begruendung').val(); + let genehmigung_panel = $('#approveAnrechnungDetail-genehmigung-panel'); genehmigung_panel.css('display', 'none'); @@ -111,33 +101,23 @@ $(function(){ } } - // Get selected rows data - let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData') - .map(function(data){ - // reduce to necessary fields - return { - 'anrechnung_id' : data.anrechnung_id, - 'begruendung' : begruendung - } - }); - - // Alert and exit if no anrechnung is selected - if (selected_data.length == 0) - { - FHC_DialogLib.alertInfo('Bitte wählen Sie erst zumindest einen Antrag auf Anrechnung'); - return; - } + // Get form data + // index 0: anrechnung_id + let form_data = $('form').serializeArray(); // Confirm before rejecting - if(!confirm('Wollen Sie wirklich die gewählten Anträge ablehnen?')) + if(!confirm('Wollen Sie wirklich für die gewählten Anträge keine Empfehlung abgeben?')) { return; } // Prepare data object for ajax call let data = { - 'data': selected_data - }; + 'data': [{ + 'anrechnung_id' : form_data[0].value, + 'begruendung' : begruendung + }] + } // Hide begruendung panel again begruendung_panel.slideUp('slow'); @@ -156,11 +136,12 @@ $(function(){ if (!data.error && data.retval != null) { - // Update status 'genehmigt' - $('#tableWidgetTabulator').tabulator('updateData', data.retval); - - // Print success message - FHC_DialogLib.alertSuccess(data.retval.length + " Anrechnungsanträge wurden abgelehnt."); + approveAnrechnungDetail.formatGenehmigungIsNegativ( + data.retval[0].abgeschlossen_am, + data.retval[0].abgeschlossen_von, + data.retval[0].status_bezeichnung, + begruendung + ); } }, errorCallback: function (jqXHR, textStatus, errorThrown) @@ -219,9 +200,9 @@ $(function(){ approveAnrechnungDetail.copyIntoTextarea(this); }) - // Break Empfehlung abgeben - $('#approveAnrechnungDetail-empfehlung-abbrechen').click(function(){ - $('#approveAnrechnungDetail-empfehlung-panel').slideUp('slow'); + // Break Genehmigung abgeben + $('#approveAnrechnungDetail-genehmigung-abbrechen').click(function(){ + $('#approveAnrechnungDetail-genehmigung-panel').slideUp('slow'); }) @@ -270,23 +251,27 @@ var approveAnrechnungDetail = { $('#approve-anrechnung').prop('disabled', true); $('#reject-anrechnung').prop('disabled', true); }, - formatEmpfehlungIsTrue: function(empfehlungAm, emfehlungVon, statusBezeichnung){ - $('#approveAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); - $('#approveAnrechnungDetail-empfehlungDetail-empfehlungIsTrue').removeClass('hidden'); + formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung){ + $('#approveAnrechnungDetail-genehmigungDetail').children().addClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').removeClass('hidden'); $('#approveAnrechnung-status_kurzbz').text(statusBezeichnung); + $('#approveAnrechnung-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-success'); + $('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm); + $('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon); $('#request-recommendation').prop('disabled', true); $('#approve-anrechnung').prop('disabled', true); $('#reject-anrechnung').prop('disabled', true); }, - formatEmpfehlungIsFalse: function(empfehlungAm, emfehlungVon, statusBezeichnung, begruendung){ - $('#approveAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); - $('#approveAnrechnungDetail-empfehlungDetail-empfehlungIsFalse').removeClass('hidden'); + formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung, begruendung){ + $('#approveAnrechnungDetail-genehmigungDetail').children().addClass('hidden'); + $('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').removeClass('hidden'); $('#approveAnrechnung-status_kurzbz').text(statusBezeichnung); + $('#approveAnrechnung-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-danger'); + $('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm); + $('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon); + $('#approveAnrechnungDetail-genehmigungDetail-begruendung').text(begruendung); $('#request-recommendation').prop('disabled', true); $('#approve-anrechnung').prop('disabled', true); $('#reject-anrechnung').prop('disabled', true); - $('#approveAnrechnungDetail-empfehlungAm').text(empfehlungAm); - $('#approveAnrechnungDetail-empfehlungVon').text(emfehlungVon); - $('#approveAnrechnungDetail-empfehlungDetail-begruendung').text(begruendung); } } \ No newline at end of file diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 34680ad95..dfde89cdc 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -9057,13 +9057,13 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Es wurde noch keine Empfehlung abgegeben.', + 'text' => 'Es wurde keine Empfehlung abgegeben.', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'No recommendation has been sent yet.', + 'text' => 'No request for recommendation.', 'description' => '', 'insertvon' => 'system' ) @@ -9177,7 +9177,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Anrechnungen wird genehmigt, weil die Kenntnisse inhaltlich und umfangmäßig gleichwertig sind.', + 'text' => 'Anrechnung wird genehmigt, weil die Kenntnisse inhaltlich und umfangmäßig gleichwertig sind.', 'description' => '', 'insertvon' => 'system' ), @@ -9228,6 +9228,86 @@ Any unusual occurrences 'insertvon' => 'system' ) ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'genehmigung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Genehmigung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Approvement', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'abgeschlossenVon', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Abgeschlossen von', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Closed by', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'abschlussdatum', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Abschlussdatum', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Closing date', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'nochKeineGenehmigung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Der Antrag auf Anerkennung der nachgewiesenen Kenntnisse erfordert Ihre Genehmigung / Ablehnung.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) ) );