From 4b237cbc7fa778f1a01513599b3a9f4972970d40 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Fri, 28 May 2021 02:12:55 +0200 Subject: [PATCH 1/6] =?UTF-8?q?oehbeitrag=20versicherung:=20possible=20to?= =?UTF-8?q?=20display=20and=20add=20Oehbeitraege=20and=20Versicherungsbeit?= =?UTF-8?q?r=C3=A4ge=20per=20semester?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/controllers/codex/Oehbeitrag.php | 148 ++++++++++++ application/models/codex/Oehbeitrag_model.php | 53 +++++ application/views/codex/oehbeitrag.php | 69 ++++++ public/js/codex/oehbeitrag.js | 217 ++++++++++++++++++ 4 files changed, 487 insertions(+) create mode 100644 application/controllers/codex/Oehbeitrag.php create mode 100644 application/views/codex/oehbeitrag.php create mode 100644 public/js/codex/oehbeitrag.js diff --git a/application/controllers/codex/Oehbeitrag.php b/application/controllers/codex/Oehbeitrag.php new file mode 100644 index 000000000..818815e95 --- /dev/null +++ b/application/controllers/codex/Oehbeitrag.php @@ -0,0 +1,148 @@ + 'admin:r',// TODO which Berechtigung? + 'getValidStudiensemester' => 'admin:r', + 'addOehbeitrag' => 'admin:rw', + 'deleteOehbeitrag' => 'admin:rw' + ) + ); + + $this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + } + + public function index() + { + $oehbeitraege = array(); + + $oehbeitragRes = $this->_loadOehbeitraege(); + + if (isError($oehbeitragRes)) + show_error(getError($oehbeitragRes)); + + if (hasData($oehbeitragRes)) + $oehbeitraege = getData($oehbeitragRes); + + $this->load->view("codex/oehbeitrag.php", array('oehbeitraege' => $oehbeitraege)); + } + + public function getValidStudiensemester() + { + $studiensemester = array(); + + $studiensemesterres = $this->OehbeitragModel->getUnassignedStudiensemester(self::STUDIENSEMESTER_START); + + if (isError($studiensemesterres)) + { + $this->outputJsonError(getError($studiensemesterres)); + die(); + } + + if (hasData($studiensemesterres)) + $studiensemester = getData($studiensemesterres); + + $this->outputJsonSuccess($studiensemester); + } + + public function addOehbeitrag() + { + $studierendenbeitrag = $this->input->post('studierendenbeitrag'); + $versicherung = $this->input->post('versicherung'); + $von_studiensemester_kurzbz = $this->input->post('von_studiensemester_kurzbz'); + $bis_studiensemester_kurzbz = $this->input->post('bis_studiensemester_kurzbz'); + if ($bis_studiensemester_kurzbz == 'null') + $bis_studiensemester_kurzbz = null; + + if (!is_numeric($studierendenbeitrag)) + $this->outputJsonError('Ungültiger Studierendenbeitrag'); + elseif (!is_numeric($versicherung)) + $this->outputJsonError('Ungültige Versicherung'); + else + { + $vonBisCheck = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz); + + if (isError($vonBisCheck)) + $this->outputJsonError(getError($vonBisCheck)); + else + { + $data = array( + 'studierendenbeitrag' => $studierendenbeitrag, + 'versicherung' => $versicherung, + 'von_studiensemester_kurzbz' => $von_studiensemester_kurzbz, + 'bis_studiensemester_kurzbz' => $bis_studiensemester_kurzbz + ); + + $insertRes = $this->OehbeitragModel->insert($data); + + $this->outputJson($insertRes); + } + } + } + + public function deleteOehbeitrag() + { + $oehbeitrag_id = $this->input->post("oehbeitrag_id"); + + $this->outputJson($this->OehbeitragModel->delete($oehbeitrag_id)); + } + + private function _loadOehbeitraege() + { + $this->OehbeitragModel->addJoin('public.tbl_studiensemester', 'tbl_oehbeitrag.von_studiensemester_kurzbz = tbl_studiensemester.studiensemester_kurzbz'); + $this->OehbeitragModel->addOrder('public.tbl_studiensemester.start', 'DESC'); + return $this->OehbeitragModel->load(); + } + + private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz) + { + $regex = "/^(WS|SS)\d{4}$/"; + if (!preg_match($regex, $von_studiensemester_kurzbz)) + return error("Ungültiges Von-Studiensemester"); + + if (!preg_match($regex, $bis_studiensemester_kurzbz) && $bis_studiensemester_kurzbz != null) + return error("Ungültiges Bis-Studiensemester"); + + $this->StudiensemesterModel->addSelect("start"); + $vonStudiensemesterRes = $this->StudiensemesterModel->load($von_studiensemester_kurzbz); + + if (!hasData($vonStudiensemesterRes)) + return error("Fehler beim Holen von Von-Studiensemester"); + + $this->StudiensemesterModel->addSelect("start"); + $bisStudiensemesterRes = $this->StudiensemesterModel->load($bis_studiensemester_kurzbz); + + if (!hasData($bisStudiensemesterRes)) + return error("Fehler beim Holen von Bis-Studiensemester"); + + $vonStudiensemester = getData($vonStudiensemesterRes)[0]->start; + $bisStudiensemester = getData($bisStudiensemesterRes)[0]->start; + + if ($bis_studiensemester_kurzbz != null && new DateTime($vonStudiensemester) > new DateTime($bisStudiensemester)) + return error("Von-Studiensemester größer als Bis-Studiensemester"); + + $assignableRes = $this->OehbeitragModel->checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz); + + if (isError($assignableRes)) + return $assignableRes; + + if (hasData($assignableRes)) + { + $assignable = getData($assignableRes)[0]; + + if (!$assignable) + return error("Keine Zuweisung möglich, Semesterüberschneidung"); + } + + return success("Studiensemester gültig"); + } +} diff --git a/application/models/codex/Oehbeitrag_model.php b/application/models/codex/Oehbeitrag_model.php index d12dbf23f..ace532908 100644 --- a/application/models/codex/Oehbeitrag_model.php +++ b/application/models/codex/Oehbeitrag_model.php @@ -32,4 +32,57 @@ class Oehbeitrag_model extends DB_Model return $this->execQuery($qry, array($studiensemester_kurzbz)); } + + /** + * Gets all Studiensemester for which no Oehbeitrag value assignment. + * @param string $start_studiensemester_kurzbz semester before the given semester are ignored + * @return object + */ + public function getUnassignedStudiensemester($start_studiensemester_kurzbz) + { + $qry = "SELECT * FROM public.tbl_studiensemester sem + WHERE sem.start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?) + AND NOT EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag oeh + JOIN public.tbl_studiensemester oeh_von ON oeh.von_studiensemester_kurzbz = oeh_von.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester oeh_bis ON oeh.bis_studiensemester_kurzbz = oeh_bis.studiensemester_kurzbz + WHERE sem.start::date >= oeh_von.start::date AND (sem.start::date <= oeh_bis.start::date OR oeh_bis.studiensemester_kurzbz IS NULL)) + ORDER BY sem.start"; + + return $this->execQuery($qry, array($start_studiensemester_kurzbz)); + } + + /** + * Checks if a Öhbeitrag can be assigned for a Studiensemester range. + * @param string $von_studiensemester_kurzbz + * @param string $bis_studiensemester_kurzbz + * @return object + */ + public function checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz = null) + { + $params = array($von_studiensemester_kurzbz); + + $allStdSemSpanQry = "SELECT count(studiensemester_kurzbz) as number_assigned FROM public.tbl_studiensemester sem + WHERE start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?)"; + + if ($bis_studiensemester_kurzbz != null) + { + $allStdSemSpanQry .= " AND (start <= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?))"; + $params[] = $bis_studiensemester_kurzbz; + } + + $allStdSemSpanQry .= " AND EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag + JOIN public.tbl_studiensemester sem_von ON tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester sem_bis ON tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz + WHERE sem.start >= sem_von.start AND (sem.start <= sem_bis.start OR sem_bis.studiensemester_kurzbz IS NULL))"; + + $nrAssigned = $this->execQuery($allStdSemSpanQry, $params); + + if (isError($nrAssigned)) + return $nrAssigned; + + if (!hasData($nrAssigned)) + return error("Fehler bei Überprüfung der Möglichkeit der Semesterzuweisung"); + + return success(array(getData($nrAssigned)[0]->number_assigned == 0)); + } } diff --git a/application/views/codex/oehbeitrag.php b/application/views/codex/oehbeitrag.php new file mode 100644 index 000000000..afb2170ff --- /dev/null +++ b/application/views/codex/oehbeitrag.php @@ -0,0 +1,69 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'ÖH-Beitragsverwaltung', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'dialoglib' => true, + 'ajaxlib' => true, + 'navigationwidget' => true, + 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css'/*, 'public/css/codex/oehbeitrag.css'*/), + 'customJSs' => array('public/js/tablesort/tablesort.js', 'public/js/codex/oehbeitrag.js') + ) +); +?> + + +
+ + widgetlib->widget('NavigationWidget');*/ ?> + +
+
+
+
+ +
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
Gültig vonGültig bis (inkl.)StudierendenbetragVersicherungsbetragAktion
von_studiensemester_kurzbz ?>bis_studiensemester_kurzbz == null ? 'unbeschränkt' : $oehbeitrag->bis_studiensemester_kurzbz ?>studierendenbeitrag, 2, ',', '.') ?>versicherung, 2, ',', '.') ?>
+
+
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/public/js/codex/oehbeitrag.js b/public/js/codex/oehbeitrag.js new file mode 100644 index 000000000..6346c8ba0 --- /dev/null +++ b/public/js/codex/oehbeitrag.js @@ -0,0 +1,217 @@ +const BASE_URL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router; +const CALLED_PATH = FHC_JS_DATA_STORAGE_OBJECT.called_path; +const CONTROLLER_URL = BASE_URL + "/"+CALLED_PATH; + +/** + * javascript file for Öhbeitrag GUI + */ +$(document).ready(function () +{ + //initialise table sorter + //Tablesort.addTablesorter("oehbeitraegeTbl", [], ["zebra"]); + + $("#addNewOeh").click( + function() + { + let callback = function(data) + { + if (FHC_AjaxClient.hasData(data)) + { + let studiensemester = FHC_AjaxClient.getData(data); + let nextOehbeitragId = Oehbeitrag.newBeitragId; + + let newRowHtml = ""+ + ""; + newRowHtml += ""; + newRowHtml += ""; + newRowHtml += ""; + newRowHtml += ""; + newRowHtml += ""+ + ""+ + ""+ + ""; + +/* $("#saveHeading, .saveCell").show();*/ + $("#oehbeitraegeTbl tbody").prepend(newRowHtml); + $("#addOeh_"+Oehbeitrag.newBeitragId).click( + function() + { + // get form data into object + let oehbeitrag = { + "von_studiensemester_kurzbz": $("#von_studiensemester_kurzbz_"+nextOehbeitragId).val(), + "bis_studiensemester_kurzbz": $("#bis_studiensemester_kurzbz_"+nextOehbeitragId).val(), + "studierendenbeitrag": $("#studierendenbeitrag_"+nextOehbeitragId).val().replace(",", "."), + "versicherung": $("#versicherung_"+nextOehbeitragId).val().replace(",", ".") + } + + Oehbeitrag.addOehbeitrag(oehbeitrag, nextOehbeitragId); + } + ); + + // increase counter for newly added rows + Oehbeitrag.newBeitragId++; + } + else + FHC_DialogLib.alertInfo("ÖH-Beiträge für alle Studiensemester festgelegt"); + } + + Oehbeitrag.getValidStudiensemester(callback); + } + ) + + $(".deleteBtn").click( + function() + { + let oehbeitrag_id_prefixed = $(this).prop("id"); + let oehbeitrag_id = oehbeitrag_id_prefixed.substr(oehbeitrag_id_prefixed.indexOf('_')+1); + + Oehbeitrag.deleteOehbeitrag(oehbeitrag_id); + } + ) +}); + +var Oehbeitrag = { + newBeitragId: 0, + // ----------------------------------------------------------------------------------------------------------------- + // ajax calls + getValidStudiensemester: function(callback) + { + FHC_AjaxClient.ajaxCallGet( + CALLED_PATH + "/getValidStudiensemester", + null, + { + successCallback: callback, + errorCallback: function() + { + FHC_DialogLib.alertError('Fehler beim Holen der Semester'); + } + } + ); + }, + addOehbeitrag: function(oehbeitrag, nextOehbeitragId) + { + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/addOehbeitrag', + oehbeitrag, + { + successCallback: function(data, textStatus, jqXHR) { + console.log(data); + if (FHC_AjaxClient.isError(data)) + { + FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + } + else if (FHC_AjaxClient.hasData(data)) + { + console.log(data); + let inserted_id = FHC_AjaxClient.getData(data); + + // refresh table row in GUI + let bis_studiensemester_kurzbz = oehbeitrag.bis_studiensemester_kurzbz == 'null' ? 'unbeschränkt' : oehbeitrag.bis_studiensemester_kurzbz; + + $("#studierendenbeitrag_"+nextOehbeitragId).parent().html(Oehbeitrag._formatDecimalGerman(oehbeitrag.studierendenbeitrag)); + $("#versicherung_"+nextOehbeitragId).parent().html(Oehbeitrag._formatDecimalGerman(oehbeitrag.versicherung)); + $("#von_studiensemester_kurzbz_"+nextOehbeitragId).parent().html(oehbeitrag.von_studiensemester_kurzbz); + $("#bis_studiensemester_kurzbz_"+nextOehbeitragId).parent().html(bis_studiensemester_kurzbz); + + // add delete button instead of save btn + $("#addOeh_"+nextOehbeitragId).parent().html(""); + + $("#delete_"+inserted_id).click( + function() + { + let oehbeitrag_id_prefixed = $(this).prop("id"); + let oehbeitrag_id = oehbeitrag_id_prefixed.substr(oehbeitrag_id_prefixed.indexOf('_')+1); + + Oehbeitrag.deleteOehbeitrag(oehbeitrag_id); + } + ) + } + else + { + FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags'); + } + }, + errorCallback: function() + { + FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags'); + } + } + ); + }, + deleteOehbeitrag: function(oehbeitrag_id) + { + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/deleteOehbeitrag', + {"oehbeitrag_id": oehbeitrag_id}, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + console.log(data); + $("#delete_"+oehbeitrag_id).closest("tr").remove(); + } + else + { + FHC_DialogLib.alertError('Fehler beim Löschen des Öhbeitrags'); + } + }, + errorCallback: function() + { + FHC_DialogLib.alertError('Fehler beim Löschen des Öhbeitrags'); + } + } + ); + }, + + // ----------------------------------------------------------------------------------------------------------------- + // (private) methods + _printStudiensemesterDropdown(name, studiensemester) + { + let rowHtml = ""; + let first = true; + for (let idx in studiensemester) + { + let selected = first ? ' selected' : ''; + let studiensemester_kurzbz = studiensemester[idx].studiensemester_kurzbz; + rowHtml += ""; + first = false; + } + + return rowHtml; + }, + /** + * Formats a numeric value as a float with two decimals + * @param sum + * @returns {string} + */ + _formatDecimalGerman: function(sum) + { + var dec = null; + + if(sum === null) + dec = parseFloat(0).toFixed(2).replace(".", ","); + else if(sum === '') + { + dec = '' + } + else + { + dec = parseFloat(sum).toFixed(2); + + dec = dec.split('.'); + var dec1 = dec[0]; + var dec2 = ',' + dec[1]; + var rgx = /(\d+)(\d{3})/; + while (rgx.test(dec1)) { + dec1 = dec1.replace(rgx, '$1' + '.' + '$2'); + } + dec = dec1 + dec2; + } + return dec; + } +}; From fc3921ecadf453388bfffc35459f59e2d4c8b4ac Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Fri, 28 May 2021 02:15:26 +0200 Subject: [PATCH 2/6] dbupdate_3.3.php: removed "bezeichnung_mehrsprachig" field from bis.tbl_oehbeitrag table check --- system/dbupdate_3.3.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 990fb0308..8ab352f08 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -4856,7 +4856,7 @@ $tabellen=array( "bis.tbl_mobilitaetsprogramm" => array("mobilitaetsprogramm_code","kurzbz","beschreibung","sichtbar","sichtbar_outgoing"), "bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz", "iso3166_1_a2","iso3166_1_a3"), "bis.tbl_nationengruppe" => array("nationengruppe_kurzbz","nationengruppe_bezeichnung","aktiv"), - "bis.tbl_oehbeitrag" => array("oehbeitrag_id","studierendenbeitrag","versicherung","von_studiensemester_kurzbz","bis_studiensemester_kurzbz","bezeichnung_mehrsprachig", "insertamum", "insertvon", "updateamum", "updatevon"), + "bis.tbl_oehbeitrag" => array("oehbeitrag_id","studierendenbeitrag","versicherung","von_studiensemester_kurzbz","bis_studiensemester_kurzbz","insertamum","insertvon","updateamum","updatevon"), "bis.tbl_orgform" => array("orgform_kurzbz","code","bezeichnung","rolle","bisorgform_kurzbz","bezeichnung_mehrsprachig"), "bis.tbl_verwendung" => array("verwendung_code","verwendungbez"), "bis.tbl_zgv" => array("zgv_code","zgv_bez","zgv_kurzbz","bezeichnung"), From df8c946bb2c575a9e873735e9fe71d6f13f62f88 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 31 May 2021 23:20:56 +0200 Subject: [PATCH 3/6] enabled updating of oehbeitrag values --- application/controllers/codex/Oehbeitrag.php | 92 ++++++- application/models/codex/Oehbeitrag_model.php | 34 ++- application/views/codex/oehbeitrag.php | 20 +- public/css/codex/oehbeitrag.css | 9 + public/js/codex/oehbeitrag.js | 258 +++++++++++++++--- 5 files changed, 349 insertions(+), 64 deletions(-) create mode 100644 public/css/codex/oehbeitrag.css diff --git a/application/controllers/codex/Oehbeitrag.php b/application/controllers/codex/Oehbeitrag.php index 818815e95..9aa5e4402 100644 --- a/application/controllers/codex/Oehbeitrag.php +++ b/application/controllers/codex/Oehbeitrag.php @@ -13,6 +13,7 @@ class Oehbeitrag extends Auth_Controller 'index' => 'admin:r',// TODO which Berechtigung? 'getValidStudiensemester' => 'admin:r', 'addOehbeitrag' => 'admin:rw', + 'updateOehbeitrag' => 'admin:rw', 'deleteOehbeitrag' => 'admin:rw' ) ); @@ -38,14 +39,16 @@ class Oehbeitrag extends Auth_Controller public function getValidStudiensemester() { + $oehbeitrag_id = $this->input->get('oehbeitrag_id'); + $oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null; + $studiensemester = array(); - $studiensemesterres = $this->OehbeitragModel->getUnassignedStudiensemester(self::STUDIENSEMESTER_START); - + $studiensemesterres = $this->OehbeitragModel->getUnassignedStudiensemester(self::STUDIENSEMESTER_START, $oehbeitrag_id_arr); if (isError($studiensemesterres)) { $this->outputJsonError(getError($studiensemesterres)); - die(); + return; } if (hasData($studiensemesterres)) @@ -63,9 +66,9 @@ class Oehbeitrag extends Auth_Controller if ($bis_studiensemester_kurzbz == 'null') $bis_studiensemester_kurzbz = null; - if (!is_numeric($studierendenbeitrag)) + if (!$this->_checkAmount($studierendenbeitrag)) $this->outputJsonError('Ungültiger Studierendenbeitrag'); - elseif (!is_numeric($versicherung)) + elseif (!$this->_checkAmount($versicherung)) $this->outputJsonError('Ungültige Versicherung'); else { @@ -82,13 +85,65 @@ class Oehbeitrag extends Auth_Controller 'bis_studiensemester_kurzbz' => $bis_studiensemester_kurzbz ); - $insertRes = $this->OehbeitragModel->insert($data); - - $this->outputJson($insertRes); + $this->outputJson($this->OehbeitragModel->insert($data)); } } } + public function updateOehbeitrag() + { + $oehbeitrag_id = $this->input->post("oehbeitrag_id"); + $data = $this->input->post("data"); + + if (!is_numeric($oehbeitrag_id) || isEmptyArray($data)) + { + $this->outputJsonError("Ungültige Parameter"); + return; + } + + foreach ($data as $idx => $value) + { + if ($idx == 'studierendenbeitrag' || $idx == 'versicherung') + { + if (!$this->_checkAmount($value)) + { + $this->outputJsonError("Ungültiger $idx"); + return; + } + } + elseif ($idx == 'von_studiensemester_kurzbz' || $idx == 'bis_studiensemester_kurzbz') + { + $this->OehbeitragModel->addSelect('von_studiensemester_kurzbz, bis_studiensemester_kurzbz'); + $vonBisStudiensemesterRes = $this->OehbeitragModel->load($oehbeitrag_id); + + if (!hasData($vonBisStudiensemesterRes)) + { + $this->outputJsonError("Fehler beim Holen des Öhbeitrags"); + return; + } + + $vonBisStudiensemester = getData($vonBisStudiensemesterRes); + + $von_studiensemester_kurzbz = $idx == 'von_studiensemester_kurzbz' ? $value : $vonBisStudiensemester[0]->von_studiensemester_kurzbz; + + if ($idx == 'bis_studiensemester_kurzbz') + $bis_studiensemester_kurzbz = $data[$idx] = $value == 'null' ? null : $value; + else + $bis_studiensemester_kurzbz = $vonBisStudiensemester[0]->bis_studiensemester_kurzbz; + + $checkStudiensemester = $this->_checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id); + + if (isError($checkStudiensemester)) + { + $this->outputJsonError(getError($checkStudiensemester)); + return; + } + } + } + + $this->outputJson($this->OehbeitragModel->update($oehbeitrag_id, $data)); + } + public function deleteOehbeitrag() { $oehbeitrag_id = $this->input->post("oehbeitrag_id"); @@ -98,12 +153,19 @@ class Oehbeitrag extends Auth_Controller private function _loadOehbeitraege() { - $this->OehbeitragModel->addJoin('public.tbl_studiensemester', 'tbl_oehbeitrag.von_studiensemester_kurzbz = tbl_studiensemester.studiensemester_kurzbz'); - $this->OehbeitragModel->addOrder('public.tbl_studiensemester.start', 'DESC'); + $this->OehbeitragModel->addSelect('oehbeitrag_id, von_studiensemester_kurzbz, bis_studiensemester_kurzbz, studierendenbeitrag, versicherung, sem_von.start as von_datum, sem_bis.ende as bis_datum'); + $this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_von', 'tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz'); + $this->OehbeitragModel->addJoin('public.tbl_studiensemester sem_bis', 'tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz', 'LEFT'); + $this->OehbeitragModel->addOrder('sem_von.start', 'DESC'); return $this->OehbeitragModel->load(); } - private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz) + private function _checkAmount($amount) + { + return is_numeric($amount) && $amount <= 99999.99; + } + + private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id = null) { $regex = "/^(WS|SS)\d{4}$/"; if (!preg_match($regex, $von_studiensemester_kurzbz)) @@ -130,7 +192,13 @@ class Oehbeitrag extends Auth_Controller if ($bis_studiensemester_kurzbz != null && new DateTime($vonStudiensemester) > new DateTime($bisStudiensemester)) return error("Von-Studiensemester größer als Bis-Studiensemester"); - $assignableRes = $this->OehbeitragModel->checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz); + $oehbeitrag_id_arr = isset($oehbeitrag_id) ? array($oehbeitrag_id) : null; + + $assignableRes = $this->OehbeitragModel->checkIfStudiensemesterAssignable( + $von_studiensemester_kurzbz, + $bis_studiensemester_kurzbz, + $oehbeitrag_id_arr + ); if (isError($assignableRes)) return $assignableRes; diff --git a/application/models/codex/Oehbeitrag_model.php b/application/models/codex/Oehbeitrag_model.php index ace532908..abc35a663 100644 --- a/application/models/codex/Oehbeitrag_model.php +++ b/application/models/codex/Oehbeitrag_model.php @@ -34,30 +34,40 @@ class Oehbeitrag_model extends DB_Model } /** - * Gets all Studiensemester for which no Oehbeitrag value assignment. + * Gets all Studiensemester for which no Oehbeitrag value assignment exists. * @param string $start_studiensemester_kurzbz semester before the given semester are ignored * @return object */ - public function getUnassignedStudiensemester($start_studiensemester_kurzbz) + public function getUnassignedStudiensemester($start_studiensemester_kurzbz, $excluded_oehbeitrag_id = array()) { + $params = array($start_studiensemester_kurzbz); + $qry = "SELECT * FROM public.tbl_studiensemester sem WHERE sem.start >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = ?) AND NOT EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag oeh JOIN public.tbl_studiensemester oeh_von ON oeh.von_studiensemester_kurzbz = oeh_von.studiensemester_kurzbz LEFT JOIN public.tbl_studiensemester oeh_bis ON oeh.bis_studiensemester_kurzbz = oeh_bis.studiensemester_kurzbz - WHERE sem.start::date >= oeh_von.start::date AND (sem.start::date <= oeh_bis.start::date OR oeh_bis.studiensemester_kurzbz IS NULL)) - ORDER BY sem.start"; + WHERE sem.start::date >= oeh_von.start::date AND (sem.start::date <= oeh_bis.start::date OR oeh_bis.studiensemester_kurzbz IS NULL)"; - return $this->execQuery($qry, array($start_studiensemester_kurzbz)); + if (!isEmptyArray($excluded_oehbeitrag_id)) + { + $qry .= " AND oehbeitrag_id NOT IN ?"; + $params[] = $excluded_oehbeitrag_id; + } + + $qry .= ") ORDER BY sem.start"; + + return $this->execQuery($qry, $params); } /** * Checks if a Öhbeitrag can be assigned for a Studiensemester range. * @param string $von_studiensemester_kurzbz * @param string $bis_studiensemester_kurzbz - * @return object + * @param array $excluded_oehbeitrag_id + * @return object array with true if assignable, with false if not */ - public function checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz = null) + public function checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz = null, $excluded_oehbeitrag_id = array()) { $params = array($von_studiensemester_kurzbz); @@ -73,7 +83,15 @@ class Oehbeitrag_model extends DB_Model $allStdSemSpanQry .= " AND EXISTS (SELECT 1 FROM bis.tbl_oehbeitrag JOIN public.tbl_studiensemester sem_von ON tbl_oehbeitrag.von_studiensemester_kurzbz = sem_von.studiensemester_kurzbz LEFT JOIN public.tbl_studiensemester sem_bis ON tbl_oehbeitrag.bis_studiensemester_kurzbz = sem_bis.studiensemester_kurzbz - WHERE sem.start >= sem_von.start AND (sem.start <= sem_bis.start OR sem_bis.studiensemester_kurzbz IS NULL))"; + WHERE sem.start >= sem_von.start AND (sem.start <= sem_bis.start OR sem_bis.studiensemester_kurzbz IS NULL)"; + + if (!isEmptyArray($excluded_oehbeitrag_id)) + { + $allStdSemSpanQry .= " AND oehbeitrag_id NOT IN ?"; + $params[] = $excluded_oehbeitrag_id; + } + + $allStdSemSpanQry .= ")"; $nrAssigned = $this->execQuery($allStdSemSpanQry, $params); diff --git a/application/views/codex/oehbeitrag.php b/application/views/codex/oehbeitrag.php index afb2170ff..47892527a 100644 --- a/application/views/codex/oehbeitrag.php +++ b/application/views/codex/oehbeitrag.php @@ -12,7 +12,7 @@ $this->load->view( 'dialoglib' => true, 'ajaxlib' => true, 'navigationwidget' => true, - 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css'/*, 'public/css/codex/oehbeitrag.css'*/), + 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/codex/oehbeitrag.css'), 'customJSs' => array('public/js/tablesort/tablesort.js', 'public/js/codex/oehbeitrag.js') ) ); @@ -41,7 +41,7 @@ $this->load->view( Gültig von - Gültig bis (inkl.) + Gültig bis Studierendenbetrag Versicherungsbetrag Aktion @@ -50,10 +50,18 @@ $this->load->view( - von_studiensemester_kurzbz ?> - bis_studiensemester_kurzbz == null ? 'unbeschränkt' : $oehbeitrag->bis_studiensemester_kurzbz ?> - studierendenbeitrag, 2, ',', '.') ?> - versicherung, 2, ',', '.') ?> + von_datum), 'd.m.Y') . '/' . $oehbeitrag->von_studiensemester_kurzbz ?> + + + bis_studiensemester_kurzbz == null ? 'unbeschränkt' : (date_format(date_create($oehbeitrag->bis_datum), 'd.m.Y') . '/' . $oehbeitrag->bis_studiensemester_kurzbz) ?> + + + studierendenbeitrag, 2, ',', '.') ?> + + + versicherung, 2, ',', '.') ?> + + diff --git a/public/css/codex/oehbeitrag.css b/public/css/codex/oehbeitrag.css new file mode 100644 index 000000000..335489a1b --- /dev/null +++ b/public/css/codex/oehbeitrag.css @@ -0,0 +1,9 @@ +.inline-inputfield { + width: auto; + display: inline; +} + +.fa-edit, .fa-check { + cursor: pointer; + font-size: 1.2em; +} \ No newline at end of file diff --git a/public/js/codex/oehbeitrag.js b/public/js/codex/oehbeitrag.js index 6346c8ba0..68d39a897 100644 --- a/public/js/codex/oehbeitrag.js +++ b/public/js/codex/oehbeitrag.js @@ -8,8 +8,9 @@ const CONTROLLER_URL = BASE_URL + "/"+CALLED_PATH; $(document).ready(function () { //initialise table sorter - //Tablesort.addTablesorter("oehbeitraegeTbl", [], ["zebra"]); + Oehbeitrag._addTablesorter(); + // set trigger for adding new Oehhbeitrag $("#addNewOeh").click( function() { @@ -22,18 +23,14 @@ $(document).ready(function () let newRowHtml = ""+ ""; - newRowHtml += ""; + newRowHtml += Oehbeitrag._getStudiensemesterDropdown(Oehbeitrag.newBeitragId, 'von_studiensemester_kurzbz', studiensemester); newRowHtml += ""; - newRowHtml += ""; + newRowHtml += Oehbeitrag._getStudiensemesterDropdown(Oehbeitrag.newBeitragId, 'bis_studiensemester_kurzbz', studiensemester); newRowHtml += ""; - newRowHtml += ""+ - ""+ - ""+ + newRowHtml += ""+ + ""+ + " " + + " "+ ""; /* $("#saveHeading, .saveCell").show();*/ @@ -43,13 +40,25 @@ $(document).ready(function () { // get form data into object let oehbeitrag = { - "von_studiensemester_kurzbz": $("#von_studiensemester_kurzbz_"+nextOehbeitragId).val(), - "bis_studiensemester_kurzbz": $("#bis_studiensemester_kurzbz_"+nextOehbeitragId).val(), - "studierendenbeitrag": $("#studierendenbeitrag_"+nextOehbeitragId).val().replace(",", "."), - "versicherung": $("#versicherung_"+nextOehbeitragId).val().replace(",", ".") + "von_studiensemester_kurzbz": $("#input_von_studiensemester_kurzbz_"+nextOehbeitragId).val(), + "bis_studiensemester_kurzbz": $("#input_bis_studiensemester_kurzbz_"+nextOehbeitragId).val(), + "studierendenbeitrag": $("#input_studierendenbeitrag_"+nextOehbeitragId).val().replace(",", "."), + "versicherung": $("#input_versicherung_"+nextOehbeitragId).val().replace(",", ".") } - Oehbeitrag.addOehbeitrag(oehbeitrag, nextOehbeitragId); + let studiensemester_von_bis = { + "von_semester_with_date": $("#input_von_studiensemester_kurzbz_"+nextOehbeitragId+" option:selected").text(), + "bis_semester_with_date": $("#input_bis_studiensemester_kurzbz_"+nextOehbeitragId+" option:selected").text() + } + + Oehbeitrag.addOehbeitrag(oehbeitrag, studiensemester_von_bis, nextOehbeitragId); + } + ); + + $("#delete_"+nextOehbeitragId).click( + function() + { + $(this).parent('td').parent('tr').remove(); } ); @@ -64,26 +73,32 @@ $(document).ready(function () } ) + // set trigger for deleting Oehhbeitrag $(".deleteBtn").click( function() { let oehbeitrag_id_prefixed = $(this).prop("id"); - let oehbeitrag_id = oehbeitrag_id_prefixed.substr(oehbeitrag_id_prefixed.indexOf('_')+1); + let oehbeitrag_id = oehbeitrag_id_prefixed.substr(oehbeitrag_id_prefixed.lastIndexOf('_')+1); Oehbeitrag.deleteOehbeitrag(oehbeitrag_id); } - ) + ); + + // set trigger for updating Oehhbeitrag + Oehbeitrag._setUpdateEvents(); }); var Oehbeitrag = { newBeitragId: 0, // ----------------------------------------------------------------------------------------------------------------- // ajax calls - getValidStudiensemester: function(callback) + getValidStudiensemester: function(callback, oehbeitrag_id) { + let params = oehbeitrag_id ? {"oehbeitrag_id": oehbeitrag_id} : null; + FHC_AjaxClient.ajaxCallGet( CALLED_PATH + "/getValidStudiensemester", - null, + params, { successCallback: callback, errorCallback: function() @@ -93,33 +108,42 @@ var Oehbeitrag = { } ); }, - addOehbeitrag: function(oehbeitrag, nextOehbeitragId) + addOehbeitrag: function(oehbeitrag, studiensemester_von_bis, nextOehbeitragId) { FHC_AjaxClient.ajaxCallPost( CALLED_PATH + '/addOehbeitrag', oehbeitrag, { successCallback: function(data, textStatus, jqXHR) { - console.log(data); if (FHC_AjaxClient.isError(data)) { FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); } else if (FHC_AjaxClient.hasData(data)) { - console.log(data); let inserted_id = FHC_AjaxClient.getData(data); // refresh table row in GUI - let bis_studiensemester_kurzbz = oehbeitrag.bis_studiensemester_kurzbz == 'null' ? 'unbeschränkt' : oehbeitrag.bis_studiensemester_kurzbz; + let bis_studiensemester_kurzbz = oehbeitrag.bis_studiensemester_kurzbz == 'null' ? 'unbeschränkt' : studiensemester_von_bis.bis_semester_with_date; - $("#studierendenbeitrag_"+nextOehbeitragId).parent().html(Oehbeitrag._formatDecimalGerman(oehbeitrag.studierendenbeitrag)); - $("#versicherung_"+nextOehbeitragId).parent().html(Oehbeitrag._formatDecimalGerman(oehbeitrag.versicherung)); - $("#von_studiensemester_kurzbz_"+nextOehbeitragId).parent().html(oehbeitrag.von_studiensemester_kurzbz); - $("#bis_studiensemester_kurzbz_"+nextOehbeitragId).parent().html(bis_studiensemester_kurzbz); + $("#input_studierendenbeitrag_"+nextOehbeitragId).parent('td').html( + Oehbeitrag._formatDecimalGerman(oehbeitrag.studierendenbeitrag)+" " + ); + $("#input_versicherung_"+nextOehbeitragId).parent('td').html( + Oehbeitrag._formatDecimalGerman(oehbeitrag.versicherung)+" " + ); + $("#input_von_studiensemester_kurzbz_"+nextOehbeitragId).parent('td').html( + studiensemester_von_bis.von_semester_with_date+" " + ); + $("#input_bis_studiensemester_kurzbz_"+nextOehbeitragId).parent('td').html( + bis_studiensemester_kurzbz+" " + ); // add delete button instead of save btn - $("#addOeh_"+nextOehbeitragId).parent().html(""); + $("#addOeh_"+nextOehbeitragId).parent('td').html(""); + + // add update and delete events + Oehbeitrag._setUpdateEvents(); $("#delete_"+inserted_id).click( function() @@ -143,6 +167,52 @@ var Oehbeitrag = { } ); }, + updateOehbeitrag(oehbeitrag_id, fieldname, fieldelement, inputtype) + { + let oehbeitragdata = {}; + let fieldvalue = fieldelement.val(); + oehbeitragdata[fieldname] = fieldvalue; + + FHC_AjaxClient.ajaxCallPost( + CALLED_PATH + '/updateOehbeitrag', + { + "oehbeitrag_id": oehbeitrag_id, + "data": oehbeitragdata + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) + { + FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + } + else if (FHC_AjaxClient.hasData(data)) + { + if (inputtype == 'semester') + fieldvalue = $(fieldelement).find("option:selected").text(); + else + fieldvalue = Oehbeitrag._formatDecimalGerman(fieldvalue); + $("#confirm_"+fieldname+"_"+oehbeitrag_id).parent('td').html( + fieldvalue+" " + ); + $("#edit_"+fieldname+"_"+oehbeitrag_id).click( + function() + { + Oehbeitrag._setUpdateEvent($(this).prop("id"), fieldname, inputtype); + } + ); + } + else + { + FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags'); + } + }, + errorCallback: function() + { + FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags'); + } + } + ); + }, deleteOehbeitrag: function(oehbeitrag_id) { FHC_AjaxClient.ajaxCallPost( @@ -152,8 +222,8 @@ var Oehbeitrag = { successCallback: function(data, textStatus, jqXHR) { if (FHC_AjaxClient.hasData(data)) { - console.log(data); $("#delete_"+oehbeitrag_id).closest("tr").remove(); + Oehbeitrag._addTablesorter(); } else { @@ -170,20 +240,128 @@ var Oehbeitrag = { // ----------------------------------------------------------------------------------------------------------------- // (private) methods - _printStudiensemesterDropdown(name, studiensemester) + _renderOehbeitragTable(oehbeitraege) { - let rowHtml = ""; - let first = true; - for (let idx in studiensemester) + for (let oehbeitragidx in oehbeitraege) { - let selected = first ? ' selected' : ''; - let studiensemester_kurzbz = studiensemester[idx].studiensemester_kurzbz; - rowHtml += ""; - first = false; + let oehbeitrag = oehbeitraege[oehbeitragidx]; + + + } + }, + _setUpdateEvents() + { + $(".editStudierendenbeitrag").off('click').click( + function() + { + Oehbeitrag._setUpdateEvent($(this).prop("id"), 'studierendenbeitrag'); + } + ); + + $(".editVersicherung").off('click').click( + function() + { + Oehbeitrag._setUpdateEvent($(this).prop("id"), 'versicherung'); + } + ); + + $(".editBisStudiensemester").off('click').click( + function() + { + Oehbeitrag._setUpdateEvent($(this).prop("id"), 'bis_studiensemester_kurzbz', 'semester'); + } + ); + + $(".editVonStudiensemester").off('click').click( + function() + { + Oehbeitrag._setUpdateEvent($(this).prop("id"), 'von_studiensemester_kurzbz', 'semester'); + } + ); + + }, + _setUpdateEvent(oehbeitrag_id_prefixed, fieldname, inputtype) + { + let initElement = $("#"+oehbeitrag_id_prefixed); // clicked element triggering event + let oehbeitrag_id = oehbeitrag_id_prefixed.substr(oehbeitrag_id_prefixed.lastIndexOf('_')+1); + let currFieldvalue = initElement.parent('td').text().trim(); + + let callback = function(validSemesterData) + { + let inputHtml = ""; + + // if semester dropdown, retrieve valid semester + if (inputtype === 'semester') + { + if (FHC_AjaxClient.hasData(validSemesterData)) + { + let studiensemester = FHC_AjaxClient.getData(validSemesterData); + + inputHtml = Oehbeitrag._getStudiensemesterDropdown(oehbeitrag_id, fieldname, studiensemester, currFieldvalue, 'inline-inputfield'); + } + } + else // otherwise display textfield + { + inputHtml = ""; + } + + inputHtml += " "; + + initElement.parent('td').html(inputHtml); + + // set the update event + $("#confirm_"+fieldname+"_"+oehbeitrag_id).click( + function() + { + Oehbeitrag.updateOehbeitrag(oehbeitrag_id, fieldname, $("#input_" + fieldname + "_" + oehbeitrag_id), inputtype); + } + ); } + if (inputtype == 'semester') + { + Oehbeitrag.getValidStudiensemester(callback, oehbeitrag_id); + } + else + callback(null); + }, + _getStudiensemesterDropdown(oehbeitrag_id, name, studiensemester, selectedDateSemester, formatclass) + { + let selectedDateSemesterArr = null; + if (selectedDateSemester) + { + selectedDateSemesterArr = selectedDateSemester.split('/'); + } + + let rowHtml = ""; + let inlineClass = formatclass != null ? ' '+formatclass : ''; + + rowHtml += ""; + return rowHtml; }, + _compareGermanDates: function(datea, dateb) + { + return datea.split(".").reverse().join("") < dateb.split(".").reverse().join(""); + }, + _addTablesorter: function() + { + let headers = {headers: { 0: { sorter: false}, 1: { sorter: false}, 4: { sorter: false}}}; + Tablesort.addTablesorter("oehbeitraegeTbl", [[0,0],[1,0]], ["zebra"], 8, headers); + }, /** * Formats a numeric value as a float with two decimals * @param sum @@ -213,5 +391,9 @@ var Oehbeitrag = { dec = dec1 + dec2; } return dec; + }, + _formatDateToGerman: function(date) + { + return date.substring(8, 10) + "." + date.substring(5, 7) + "." + date.substring(0, 4); } }; From 59449380527aad505a1937af3b97616add273b59 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 1 Jun 2021 15:18:54 +0200 Subject: [PATCH 4/6] Oehbeitraege GUI: correct table sorting and refreshing of tablesorter --- application/models/codex/Oehbeitrag_model.php | 3 ++- public/css/codex/oehbeitrag.css | 9 +++++-- public/js/codex/oehbeitrag.js | 26 +++++++++++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/application/models/codex/Oehbeitrag_model.php b/application/models/codex/Oehbeitrag_model.php index abc35a663..0df016ba8 100644 --- a/application/models/codex/Oehbeitrag_model.php +++ b/application/models/codex/Oehbeitrag_model.php @@ -36,6 +36,7 @@ class Oehbeitrag_model extends DB_Model /** * Gets all Studiensemester for which no Oehbeitrag value assignment exists. * @param string $start_studiensemester_kurzbz semester before the given semester are ignored + * @param array $excluded_oehbeitrag_id oehbeitraege to be ignored, i.e. which are assigned * @return object */ public function getUnassignedStudiensemester($start_studiensemester_kurzbz, $excluded_oehbeitrag_id = array()) @@ -64,7 +65,7 @@ class Oehbeitrag_model extends DB_Model * Checks if a Öhbeitrag can be assigned for a Studiensemester range. * @param string $von_studiensemester_kurzbz * @param string $bis_studiensemester_kurzbz - * @param array $excluded_oehbeitrag_id + * @param array $excluded_oehbeitrag_id oehbeitraege to ignore, i.e. which are assignable * @return object array with true if assignable, with false if not */ public function checkIfStudiensemesterAssignable($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz = null, $excluded_oehbeitrag_id = array()) diff --git a/public/css/codex/oehbeitrag.css b/public/css/codex/oehbeitrag.css index 335489a1b..103c5d367 100644 --- a/public/css/codex/oehbeitrag.css +++ b/public/css/codex/oehbeitrag.css @@ -3,7 +3,12 @@ display: inline; } -.fa-edit, .fa-check { +.fa-edit { cursor: pointer; font-size: 1.2em; -} \ No newline at end of file +} + +.fa-check { + cursor: pointer; + font-size: 1.4em; +} diff --git a/public/js/codex/oehbeitrag.js b/public/js/codex/oehbeitrag.js index 68d39a897..9186c1bf0 100644 --- a/public/js/codex/oehbeitrag.js +++ b/public/js/codex/oehbeitrag.js @@ -154,6 +154,9 @@ var Oehbeitrag = { Oehbeitrag.deleteOehbeitrag(oehbeitrag_id); } ) + + // refresh tablesorter + Oehbeitrag._addTablesorter(); } else { @@ -200,6 +203,8 @@ var Oehbeitrag = { Oehbeitrag._setUpdateEvent($(this).prop("id"), fieldname, inputtype); } ); + + Oehbeitrag._addTablesorter(); } else { @@ -359,8 +364,25 @@ var Oehbeitrag = { }, _addTablesorter: function() { - let headers = {headers: { 0: { sorter: false}, 1: { sorter: false}, 4: { sorter: false}}}; - Tablesort.addTablesorter("oehbeitraegeTbl", [[0,0],[1,0]], ["zebra"], 8, headers); + // add parser through the tablesorter addParser method + $.tablesorter.addParser({ + // set a unique id + id: 'germandatesort', + is: function(s, table, cell, $cell) { + // return false so this parser is not auto detected + return false; + }, + format: function(s, table, cell, cellIndex) { + // format data, should sort by leading german date + return s.substring(0, 10).split(".").reverse().join(""); + }, + // set type, either numeric or text + type: 'numeric' + }); + + let headers = {headers: { 0: {sorter: "germandatesort"}, 1: {sorter: "germandatesort"}, 4: {sorter: false}}}; + + Tablesort.addTablesorter("oehbeitraegeTbl", [[0,1]], ["zebra"], 8, headers); }, /** * Formats a numeric value as a float with two decimals From b206c019dfcf1da013697e77f33c58fee5b6e8fd Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 9 Jun 2021 01:34:47 +0200 Subject: [PATCH 5/6] Oehbeitrag GUI: correct decimal format conversion before after update --- application/controllers/codex/Oehbeitrag.php | 4 +- public/js/codex/oehbeitrag.js | 58 +++++++++----------- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/application/controllers/codex/Oehbeitrag.php b/application/controllers/codex/Oehbeitrag.php index 9aa5e4402..7fc8f381f 100644 --- a/application/controllers/codex/Oehbeitrag.php +++ b/application/controllers/codex/Oehbeitrag.php @@ -107,7 +107,7 @@ class Oehbeitrag extends Auth_Controller { if (!$this->_checkAmount($value)) { - $this->outputJsonError("Ungültiger $idx"); + $this->outputJsonError("Ungültige(r) $idx"); return; } } @@ -162,7 +162,7 @@ class Oehbeitrag extends Auth_Controller private function _checkAmount($amount) { - return is_numeric($amount) && $amount <= 99999.99; + return is_numeric($amount) && (float) $amount <= 99999.99; } private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id = null) diff --git a/public/js/codex/oehbeitrag.js b/public/js/codex/oehbeitrag.js index 9186c1bf0..f8fc403f0 100644 --- a/public/js/codex/oehbeitrag.js +++ b/public/js/codex/oehbeitrag.js @@ -127,10 +127,10 @@ var Oehbeitrag = { let bis_studiensemester_kurzbz = oehbeitrag.bis_studiensemester_kurzbz == 'null' ? 'unbeschränkt' : studiensemester_von_bis.bis_semester_with_date; $("#input_studierendenbeitrag_"+nextOehbeitragId).parent('td').html( - Oehbeitrag._formatDecimalGerman(oehbeitrag.studierendenbeitrag)+" " + Oehbeitrag._formatDecimal(oehbeitrag.studierendenbeitrag)+" " ); $("#input_versicherung_"+nextOehbeitragId).parent('td').html( - Oehbeitrag._formatDecimalGerman(oehbeitrag.versicherung)+" " + Oehbeitrag._formatDecimal(oehbeitrag.versicherung)+" " ); $("#input_von_studiensemester_kurzbz_"+nextOehbeitragId).parent('td').html( studiensemester_von_bis.von_semester_with_date+" " @@ -174,6 +174,10 @@ var Oehbeitrag = { { let oehbeitragdata = {}; let fieldvalue = fieldelement.val(); + + if (inputtype != 'semester') // formal number as decimal with point separator + fieldvalue = Oehbeitrag._formatDecimal(fieldvalue, "."); + oehbeitragdata[fieldname] = fieldvalue; FHC_AjaxClient.ajaxCallPost( @@ -193,7 +197,7 @@ var Oehbeitrag = { if (inputtype == 'semester') fieldvalue = $(fieldelement).find("option:selected").text(); else - fieldvalue = Oehbeitrag._formatDecimalGerman(fieldvalue); + fieldvalue = Oehbeitrag._formatDecimal(fieldvalue); $("#confirm_"+fieldname+"_"+oehbeitrag_id).parent('td').html( fieldvalue+" " ); @@ -245,15 +249,6 @@ var Oehbeitrag = { // ----------------------------------------------------------------------------------------------------------------- // (private) methods - _renderOehbeitragTable(oehbeitraege) - { - for (let oehbeitragidx in oehbeitraege) - { - let oehbeitrag = oehbeitraege[oehbeitragidx]; - - - } - }, _setUpdateEvents() { $(".editStudierendenbeitrag").off('click').click( @@ -386,32 +381,31 @@ var Oehbeitrag = { }, /** * Formats a numeric value as a float with two decimals - * @param sum - * @returns {string} + * @param value + * @param decSeparator the new decimal separator + * @returns {string} formatted value */ - _formatDecimalGerman: function(sum) + _formatDecimal: function(value, decSeparator) { - var dec = null; + let dec = null; + let prevSeparator = "."; - if(sum === null) - dec = parseFloat(0).toFixed(2).replace(".", ","); - else if(sum === '') - { - dec = '' - } + if (decSeparator === ".") + prevSeparator = ","; else - { - dec = parseFloat(sum).toFixed(2); + decSeparator = ","; - dec = dec.split('.'); - var dec1 = dec[0]; - var dec2 = ',' + dec[1]; - var rgx = /(\d+)(\d{3})/; - while (rgx.test(dec1)) { - dec1 = dec1.replace(rgx, '$1' + '.' + '$2'); - } - dec = dec1 + dec2; + dec = value.split(prevSeparator); + if (dec.length === 2) + { + dec = parseFloat(dec[0] + '.' + dec[1]).toFixed(2); + dec = dec.replace(prevSeparator, decSeparator); } + else if (Math.floor(value) == value) // if integer, add zeros + dec = value + decSeparator + '00'; + else + dec = value; + return dec; }, _formatDateToGerman: function(date) From ca80d727348b9c8fc76c86f1b7fab8e6c305f466 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 21 Jun 2021 17:42:08 +0200 Subject: [PATCH 6/6] =?UTF-8?q?added=20=C3=96hbeitragsverwaltung=20to=20ma?= =?UTF-8?q?in=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/config/navigation.php | 8 ++++++++ application/controllers/codex/Oehbeitrag.php | 2 ++ application/views/codex/oehbeitrag.php | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/application/config/navigation.php b/application/config/navigation.php index 84004b58e..31cf9a0b0 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -23,6 +23,14 @@ $config['navigation_header'] = array( 'expand' => true, 'sort' => 10, 'requiredPermissions' => 'basis/vilesci:r' + ), + 'oehbeitragsverwaltung' => array( + 'link' => site_url('codex/Oehbeitrag'), + 'icon' => '', + 'description' => 'Öhbeitragsverwaltung', + 'expand' => true, + 'sort' => 20, + 'requiredPermissions' => 'admin:w' ) ) ), diff --git a/application/controllers/codex/Oehbeitrag.php b/application/controllers/codex/Oehbeitrag.php index 7fc8f381f..f1e5bf508 100644 --- a/application/controllers/codex/Oehbeitrag.php +++ b/application/controllers/codex/Oehbeitrag.php @@ -20,6 +20,8 @@ class Oehbeitrag extends Auth_Controller $this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel'); $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + $this->load->library('WidgetLib'); } public function index() diff --git a/application/views/codex/oehbeitrag.php b/application/views/codex/oehbeitrag.php index 47892527a..675a06c95 100644 --- a/application/views/codex/oehbeitrag.php +++ b/application/views/codex/oehbeitrag.php @@ -21,7 +21,7 @@ $this->load->view(
- widgetlib->widget('NavigationWidget');*/ ?> + widgetlib->widget('NavigationWidget'); ?>