Merge branch 'feature-12987/Sonderbeitrag_versicherung_trennen' into feature-10450/DVUH_requestMatrikelnummer

This commit is contained in:
KarpAlex
2021-06-21 18:20:03 +02:00
6 changed files with 804 additions and 0 deletions
+8
View File
@@ -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'
)
)
),
@@ -0,0 +1,218 @@
<?php
if (! defined("BASEPATH")) exit("No direct script access allowed");
class Oehbeitrag extends Auth_Controller
{
const STUDIENSEMESTER_START = 'WS2020';
public function __construct()
{
parent::__construct(
array(
'index' => 'admin:r',// TODO which Berechtigung?
'getValidStudiensemester' => 'admin:r',
'addOehbeitrag' => 'admin:rw',
'updateOehbeitrag' => 'admin:rw',
'deleteOehbeitrag' => 'admin:rw'
)
);
$this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->load->library('WidgetLib');
}
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()
{
$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, $oehbeitrag_id_arr);
if (isError($studiensemesterres))
{
$this->outputJsonError(getError($studiensemesterres));
return;
}
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 (!$this->_checkAmount($studierendenbeitrag))
$this->outputJsonError('Ungültiger Studierendenbeitrag');
elseif (!$this->_checkAmount($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
);
$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ültige(r) $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");
$this->outputJson($this->OehbeitragModel->delete($oehbeitrag_id));
}
private function _loadOehbeitraege()
{
$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 _checkAmount($amount)
{
return is_numeric($amount) && (float) $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))
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");
$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;
if (hasData($assignableRes))
{
$assignable = getData($assignableRes)[0];
if (!$assignable)
return error("Keine Zuweisung möglich, Semesterüberschneidung");
}
return success("Studiensemester gültig");
}
}
@@ -32,4 +32,76 @@ class Oehbeitrag_model extends DB_Model
return $this->execQuery($qry, array($studiensemester_kurzbz));
}
/**
* 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())
{
$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)";
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
* @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())
{
$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)";
if (!isEmptyArray($excluded_oehbeitrag_id))
{
$allStdSemSpanQry .= " AND oehbeitrag_id NOT IN ?";
$params[] = $excluded_oehbeitrag_id;
}
$allStdSemSpanQry .= ")";
$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));
}
}
+77
View File
@@ -0,0 +1,77 @@
<?php
$this->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')
)
);
?>
<body>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
&Ouml;hbeitragsverwaltung
</h3>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<button class="btn btn-default" id="addNewOeh">Neuen &Ouml;hbeitrag hinzuf&uuml;gen</button>
<br />
<br />
<table class="table table-bordered table-condensed" id="oehbeitraegeTbl">
<thead>
<tr>
<th>G&uuml;ltig von</th>
<th>G&uuml;ltig bis</th>
<th>Studierendenbetrag</th>
<th>Versicherungsbetrag</th>
<th id="actionHeading">Aktion</th>
</tr>
</thead>
<tbody>
<?php foreach ($oehbeitraege as $oehbeitrag): ?>
<tr>
<td><?php echo date_format(date_create($oehbeitrag->von_datum), 'd.m.Y') . '/' . $oehbeitrag->von_studiensemester_kurzbz ?>
<i class="fa fa-edit editVonStudiensemester" id="edit_von_studiensemester_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
</td>
<td><?php echo $oehbeitrag->bis_studiensemester_kurzbz == null ? 'unbeschr&aumlnkt' : (date_format(date_create($oehbeitrag->bis_datum), 'd.m.Y') . '/' . $oehbeitrag->bis_studiensemester_kurzbz) ?>
<i class="fa fa-edit editBisStudiensemester" id="edit_bis_studiensemester_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
</td>
<td><?php echo number_format($oehbeitrag->studierendenbeitrag, 2, ',', '.') ?>
<i class="fa fa-edit editStudierendenbeitrag" id="edit_studierendenbeitrag_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
</td>
<td><?php echo number_format($oehbeitrag->versicherung, 2, ',', '.') ?>
<i class="fa fa-edit editVersicherung" id="edit_versicherung_<?php echo $oehbeitrag->oehbeitrag_id ?>"></i>
</td>
<td><button class="btn btn-default deleteBtn" id="delete_<?php echo $oehbeitrag->oehbeitrag_id ?>">L&ouml;schen</button></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</body>
<?php $this->load->view('templates/FHC-Footer'); ?>
+14
View File
@@ -0,0 +1,14 @@
.inline-inputfield {
width: auto;
display: inline;
}
.fa-edit {
cursor: pointer;
font-size: 1.2em;
}
.fa-check {
cursor: pointer;
font-size: 1.4em;
}
+415
View File
@@ -0,0 +1,415 @@
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
Oehbeitrag._addTablesorter();
// set trigger for adding new Oehhbeitrag
$("#addNewOeh").click(
function()
{
let callback = function(data)
{
if (FHC_AjaxClient.hasData(data))
{
let studiensemester = FHC_AjaxClient.getData(data);
let nextOehbeitragId = Oehbeitrag.newBeitragId;
let newRowHtml = "<tr>"+
"<td>";
newRowHtml += Oehbeitrag._getStudiensemesterDropdown(Oehbeitrag.newBeitragId, 'von_studiensemester_kurzbz', studiensemester);
newRowHtml += "</td><td>";
newRowHtml += Oehbeitrag._getStudiensemesterDropdown(Oehbeitrag.newBeitragId, 'bis_studiensemester_kurzbz', studiensemester);
newRowHtml += "</td>";
newRowHtml += "<td><input type='text' name='studierendenbeitrag' id='input_studierendenbeitrag_"+nextOehbeitragId+"' class='form-control' placeholder='0,00'></td>"+
"<td><input type='text' name='versicherung' id='input_versicherung_"+nextOehbeitragId+"' class='form-control' placeholder='0,00'></td>"+
"<td><button class='btn btn-default' id='addOeh_"+nextOehbeitragId+"'>Speichern</button>&nbsp;" +
" <button class='btn btn-default' id='delete_"+nextOehbeitragId+"'>Entfernen</button></td>"+
"</tr>";
/* $("#saveHeading, .saveCell").show();*/
$("#oehbeitraegeTbl tbody").prepend(newRowHtml);
$("#addOeh_"+Oehbeitrag.newBeitragId).click(
function()
{
// get form data into object
let oehbeitrag = {
"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(",", ".")
}
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();
}
);
// increase counter for newly added rows
Oehbeitrag.newBeitragId++;
}
else
FHC_DialogLib.alertInfo("ÖH-Beiträge für alle Studiensemester festgelegt");
}
Oehbeitrag.getValidStudiensemester(callback);
}
)
// 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.lastIndexOf('_')+1);
Oehbeitrag.deleteOehbeitrag(oehbeitrag_id);
}
);
// set trigger for updating Oehhbeitrag
Oehbeitrag._setUpdateEvents();
});
var Oehbeitrag = {
newBeitragId: 0,
// -----------------------------------------------------------------------------------------------------------------
// ajax calls
getValidStudiensemester: function(callback, oehbeitrag_id)
{
let params = oehbeitrag_id ? {"oehbeitrag_id": oehbeitrag_id} : null;
FHC_AjaxClient.ajaxCallGet(
CALLED_PATH + "/getValidStudiensemester",
params,
{
successCallback: callback,
errorCallback: function()
{
FHC_DialogLib.alertError('Fehler beim Holen der Semester');
}
}
);
},
addOehbeitrag: function(oehbeitrag, studiensemester_von_bis, nextOehbeitragId)
{
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/addOehbeitrag',
oehbeitrag,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
else if (FHC_AjaxClient.hasData(data))
{
let inserted_id = FHC_AjaxClient.getData(data);
// refresh table row in GUI
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._formatDecimal(oehbeitrag.studierendenbeitrag)+" <i class='fa fa-edit editStudierendenbeitrag' id='edit_studierendenbeitrag_"+inserted_id+"'></i>"
);
$("#input_versicherung_"+nextOehbeitragId).parent('td').html(
Oehbeitrag._formatDecimal(oehbeitrag.versicherung)+" <i class='fa fa-edit editVersicherung' id='edit_versicherung_"+inserted_id+"'></i>"
);
$("#input_von_studiensemester_kurzbz_"+nextOehbeitragId).parent('td').html(
studiensemester_von_bis.von_semester_with_date+" <i class='fa fa-edit editVonStudiensemester' id='edit_von_studiensemester_kurzbz_"+inserted_id+"'></i>"
);
$("#input_bis_studiensemester_kurzbz_"+nextOehbeitragId).parent('td').html(
bis_studiensemester_kurzbz+" <i class='fa fa-edit editBisStudiensemester' id='edit_bis_studiensemester_kurzbz_"+inserted_id+"'></i>"
);
// add delete button instead of save btn
$("#addOeh_"+nextOehbeitragId).parent('td').html("<button class='btn btn-default deleteBtn' id='delete_"+inserted_id+"'>L&ouml;schen</button>");
// add update and delete events
Oehbeitrag._setUpdateEvents();
$("#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);
}
)
// refresh tablesorter
Oehbeitrag._addTablesorter();
}
else
{
FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags');
}
},
errorCallback: function()
{
FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags');
}
}
);
},
updateOehbeitrag(oehbeitrag_id, fieldname, fieldelement, inputtype)
{
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(
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._formatDecimal(fieldvalue);
$("#confirm_"+fieldname+"_"+oehbeitrag_id).parent('td').html(
fieldvalue+" <i class='fa fa-edit' id='edit_"+fieldname+"_"+oehbeitrag_id+"'></i>"
);
$("#edit_"+fieldname+"_"+oehbeitrag_id).click(
function()
{
Oehbeitrag._setUpdateEvent($(this).prop("id"), fieldname, inputtype);
}
);
Oehbeitrag._addTablesorter();
}
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))
{
$("#delete_"+oehbeitrag_id).closest("tr").remove();
Oehbeitrag._addTablesorter();
}
else
{
FHC_DialogLib.alertError('Fehler beim Löschen des Öhbeitrags');
}
},
errorCallback: function()
{
FHC_DialogLib.alertError('Fehler beim Löschen des Öhbeitrags');
}
}
);
},
// -----------------------------------------------------------------------------------------------------------------
// (private) methods
_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 = "<input type='text' class='form-control inline-inputfield' id='input_" + fieldname + "_" + oehbeitrag_id+"'" +
" value='"+currFieldvalue+"' placeholder='0,00'>";
}
inputHtml += " <i class='fa fa-check text-success' id='confirm_"+fieldname+"_"+oehbeitrag_id+"' ></i>";
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 += "<select name='"+name+"' id='input_"+name+"_"+oehbeitrag_id+"' class='form-control"+inlineClass+"'>";
if (name === 'bis_studiensemester_kurzbz')
rowHtml += "<option value='null'>unbeschränkt</option>";
for (let idx in studiensemester)
{
let date = name === 'bis_studiensemester_kurzbz' ? studiensemester[idx].ende : studiensemester[idx].start;
let studiensemester_kurzbz = studiensemester[idx].studiensemester_kurzbz;
let dateSemester = Oehbeitrag._formatDateToGerman(date) + "/" + studiensemester_kurzbz;
let selected = dateSemester === selectedDateSemester ? ' selected' : '';
rowHtml += "<option value='" + studiensemester_kurzbz + "' "+selected+">" + dateSemester +"</option>";
}
rowHtml += "</select>";
return rowHtml;
},
_compareGermanDates: function(datea, dateb)
{
return datea.split(".").reverse().join("") < dateb.split(".").reverse().join("");
},
_addTablesorter: function()
{
// 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
* @param value
* @param decSeparator the new decimal separator
* @returns {string} formatted value
*/
_formatDecimal: function(value, decSeparator)
{
let dec = null;
let prevSeparator = ".";
if (decSeparator === ".")
prevSeparator = ",";
else
decSeparator = ",";
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)
{
return date.substring(8, 10) + "." + date.substring(5, 7) + "." + date.substring(0, 4);
}
};