diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js index c5c0519f3..ffa989056 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js @@ -4,6 +4,7 @@ const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor'; const ANRECHNUNGSTATUS_APPROVED = 'approved'; const ANRECHNUNGSTATUS_REJECTED = 'rejected'; +const COLOR_DANGER = '#f2dede'; $(function(){ @@ -36,6 +37,8 @@ $(function(){ // Init tooltips approveAnrechnungDetail.initTooltips(); + approveAnrechnungDetail.alertIfMaxEctsExceeded(); + // Ask if Approve Anrechnungen $("#approveAnrechnungDetail-approve-anrechnung-ask").click(function(){ @@ -93,6 +96,9 @@ $(function(){ data.retval[0].abgeschlossen_von, data.retval[0].status_bezeichnung ); + + approveAnrechnungDetail.sumUpEcts(ects, sumEctsSchulisch, sumEctsBeruflich); + approveAnrechnungDetail.alertIfMaxEctsExceeded(); } }, errorCallback: function (jqXHR, textStatus, errorThrown) @@ -251,18 +257,19 @@ $(function(){ console.log(data); if (data.error && data.retval != null) { - console.log('inside error'); // Print error message FHC_DialogLib.alertWarning(data.retval); } if (!data.error && data.retval != null) { - console.log('inside success'); approveAnrechnungDetail.formatGenehmigungIsWithdrawed( data.retval.status_bezeichnung ); + approveAnrechnungDetail.substractEcts(ects, sumEctsSchulisch, sumEctsBeruflich); + approveAnrechnungDetail.alertIfMaxEctsExceeded(); + FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen")); } @@ -544,5 +551,29 @@ var approveAnrechnungDetail = { $('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false); // Hide button to withdraw approval $('#approveAnrechnungDetail-withdraw-request-recommedation').addClass('hidden'); + }, + sumUpEcts: function(ects, sumEctsSchulisch, sumEctsBeruflich){ + $('#sumEctsTotal').text(parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text()) + parseFloat($('#ects').text())); + $('#sumEctsSchulisch').text(parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#ects').text())); + + }, + substractEcts: function(ects, sumEctsSchulisch, sumEctsBeruflich){ + $('#sumEctsTotal').text(parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text()) - parseFloat($('#ects').text())); + $('#sumEctsSchulisch').text(parseFloat($('#sumEctsSchulisch').text()) - parseFloat($('#ects').text())); + }, + alertIfMaxEctsExceeded: function(){ + if( + (parseFloat($('#ects').text()) + parseFloat($('#sumEctsSchulisch').text())) > 60 || + (parseFloat($('#ects').text()) + parseFloat($('#sumEctsBeruflich').text())) > 60 || + (parseFloat($('#ects').text()) + parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text())) > 90 + ) + { + console.log('inside'); + $('#sumEctsMsg').html("
ACHTUNG! Bei Anrechnung von LV: Maximale ECTS überschritten.
").css('backgroundColor', COLOR_DANGER); + } + else + { + $('#sumEctsMsg').html('').css('border', 'none'); + } } } \ No newline at end of file diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index fe78217b9..b6a2182d8 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -8,6 +8,9 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved'; const ANRECHNUNGSTATUS_REJECTED = 'rejected'; const COLOR_LIGHTGREY = "#f5f5f5"; +const COLOR_DANGER = '#f2dede'; + +var previousSelectedRows = []; // ----------------------------------------------------------------------------------------------------------------- // Mutators - setter methods to manipulate table data when entering the tabulator @@ -99,6 +102,75 @@ function func_selectableCheck(row){ ); } +// Unformat row when single row is deselected (is not done by func_rowSelectionChanged yet) +function func_rowDeselected(row){ + + // Removes bg-color on single row deselection. + approveAnrechnung.unmarkEctsRow(row); +} + +// Format rows when maximum ECTS are exceeded. +function func_rowSelectionChanged(data, rows){ + + var selectedData = data; + var selectedRows = rows; + + // If no rows selected + if (selectedRows.length == 0) + { + // Check there are still rows marked from previous selection... + if (previousSelectedRows.length > 0) + { + // ... and unmark them + previousSelectedRows.forEach((row) => approveAnrechnung.unmarkEctsRow(row)); + } + + // Show number of selected Rows + approveAnrechnung.showNumberSelectedRows(selectedRows); + return; + } + + // Sum up over all anzurechnenden LV-ECTS by Prestudent + var result = []; + result = approveAnrechnung.getSumLvEctsByPreStudent(selectedData); + + // Filter only Prestudenten, where ECTS exceed maximum + exceededEctsByPreStud = + result.filter((val) => + (val.ectsSumAnzurechnendeLvs + val.ectsSumSchulisch) > 60 || + (val.ectsSumBeruflich) > 60 || + (val.ectsSumAnzurechnendeLvs + val.ectsSumSchulisch + val.ectsSumBeruflich) > 90 + ); + + // Mark all Prestudenten + if (selectedRows.length > 0) + { + selectedRows.forEach((row) => { + + //row.reformat(); + approveAnrechnung.unmarkEctsRow(row); + + if (exceededEctsByPreStud.length > 0) + { + exceededEctsByPreStud.forEach((val) => { + if (row.getData().prestudent_id == val.prestudent_id) + { + approveAnrechnung.markEctsRow(row); + + } + }) + } + + }); + } + + // Keep the selected rows for next selection. + previousSelectedRows = selectedRows; + + // Show number of selected rows. + approveAnrechnung.showNumberSelectedRows(selectedRows); +} + // Performes after row was updated function func_rowUpdated(row){ // Refresh row formatters @@ -595,5 +667,47 @@ var approveAnrechnung = { break; } + }, + markEctsRow(row){ + row.getElement().style["background-color"] = COLOR_DANGER; + // row.getCell('ects').getElement().style["background-color"] = COLOR_DANGER; + // row.getCell('ectsSumTotal').getElement().style["background-color"] = COLOR_DANGER; + // row.getCell('student').getElement().style["background-color"] = COLOR_DANGER; + }, + unmarkEctsRow(row){ + row.getElement().style.removeProperty('background-color'); + // row.getCell('ects').getElement().style.removeProperty('background-color'); + // row.getCell('ectsSumTotal').getElement().style.removeProperty('background-color'); + // row.getCell('student').getElement().style.removeProperty('background-color'); + }, + getSumLvEctsByPreStudent(selectedData){ + + var result = []; + + selectedData.reduce((prev, curr) => { + + if (!prev[curr.prestudent_id]) + { + prev[curr.prestudent_id] = { + anrechnung_id: curr.anrechnung_id, + prestudent_id: curr.prestudent_id, + ectsSumAnzurechnendeLvs: 0, + ectsSumSchulisch: parseFloat(curr.ectssumschulisch), + ectsSumBeruflich: parseFloat(curr.ectssumberuflich) + }; + + result.push(prev[curr.prestudent_id]) + } + + prev[curr.prestudent_id].ectsSumAnzurechnendeLvs+= parseFloat(curr.ects); + + return prev; + + }, {}); + + return result; + }, + showNumberSelectedRows(rows){ + $('#number-selected').html("Ausgewählte Zeilen: " + rows.length + ""); } } \ No newline at end of file