diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 0f6e2d5ae..f00cac01b 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -184,6 +184,77 @@ class AnrechnungLib return $result; } + /** + * Get Empfehlung data object. + * @param $anrechnung_id + * @return array + * @throws Exception + */ + public function getEmpfehlungData($anrechnung_id) + { + if (!is_numeric($anrechnung_id)) + { + show_error('Incorrect parameter'); + } + + $empfehlung_data = new stdClass(); + $empfehlung_data->empfehlung = null; + $empfehlung_data->empfehlung_von = '-'; + $empfehlung_data->empfehlung_am = '-'; + $empfehlung_data->notiz = ''; // Begruendung, if not recommended + + + if(!$anrechnung = getData($this->ci->AnrechnungModel->load($anrechnung_id))[0]) + { + show_error('Failed loading Anrechnung'); + } + + if (is_null($anrechnung->empfehlung_anrechnung)) + { + return success($empfehlung_data); + } + + // If Empfehlung is true or false + if (!is_null($anrechnung->empfehlung_anrechnung)) + { + // Get last lector and date, where recommendation was given + $result = $this->ci->AnrechnungModel->getLastAnrechnungstatus( + $anrechnung_id, + self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR + ); + if ($result = getData($result)[0]) + { + $empfehlung_datum = (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]) + { + $empfehlung_von = $result->vorname. ' '. $result->nachname; + } + + $empfehlung_data->empfehlung = $anrechnung->empfehlung_anrechnung; + $empfehlung_data->empfehlung_von = $empfehlung_von; + $empfehlung_data->empfehlung_am = $empfehlung_datum; + } + + // If Empfehlung is false, retrieve also Notiz with Begruendung + if (!$anrechnung->empfehlung_anrechnung) + { + // 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_LEKTOR); + if ($notiz = getData($result)[0]) + { + $empfehlung_data->notiz = $notiz->text; + } + } + + return success($empfehlung_data); + + } + /** * Get last Anrechnungstatusbezeichnung in users language. * @param $anrechnung_id diff --git a/application/views/lehre/anrechnung/reviewAnrechnungDetail.php b/application/views/lehre/anrechnung/reviewAnrechnungDetail.php index 7a22abcc1..7b8d29d4c 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungDetail.php @@ -4,6 +4,7 @@ $this->load->view( array( 'title' => $this->p->t('anrechnung', 'anrechnungenPruefen'), 'jquery' => true, + 'jqueryui' => true, 'bootstrap' => true, 'fontawesome' => true, 'ajaxlib' => true, @@ -29,9 +30,12 @@ $this->load->view( 'lektor', ) ), + 'customCSSs' => array( + 'public/css/Tabulator.css' + ), 'customJSs' => array( 'public/js/bootstrapper.js', - 'public/js/lehre/anrechnung/reviewAnrechnung.js' + 'public/js/lehre/anrechnung/reviewAnrechnungDetail.js' ) ) @@ -55,83 +59,172 @@ $this->load->view(
+ +
- -
-
-
-
- p->t('anrechnung', 'antrag'); ?> - p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> +
+
+ p->t('anrechnung', 'antrag'); ?> + p->t('anrechnung', 'antragdatum'); ?>: anrechnung_id) ? $anrechnungData->insertamum : '-' ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
p->t('person', 'student'); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester'); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang'); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektorInnen'); ?> + lektoren) - 1 ?> + lektoren as $key => $lektor): ?> + vorname . ' ' . $lektor->nachname; + echo $key === $len ? '' : ', ' ?> + +
p->t('anrechnung', 'herkunftDerKenntnisse'); ?>anmerkung ?>
p->t('anrechnung', 'nachweisdokumente'); ?> + dokumentname ?> +
+
+
+
+ +
+
+
+ +
+ +
+ p->t('anrechnung', 'empfehlung'); ?> +
+ p->t('anrechnung', 'empfehlungVon'); ?>: + empfehlung_von ?> +  |  + p->t('anrechnung', 'empfehlungdatum'); ?>: + empfehlung_am ?> + +
+
+ +
+ +
+ p->t('anrechnung', 'nochKeineEmpfehlung'); ?> +
+ +
+ p->t('anrechnung', 'empfehlungPositiv'); ?> +
+ +
+
p->t('anrechnung', 'empfehlungNegativ'); ?>
+
p->t('global', 'begruendung'); ?>: + notiz ?> +
+
+
+
+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
p->t('person', 'student'); ?>vorname . ' ' . $antragData->nachname; ?>
p->t('person', 'personenkennzeichen'); ?>matrikelnr ?>
p->t('lehre', 'studiensemester'); ?>studiensemester_kurzbz ?>
p->t('lehre', 'studiengang'); ?>stg_bezeichnung ?>
p->t('lehre', 'lehrveranstaltung'); ?>lv_bezeichnung ?>
p->t('lehre', 'ects'); ?>ects ?>
p->t('lehre', 'lektorInnen'); ?> - lektoren) - 1 ?> - lektoren as $key => $lektor): ?> - vorname . ' ' . $lektor->nachname; - echo $key === $len ? '' : ', ' ?> - -
p->t('anrechnung', 'herkunftDerKenntnisse'); ?>anmerkung ?>
p->t('anrechnung', 'nachweisdokumente'); ?> - dokumentname ?> -
-
- -
-
-
- - -
-
-
+
+ +
+ + +
+
Status: @@ -144,7 +237,7 @@ $this->load->view( load->view('lehre/anrechnung/reviewAnrechnungInfo'); ?>
- +
diff --git a/public/js/lehre/anrechnung/reviewAnrechnungDetail.js b/public/js/lehre/anrechnung/reviewAnrechnungDetail.js new file mode 100644 index 000000000..22d22f26c --- /dev/null +++ b/public/js/lehre/anrechnung/reviewAnrechnungDetail.js @@ -0,0 +1,228 @@ +const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP'; +const ANRECHNUNGSTATUS_PROGRESSED_BY_KF = 'inProgressKF'; +const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor'; +const ANRECHNUNGSTATUS_APPROVED = 'approved'; +const ANRECHNUNGSTATUS_REJECTED = 'rejected'; + + + +$(function(){ + // Pruefen ob Promise unterstuetzt wird + // Tabulator funktioniert nicht mit IE + var canPromise = !! window.Promise; + if(!canPromise) + { + alert("Diese Seite kann mit ihrem Browser nicht angezeigt werden. Bitte verwenden Sie Firefox, Chrome oder Edge um die Seite anzuzeigen"); + window.location.href='about:blank'; + return; + } + + + // Set status alert color + reviewAnrechnung.setStatusAlertColor(); + + // Break Begruendung abgeben + $('#reviewAnrechnungUebersicht-begruendung-abbrechen').click(function(){ + $('#reviewAnrechnungUebersicht-begruendung').val(''); + $('#reviewAnrechnungUebersicht-begruendung-panel').slideUp('slow'); + + }) + + // Copy Begruendung into textarea + $(".btn-copyIntoTextarea").click(function(){ + reviewAnrechnung.copyIntoTextarea(this); + }) + + // Recommend Anrechnung (Detail GUI) + $("#recommend-anrechnung").click(function(){ + let empfehlung_panel = $('#reviewAnrechnungDetail-empfehlung-panel'); + let begruendung_panel = $('#reviewAnrechnungDetail-begruendung-panel'); + + begruendung_panel.css('display', 'none'); + + if (empfehlung_panel.is(":hidden")) + { + // Show begruendung panel if is hidden + empfehlung_panel.slideDown('slow'); + return; + } + + // Get form data + // index 0: anrechnung_id + let form_data = $('form').serializeArray(); + + // Prepare data object for ajax call + let data = { + 'data': [{ + 'anrechnung_id' : form_data[0].value + }] + }; + + // Hide begruendung panel again + $(empfehlung_panel).slideUp('slow'); + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/recommend", + data, + { + successCallback: function (data, textStatus, jqXHR) + { + if (data.error && data.retval != null) + { + // Print error message + FHC_DialogLib.alertWarning(data.retval); + } + + if (!data.error && data.retval != null) + { + reviewAnrechnung.formatEmpfehlungIsTrue( + data.retval[0].empfehlung_am, + data.retval[0].empfehlung_von + ); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); + } + } + ); + }); + + // Dont recommend Anrechnung (Detail GUI) + $("#dont-recommend-anrechnung").click(function(){ + + let begruendung_panel = $('#reviewAnrechnungDetail-begruendung-panel'); + let begruendung = $('#reviewAnrechnungDetail-begruendung').val(); + + let empfehlung_panel = $('#reviewAnrechnungDetail-empfehlung-panel'); + + empfehlung_panel.css('display', 'none'); + + if (begruendung_panel.is(":hidden")) + { + // Show begruendung panel if is hidden + begruendung_panel.slideDown('slow'); + return; + } + else + { + // Check if begruendung is given + if (!begruendung.trim()) // empty or white spaces only + { + FHC_DialogLib.alertInfo('Bitte tragen Sie eine Begründung ein.'); + return; + } + } + + + // Get form data + // index 0: anrechnung_id + let form_data = $('form').serializeArray(); + + // Confirm before rejecting + 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': [{ + 'anrechnung_id' : form_data[0].value, + 'begruendung' : begruendung + }] + } + + // Hide begruendung panel again + $(begruendung_panel).slideUp('slow'); + + FHC_AjaxClient.ajaxCallPost( + FHC_JS_DATA_STORAGE_OBJECT.called_path + "/dontRecommend", + data, + { + successCallback: function (data, textStatus, jqXHR) + { + if (data.error && data.retval != null) + { + // Print error message + FHC_DialogLib.alertWarning(data.retval); + } + + if (!data.error && data.retval != null) + { + reviewAnrechnung.formatEmpfehlungIsFalse( + data.retval[0].empfehlung_am, + data.retval[0].empfehlung_von, + begruendung + ); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); + } + } + ); + }); + + // Break Empfehlung abgeben + $('#reviewAnrechnungDetail-empfehlung-abbrechen').click(function(){ + $('#reviewAnrechnungDetail-empfehlung-panel').slideUp('slow'); + + }) + + // Break Begruendung abgeben + $('#reviewAnrechnungDetail-begruendung-abbrechen').click(function(){ + $('#reviewAnrechnungDetail-begruendung').val(''); + $('#reviewAnrechnungDetail-begruendung-panel').slideUp('slow'); + + }) + + +}); + +var reviewAnrechnung = { + setStatusAlertColor: function () { + let status_kurzbz = $('#reviewAnrechnung-status_kurzbz').data('status_kurzbz'); + + switch (status_kurzbz) { + case ANRECHNUNGSTATUS_APPROVED: + $('#reviewAnrechnung-status_kurzbz').closest('div').addClass('alert-success'); + break; + case ANRECHNUNGSTATUS_REJECTED: + $('#reviewAnrechnung-status_kurzbz').closest('div').addClass('alert-danger'); + break; + case '': + $('#reviewAnrechnung-status_kurzbz').closest('div').addClass('alert-info'); + break; + default: + $('#reviewAnrechnung-status_kurzbz').closest('div').addClass('alert-warning'); + } + }, + copyIntoTextarea: function(elem){ + + // Find closest textarea + let textarea = $(elem).closest('div').find('textarea'); + + // Copy begruendung into textarea + textarea.val($.trim($(elem).parent().text())); + }, + formatEmpfehlungIsTrue: function(empfehlungAm, emfehlungVon){ + $('#reviewAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungIsTrue').removeClass('hidden'); + $('#recommend-anrechnung').prop('disabled', true); + $('#dont-recommend-anrechnung').prop('disabled', true); + $('#reviewAnrechnungDetail-empfehlungAm').text(empfehlungAm); + $('#reviewAnrechnungDetail-empfehlungVon').text(emfehlungVon); + }, + formatEmpfehlungIsFalse: function(empfehlungAm, emfehlungVon, begruendung){ + $('#reviewAnrechnungDetail-empfehlungDetail').children().addClass('hidden'); + $('#reviewAnrechnungDetail-empfehlungDetail-empfehlungIsFalse').removeClass('hidden'); + $('#recommend-anrechnung').prop('disabled', true); + $('#dont-recommend-anrechnung').prop('disabled', true); + $('#reviewAnrechnungDetail-empfehlungAm').text(empfehlungAm); + $('#reviewAnrechnungDetail-empfehlungVon').text(emfehlungVon); + $('#reviewAnrechnungDetail-empfehlungDetail-begruendung').text(begruendung); + } +} \ No newline at end of file diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 32d22b789..08ae59701 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -8803,7 +8803,7 @@ Any unusual occurrences ), array( 'sprache' => 'English', - 'text' => 'Recommendation date', + 'text' => '', 'description' => '', 'insertvon' => 'system' ) @@ -8968,6 +8968,106 @@ Any unusual occurrences 'insertvon' => 'system' ) ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungNegativ', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' Anrechnung wird nicht empfohlen.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungVon', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' Empfehlung von', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Recommended by', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungenPositiv', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Anrechnungen werden empfohlen, weil die Kenntnisse inhaltlich und umfangmäßig gleichwertig sind.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlungenNegativ', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Anrechnungen werden nicht empfohlen.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'nochKeineEmpfehlung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Es wurde noch keine Empfehlung abgegeben.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'No recommendation has been sent yet.', + 'description' => '', + 'insertvon' => 'system' + ) + ) ) );