diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php index 1bd5c667f..1f93bf35d 100644 --- a/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersichtData.php @@ -163,9 +163,13 @@ $filterWidgetArray = array( tableWidgetFooter: { selectButtons: true }, + selectableCheck: function(row){ return func_selectableCheck(row); }, + rowFormatter:function(row){ + return func_rowFormatter(row); + }, columnDefaults:{ tooltip:func_tooltips, headerFilterPlaceholder: " ", diff --git a/public/css/Tabulator5.css b/public/css/Tabulator5.css index 3ce22e592..ec68f97f7 100644 --- a/public/css/Tabulator5.css +++ b/public/css/Tabulator5.css @@ -42,6 +42,11 @@ /* classes for rows that are not selectable in the tabulator, except for rows that are used for calculation */ .tabulator-row.tabulator-unselectable:not(.tabulator-calcs) { color: #adb5bd !important; + pointer-events: none !important; +} + +.tabulator-row.tabulator-unselectable a { + pointer-events: auto !important; } /* using bootstrap background classes to style the background color of tabulator rows */ diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index 7bf84bd19..e89d1a9ee 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -195,16 +195,22 @@ function func_selectableCheck(row) { ); } -function func_rowFormatter(row){ +function func_rowFormatter(row) { const rowData = row.getData(); // add the tabulator-unselectable class to the row if its data property isSelectable is false - if(rowData.isSelectable===false && !row.getElement().classList.contains("tabulator-unselectable")){ + if ( + rowData.isSelectable === false && + !row.getElement().classList.contains("tabulator-unselectable") + ) { row.getElement().classList.add("tabulator-unselectable"); } // remove the tabulator-selectable class if the data property isSelectable is false and it contains the class - if(rowData.isSelectable===false && row.getElement().classList.contains("tabulator-selectable")){ + if ( + rowData.isSelectable === false && + row.getElement().classList.contains("tabulator-selectable") + ) { row.getElement().classList.remove("tabulator-selectable"); } } @@ -232,7 +238,7 @@ function func_rowSelectionChanged(data, rows, tabulatorInstance) { } // Returns tooltip -function func_tooltips(e,cell,onRendered) { +function func_tooltips(e, cell, onRendered) { //e - mouseover event //cell - cell component //onRendered - onRendered callback registration function @@ -331,10 +337,6 @@ $(function () { approveAnrechnung.disableCreateAnrechnungButton(); } - //! this function should not be needed in the approveAnrechnungUebersicht - // Set status alert color - approveAnrechnung.setStatusAlertColor(); - // Show only rows that are in progress by STGL $("#show-inProgressDP").click(function () { $("#tableWidgetTabulator").tabulator("setFilter", [ @@ -521,21 +523,19 @@ $(function () { (updateData.ectsSumBeruflich = row.getData().ectsSumBeruflich + sumLvEcts.ectsSumAnzurechnendeLvsBeruflich); - + // set the isSelectable property to false, in order to add the tabulator-unselectable class in the rowFormatter function - updateData.isSelectable=false; + updateData.isSelectable = false; // Update row row.update(updateData); row.reformat(); - }); // Deselect rows $("#tableWidgetTabulator").tabulator( "deselectRow", rowsToDeselect - ); - + ); }); // Print success message @@ -633,11 +633,13 @@ $(function () { $("#tableWidgetTabulator").tabulator("updateData", data); // add the isSelectable property to the rejected row, so that the right classes and selectability is applied to the row - var selectedRows = $("#tableWidgetTabulator").tabulator("getSelectedRows"); - selectedRows.forEach((row)=>{ - row.update({...row.getData(), isSelectable:false}); + var selectedRows = $("#tableWidgetTabulator").tabulator( + "getSelectedRows" + ); + selectedRows.forEach((row) => { + row.update({ ...row.getData(), isSelectable: false }); row.reformat(); - }) + }); // Deselect rows var indexesToDeselect = data.map((x) => x.anrechnung_id); @@ -758,33 +760,6 @@ $(function () { }); var approveAnrechnung = { - setStatusAlertColor: function () { - let status_kurzbz = $("#requestAnrechnung-status_kurzbz").data( - "status_kurzbz" - ); - - switch (status_kurzbz) { - case ANRECHNUNGSTATUS_APPROVED: - $("#requestAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-success-subtle"); - break; - case ANRECHNUNGSTATUS_REJECTED: - $("#requestAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-danger-subtle"); - break; - case "": - $("#requestAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-info-subtle"); - break; - default: - $("#requestAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-warning-subtle"); - } - }, disableEditElements: function () { // Disable: // ...button Empfehlung anfordern diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js index 277e3ad3e..ac2e663ec 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js @@ -95,28 +95,22 @@ function func_selectableCheck(row) { let status_kurzbz = row.getData().status_kurzbz; let empfehlungsberechtigt = row.getData().empfehlungsberechtigt; - return ( - status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || - empfehlungsberechtigt == "false" - ); + return status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || empfehlungsberechtigt == "false"; + } -// Performes after row was updated -function func_rowUpdated(row) { - // Refresh row formatters - row.reformat(); - // Deselect and disable new selection of updated rows - row.deselect(); - row.getElement().style["pointerEvents"] = "none"; +function func_rowFormatter(row){ + const rowData = row.getData(); - // ...but leave url links selectable - row.getCell("dokument_bezeichnung").getElement().firstChild.style[ - "pointerEvents" - ] = "auto"; - if (row.getCell("detils")) { - row.getCell("details").getElement().firstChild.style["pointerEvents"] = - "auto"; + // add the tabulator-unselectable class to the row if its data property isSelectable is false + if(rowData.isSelectable===false && !row.getElement().classList.contains("tabulator-unselectable")){ + row.getElement().classList.add("tabulator-unselectable"); + } + + // remove the tabulator-selectable class if the data property isSelectable is false and it contains the class + if(rowData.isSelectable===false && row.getElement().classList.contains("tabulator-selectable")){ + row.getElement().classList.remove("tabulator-selectable"); } } @@ -189,13 +183,9 @@ $(function () { $(document).on("tableInit", function (event, tabulatorInstance) { func_tableBuilt($("#tableWidgetTabulator")); - - // event rowUpdated needs to be attached as a callback to the tableBuilt event in tabulator5 - $("#tableWidgetTabulator").tabulator("on", "rowUpdated", (row) => { - func_rowUpdated(row); - }); }); + // Redraw table on resize to fit tabulators height to windows height window.addEventListener("resize", function () { $("#tableWidgetTabulator").tabulator("setHeight", $(window).height() * 0.5); @@ -332,6 +322,19 @@ $(function () { if (!data.error && data.retval != null) { // Update status 'genehmigt' $("#tableWidgetTabulator").tabulator("updateData", data.retval); + + // make all confirmed anrechnungen unselectable and deselect them + let selectedRows = $("#tableWidgetTabulator").tabulator("getSelectedRows"); + selectedRows.forEach(row => { + row.update({...row.getData(), isSelectable:false}); + row.reformat(); + }); + + // deselect all selected rows + $("#tableWidgetTabulator").tabulator( + "deselectRow", + selectedRows + ); // Print success message FHC_DialogLib.alertSuccess( @@ -458,33 +461,6 @@ $(function () { }); var reviewAnrechnung = { - setStatusAlertColor: function () { - let status_kurzbz = $("#reviewAnrechnung-status_kurzbz").data( - "status_kurzbz" - ); - - switch (status_kurzbz) { - case ANRECHNUNGSTATUS_APPROVED: - $("#reviewAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-success-subtle"); - break; - case ANRECHNUNGSTATUS_REJECTED: - $("#reviewAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-danger-subtle"); - break; - case "": - $("#reviewAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-info-subtle"); - break; - default: - $("#reviewAnrechnung-status_kurzbz") - .closest("div") - .addClass("bg-warning-subtle"); - } - }, copyIntoTextarea: function (elem) { // Find closest textarea let textarea = $(elem).closest("div").find("textarea");