From 1b00ae78b4e25c503b5b4046d4e5cde130be0ade Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 25 Jan 2021 15:32:51 +0100 Subject: [PATCH] Created Anrechnungen LektorInen: GUI, Controller, Tabledata, Phrases Signed-off-by: cris-technikum --- .../anrechnung/ReviewAnrechnungUebersicht.php | 198 +++++++++++++ application/libraries/AnrechnungLib.php | 107 ++++++- .../anrechnung/reviewAnrechnungUebersicht.php | 159 ++++++++++ .../reviewAnrechnungUebersichtData.php | 126 ++++++++ .../anrechnung/reviewAnrechnungUebersicht.js | 280 ++++++++++++++++++ system/phrasesupdate.php | 62 +++- 6 files changed, 930 insertions(+), 2 deletions(-) create mode 100644 application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php create mode 100644 application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php create mode 100644 application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php create mode 100644 public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js diff --git a/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php new file mode 100644 index 000000000..a5646d31e --- /dev/null +++ b/application/controllers/lehre/anrechnung/ReviewAnrechnungUebersicht.php @@ -0,0 +1,198 @@ + 'lehre/anrechnung_empfehlen:rw', + 'download' => 'lehre/anrechnung_empfehlen:rw', + 'recommend' => 'lehre/anrechnung_empfehlen:rw', + 'dontRecommend' => 'lehre/anrechnung_empfehlen:rw' + ) + ); + + // Load models + $this->load->model('education/Anrechnung_model', 'AnrechnungModel'); + $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); + $this->load->model('content/DmsVersion_model', 'DmsVersionModel'); + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + + // Load libraries + $this->load->library('WidgetLib'); + $this->load->library('PermissionLib'); + $this->load->library('AnrechnungLib'); + $this->load->library('DmsLib'); + + // Load helpers + $this->load->helper('form'); + $this->load->helper('url'); + $this->load->helper('hlp_sancho_helper'); + + // Load language phrases + $this->loadPhrases( + array( + 'global', + 'ui', + 'anrechnung', + 'person', + 'lehre', + 'table' + ) + ); + + $this->_setAuthUID(); + + $this->setControllerId(); + } + + public function index() + { + $studiensemester_kurzbz = $this->input->get('studiensemester'); + + if (!is_string($studiensemester_kurzbz)) + { + $studiensemester = $this->StudiensemesterModel->getNearest(); + if (hasData($studiensemester)) + { + $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; + } + elseif (isError($studiensemester)) + { + show_error(getError($studiensemester)); + } + } + + $viewData = array( + 'studiensemester_selected' => $studiensemester_kurzbz + ); + + $this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData); + } + + /** + * Recommend Anrechnungen. + */ + public function recommend() + { + $data = $this->input->post('data'); + + if(isEmptyArray($data)) + { + return $this->outputJsonError('Fehler beim Übertragen der Daten.'); + } + + // Get statusbezeichnung for 'inProgressDP' + $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); + $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; + $inProgressDP = getUserLanguage() == 'German' + ? $inProgressDP->bezeichnung_mehrsprachig[0] + : $inProgressDP->bezeichnung_mehrsprachig[1]; + + foreach ($data as $item) + { + // Approve Anrechnung + if(getData($this->anrechnunglib->recommendAnrechnung($item['anrechnung_id']))) + { + $json[]= array( + 'anrechnung_id' => $item['anrechnung_id'], + 'empfehlung_anrechnung' => 'true', + 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, + 'status_bezeichnung' => $inProgressDP + ); + } + } + + // Output json to ajax + if (isset($json) && !isEmptyArray($json)) + { + return $this->outputJsonSuccess($json); + } + else + { + return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + } + } + + /** + * Dont recommend Anrechnungen. + */ + public function dontRecommend() + { + $data = $this->input->post('data'); + + if(isEmptyArray($data)) + { + return $this->outputJsonError('Fehler beim Übertragen der Daten.'); + } + + // Get statusbezeichnung for 'inProgressDP' + $this->AnrechnungstatusModel->addSelect('bezeichnung_mehrsprachig'); + $inProgressDP = getData($this->AnrechnungstatusModel->load('inProgressDP'))[0]; + $inProgressDP = getUserLanguage() == 'German' + ? $inProgressDP->bezeichnung_mehrsprachig[0] + : $inProgressDP->bezeichnung_mehrsprachig[1]; + + foreach ($data as $item) + { + // Approve Anrechnung + if(getData($this->anrechnunglib->dontRecommendAnrechnung($item['anrechnung_id']))) + { + $json[]= array( + 'anrechnung_id' => $item['anrechnung_id'], + 'empfehlung_anrechnung' => 'false', + 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL, + 'status_bezeichnung' => $inProgressDP + ); + } + } + + // Output json to ajax + if (isset($json) && !isEmptyArray($json)) + { + return $this->outputJsonSuccess($json); + } + else + { + return $this->outputJsonError('Empfehlungen wurden nicht durchgeführt'); + } + } + + /** + * Download and open uploaded document (Nachweisdokument). + */ + public function download() + { + $dms_id = $this->input->get('dms_id'); + + if (!is_numeric($dms_id)) + { + show_error('Wrong parameter'); + } + + $this->dmslib->download($dms_id); + } + + + /** + * Retrieve the UID of the logged user and checks if it is valid + */ + private function _setAuthUID() + { + $this->_uid = getAuthUID(); + + if (!$this->_uid) show_error('User authentification failed'); + } +} \ No newline at end of file diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index d9510f354..907116563 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -146,6 +146,7 @@ class AnrechnungLib } /** + * Get last Anrechnungstatusbezeichnung in users language. * @param $anrechnung_id * @return mixed */ @@ -244,7 +245,7 @@ class AnrechnungLib $status_kurzbz = $result->status_kurzbz; // Exit if already approved or rejected - if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) // TODO: in js: bereits genehmigte nicht clickable! + if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) { return success(false); // dont reject } @@ -294,6 +295,110 @@ class AnrechnungLib return success(true); // rejected } + /** + * Recommend Anrechnung. + * @param $anrechnung_id + * @return array + * @throws Exception + */ + public function recommendAnrechnung($anrechnung_id) + { + // Check last Anrechnungstatus + if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) + { + show_error(getError($result)); + } + + $status_kurzbz = $result->status_kurzbz; + + // Exit if already approved or rejected + if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) + { + return success(false); // dont approve + } + + // Start DB transaction + $this->ci->db->trans_start(false); + + $lektor_uid = getAuthUID(); + + // Insert new status progessed by stgl + $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL); + + // Update empfehlung_anrechnung + $this->ci->AnrechnungModel->update( + $anrechnung_id, + array( + 'empfehlung_anrechnung' => true, + 'updateamum' => (new DateTime())->format('Y-m-d H:m:i'), + 'updatevon' => $lektor_uid + ) + ); + + // Transaction complete + $this->ci->db->trans_complete(); + + if ($this->ci->db->trans_status() === false) + { + $this->ci->db->trans_rollback(); + return error($result->msg, EXIT_ERROR); + } + + return success(true); // recommended + } + + /** + * Do not recommend Anrechnung. + * @param $anrechnung_id + * @return array + * @throws Exception + */ + public function dontRecommendAnrechnung($anrechnung_id) + { + // Check last Anrechnungstatus + if (!$result = getData($this->ci->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) + { + show_error(getError($result)); + } + + $status_kurzbz = $result->status_kurzbz; + + // Exit if already approved or rejected + if ($status_kurzbz == self::ANRECHNUNGSTATUS_APPROVED || $status_kurzbz == self::ANRECHNUNGSTATUS_REJECTED) + { + return success(false); // dont approve + } + + // Start DB transaction + $this->ci->db->trans_start(false); + + $lektor_uid = getAuthUID(); + + // Insert new status progessed by stgl + $this->ci->AnrechnungModel->saveAnrechnungstatus($anrechnung_id, self::ANRECHNUNGSTATUS_PROGRESSED_BY_STGL); + + // Update empfehlung_anrechnung + $this->ci->AnrechnungModel->update( + $anrechnung_id, + array( + 'empfehlung_anrechnung' => false, + 'updateamum' => (new DateTime())->format('Y-m-d H:m:i'), + 'updatevon' => $lektor_uid + ) + ); + + // Transaction complete + $this->ci->db->trans_complete(); + + if ($this->ci->db->trans_status() === false) + { + $this->ci->db->trans_rollback(); + return error($result->msg, EXIT_ERROR); + } + + return success(true); // recommended + } + private function _setAnrechnungDataObject($anrechnung) { $anrechnung_data = new StdClass(); diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php new file mode 100644 index 000000000..b9552c991 --- /dev/null +++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php @@ -0,0 +1,159 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => $this->p->t('anrechnung', 'anrechnungenPruefen'), + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'tabulator' => true, + 'ajaxlib' => true, + 'dialoglib' => true, + 'tablewidget' => true, + 'phrases' => array( + 'global' => array( + 'begruendung' + ), + 'anrechnung' => array( + 'nachweisdokumente', + 'empfehlung' + ), + 'ui' => array( + 'anzeigen', + 'alleAnzeigen', + 'hilfeZuDieserSeite', + 'hochladen', + 'spaltenEinstellen', + 'hilfeZuDieserSeite', + 'alleAuswaehlen', + 'alleAbwaehlen', + 'ausgewaehlteZeilen', + 'hilfe', + 'tabelleneinstellungen', + 'keineDatenVorhanden', + 'spaltenEinstellen', + 'ja', + 'nein' + ), + 'person' => array( + 'student', + 'personenkennzeichen', + 'vorname', + 'nachname' + ), + 'lehre' => array( + 'studiensemester', + 'studiengang', + 'lehrveranstaltung', + 'ects', + 'lektor', + ), + 'table' => array( + 'spaltenEinAusblenden', + 'spaltenEinAusblendenMitKlickOeffnen', + 'spaltenEinAusblendenAufEinstellungenKlicken', + 'spaltenEinAusblendenMitKlickAktivieren', + 'spaltenEinAusblendenMitKlickSchliessen', + 'spaltenbreiteVeraendern', + 'spaltenbreiteVeraendernText', + 'spaltenbreiteVeraendernInfotext', + 'zeilenAuswaehlen', + 'zeilenAuswaehlenEinzeln', + 'zeilenAuswaehlenBereich', + 'zeilenAuswaehlenAlle' + ) + ), + 'customJSs' => array( + 'public/js/bootstrapper.js', + 'public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js' + ) + ) +); +?> + + +
+
+ +
+ +
+ +
+
+
+
+ widgetlib->widget( + 'Studiensemester_widget', + array( + DropdownWidget::SELECTED_ELEMENT => $studiensemester_selected + ), + array( + 'name' => 'studiensemester', + 'id' => 'studiensemester' + ) + ); + ?> +
+ +
+
+
+ +
+
+ load->view('lehre/anrechnung/reviewAnrechnungUebersichtData.php'); ?> +
+
+ +
+ + +
+ +
+ + +
+
+ + +
+
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> + diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php new file mode 100644 index 000000000..39f3e4561 --- /dev/null +++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php @@ -0,0 +1,126 @@ +>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung" + FROM anrechnungen + JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz) + JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id) + JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id) + WHERE anrechnungen.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' + AND le.studiensemester_kurzbz = anrechnungen.studiensemester_kurzbz + AND lema.mitarbeiter_uid = \'' . $LEKTOR_UID . '\' + AND le.lehre = TRUE +'; + +$filterWidgetArray = array( + 'query' => $query, + 'tableUniqueId' => 'approveAnrechnungUebersicht', + 'requiredPermissions' => 'lehre/anrechnung_empfehlen', + 'datasetRepresentation' => 'tabulator', + 'columnsAliases' => array( + 'anrechnung_id', + 'lehrveranstaltung_id', + 'begruendung_id', + 'dms_id', + 'studiensemester_kurzbz', + 'studiengang_kz', + ucfirst($this->p->t('lehre', 'studiengang')), + ucfirst($this->p->t('lehre', 'lehrveranstaltung')), + 'ECTS', + ucfirst($this->p->t('person', 'studentIn')), + ucfirst($this->p->t('global', 'begruendung')), + ucfirst($this->p->t('anrechnung', 'nachweisdokumente')), + ucfirst($this->p->t('anrechnung', 'empfehlung')), + 'status_kurzbz', + 'Status' + ), + 'datasetRepOptions' => '{ + height: func_height(this), + layout: "fitColumns", // fit columns to width of table + persistentLayout:true, + persistentSort:true, + autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated + headerFilterPlaceholder: " ", + index: "anrechnung_id", // assign specific column as unique id (important for row indexing) + selectable: true, // allow row selection + selectableRangeMode: "click", // allow range selection using shift end click on end of range + selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated + tableBuilt: function(){ + func_tableBuilt(this); + }, + tableWidgetFooter: { + selectButtons: true + }, + selectableCheck: function(row){ + return func_selectableCheck(row); + }, + rowFormatter:function(row){ + func_rowFormatter(row); + }, + rowUpdated:function(row){ + func_rowUpdated(row); + } + }', // tabulator properties + 'datasetRepFieldsDefs' => '{ + anrechnung_id: {visible: false}, + lehrveranstaltung_id: {visible: false}, + begruendung_id: {visible: false}, + dms_id: {visible: false}, + studiensemester_kurzbz: {visible: false}, + studiengang_kz: {visible: false}, + stg_bezeichnung: {headerFilter:"input"}, + lv_bezeichnung: {headerFilter:"input"}, + ects: {headerFilter:"input"}, + student: {headerFilter:"input"}, + begruendung: {headerFilter:"input"}, + dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{ + labelField:"dokument_bezeichnung", + url:function(cell){return "'. current_url() .'/download?dms_id=" + cell.getData().dms_id}, + target:"_blank" + }}, + empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung}, + status_kurzbz: {visible: false}, + status_bezeichnung: {headerFilter:"input"} + }', // col properties +); + +echo $this->widgetlib->widget('TableWidget', $filterWidgetArray); + +?> \ No newline at end of file diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js new file mode 100644 index 000000000..8d038e557 --- /dev/null +++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js @@ -0,0 +1,280 @@ +const BASE_URL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router; +const APPROVE_ANRECHNUNG_DETAIL_URI = "lehre/anrechnung/ReviewAnrechnungDetail"; + +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'; + +const COLOR_LIGHTGREY = "#f5f5f5"; + +// TABULATOR FUNCTIONS +// --------------------------------------------------------------------------------------------------------------------- +// Returns relative height (depending on screen size) +function func_height(table){ + return $(window).height() * 0.50; +} + +// Adds column details +function func_tableBuilt(table) { + table.addColumn( + { + title: "Details", + align: "center", + width: 100, + formatter: "link", + formatterParams:{ + label:"Details", + url:function(cell){ + return BASE_URL + "/" + APPROVE_ANRECHNUNG_DETAIL_URI + "?anrechnung_id=" + cell.getData().anrechnung_id + }, + target:"_blank" + } + }, false, "status" // place column after status + ); +} + +// Formats the rows +function func_rowFormatter(row){ + let status_kurzbz = row.getData().status_kurzbz; + + row.getCells().forEach(function(cell){ + if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) + { + row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default + } + }); +} + +// Formats row selectable/unselectable +function func_selectableCheck(row){ + let status_kurzbz = row.getData().status_kurzbz; + + return ( + status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR + ); +} + +// Performes after row was updated +function func_rowUpdated(row){ + // Refresh row formatters + row.reformat(); + + // Deselect and disable new selection of updated rows + row.deselect(); + row.getElement().style["pointerEvents"] = "none"; +} + +// Formats empfehlung_anrechnung +var format_empfehlung_anrechnung = function(cell, formatterParams){ + return (cell.getValue() == null) + ? '-' + : (cell.getValue() == 'true') + ? FHC_PhrasesLib.t("ui", "ja") + : FHC_PhrasesLib.t("ui", "nein"); +} + +/* + * Hook to overwrite TableWigdgets select-all-button behaviour + * Select all (filtered) rows that are progressed by stg leiter. + * (Ignore rows that are approved, rejected or in request for recommendation) + */ +function tableWidgetHook_selectAllButton(tableWidgetDiv){ + tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true) + .filter(row => + row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR + ) + .forEach((row => row.select())); +} + + +$(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; + } + + // Redraw table on resize to fit tabulators height to windows height + window.addEventListener('resize', function(){ + $('#tableWidgetTabulator').tabulator('setHeight', $(window).height() * 0.50); + $('#tableWidgetTabulator').tabulator('redraw', true); + }); + + // Show only rows with anrechnungen ohne Empfehlung + $("#show-need-recommendation").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR} + ] + ); + }); + + // Show only rows with empfohlene + noch nicht genehmigte/abgelehnte anrechnungen + $("#show-recommended").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_PROGRESSED_BY_STGL}, + {field: 'empfehlung_anrechnung', type: '=', value: 'true'} + ] + ); + }); + + // Show only rows with nicht empfohlene + noch nicht genehmigte/abgelehnte anrechnungen + $("#show-not-recommended").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', [ + {field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_PROGRESSED_BY_STGL}, + {field: 'empfehlung_anrechnung', type: '=', value: 'false'}, + ] + ); + }); + + // Show only rows with genehmigte anrechnungen + $("#show-approved").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_APPROVED} + ] + ); + }); + + // Show only rows with abgelehnte anrechnungen + $("#show-rejected").click(function(){ + $('#tableWidgetTabulator').tabulator('setFilter', + [ + {field: 'status_kurzbz', type: '=', value: ANRECHNUNGSTATUS_REJECTED} + ] + ); + }); + + /** + * Show all rows: clear filter and blur button + * Bootstrap button remains in activated style, even when clicking various times. + * This function "resets" button style and clear all tabulators filter. + * NOTE: MUST be after all other filters + */ + $(".btn-clearfilter").click(function(){ + if($(this).hasClass('active')) + { + $('#tableWidgetTabulator').tabulator('clearFilter'); + $(this).blur(); + } + }) + + // Recommend Anrechnungen + $("#recommend-anrechnungen").click(function(){ + // 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; + } + + + // Prepare data object for ajax call + let data = { + 'data': selected_data + }; + + 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) + { + // Update status 'genehmigt' + $('#tableWidgetTabulator').tabulator('updateData', data.retval); + + // Print success message + FHC_DialogLib.alertSuccess(data.retval.length + " Anrechnungsanträge wurden empfohlen."); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); + } + } + ); + }); + + // Dont recommend Anrechnungen + $("#dont-recommend-anrechnungen").click(function(){ + // 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; + } + + // 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': selected_data + }; + + 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) + { + // Update status 'genehmigt' + $('#tableWidgetTabulator').tabulator('updateData', data.retval); + + // Print success message + FHC_DialogLib.alertSuccess(data.retval.length + " Anrechnungsanträge wurden nicht empfohlen."); + } + }, + errorCallback: function (jqXHR, textStatus, errorThrown) + { + FHC_DialogLib.alertError("Systemfehler
Bitte kontaktieren Sie Ihren Administrator."); + } + } + ); + }); + +}); \ No newline at end of file diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index f8f7c9eaf..229d23965 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -8557,7 +8557,7 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Nur jene anzeigen, wo eine Empfehlung noch ansteht', + 'text' => 'Nur jene anzeigen, wo eine Empfehlung noch fehlt', 'description' => '', 'insertvon' => 'system' ), @@ -8608,6 +8608,66 @@ Any unusual occurrences 'insertvon' => 'system' ) ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'anrechnungenPruefen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Anrechnungen prüfen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Review applications', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'empfehlen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Empfehlen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Recommend', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'anrechnung', + 'phrase' => 'nichtEmpfehlen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Nicht empfehlen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Do not recommend', + 'description' => '', + 'insertvon' => 'system' + ) + ) ) );