Adapted GUI and filter to UPDATE also CHANGED HOURS

Up to now changes were identified only by comparing betrag with
vertrag_betrag.
Problem is: when a new Lehrauftrag betrag is set with 0 or NULL and only
hours are set, a later change of hours cannot be identified (as the betrag
and vertrag_betrag do not change). This is fixed now.
This commit is contained in:
Cris
2019-10-29 16:21:13 +01:00
committed by hainberg
parent 8d2c85734e
commit 3129707a10
6 changed files with 207 additions and 63 deletions
@@ -175,9 +175,17 @@ $this->load->view(
var erteilt = row.getData().erteilt;
var akzeptiert = row.getData().akzeptiert;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
/*
Formats the color of the rows depending on their status
- orange: geaendert
@@ -186,7 +194,8 @@ $this->load->view(
- grey: all other (marks unselectable)
*/
row.getCells().forEach(function(cell){
if (bestellt != null && (betrag != vertrag_betrag))
if (bestellt != null && (betrag != vertrag_betrag) ||
bestellt != null && stunden != vertrag_stunden)
{
cell.getElement().classList.add('bg-warning'); // geaenderte
}
@@ -207,14 +216,23 @@ $this->load->view(
// Formats row selectable/unselectable
function func_selectableCheck(row){
var betrag = row.getData().betrag;
var vertrag_betrag = row.getData().vertrag_betrag;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
// only allow to select bestellte && erteilte && nicht geaenderte Lehraufträge
return row.getData().bestellt != null && // bestellt
row.getData().erteilt != null && // AND erteilt
row.getData().akzeptiert == null && // AND nicht akzeptiert
betrag == vertrag_betrag; // OR nicht geaenderte
betrag == vertrag_betrag &&
stunden == vertrag_stunden; // OR nicht geaenderte
}
// Adds column status
@@ -241,10 +259,19 @@ $this->load->view(
var erteilt = row.getData().erteilt;
var akzeptiert = row.getData().akzeptiert;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (bestellt != null && (betrag != vertrag_betrag))
if (isNaN(betrag))
{
betrag = 0;
}
if ((bestellt != null && betrag != vertrag_betrag) ||
(bestellt != null && stunden != vertrag_stunden))
{
row.getData().status = 'Geändert'; // geaendert
}
@@ -362,15 +389,24 @@ $this->load->view(
var erteilt = cell.getRow().getData().erteilt;
var akzeptiert = cell.getRow().getData().akzeptiert;
var betrag = cell.getRow().getData().betrag;
var vertrag_betrag = cell.getRow().getData().vertrag_betrag;
var stunden = parseFloat(cell.getRow().getData().stunden);
var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
var betrag = parseFloat(cell.getRow().getData().betrag);
var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
// commented icons would be so nice to have with fontawsome 5.11...
if (bestellt != null && isNaN(vertrag_betrag))
{
return "<i class='fas fa-user-minus'></i>"; // kein Vertrag
}
else if (bestellt != null && (betrag != vertrag_betrag))
else if (bestellt != null && (betrag != vertrag_betrag) ||
bestellt != null && stunden != vertrag_stunden)
{
return ICON_LEHRAUFTRAG_CHANGED; // geaendert
// return "<i class='fas fa-user-edit'></i>";
@@ -406,19 +442,27 @@ $this->load->view(
var erteilt = cell.getRow().getData().erteilt;
var akzeptiert = cell.getRow().getData().akzeptiert;
var stunden = parseFloat(cell.getRow().getData().stunden);
var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
var betrag = parseFloat(cell.getRow().getData().betrag);
var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
var text = 'Lehrauftrag in Bearbeitung. ';
if (bestellt != null && erteilt == null && akzeptiert == null
&& betrag != vertrag_betrag) // geaendert (when never erteilt before)
&& (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when never erteilt before)
{
text += 'Wartet auf Erteilung.';
return text;
}
else if (bestellt != null && erteilt != null && akzeptiert == null
&& betrag != vertrag_betrag) // geaendert (when has been erteilt once)
&& (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when has been erteilt once)
{
text += 'Wartet auf erneute Erteilung.';
return text;
@@ -25,6 +25,7 @@ SELECT
stunden,
betrag,
vertrag_id,
vertrag_stunden,
vertrag_betrag,
mitarbeiter_uid,
bestellt,
@@ -138,6 +139,7 @@ FROM
TRUNC(lema.semesterstunden, 1) AS "stunden",
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
vertrag.betrag AS "vertrag_betrag",
mitarbeiter_uid
FROM
@@ -248,6 +250,7 @@ FROM
TRUNC(pb.stunden, 1) AS "stunden",
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
vertrag.betrag AS "vertrag_betrag"
FROM
lehre.tbl_projektbetreuer pb
@@ -305,6 +308,7 @@ $filterWidgetArray = array(
'Stunden',
'Betrag',
'Vertrag-ID',
'Vertrag-Stunden',
'Vertrag-Betrag',
'UID',
'Bestellt',
@@ -371,6 +375,7 @@ $filterWidgetArray = array(
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"},
width: "8%"},
vertrag_id: {visible: false},
vertrag_stunden: {visible: false},
vertrag_betrag: {visible: false},
mitarbeiter_uid: {visible: false},
bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip},
@@ -191,15 +191,6 @@ $this->load->view(
]
}
// Filters geaenderte
function filter_showChanged(data){
// Filters geaenderte from status bestellt on
return data.personalnummer >= 0 && // NOT dummy lector AND
data.bestellt != null && // bestellt AND
data.betrag != data.vertrag_betrag; // geaendert
}
// -----------------------------------------------------------------------------------------------------------------
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
@@ -216,8 +207,16 @@ $this->load->view(
var erteilt = row.getData().erteilt;
var akzeptiert = row.getData().akzeptiert;
var betrag = row.getData().betrag;
var vertrag_betrag = row.getData().vertrag_betrag;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
/*
Formats the color of the rows depending on their status
@@ -232,7 +231,9 @@ $this->load->view(
{
cell.getElement().classList.add('bg-info'); // dummy lectors
}
else if (bestellt != null && (betrag != vertrag_betrag) && !row._row.element.classList.contains('tabulator-calcs')) // exclude calculation rows
else if (bestellt != null && (betrag != vertrag_betrag) ||
bestellt != null && stunden != vertrag_stunden &&
!row._row.element.classList.contains('tabulator-calcs')) // exclude calculation rows
{
cell.getElement().classList.add('bg-warning'); // geaenderte
}
@@ -255,14 +256,23 @@ $this->load->view(
function func_selectableCheck(row){
var is_dummy = (row.getData().personalnummer <= 0 && row.getData().personalnummer != null);
var betrag = row.getData().betrag;
var vertrag_betrag = row.getData().vertrag_betrag;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
// only allow to select bestellte Lehraufträge
return !is_dummy && // NOT dummy lector
row.getData().bestellt != null && // AND NOT neue
row.getData().erteilt == null && // AND bestellt
betrag == vertrag_betrag; // AND nicht geändert
betrag == vertrag_betrag &&
stunden == vertrag_stunden; // AND nicht geändert
}
// Adds column status
@@ -289,10 +299,19 @@ $this->load->view(
var erteilt = row.getData().erteilt;
var akzeptiert = row.getData().akzeptiert;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (bestellt != null && (betrag != vertrag_betrag))
if (isNaN(betrag))
{
betrag = 0;
}
if ((bestellt != null && betrag != vertrag_betrag) ||
(bestellt != null && stunden != vertrag_stunden))
{
row.getData().status = 'Geändert'; // geaendert
}
@@ -373,8 +392,8 @@ $this->load->view(
$('#filterTabulator').tabulator('getRows', true)
.filter(row => row.getData().personalnummer >= 0 && // NOT dummies
row.getData().bestellt != null && // AND bestellt
row.getData().erteilt == null && // AND NOT erteilt
row.getData().betrag == row.getData().vertrag_betrag) // AND NOT geaendert
row.getData().erteilt == null && // AND NOT erteilt
row.getData().status != 'Geändert') // AND NOT geaendert
.forEach((row => row.select()));
}
@@ -402,15 +421,24 @@ $this->load->view(
var erteilt = cell.getRow().getData().erteilt;
var akzeptiert = cell.getRow().getData().akzeptiert;
var betrag = cell.getRow().getData().betrag;
var vertrag_betrag = cell.getRow().getData().vertrag_betrag;
var stunden = parseFloat(cell.getRow().getData().stunden);
var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
var betrag = parseFloat(cell.getRow().getData().betrag);
var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
// commented icons would be so nice to have with fontawsome 5.11...
if (is_dummy)
{
return "<i class='fa fa-user-secret'></i>"; // dummy lector
}
else if (bestellt != null && (betrag != vertrag_betrag))
else if (bestellt != null && (betrag != vertrag_betrag) || // geaendert
bestellt != null && stunden != vertrag_stunden) // geaendert ((if betrag is 0 or null)
{
return ICON_LEHRAUFTRAG_CHANGED; // geaendert
// return "<i class='fas fa-user-edit'></i>";
@@ -448,8 +476,20 @@ $this->load->view(
var erteilt = cell.getRow().getData().erteilt;
var akzeptiert = cell.getRow().getData().akzeptiert;
var betrag = cell.getRow().getData().betrag;
var vertrag_betrag = cell.getRow().getData().vertrag_betrag;
var betrag = parseFloat(cell.getRow().getData().betrag);
var stunden = parseFloat(cell.getRow().getData().stunden);
var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
if (isNaN(betrag))
{
betrag = 0;
}
if (isNaN(vertrag_stunden)){
vertrag_stunden = 0;
}
var text = 'Lehrauftragstunden/-stundensatz geändert.';
text += "\n";
@@ -458,11 +498,13 @@ $this->load->view(
{
return 'Neuer Lehrauftrag. Ohne Lektor verplant.'
}
else if (bestellt != null && erteilt == null && betrag != vertrag_betrag) // geaendert (when never erteilt before)
else if ((bestellt != null && erteilt == null && betrag != vertrag_betrag) ||
(bestellt != null && erteilt == null && stunden != vertrag_stunden)) // geaendert (when never erteilt before)
{
return text += 'Wartet auf Bestellung, danach Erteilen möglich.';
}
else if (bestellt != null && erteilt != null && betrag != vertrag_betrag) // geaendert (when has been erteilt once)
else if ((bestellt != null && erteilt != null && betrag != vertrag_betrag) ||
(bestellt != null && erteilt != null && stunden != vertrag_stunden)) // geaendert (when has been erteilt once)
{
return text += 'Wartet auf neuerliche Bestellung, danach erneut Erteilen möglich.';
}
@@ -571,7 +613,13 @@ $(function() {
// Show only rows with dummy lectors
$("#show-changed").click(function(){
// needs custom filter to compare fields betrag and vertrag_betrag
$('#filterTabulator').tabulator('setFilter', filter_showChanged);
$('#filterTabulator').tabulator('setFilter',
[
{field: 'personalnummer', type: '>=', value: 0}, // NOT dummy lector AND
{field: 'bestellt', type: '!=', value: null}, // bestellt AND
{field: 'status', type: '=', value: 'Geändert'} // geaendert
]
);
});
// Set png-icons into filter-buttons
@@ -27,6 +27,7 @@ SELECT
stunden,
betrag,
vertrag_id,
vertrag_stunden,
vertrag_betrag,
mitarbeiter_uid,
bestellt,
@@ -144,6 +145,7 @@ FROM
TRUNC(lema.semesterstunden, 1) AS "stunden",
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
vertrag.betrag AS "vertrag_betrag",
mitarbeiter_uid
FROM
@@ -257,6 +259,7 @@ FROM
TRUNC(pb.stunden, 1) AS "stunden",
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id,
vertragsstunden AS "vertrag_stunden",
vertrag.betrag AS "vertrag_betrag"
FROM
lehre.tbl_projektbetreuer pb
@@ -316,6 +319,7 @@ $filterWidgetArray = array(
'Stunden',
'Betrag',
'Vertrag-ID',
'Vertrag-Stunden',
'Vertrag-Betrag',
'UID',
'Bestellt',
@@ -390,6 +394,7 @@ $filterWidgetArray = array(
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
vertrag_id: {visible: false},
vertrag_stunden: {visible: false},
vertrag_betrag: {visible: false},
mitarbeiter_uid: {visible: false},
bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip},
@@ -196,15 +196,6 @@ $this->load->view(
]);
}
// Filters geaenderte
function filter_showChanged(data){
// Filters geaenderte from status bestellt on
return data.personalnummer >= 0 && // NOT dummy lector AND
data.bestellt != null && // bestellt AND
data.betrag != data.vertrag_betrag; // geaendert
}
// -----------------------------------------------------------------------------------------------------------------
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
@@ -221,8 +212,16 @@ $this->load->view(
var erteilt = row.getData().erteilt;
var akzeptiert = row.getData().akzeptiert;
var betrag = row.getData().betrag;
var vertrag_betrag = row.getData().vertrag_betrag;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
/*
Formats the color of the rows depending on their status
@@ -237,7 +236,9 @@ $this->load->view(
{
cell.getElement().classList.add('bg-info'); // dummy lectors
}
else if (bestellt != null && (betrag != vertrag_betrag) && !row._row.element.classList.contains('tabulator-calcs')) // exclude calculation rows
else if (bestellt != null && (betrag != vertrag_betrag) ||
bestellt != null && stunden != vertrag_stunden &&
!row._row.element.classList.contains('tabulator-calcs')) // exclude calculation rows
{
row.getElement().style['font-weight'] = 'bold'; // geaendert
}
@@ -260,13 +261,22 @@ $this->load->view(
function func_selectableCheck(row){
var is_dummy = (row.getData().personalnummer <= 0 && row.getData().personalnummer != null);
var betrag = row.getData().betrag;
var vertrag_betrag = row.getData().vertrag_betrag;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
// Only allow to select neue and geaenderte
return !is_dummy && // NOT dummy lector
row.getData().bestellt == null || // AND neue
row.getData().bestellt != null && betrag != vertrag_betrag; // OR geaenderte
return !is_dummy && // NOT dummy lector
row.getData().bestellt == null || // AND neue
row.getData().bestellt != null && betrag != vertrag_betrag || // OR geaenderte
row.getData().bestellt != null && stunden != vertrag_stunden // OR geanderte (if betrag is 0 or null)
}
// Adds column status
@@ -293,10 +303,19 @@ $this->load->view(
var erteilt = row.getData().erteilt;
var akzeptiert = row.getData().akzeptiert;
var betrag = row.getData().betrag;
var vertrag_betrag = row.getData().vertrag_betrag;
var stunden = parseFloat(row.getData().stunden);
var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
if (bestellt != null && (betrag != vertrag_betrag))
var betrag = parseFloat(row.getData().betrag);
var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
if ((bestellt != null && betrag != vertrag_betrag) ||
(bestellt != null && stunden != vertrag_stunden))
{
row.getData().status = 'Geändert'; // geaendert
}
@@ -380,7 +399,7 @@ $this->load->view(
.filter(row => row.getData().personalnummer >= 0 && // NOT dummies
row.getData().bestellt == null || // AND neu
row.getData().bestellt != null && // OR (bestellt
row.getData().betrag != row.getData().vertrag_betrag) // AND geaendert)
row.getData().status == 'Geändert') // AND geaendert)
.forEach((row => row.select()));
}
@@ -408,8 +427,16 @@ $this->load->view(
var erteilt = cell.getRow().getData().erteilt;
var akzeptiert = cell.getRow().getData().akzeptiert;
var betrag = cell.getRow().getData().betrag;
var vertrag_betrag = cell.getRow().getData().vertrag_betrag;
var stunden = parseFloat(cell.getRow().getData().stunden);
var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
var betrag = parseFloat(cell.getRow().getData().betrag);
var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
if (isNaN(betrag))
{
betrag = 0;
}
// commented icons would be so nice to have with fontawsome 5.11...
if (is_dummy)
@@ -420,7 +447,8 @@ $this->load->view(
{
return "<i class='fa fa-user-minus'></i>"; // kein Vertrag
}
else if (bestellt != null && (betrag != vertrag_betrag))
else if (bestellt != null && (betrag != vertrag_betrag) || // geaendert
bestellt != null && stunden != vertrag_stunden) // geaendert ((if betrag is 0 or null)
{
return ICON_LEHRAUFTRAG_CHANGED; // geaendert
// return "<i class='fas fa-user-edit'></i>";
@@ -459,12 +487,17 @@ $this->load->view(
var betrag = parseFloat(cell.getRow().getData().betrag);
var stunden = parseFloat(cell.getRow().getData().stunden);
var stundensatz = parseFloat(cell.getRow().getData().stundensatz);
var stundensatz = cell.getRow().getData().stundensatz;
var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
var vertrag_stundensatz = 0;
if (isNaN(betrag))
{
betrag = 0;
}
// Calculate vertrag stundensatz
if (vertrag_stunden != 0)
{
@@ -480,7 +513,8 @@ $this->load->view(
{
return 'Neuer Lehrauftrag. Wartet auf Bestellung.'
}
else if (betrag != vertrag_betrag) // geaendert
else if (betrag != vertrag_betrag || // geaendert
bestellt != null && stunden != vertrag_stunden) // geaendert (if betrag is 0 or null)
{
var text = 'NACH Änderung: Stundensatz: ' + stundensatz + ' Stunden: ' + stunden;
text += "\n";
@@ -579,7 +613,13 @@ $(function() {
// Show only rows with geaenderte lectors
$("#show-changed").click(function(){
// needs custom filter to compare fields betrag and vertrag_betrag
$('#filterTabulator').tabulator('setFilter', filter_showChanged);
$('#filterTabulator').tabulator('setFilter',
[
{field: 'personalnummer', type: '>=', value: 0}, // NOT dummy lector AND
{field: 'bestellt', type: '!=', value: null}, // bestellt AND
{field: 'status', type: '=', value: 'Geändert'} // geaendert
]
);
});
// Show only rows with dummy lectors
+2
View File
@@ -477,6 +477,7 @@ $filters = array(
{"name": "stunden"},
{"name": "betrag"},
{"name": "vertrag_id"},
{"name": "vertrag_stunden"},
{"name": "vertrag_betrag"},
{"name": "mitarbeiter_uid"},
{"name": "bestellt"},
@@ -519,6 +520,7 @@ $filters = array(
{"name": "stunden"},
{"name": "betrag"},
{"name": "vertrag_id"},
{"name": "vertrag_stunden"},
{"name": "vertrag_betrag"},
{"name": "mitarbeiter_uid"},
{"name": "bestellt"},