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'
+ )
+ )
+);
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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'
+ )
+ )
)
);