diff --git a/application/controllers/codex/Oehbeitrag.php b/application/controllers/codex/Oehbeitrag.php
index f1e5bf508..fa27d1ebb 100644
--- a/application/controllers/codex/Oehbeitrag.php
+++ b/application/controllers/codex/Oehbeitrag.php
@@ -11,6 +11,7 @@ class Oehbeitrag extends Auth_Controller
parent::__construct(
array(
'index' => 'admin:r',// TODO which Berechtigung?
+ 'getOehbeitraege' => 'admin:r',
'getValidStudiensemester' => 'admin:r',
'addOehbeitrag' => 'admin:rw',
'updateOehbeitrag' => 'admin:rw',
@@ -39,6 +40,9 @@ class Oehbeitrag extends Auth_Controller
$this->load->view("codex/oehbeitrag.php", array('oehbeitraege' => $oehbeitraege));
}
+ /**
+ * Gets all valid, i.e. unassigned, Studiensemester.
+ */
public function getValidStudiensemester()
{
$oehbeitrag_id = $this->input->get('oehbeitrag_id');
@@ -59,6 +63,17 @@ class Oehbeitrag extends Auth_Controller
$this->outputJsonSuccess($studiensemester);
}
+ /**
+ * Gets all Öhbeiträge. Wrapper function for output as JSON.
+ */
+ public function getOehbeitraege()
+ {
+ $this->outputJson($this->_loadOehbeitraege());
+ }
+
+ /**
+ * Adds an Öhbeitrag. Checks for errors beforehand.
+ */
public function addOehbeitrag()
{
$studierendenbeitrag = $this->input->post('studierendenbeitrag');
@@ -92,6 +107,9 @@ class Oehbeitrag extends Auth_Controller
}
}
+ /**
+ * Updates an Öhbeitrag. Checks for errors beforehand.
+ */
public function updateOehbeitrag()
{
$oehbeitrag_id = $this->input->post("oehbeitrag_id");
@@ -126,10 +144,14 @@ class Oehbeitrag extends Auth_Controller
$vonBisStudiensemester = getData($vonBisStudiensemesterRes);
- $von_studiensemester_kurzbz = $idx == 'von_studiensemester_kurzbz' ? $value : $vonBisStudiensemester[0]->von_studiensemester_kurzbz;
+ $von_studiensemester_kurzbz = isset($data['von_studiensemester_kurzbz'])
+ ? $data['von_studiensemester_kurzbz']
+ : $vonBisStudiensemester[0]->von_studiensemester_kurzbz;
- if ($idx == 'bis_studiensemester_kurzbz')
- $bis_studiensemester_kurzbz = $data[$idx] = $value == 'null' ? null : $value;
+ if (isset($data['bis_studiensemester_kurzbz']))
+ {
+ $bis_studiensemester_kurzbz = $data['bis_studiensemester_kurzbz'] = $data['bis_studiensemester_kurzbz'] == 'null' ? null : $data['bis_studiensemester_kurzbz'];
+ }
else
$bis_studiensemester_kurzbz = $vonBisStudiensemester[0]->bis_studiensemester_kurzbz;
@@ -146,6 +168,9 @@ class Oehbeitrag extends Auth_Controller
$this->outputJson($this->OehbeitragModel->update($oehbeitrag_id, $data));
}
+ /**
+ * Deletes an Öhbeitrag.
+ */
public function deleteOehbeitrag()
{
$oehbeitrag_id = $this->input->post("oehbeitrag_id");
@@ -153,6 +178,10 @@ class Oehbeitrag extends Auth_Controller
$this->outputJson($this->OehbeitragModel->delete($oehbeitrag_id));
}
+ /**
+ * Loads all Öhbeiträge sorted by date descending.
+ * @return object
+ */
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');
@@ -162,11 +191,25 @@ class Oehbeitrag extends Auth_Controller
return $this->OehbeitragModel->load();
}
+ /**
+ * Checks if an amount is numeric and not too big.
+ * @param $amount
+ * @return bool true if valid amount, false otherwise
+ */
private function _checkAmount($amount)
{
return is_numeric($amount) && (float) $amount <= 99999.99;
}
+ /**
+ * Checks if a certain Von-Studiensemester is valid together with a Bis-Studiensemester.
+ * Checks for correct format, Von-Studiensemester cannot be after the Bis-Studiensemester,
+ * checks that semester are not overlapping with semester for existent Öhbeiträge.
+ * @param string $von_studiensemester_kurzbz
+ * @param string $bis_studiensemester_kurzbz
+ * @param int $oehbeitrag_id öhbeitrag to ignore, i.e. which is assignable (id of Öhbeitrag of the passed semesters)
+ * @return object array with true if assignable, with false if not
+ */
private function _checkVonBisStudiensemester($von_studiensemester_kurzbz, $bis_studiensemester_kurzbz, $oehbeitrag_id = null)
{
$regex = "/^(WS|SS)\d{4}$/";
diff --git a/application/views/codex/oehbeitrag.php b/application/views/codex/oehbeitrag.php
index 675a06c95..7cfb18fe8 100644
--- a/application/views/codex/oehbeitrag.php
+++ b/application/views/codex/oehbeitrag.php
@@ -48,23 +48,6 @@ $this->load->view(
-
-
- | 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/js/codex/oehbeitrag.js b/public/js/codex/oehbeitrag.js
index f8fc403f0..77a98a27b 100644
--- a/public/js/codex/oehbeitrag.js
+++ b/public/js/codex/oehbeitrag.js
@@ -7,10 +7,10 @@ const CONTROLLER_URL = BASE_URL + "/"+CALLED_PATH;
*/
$(document).ready(function ()
{
- //initialise table sorter
- Oehbeitrag._addTablesorter();
+ // get Öhbeiträge and show them in table
+ Oehbeitrag.getOehBeitraege();
- // set trigger for adding new Oehhbeitrag
+ // set event for adding new Oehhbeitrag
$("#addNewOeh").click(
function()
{
@@ -21,6 +21,7 @@ $(document).ready(function ()
let studiensemester = FHC_AjaxClient.getData(data);
let nextOehbeitragId = Oehbeitrag.newBeitragId;
+ // add new table row
let newRowHtml = ""+
"| ";
newRowHtml += Oehbeitrag._getStudiensemesterDropdown(Oehbeitrag.newBeitragId, 'von_studiensemester_kurzbz', studiensemester);
@@ -33,7 +34,6 @@ $(document).ready(function ()
" | "+
"
";
-/* $("#saveHeading, .saveCell").show();*/
$("#oehbeitraegeTbl tbody").prepend(newRowHtml);
$("#addOeh_"+Oehbeitrag.newBeitragId).click(
function()
@@ -55,6 +55,7 @@ $(document).ready(function ()
}
);
+ // remove html row if delete button clicked
$("#delete_"+nextOehbeitragId).click(
function()
{
@@ -62,7 +63,7 @@ $(document).ready(function ()
}
);
- // increase counter for newly added rows
+ // increase counter for newly added rows id
Oehbeitrag.newBeitragId++;
}
else
@@ -72,26 +73,72 @@ $(document).ready(function ()
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
+ getOehBeitraege: function()
+ {
+ FHC_AjaxClient.ajaxCallGet(
+ CALLED_PATH + "/getOehbeitraege",
+ null,
+ {
+ successCallback: function(data, textStatus, jqXHR)
+ {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ }
+ else if (FHC_AjaxClient.hasData(data))
+ {
+ let oehbeitraege = FHC_AjaxClient.getData(data);
+
+ let oehbeitrStr = '';
+ for (let idx in oehbeitraege)
+ {
+ let oehbeitrag = oehbeitraege[idx];
+
+ // add Öhbeitrag row
+ oehbeitrStr += '' +
+ '| ' +
+ Oehbeitrag._formatDateToGerman(oehbeitrag.von_datum) + '/' + oehbeitrag.von_studiensemester_kurzbz +
+ ' '+
+ ' | ' +
+ '' + (oehbeitrag.bis_studiensemester_kurzbz == null ? 'unbeschränkt' :
+ Oehbeitrag._formatDateToGerman(oehbeitrag.bis_datum) + '/' + oehbeitrag.bis_studiensemester_kurzbz) +
+ ' '+
+ ' | ' +
+ '' + Oehbeitrag._formatDecimal(oehbeitrag.studierendenbeitrag) +
+ ' '+
+ ' | ' +
+ '' + Oehbeitrag._formatDecimal(oehbeitrag.versicherung) +
+ ' '+
+ ' | ' +
+ '' +
+ '' +
+ ' ' +
+ ' | ' +
+ '
';
+ }
+ $("#oehbeitraegeTbl tbody").html(oehbeitrStr);
+
+ // set events for editing, deleting etc.
+ Oehbeitrag._setUpdateEvents();
+
+ //initialise table sorter
+ Oehbeitrag._addTablesorter();
+ }
+ },
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Holen der Öhbeiträge');
+ }
+ }
+ );
+ },
+ // get all Studiensemester which are valid for assignment (where no Öhbeitrag is assigned)
getValidStudiensemester: function(callback, oehbeitrag_id)
{
let params = oehbeitrag_id ? {"oehbeitrag_id": oehbeitrag_id} : null;
@@ -121,42 +168,8 @@ var Oehbeitrag = {
}
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)+" "
- );
- $("#input_versicherung_"+nextOehbeitragId).parent('td').html(
- Oehbeitrag._formatDecimal(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('td').html("");
-
- // 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();
+ // refresh Öhbeitragstable
+ Oehbeitrag.getOehBeitraege();
}
else
{
@@ -170,7 +183,40 @@ var Oehbeitrag = {
}
);
},
- updateOehbeitrag(oehbeitrag_id, fieldname, fieldelement, inputtype)
+ // update whole Öhbeitrag
+ updateOehbeitrag: function(oehbeitrag_id, oehbeitragData)
+ {
+ 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))
+ {
+ // refresh Öhbeitragstable
+ Oehbeitrag.getOehBeitraege();
+ }
+ else
+ {
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
+ }
+ },
+ errorCallback: function()
+ {
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
+ }
+ }
+ );
+ },
+ // update one field of Öhbeitrag (e.g. only semester or only Betrag)
+ updateOehbeitragField: function(oehbeitrag_id, fieldname, fieldelement, inputtype)
{
let oehbeitragdata = {};
let fieldvalue = fieldelement.val();
@@ -194,6 +240,7 @@ var Oehbeitrag = {
}
else if (FHC_AjaxClient.hasData(data))
{
+ // refresh table cell with correct value and set edit event and tablesorter
if (inputtype == 'semester')
fieldvalue = $(fieldelement).find("option:selected").text();
else
@@ -204,7 +251,7 @@ var Oehbeitrag = {
$("#edit_"+fieldname+"_"+oehbeitrag_id).click(
function()
{
- Oehbeitrag._setUpdateEvent($(this).prop("id"), fieldname, inputtype);
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), fieldname, inputtype, true);
}
);
@@ -212,12 +259,12 @@ var Oehbeitrag = {
}
else
{
- FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags');
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
}
},
errorCallback: function()
{
- FHC_DialogLib.alertError('Fehler beim Hinzufügen des Öhbeitrags');
+ FHC_DialogLib.alertError('Fehler beim Aktualisieren des Öhbeitrags');
}
}
);
@@ -248,43 +295,92 @@ var Oehbeitrag = {
},
// -----------------------------------------------------------------------------------------------------------------
- // (private) methods
- _setUpdateEvents()
+ /**
+ * Sets click events for updating, deleting Oehbeitrag
+ */
+ _setUpdateEvents: function()
{
+ // set edit event for whole row
+ $(".editBtn").click(
+ function()
+ {
+ let id = $(this).prop("id");
+ let oehbeitrag_id = id.substr(id.lastIndexOf('_')+1);
+ Oehbeitrag._makeFieldEditable(id, 'von_studiensemester_kurzbz', 'semester');
+ Oehbeitrag._makeFieldEditable(id, 'bis_studiensemester_kurzbz', 'semester');
+ Oehbeitrag._makeFieldEditable(id, 'studierendenbeitrag');
+ Oehbeitrag._makeFieldEditable(id, 'versicherung');
+ $(this).after(" ");
+ $(this).remove();
+ $("#delete_" + oehbeitrag_id).remove();
+
+ $("#save_"+oehbeitrag_id).click(
+ function()
+ {
+ let von_studiensemester_kurzbz = $("#input_von_studiensemester_kurzbz_"+oehbeitrag_id+" option:selected").val();
+ let bis_studiensemester_kurzbz = $("#input_bis_studiensemester_kurzbz_"+oehbeitrag_id+" option:selected").val();
+ let studierendenbeitrag = Oehbeitrag._formatDecimal($("#input_studierendenbeitrag_"+oehbeitrag_id).val(), '.');
+ let versicherung = Oehbeitrag._formatDecimal($("#input_versicherung_"+oehbeitrag_id).val(), '.');
+
+ let oehbeitragData = {
+ "von_studiensemester_kurzbz": von_studiensemester_kurzbz,
+ "bis_studiensemester_kurzbz": bis_studiensemester_kurzbz,
+ "studierendenbeitrag": studierendenbeitrag,
+ "versicherung": versicherung
+ }
+
+ Oehbeitrag.updateOehbeitrag(oehbeitrag_id, oehbeitragData);
+ }
+ )
+ }
+ );
+
+ // set delete event for all rows
+ $(".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 edit events for single cells
$(".editStudierendenbeitrag").off('click').click(
function()
{
- Oehbeitrag._setUpdateEvent($(this).prop("id"), 'studierendenbeitrag');
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'studierendenbeitrag', null, true);
}
);
$(".editVersicherung").off('click').click(
function()
{
- Oehbeitrag._setUpdateEvent($(this).prop("id"), 'versicherung');
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'versicherung', null, true);
}
);
$(".editBisStudiensemester").off('click').click(
function()
{
- Oehbeitrag._setUpdateEvent($(this).prop("id"), 'bis_studiensemester_kurzbz', 'semester');
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'bis_studiensemester_kurzbz', 'semester', true);
}
);
$(".editVonStudiensemester").off('click').click(
function()
{
- Oehbeitrag._setUpdateEvent($(this).prop("id"), 'von_studiensemester_kurzbz', 'semester');
+ Oehbeitrag._makeFieldEditable($(this).prop("id"), 'von_studiensemester_kurzbz', 'semester', true);
}
);
-
},
- _setUpdateEvent(oehbeitrag_id_prefixed, fieldname, inputtype)
+ // make Öhbeitrag field editable, i.e. show input field instead of text
+ _makeFieldEditable: function(oehbeitrag_id_prefixed, fieldname, inputtype, singleUpdate)
{
- 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 initElement = $("#cell_"+fieldname+"_"+oehbeitrag_id); // clicked element triggering event
+ let currFieldvalue = initElement.text().trim();
let callback = function(validSemesterData)
{
@@ -306,19 +402,24 @@ var Oehbeitrag = {
" value='"+currFieldvalue+"' placeholder='0,00'>";
}
- inputHtml += " ";
+ if (singleUpdate === true)
+ inputHtml += " ";
- initElement.parent('td').html(inputHtml);
+ initElement.html(inputHtml);
- // set the update event
- $("#confirm_"+fieldname+"_"+oehbeitrag_id).click(
- function()
- {
- Oehbeitrag.updateOehbeitrag(oehbeitrag_id, fieldname, $("#input_" + fieldname + "_" + oehbeitrag_id), inputtype);
- }
- );
+ if (singleUpdate === true)
+ {
+ // set the update event if single field update
+ $("#confirm_" + fieldname + "_" + oehbeitrag_id).click(
+ function()
+ {
+ Oehbeitrag.updateOehbeitragField(oehbeitrag_id, fieldname, $("#input_" + fieldname + "_" + oehbeitrag_id), inputtype);
+ }
+ );
+ }
}
+ // get valid Studiensemester with no Öhbeitrag assigned
if (inputtype == 'semester')
{
Oehbeitrag.getValidStudiensemester(callback, oehbeitrag_id);
@@ -379,12 +480,7 @@ var Oehbeitrag = {
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
- */
+ // Formats a numeric value as a float with two decimals
_formatDecimal: function(value, decSeparator)
{
let dec = null;
@@ -408,6 +504,7 @@ var Oehbeitrag = {
return dec;
},
+ // formats english date to as german
_formatDateToGerman: function(date)
{
return date.substring(8, 10) + "." + date.substring(5, 7) + "." + date.substring(0, 4);