diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php
index a4116e8d0..1637904c5 100644
--- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php
+++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php
@@ -81,28 +81,6 @@ $this->load->view(
-
-
diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php
index afe41b641..4f605277b 100644
--- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php
+++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php
@@ -9,13 +9,16 @@ SELECT
/* provide extra row index for tabulator, because no other column has unique ids */
ROW_NUMBER() OVER () AS "row_index",
personalnummer,
+ auftrag,
+ stg_typ_kurzbz,
+ gruppe,
+ typ,
lehreinheit_id,
lehrveranstaltung_id,
lv_bezeichnung,
projektarbeit_id,
studiensemester_kurzbz,
studiengang_kz,
- stg_typ_kurzbz,
semester,
/* get valid STPL(s), to which the lehrveranstaltung is assigned to (can be more) */
/* therefore join over lv, studiensemester and semester */
@@ -49,10 +52,7 @@ SELECT
) AS "studienplan_bezeichnung",
orgform_kurzbz,
person_id,
- typ,
- auftrag,
lv_oe_kurzbz,
- gruppe,
lektor,
stunden,
stundensatz,
@@ -340,21 +340,22 @@ $filterWidgetArray = array(
'columnsAliases' => array( // TODO: use phrasen
'Status', // alias for row_index, because row_index is formatted to display the status icons
'Personalnummer',
+ 'LV- / Projektbezeichnung',
+ 'Studiengang',
+ 'Gruppe',
+ 'Typ',
'LV-Teil',
'LV-ID',
'LV',
'PA-ID',
'Studiensemester',
'Studiengang-KZ',
- 'Studiengang',
+
'Semester',
'Studienplan',
'OrgForm',
'Person-ID',
- 'Typ',
- 'LV- / Projektbezeichnung',
'Organisationseinheit',
- 'Gruppe',
'Lektor',
'Stunden',
'Stundensatz',
@@ -371,20 +372,18 @@ $filterWidgetArray = array(
'Angenommen von'
),
'datasetRepOptions' => '{
- height: 700,
- layout:"fitColumns", // fit columns to width of table
- responsiveLayout:"hide", // hide columns that dont fit on the table
- movableColumns: true, // allows changing column
- placeholder: func_placeholder(),
- headerFilterPlaceholder: " ",
- groupBy:"lehrveranstaltung_id",
- groupToggleElement:"header", //toggle group on click anywhere in the group header
- groupHeader: function(value, count, data, group){
- return func_groupHeader(data);
- },
- footerElement: func_footerElement(),
- columnCalcs:"both", // show column calculations at top and bottom of table and in groups
- index: "row_index", // assign specific column as unique id (important for row indexing)
+ height: func_height(this),
+ layout:"fitColumns", // fit columns to width of table
+ layoutColumnsOnNewData: true, // ajust column widths to the data each time TableWidget is loaded
+ autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
+ headerFilterPlaceholder: " ",
+ groupBy:"lehrveranstaltung_id",
+ groupToggleElement:"header", //toggle group on click anywhere in the group header
+ groupHeader: function(value, count, data, group){
+ return func_groupHeader(data);
+ },
+ columnCalcs:"both", // show column calculations at top and bottom of table and in groups
+ index: "row_index", // assign specific column as unique id (important for row indexing)
selectable: true, // allows row selection
selectableRangeMode: "click", // allows range selection using shift end click on end of range
selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated
@@ -409,46 +408,52 @@ $filterWidgetArray = array(
dataLoaded: function(data){
func_dataLoaded(data, this);
},
+ tableWidgetFooter: {
+ selectButtons: true
+ }
}', // tabulator properties
'datasetRepFieldsDefs' => '{
// column status is built dynamically in funcTableBuilt()
row_index: {visible: false},
- personalnummer: {visible: false},
- lehreinheit_id: {headerFilter:"input", bottomCalc:"count", width: "7%",
- bottomCalcFormatter:function(cell){return "Anzahl: " + cell.getValue();}},
- lehrveranstaltung_id: {headerFilter:"input"},
- lv_bezeichnung: {visible: false},
- projektarbeit_id: {visible: false},
- studiensemester_kurzbz: {headerFilter:"input"},
- studiengang_kz: {visible: false},
- stg_typ_kurzbz: {headerFilter:"input", width: "5%"},
+ personalnummer: {visible: false, headerFilter:"input"},
+ auftrag: {
+ headerFilter:"input", widthGrow: 2,
+ bottomCalc:"count", bottomCalcFormatter:function(cell){return "Anzahl: " + cell.getValue();}
+ },
+ stg_typ_kurzbz: {headerFilter:"input"},
+ gruppe: {headerFilter:"input"},
+ typ: {headerFilter:"input"},
+ lehreinheit_id: {visible: false, headerFilter:"input"},
+ lehrveranstaltung_id: {visible: false, headerFilter:"input"},
+ lv_bezeichnung: {visible: false, headerFilter:"input"},
+ projektarbeit_id: {visible: false, headerFilter:"input"},
+ studiensemester_kurzbz: {visible: false, headerFilter:"input"},
+ studiengang_kz: {visible: false, headerFilter:"input"},
semester: {headerFilter:"input"},
- studienplan_bezeichnung: {headerFilter:"input", width: "7%"},
- orgform_kurzbz: {headerFilter:"input"},
- person_id: {visible: false},
- typ: {headerFilter:"input"},
- auftrag: {headerFilter:"input", width:"15%"},
+ studienplan_bezeichnung: {visible: false, headerFilter:"input"},
+ orgform_kurzbz: {visible: false, headerFilter:"input", widthGrow: 2},
+ person_id: {visible: false, headerFilter:"input"},
lv_oe_kurzbz: {headerFilter:"input"},
- gruppe: {headerFilter:"input"},
- lektor: {headerFilter:"input", widthGrow: 3},
+ lektor: {headerFilter:"input", widthGrow: 2},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
- stundensatz: {visible: false},
- betrag: {align:"right", width: "8%", formatter: form_formatNulltoStringNumber,
+ stundensatz: {visible: false, align:"right", formatter: form_formatNulltoStringNumber,
+ headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator},
+ betrag: {align:"right", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money",
bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
- vertrag_id: {visible: false},
+ vertrag_id: {visible: false, headerFilter:"input"},
vertrag_stunden: {visible: false},
vertrag_betrag: {visible: false},
- mitarbeiter_uid: {visible: false},
- bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip, width: "8%"},
- erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip, width: "8%"},
- akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip, width: "8%"},
- bestellt_von: {visible: false},
- erteilt_von: {visible: false},
- akzeptiert_von: {visible: false}
+ mitarbeiter_uid: {visible: false, headerFilter:"input"},
+ bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip},
+ erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip},
+ akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip},
+ bestellt_von: {visible: false, headerFilter:"input"},
+ erteilt_von: {visible: false, headerFilter:"input"},
+ akzeptiert_von: {visible: false, headerFilter:"input"}
}', // col properties
);
diff --git a/application/views/widgets/table/table.php b/application/views/widgets/table/table.php
index e73aec335..936c32dc8 100644
--- a/application/views/widgets/table/table.php
+++ b/application/views/widgets/table/table.php
@@ -1,17 +1,21 @@
-
+
diff --git a/public/css/Tabulator.css b/public/css/Tabulator.css
index 359f29e72..0545101c9 100644
--- a/public/css/Tabulator.css
+++ b/public/css/Tabulator.css
@@ -12,3 +12,26 @@
.tabulator-page.active {
color: #337ab7 !important;
}
+
+/* Avoid confusing color change when hovering over selected rows */
+.tabulator-row.tabulator-selected:hover {
+ background-color: #769bcc !important;
+}
+
+/* Frame the table */
+.tabulator {
+ border: 1px solid lightgrey;
+ border-bottom: none;
+ border-top-left-radius: 0.5em;
+ border-top-right-radius: 0.5em;
+}
+
+/* Frame the header cells */
+.tabulator-col:not(:first-of-type) {
+ border-left: 0.5px solid lightgrey;
+}
+
+/* More space for header title (avoids triple points at the end) */
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+ overflow: initial;
+}
\ No newline at end of file
diff --git a/public/js/TableWidget.js b/public/js/TableWidget.js
index 89e7cf3d5..eebe5265c 100644
--- a/public/js/TableWidget.js
+++ b/public/js/TableWidget.js
@@ -182,11 +182,105 @@ var FHC_TableWidget = {
*/
_turnOnEvents: function(tableWidgetDiv) {
+ var tableUniqueId = tableWidgetDiv.attr('tableUniqueId');
+
// If the choosen dataset representation is tablesorter
if (FHC_TableWidget._datasetRepresentation == DATASET_REP_TABLESORTER)
{
FHC_TableWidget._enableTableSorter(tableWidgetDiv); // enable the tablesorter
}
+
+ // If the choosen dataset representation is tabulator
+ if (FHC_TableWidget._datasetRepresentation == DATASET_REP_TABULATOR)
+ {
+ // ---------------------------------------------------------------------------------------------------------
+ // Add events to the elements
+ // ---------------------------------------------------------------------------------------------------------
+
+ // Click-Event to download csv
+ tableWidgetDiv.find('#download-csv').on('click', function()
+ {
+ // BOM for correct UTF-8 char output
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator("download", "csv", "data.csv", {bom:true});
+ })
+
+ // Click-Event to toggle the collapsable help panel
+ tableWidgetDiv.find('#help').on('click', function()
+ {
+ // Hide the collapsable settings panel, if it actually shown
+ $('#tabulatorSettings-' + tableUniqueId).collapse('hide');
+
+ // Toggle the collapsable help panel
+ $('#tabulatorHelp-' + tableUniqueId).collapse('toggle');
+ })
+
+ // Click-Event to toggle the collapsable settings panel
+ tableWidgetDiv.find('#settings').on('click', function()
+ {
+ // Hide the collapsable help panel, if it actually shown
+ $('#tabulatorHelp-' + tableUniqueId).collapse('hide');
+
+ // Toggle the collapsable settings panel
+ $('#tabulatorSettings-' + tableUniqueId).collapse('toggle');
+ })
+
+ /* Beautify button group behaviour
+ * Let buttons stay active even until they are clicked again to close the collapsable help- oder setting panels
+ * Also remove the disturbing button focus behaviour
+ */
+ $(".btn-group > .btn").click(function(){
+ if ($(this).hasClass("active"))
+ {
+ $(this).removeClass('active').css('outline', 'none');
+ }
+ else
+ {
+ $(this).addClass("active").css('outline', 'none').siblings().removeClass("active");
+ }
+ });
+
+ /**
+ * Click-Event to select all rows
+ * Default is ALL rows. This can be modified via hook tableWidgetHook_selectAllButton.
+ */
+ if (typeof tableWidgetHook_selectAllButton == 'function')
+ {
+ tableWidgetDiv.find('#select-all').on('click', function() {
+ tableWidgetHook_selectAllButton(tableWidgetDiv);
+ });
+ }
+ else
+ {
+ tableWidgetDiv.find('#select-all').on('click', function() {
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', true);
+ });
+ }
+
+ // Click-Event to deselect all rows
+ tableWidgetDiv.find('#deselect-all').on('click', function()
+ {
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('deselectRow');
+ })
+
+ // Click-Event to toggle column-picker columns
+ tableWidgetDiv.find('.btn-select-col').on('click', function()
+ {
+ var selected = this.value;
+
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('toggleColumn', selected);
+
+ $(this).toggleClass('active');
+
+ if(!$(this).hasClass('active'))
+ {
+ $(this).css('background-color', 'white');
+ }
+ else
+ {
+ $(this).css('background-color', '#e6e6e6');
+ }
+ })
+ }
},
_renderDataset: function(tableWidgetDiv, data) {
@@ -443,11 +537,48 @@ var FHC_TableWidget = {
options.columns = arrayTabulatorColumns;
options.data = data.dataset;
-
+ options.persistentLayout = true; // enables persistence (default store in localStorage if available, else in cookie)
+ options.persistenceID = data.tableUniqueId; // TableWidget unique id to store persistence data seperately for multiple tables
+ options.movableColumns = true; // allows changing column order
+ options.tooltipsHeader = true; // set header tooltip with column title
+ options.placeholder = _func_placeholder(); // display text when table is empty
+ options.rowSelectionChanged = function(data, rows){
+ _func_rowSelectionChanged(data, rows);
+ };
+ options.columnVisibilityChanged = function(column, visible) {
+ _func_columnVisibilityChanged(column, visible);
+ };
+
// Renders the tabulator
tableWidgetDiv.find("#tableWidgetTabulator").tabulator(options);
}
}
+
+ // -------------------------------------------------------------------------------------------------------------
+ // Render TableWidget Header and -Footer
+ // -------------------------------------------------------------------------------------------------------------
+
+ // Render tableWidgetHeader
+ var tabulatorHeaderHTML = _renderTabulatorHeaderHTML(tableWidgetDiv);
+ tableWidgetDiv.find('#tableWidgetHeader').append(tabulatorHeaderHTML);
+
+ // Render the collapsable div triggered by button in tableWidgetHeader
+ var tabulatorHeaderCollapseHTML = _renderTabulatorHeaderCollapseHTML(tableWidgetDiv);
+ tableWidgetDiv.find('#tableWidgetHeader').after(tabulatorHeaderCollapseHTML);
+
+ /**
+ * tableWidgetFooter is NOT rendered by default.
+ * tableWidgetFooter is rendered, if tableWidgetFooter is set in tabulators datasetRepOptions.
+ * Setup options like this:
+ * tableWidgetFooter: {
+ * selectButtons: true // tableWidgetFooter properties are checked in _renderTabulatorFooterHTML function
+ * }
+ */
+ if (options.tableWidgetFooter != 'undefined' && options.tableWidgetFooter != null)
+ {
+ var tabulatorFooterHTML = _renderTabulatorFooterHTML(options.tableWidgetFooter);
+ tableWidgetDiv.find('#tableWidgetFooter').append(tabulatorFooterHTML);
+ }
},
/**
@@ -584,6 +715,179 @@ var FHC_TableWidget = {
}
};
+//**********************************************************************************************************************
+// Render functions
+//**********************************************************************************************************************
+/*
+ * Processed when row selection changed.
+ * Displays number of selected rows on row selection change.
+ */
+function _func_rowSelectionChanged (data, rows){
+
+ $('#number-selected').html("Ausgewählte Zeilen:
" + rows.length + " ");
+}
+
+/* Processed when columns visibility changed (e.g. using the column picker).
+ * Redraws the table to expand columns to table width.
+ */
+function _func_columnVisibilityChanged(column, visible){
+
+ var table = column.getTable();
+
+ table.redraw();
+}
+
+/*
+ * Displays text when table is empty
+ */
+function _func_placeholder(){
+ return "
Keine Daten vorhanden. ";
+}
+
+// Returns TableWidget Header HTML (download-, setting button...)
+function _renderTabulatorHeaderHTML(tableWidgetDiv){
+
+ var tableUniqueId = tableWidgetDiv.attr('tableUniqueId');
+
+ var tabulatorHeaderHTML = '';
+ tabulatorHeaderHTML += '
';
+ tabulatorHeaderHTML += '
';
+
+ return tabulatorHeaderHTML;
+}
+
+// Returns collapsable HTML element for TableWidget header buttons
+function _renderTabulatorHeaderCollapseHTML(tableWidgetDiv){
+
+ var tableUniqueId = tableWidgetDiv.attr('tableUniqueId');
+
+ var tabulatorHeaderCollapseHTML = '';
+
+ // CollapseHTML 'Settings'
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += 'Spalten einstellen ';
+ tabulatorHeaderCollapseHTML += ' ';
+ tabulatorHeaderCollapseHTML += '
'; // end panel-heading
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+
+ // Create column picker (Spalten einstellen)
+ tableWidgetDiv.find('#tableWidgetTabulator').tabulator('getColumns').forEach(function(column)
+ {
+ var field = column.getField();
+ var title = column.getDefinition().title;
+ var active_status = column.getVisibility() ? 'active' : '';
+
+ // If certain columns should be excluded from the column picker (define them in a blacklist array)
+ if (typeof tableWidgetBlacklistArray_columnUnselectable != 'undefined' &&
+ Array.isArray(tableWidgetBlacklistArray_columnUnselectable) &&
+ tableWidgetBlacklistArray_columnUnselectable.length)
+ {
+ if ($.inArray(field, tableWidgetBlacklistArray_columnUnselectable) < 0)
+ {
+ tabulatorHeaderCollapseHTML += '' + title + ' ';
+ }
+ }
+ // Else provide all tabulator fields as pickable columns
+ else
+ {
+ tabulatorHeaderCollapseHTML += '' + title + ' ';
+ }
+ });
+
+ tabulatorHeaderCollapseHTML += '
'; // end btn-group
+ tabulatorHeaderCollapseHTML += '
'; // end panel-body
+ tabulatorHeaderCollapseHTML += '
'; // end panel-collapse
+ tabulatorHeaderCollapseHTML += '
'; // end panel
+
+ tabulatorHeaderCollapseHTML += '
'; // end panel-group
+ tabulatorHeaderCollapseHTML += '
'; // end col
+ tabulatorHeaderCollapseHTML += '
'; // end row
+
+ // CollapseHTML 'Help'
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+
+ tabulatorHeaderCollapseHTML += '
Tabelleneinstellungen ';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
Spalten ein- und ausblenden ';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += 'Mit einem Klick auf ' +
+ 'werden die Einstellungen geöffnet. ';
+ tabulatorHeaderCollapseHTML += 'Auf Spalteneinstellungen klicken ';
+ tabulatorHeaderCollapseHTML += 'Durch (wiederholtes) Klicken auf die einzelnen Spaltennamen können ' +
+ 'diese in der Tabelle beliebig oft aktiviert / deaktiviert werden. ';
+ tabulatorHeaderCollapseHTML += 'Mit einem Klick auf ' +
+ 'werden die Einstellungen wieder geschlossen. ';
+ tabulatorHeaderCollapseHTML += ' ';
+ tabulatorHeaderCollapseHTML += '';
+ tabulatorHeaderCollapseHTML += '
Spaltenbreite verändern ';
+ tabulatorHeaderCollapseHTML += '
Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam ' +
+ 'mit dem Mauszeiger auf den rechten Rand der entprechenden Spalte. ' +
+ 'Sobald sich der Mauszeiger in einen Doppelpfeil verwandelt, wird die Maustaste geklickt und ' +
+ 'mit gedrückter Maustaste die Spalte nach rechts erweitert oder nach links verkleinert.';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
INFO: Alle individuellen Tabelleneinstellungen werden in ' +
+ 'Ihrem Browser Cache gespeichert. Wenn Sie Ihren Browser Cache löschen, werden Ihre Einstellungen zurückgesetzt und ' +
+ 'müssen gegebenenfalls neu eingestellt werden.';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
'; // end panel-body
+
+ tabulatorHeaderCollapseHTML += '
Zeilen auswählen ';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += '
';
+ tabulatorHeaderCollapseHTML += 'Einzeln auswählen: Strg + Klick auf einzelne Zeile(n) ';
+ tabulatorHeaderCollapseHTML += 'Bereich auswählen: Shift + Klick auf Anfangs- und Endzeile ';
+ tabulatorHeaderCollapseHTML += 'Alle auswählen: Button \'Alle auswählen\' ';
+ tabulatorHeaderCollapseHTML += ' ';
+ tabulatorHeaderCollapseHTML += '
'; // end panel-body
+
+ tabulatorHeaderCollapseHTML += '
'; // end well
+ tabulatorHeaderCollapseHTML += '
'; // end col collapse
+ tabulatorHeaderCollapseHTML += '
'; // end row
+
+ return tabulatorHeaderCollapseHTML;
+}
+
+// Returns TableWidget Footer HTML (de-/select buttons,...)
+function _renderTabulatorFooterHTML(tableWidgetFooterOptions){
+
+ var tabulatorFooterHTML = '';
+
+ // If property selectButtons is true, render 'Alle auswaehlen / Alle abwaehlen' buttons
+ if (tableWidgetFooterOptions.selectButtons != 'undefined' && tableWidgetFooterOptions.selectButtons == true)
+ {
+ tabulatorFooterHTML += '
';
+ tabulatorFooterHTML += '';
+ }
+
+ return tabulatorFooterHTML;
+}
+
/**
* When JQuery is up
*/
diff --git a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
index da041c232..e35c3f79c 100644
--- a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
@@ -19,6 +19,18 @@ const ICON_LEHRAUFTRAG_APPROVED = '
';
const ICON_LEHRAUFTRAG_CANCELLED = '
';
+// Fields that should not be provided in the column picker
+var tableWidgetBlacklistArray_columnUnselectable = [
+ 'status',
+ 'row_index',
+ 'betrag',
+ 'vertrag_id',
+ 'vertrag_stunden',
+ 'vertrag_betrag',
+ 'storniert_von', // fields from cancelledLehrauftragData
+ 'letzterStatus_vorStorniert' // fields from cancelledLehrauftragData
+];
+
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
// -----------------------------------------------------------------------------------------------------------------
@@ -81,10 +93,9 @@ function hf_filterStringnumberWithOperator(headerValue, rowValue, rowData){
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
-// Displays text when table is empty
-function func_placeholder()
-{
- return "
Keine Daten vorhanden. ";
+// Returns relative height (depending on screen size)
+function func_height(table){
+ return $(window).height() * 0.50;
}
// Formats the rows
@@ -254,65 +265,20 @@ function func_renderComplete(table){
);
}
-// Tabulator footer element
+// TableWidget Footer element
// -----------------------------------------------------------------------------------------------------------------
-// Adds a footer with buttons select all / deselect all / download
-function func_footerElement(){
-
- var footer_html = '
';
- footer_html += '
';
-
- footer_html += '
';
-
- footer_html += '
';
-
- footer_html += '
';
- footer_html += '
';
-
- return footer_html;
-}
-
-// Performs download CSV
-function footer_downloadCSV(){
- $('#tableWidgetTabulator').tabulator("download", "csv", "data.csv", {bom:true}); // BOM for correct UTF-8 char output
-}
-
/*
- * Performs select all
+ * Hook to overwrite TableWigdgets select-all-button behaviour
* Select all (filtered) rows and ignore rows that are bestellt and erteilt
*/
-function footer_selectAll(){
- $('#tableWidgetTabulator').tabulator('getRows', true)
- .filter(function(row){ return row.getData().bestellt != null && // bestellt
- row.getData().erteilt != null && // AND erteilt
- row.getData().akzeptiert == null && // AND NOT akzeptiert
- row.getData().status != 'Geändert'
- ;}) // AND NOT geändert
- .forEach((function(row){ return row.select();}));
-}
-
-/*
- * Performs deselect all
- * Deselect all (filtered) rows
- */
-function footer_deselectAll(){
- $('#tableWidgetTabulator').tabulator('deselectRow');
-}
-
-// Displays number of selected rows on row selection change
-function func_rowSelectionChanged(data, rows){
- $('#number-selected').html("Für Annehmen ausgewählt:
" + rows.length + " ");
+function tableWidgetHook_selectAllButton(tableWidgetDiv){
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
+ .filter(row => row.getData().bestellt != null && // bestellt
+ row.getData().erteilt != null && // AND erteilt
+ row.getData().akzeptiert == null && // AND NOT akzeptiert
+ row.getData().status != 'Geändert') // AND NOT geändert
+ .forEach((row => row.select()));
}
// -----------------------------------------------------------------------------------------------------------------
@@ -476,6 +442,12 @@ $(function() {
return;
}
+ // Redraw table on resize to fit tabulators height to windows height
+ window.addEventListener('resize', function(){
+ $('#tableWidgetTabulator').tabulator('setHeight', $(window).height() * 0.50);
+ $('#tableWidgetTabulator').tabulator('redraw', true);
+ });
+
// Show all rows
$("#show-all").click(function(){
$('#tableWidgetTabulator').tabulator('clearFilter');
@@ -594,7 +566,7 @@ $(function() {
// Print error message
FHC_DialogLib.alertWarning(data.retval);
}
-
+
if (!data.error && data.retval != null)
{
// Update status 'Erteilt'
diff --git a/public/js/lehre/lehrauftrag/approveLehrauftrag.js b/public/js/lehre/lehrauftrag/approveLehrauftrag.js
index 5ce99ab2e..3131bcfb3 100644
--- a/public/js/lehre/lehrauftrag/approveLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/approveLehrauftrag.js
@@ -19,6 +19,17 @@ const ICON_LEHRAUFTRAG_ORDERED = '
';
const ICON_LEHRAUFTRAG_CHANGED = '
';
+// Fields that should not be provided in the column picker
+var tableWidgetBlacklistArray_columnUnselectable = [
+ 'status',
+ 'row_index',
+ 'personalnummer',
+ 'betrag',
+ 'vertrag_id',
+ 'vertrag_stunden',
+ 'vertrag_betrag'
+];
+
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
// -----------------------------------------------------------------------------------------------------------------
@@ -95,10 +106,9 @@ function func_initialFilter(){
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
-// Displays text when table is empty
-function func_placeholder()
-{
- return "
Keine Daten vorhanden. ";
+// Returns relative height (depending on screen size)
+function func_height(table){
+ return $(window).height() * 0.50;
}
// Formats the group header
@@ -301,65 +311,20 @@ function func_rowUpdated(row){
row.getElement().style["pointerEvents"] = "none";
}
-
-// Tabulator footer element
+// TableWidget Footer element
// -----------------------------------------------------------------------------------------------------------------
-// Adds a footer with buttons select all / deselect all / download
-function func_footerElement(){
-
- var footer_html = '
';
- footer_html += '
';
-
- footer_html += '
';
-
- footer_html += '
';
-
- footer_html += '
';
- footer_html += '
';
-
- return footer_html;
-}
-
-// Performs download CSV
-function footer_downloadCSV(){
- $('#tableWidgetTabulator').tabulator("download", "csv", "data.csv", {bom:true}); // BOM for correct UTF-8 char output
-}
-
/*
- * Performs select all
+ * Hook to overwrite TableWigdgets select-all-button behaviour
* Select all (filtered) rows that are bestellt
*/
-function footer_selectAll(){
- $('#tableWidgetTabulator').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().status != 'Geändert') // AND NOT geaendert
- .forEach((row => row.select()));
-}
-
-/*
- * Performs deselect all
- * Deselect all (filtered) rows
- */
-function footer_deselectAll(){
- $('#tableWidgetTabulator').tabulator('deselectRow');
-}
-
-// Displays number of selected rows on row selection change
-function func_rowSelectionChanged(data, rows){
- $('#number-selected').html("Für Erteilung ausgewählt:
" + rows.length + " ");
+function tableWidgetHook_selectAllButton(tableWidgetDiv){
+ tableWidgetDiv.find("#tableWidgetTabulator").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().status != 'Geändert') // AND NOT geaendert
+ .forEach((row => row.select()));
}
// -----------------------------------------------------------------------------------------------------------------
@@ -526,6 +491,12 @@ akzeptiert_tooltip = function(cell){
}
$(function() {
+ // Redraw table on resize to fit tabulators height to windows height
+ window.addEventListener('resize', function(){
+ $('#tableWidgetTabulator').tabulator('setHeight', $(window).height() * 0.50);
+ $('#tableWidgetTabulator').tabulator('redraw', true);
+ });
+
// Show all rows
$("#show-all").click(function(){
$('#tableWidgetTabulator').tabulator('clearFilter');
diff --git a/public/js/lehre/lehrauftrag/orderLehrauftrag.js b/public/js/lehre/lehrauftrag/orderLehrauftrag.js
index 8f3953e0b..e52a7599e 100644
--- a/public/js/lehre/lehrauftrag/orderLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/orderLehrauftrag.js
@@ -18,6 +18,17 @@ const ICON_LEHRAUFTRAG_ORDERED = '
';
const ICON_LEHRAUFTRAG_CHANGED = '
';
+// Fields that should not be provided in the column picker
+var tableWidgetBlacklistArray_columnUnselectable = [
+ 'status',
+ 'row_index',
+ 'personalnummer',
+ 'betrag',
+ 'vertrag_id',
+ 'vertrag_stunden',
+ 'vertrag_betrag'
+];
+
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
// -----------------------------------------------------------------------------------------------------------------
@@ -106,10 +117,9 @@ function func_dataLoaded(data, table){
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
-// Displays text when table is empty
-function func_placeholder()
-{
- return "
Keine Daten vorhanden. ";
+// Returns relative height (depending on screen size)
+function func_height(table){
+ return $(window).height() * 0.50;
}
// Formats the group header
@@ -325,47 +335,16 @@ function func_rowUpdated(row){
row.getElement().style["pointerEvents"] = "none";
}
-// Tabulator footer element
+// TableWidget Footer element
// -----------------------------------------------------------------------------------------------------------------
-// Adds a footer with buttons select all / deselect all / download
-function func_footerElement(){
-
- var footer_html = '
';
- footer_html += '
';
-
- footer_html += '
';
-
- footer_html += '
';
-
- footer_html += '
';
- footer_html += '
';
-
- return footer_html;
-}
-
-// Performs download CSV
-function footer_downloadCSV(){
- $('#tableWidgetTabulator').tabulator("download", "csv", "data.csv", {bom:true}); // BOM for correct UTF-8 char output
-}
-
/*
- * Performs select all
+ * Hook to overwrite TableWigdgets select-all-button behaviour
* Select all (filtered) rows and ignore rows which have status bestellt
*/
-function footer_selectAll(){
- $('#tableWidgetTabulator').tabulator('getRows', true)
- .filter(row => (
+function tableWidgetHook_selectAllButton(tableWidgetDiv){
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
+ .filter(row => (
row.getData().personalnummer > 0 || // not dummies
row.getData().personalnummer == null) && // include Projektbetreuer
row.getData().mitarbeiter_uid != null && // AND is Mitarbeiter
@@ -377,20 +356,7 @@ function footer_selectAll(){
row.getData().status == 'Geändert' // AND geaendert)
)
)
- .forEach((row => row.select()));
-}
-
-/*
- * Performs deselect all
- * Deselect all (filtered) rows
- */
-function footer_deselectAll(){
- $('#tableWidgetTabulator').tabulator('deselectRow');
-}
-
-// Displays number of selected rows on row selection change
-function func_rowSelectionChanged(data, rows){
- $('#number-selected').html("Für Bestellung ausgewählt:
" + rows.length + " ");
+ .forEach((row => row.select()));
}
// -----------------------------------------------------------------------------------------------------------------
@@ -576,6 +542,12 @@ akzeptiert_tooltip = function(cell){
$(function() {
+ // Redraw table on resize to fit tabulators height to windows height
+ window.addEventListener('resize', function(){
+ $('#tableWidgetTabulator').tabulator('setHeight', $(window).height() * 0.50);
+ $('#tableWidgetTabulator').tabulator('redraw', true);
+ });
+
// Show all rows
$("#show-all").click(function(){
$('#tableWidgetTabulator').tabulator('clearFilter');