From 3129707a103e5d5a399789636cf908f436f802d6 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 29 Oct 2019 16:21:13 +0100 Subject: [PATCH] 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. --- .../lehre/lehrauftrag/acceptLehrauftrag.php | 64 +++++++++-- .../lehrauftrag/acceptLehrauftragData.php | 5 + .../lehre/lehrauftrag/approveLehrauftrag.php | 100 +++++++++++++----- .../lehrauftrag/approveLehrauftragData.php | 5 + .../lehre/lehrauftrag/orderLehrauftrag.php | 94 +++++++++++----- system/filtersupdate.php | 2 + 6 files changed, 207 insertions(+), 63 deletions(-) diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index d4c25f878..6ab0c722c 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php @@ -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 ""; // 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 ""; @@ -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; diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php index 92fc5065a..a9b96d30d 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php @@ -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}, diff --git a/application/views/lehre/lehrauftrag/approveLehrauftrag.php b/application/views/lehre/lehrauftrag/approveLehrauftrag.php index 6388a8956..242cc1d6d 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftrag.php @@ -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 ""; // 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 ""; @@ -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 diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index 4b872020f..5b797d865 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -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}, diff --git a/application/views/lehre/lehrauftrag/orderLehrauftrag.php b/application/views/lehre/lehrauftrag/orderLehrauftrag.php index 1bf0495ac..5a28b5884 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftrag.php @@ -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 ""; // 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 ""; @@ -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 diff --git a/system/filtersupdate.php b/system/filtersupdate.php index f5f4832b9..7828bc16e 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -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"},