p->t('anrechnung', 'empfehlungNegativQuestion'); ?>
-
-
p->t('anrechnung', 'bitteBegruendungAngeben'); ?>
-
- -
+
+ -
p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?>
-
-
+
- -
+
-
p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?>
-
-
+
- - p->t('anrechnung', 'andereBegruendung'); ?>
-
+ rows="2"
+ placeholder="p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
+ required>
diff --git a/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php
index 3337c4a83..9d0c84de8 100644
--- a/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php
+++ b/application/views/lehre/anrechnung/reviewAnrechnungUebersicht.php
@@ -127,30 +127,31 @@ $this->load->view(
id="reviewAnrechnungUebersicht-begruendung-panel">
p->t('anrechnung', 'empfehlungenNegativQuestion'); ?>
-
p->t('anrechnung', 'bitteBegruendungAngeben'); ?>
-
- -
- p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?>
-
-
-
-
- -
- p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?>
-
-
-
-
- - p->t('anrechnung', 'andereBegruendung'); ?>
-
-
-
+ p->t('anrechnung', 'bitteBegruendungAngeben'); ?>
+
p->t('anrechnung', 'begruendungWirdFuerAlleUebernommen'); ?>
-
+
+
+
+ -
+ p->t('anrechnung', 'empfehlungNegativPruefungNichtMoeglich'); ?>
+
+
+
+
+ -
+ p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?>
+
+
+
+
+
+ rows="2"
+ placeholder="p->t('anrechnung', 'textUebernehmenOderEigenenBegruendungstext'); ?>"
+ required>
diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js
index c5c0519f3..641cc0933 100644
--- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js
+++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js
@@ -4,8 +4,6 @@ const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
-
-
$(function(){
const genehmigung_panel = $('#approveAnrechnungDetail-genehmigung-panel');
@@ -36,6 +34,8 @@ $(function(){
// Init tooltips
approveAnrechnungDetail.initTooltips();
+ approveAnrechnungDetail.alertIfMaxEctsExceeded();
+
// Ask if Approve Anrechnungen
$("#approveAnrechnungDetail-approve-anrechnung-ask").click(function(){
@@ -91,8 +91,12 @@ $(function(){
approveAnrechnungDetail.formatGenehmigungIsPositiv(
data.retval[0].abgeschlossen_am,
data.retval[0].abgeschlossen_von,
- data.retval[0].status_bezeichnung
+ data.retval[0].status_kurzbz,
+ data.retval[0].status_bezeichnung,
);
+
+ approveAnrechnungDetail.sumUpEcts();
+ approveAnrechnungDetail.alertIfMaxEctsExceeded();
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
@@ -168,6 +172,7 @@ $(function(){
approveAnrechnungDetail.formatGenehmigungIsNegativ(
data.retval[0].abgeschlossen_am,
data.retval[0].abgeschlossen_von,
+ data.retval[0].status_kurzbz,
data.retval[0].status_bezeichnung,
begruendung
);
@@ -236,6 +241,7 @@ $(function(){
// Get form data
let form_data = $('form').serializeArray();
+ var init_status_kurzbz = $('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz');
// Prepare data object for ajax call
let data = {
@@ -248,21 +254,24 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
- 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
);
+ if (init_status_kurzbz == 'approved')
+ {
+ approveAnrechnungDetail.substractEcts(ects, sumEctsSchulisch, sumEctsBeruflich);
+ approveAnrechnungDetail.alertIfMaxEctsExceeded();
+ }
+
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("anrechnung", "erfolgreichZurueckgenommen"));
}
@@ -477,12 +486,13 @@ var approveAnrechnungDetail = {
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', true);
$('#approveAnrechnungDetail-withdraw-request-recommedation').removeClass('hidden');
},
- formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung){
+ formatGenehmigungIsPositiv: function(abgeschlossenAm, abgeschlossenVon, statusKurzbz, statusBezeichnung){
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').removeClass('hidden');
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-success');
+ $('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz', statusKurzbz);
$('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm);
$('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon);
$('#approveAnrechnungDetail-request-recommendation').prop('disabled', true);
@@ -492,12 +502,13 @@ var approveAnrechnungDetail = {
// Show button to withdraw approval
$('#approveAnrechnungDetail-withdraw-anrechnung-approvement').removeClass('hidden');
},
- formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusBezeichnung, begruendung){
+ formatGenehmigungIsNegativ: function(abgeschlossenAm, abgeschlossenVon, statusKurzbz, statusBezeichnung, begruendung){
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNull').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsPositiv').addClass('hidden');
$('#approveAnrechnungDetail-genehmigungDetail-genehmigungIsNegativ').removeClass('hidden');
$('#approveAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
$('#approveAnrechnungDetail-status_kurzbz').closest('div').removeClass('alert-warning').addClass('alert-danger');
+ $('#approveAnrechnungDetail-status_kurzbz').data('status_kurzbz', statusKurzbz);
$('#approveAnrechnungDetail-abgeschlossenAm').text(abgeschlossenAm);
$('#approveAnrechnungDetail-abgeschlossenVon').text(abgeschlossenVon);
$('#approveAnrechnungDetail-genehmigungDetail-begruendung').text(begruendung);
@@ -544,5 +555,76 @@ var approveAnrechnungDetail = {
$('#approveAnrechnungDetail-reject-anrechnung-ask').prop('disabled', false);
// Hide button to withdraw approval
$('#approveAnrechnungDetail-withdraw-request-recommedation').addClass('hidden');
+ },
+ sumUpEcts: function(){
+ var ects = parseFloat($('#ects').text());
+ var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
+ var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
+ var begruendung_id = $('#begruendung_id').data('begruendung_id');
+
+ if (begruendung_id == 5)
+ {
+ return;
+ }
+
+ if (begruendung_id == 4)
+ {
+ $('#sumEctsBeruflich').text(sumEctsBeruflich + ects);
+ }
+ else
+ {
+ $('#sumEctsSchulisch').text(sumEctsSchulisch + ects);
+ }
+
+ $('#sumEctsTotal').text(sumEctsSchulisch + sumEctsBeruflich + ects);
+
+ },
+ substractEcts: function(ects, sumEctsSchulisch, sumEctsBeruflich){
+ var ects = parseFloat($('#ects').text());
+ var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
+ var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
+ var begruendung_id = $('#begruendung_id').data('begruendung_id');
+
+ if (begruendung_id == 5)
+ {
+ return;
+ }
+
+ if (begruendung_id == 4)
+ {
+ $('#sumEctsBeruflich').text(sumEctsBeruflich - ects);
+ }
+ else
+ {
+ $('#sumEctsSchulisch').text(sumEctsSchulisch - ects);
+ }
+
+ $('#sumEctsTotal').text(sumEctsSchulisch + sumEctsBeruflich - ects);
+ },
+ alertIfMaxEctsExceeded: function(){
+ var begruendung_id = $('#begruendung_id').data('begruendung_id');
+ if (begruendung_id == 5)
+ {
+ return;
+ }
+ 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
+ )
+ {
+ $('#sumEctsMsg')
+ .html("
ACHTUNG! Bei Anrechnung von LV: Überschreitung der Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz")
+ .addClass('bg-danger text-danger')
+ .tooltip({
+ title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
+ placement: 'right',
+ html: true
+ });
+ }
+ 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..e831856d8 100644
--- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js
+++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js
@@ -8,6 +8,12 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const COLOR_LIGHTGREY = "#f5f5f5";
+const COLOR_DANGER = '#f2dede';
+
+var tabulator = null; // Set in tableBuilt function.
+
+// Array with accumulated LV ECTS by Prestudent. Used to find out if max ECTS are exceeded.
+var selectedPrestudentWithAccumulatedLvEcts = [];
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
@@ -52,6 +58,10 @@ function hf_filterTrueFalse(headerValue, rowValue){
// Adds column details
// Sets focus on filterbutton, if table starts with stored filter.
function func_tableBuilt(table) {
+
+ // Store table in global var
+ tabulator = table;
+
table.addColumn(
{
title: "Details",
@@ -66,7 +76,7 @@ function func_tableBuilt(table) {
},
target:"_blank"
}
- }, false, "status" // place column after status
+ }, true // place column on the very left
);
// Set focus on filterbutton
@@ -76,16 +86,74 @@ function func_tableBuilt(table) {
}
}
+/**
+ * Formats column ECTS (LV + Bisher).
+ */
+var format_ectsSumBisherUndNeu = function(cell, formatterParams, onRendered){
+ let row = cell.getRow();
+ let rowData = row.getData();
+
+ let begruendung_id = (rowData.begruendung_id);
+ let ectsSumBisherUndNeuTotal = (rowData.ectsSumSchulisch + rowData.ectsSumBeruflich);
+ let ectsSumBisherUndNeuSchulisch = rowData.ectsSumSchulisch;
+ let ectsSumBisherUndNeuBeruflich = rowData.ectsSumBeruflich;
+
+ // If exists, add accumulated LV ECTS to bisherige ECTS
+ if (selectedPrestudentWithAccumulatedLvEcts.length > 0)
+ {
+ let selectedPrestudent = selectedPrestudentWithAccumulatedLvEcts.find(x => x.prestudent_id === rowData.prestudent_id);
+
+ if (selectedPrestudent != undefined)
+ {
+ ectsSumBisherUndNeuTotal = (rowData.ectsSumSchulisch + rowData.ectsSumBeruflich) + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich;
+ ectsSumBisherUndNeuSchulisch = rowData.ectsSumSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch;
+ ectsSumBisherUndNeuBeruflich = rowData.ectsSumBeruflich + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich;
+ }
+
+ // Color column if maximum ECTS exceeded
+ if (begruendung_id != 5 && row.isSelected())
+ {
+
+ if (
+ (ectsSumBisherUndNeuSchulisch + ectsSumBisherUndNeuBeruflich) > 90 ||
+ ectsSumBisherUndNeuSchulisch > 60 ||
+ ectsSumBisherUndNeuBeruflich > 60
+ )
+ {
+ cell.getElement().style["background-color"] = COLOR_DANGER;
+ }
+ }
+ else
+ {
+ cell.getElement().style.removeProperty('background-color');
+ }
+ }
+
+ // If max ECTS is exceeded, format font color / weight
+ ectsSumBisherUndNeuTotal = (ectsSumBisherUndNeuTotal > 90) ? "
" + ectsSumBisherUndNeuTotal + "" : ectsSumBisherUndNeuTotal;
+ ectsSumBisherUndNeuSchulisch = (ectsSumBisherUndNeuSchulisch > 60) ? "
" + ectsSumBisherUndNeuSchulisch + "" : ectsSumBisherUndNeuSchulisch;
+ ectsSumBisherUndNeuBeruflich = (ectsSumBisherUndNeuBeruflich > 60) ? "
" + ectsSumBisherUndNeuBeruflich + "" : ectsSumBisherUndNeuBeruflich;
+
+ return "T: " + ectsSumBisherUndNeuTotal + " [ S: " + ectsSumBisherUndNeuSchulisch + " | B: " + ectsSumBisherUndNeuBeruflich + " ]";
+}
+
// Formats the rows
function func_rowFormatter(row){
let status_kurzbz = row.getData().status_kurzbz;
- row.getCells().forEach(function(cell){
- if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
- {
- row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
- }
- });
+ // If status is anything else then 'Bearbeitet von STGL-Leitung'
+ if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL)
+ {
+ // Disable new selection of updated rows
+ row.getElement().style["pointerEvents"] = "none";
+
+ // ...but leave url links selectable
+ row.getCell('dokument_bezeichnung').getElement().firstChild.style["pointerEvents"] = "auto";
+ row.getCell('details').getElement().firstChild.style["pointerEvents"] = "auto";
+
+ // Color background grey
+ row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
+ }
}
// Formats row selectable/unselectable
@@ -99,18 +167,23 @@ function func_selectableCheck(row){
);
}
-// Performes after row was updated
-function func_rowUpdated(row){
- // Refresh row formatters
- row.reformat();
+// Calculate dynamically sum of all LV ECTS by Student and display, when maximum ECTS are exceeded.
+// data = selected data, rows = selected rows
+function func_rowSelectionChanged(data, rows){
- // Deselect and disable new selection of updated rows
- row.deselect();
- row.getElement().style["pointerEvents"] = "none";
+ // Sum up over all anzurechnenden LV-ECTS by Prestudent
+ selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data);
- // ...but leave url links selectable
- row.getCell('dokument_bezeichnung').getElement().firstChild.style["pointerEvents"] = "auto";
- row.getCell('details').getElement().firstChild.style["pointerEvents"] = "auto";
+ // Loop through all active rows
+ var rowManager = tabulator.rowManager;
+ for (var i = 0; i < rowManager.activeRows.length; i++) {
+
+ // Reinitialize row -> triggers formatters.
+ rowManager.activeRows[i].reinitialize();
+ }
+
+ // Show number of selected rows.
+ approveAnrechnung.showNumberSelectedRows(rows);
}
// Returns tooltip
@@ -136,11 +209,12 @@ var format_empfehlung_anrechnung = function(cell, formatterParams){
* (Ignore rows that are approved, rejected or in request for recommendation)
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
- tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
+ var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row =>
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_STGL
- )
- .forEach((row => row.select()));
+ );
+
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
@@ -275,13 +349,7 @@ $(function(){
e.stopImmediatePropagation();
// Get selected rows data
- let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData')
- .map(function(data){
- // reduce to necessary fields
- return {
- 'anrechnung_id' : data.anrechnung_id,
- }
- });
+ let selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData');
// Alert and exit if no anrechnung is selected
if (selected_data.length == 0)
@@ -304,19 +372,70 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
- if (data.error && data.retval != null)
+ if (FHC_AjaxClient.isError(data))
{
// Print error message
- FHC_DialogLib.alertWarning(data.retval);
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
-
- if (!data.error && data.retval != null)
+ else if (FHC_AjaxClient.hasData(data))
{
- // Update status 'genehmigt'
- $('#tableWidgetTabulator').tabulator('updateData', data.retval);
+ data = FHC_AjaxClient.getData(data);
+
+ var prestudenten = Object.keys(data.prestudenten);
+
+ // Find intersection of selected and in fact updated Anrechnungen (in case server did not approve all).
+ var updatedData = selected_data.filter(x => prestudenten.some(prestudent => x.prestudent_id == prestudent));
+
+ // Sum up over all anzurechnenden LV-ECTS by Prestudent
+ var sumLvEctsByPrestudent = approveAnrechnung.getSumLvEctsByPreStudent(updatedData);
+
+ // Loop through Prestudenten
+ // key = Prestudent, value = Approved Anrechnungen of Prestudent
+ Object.entries(data.prestudenten).forEach(([key, value]) => {
+
+ var rowsToDeselect = [];
+
+ // Get accumulated sum of all LV ECTS
+ var sumLvEcts = sumLvEctsByPrestudent.find(x => x.prestudent_id == key);
+
+ // Get ALL rows of that Prestudent
+ var rows = $('#tableWidgetTabulator').tabulator('searchRows', 'prestudent_id', '=', key);
+
+ // Loop through the rows
+ rows.forEach(row => {
+ var updateData = {};
+
+ // If Anrechnung was approved...
+ if ((value.findIndex(anrechnung_id => row.getData().anrechnung_id == anrechnung_id)) !== -1)
+ {
+ // ...update status
+ updateData.status_kurzbz = data.status_kurzbz;
+ updateData.status_bezeichnung = data.status_bezeichnung;
+
+ // ...and store row to be deselected later on
+ rowsToDeselect.push(row);
+ }
+
+ // Update 'Bisher schulische ECTS' and 'Bisher berufliche ECTS' with the Sum of new approved ECTS
+ updateData.ectsSumSchulisch = row.getData().ectsSumSchulisch + sumLvEcts.ectsSumAnzurechnendeLvsSchulisch,
+ updateData.ectsSumBeruflich = row.getData().ectsSumBeruflich + sumLvEcts.ectsSumAnzurechnendeLvsBeruflich
+
+
+ // Update row
+ row.update(updateData);
+
+ // Reformat row
+ row.reformat();
+
+ })
+
+ // Deselect rows
+ $("#tableWidgetTabulator").tabulator('deselectRow', rowsToDeselect);
+
+ })
// Print success message
- FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenGenehmigt"));
+ FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenGenehmigt"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
@@ -393,16 +512,21 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
- if (data.error && data.retval != null)
+ if (FHC_AjaxClient.isError(data))
{
// Print error message
- FHC_DialogLib.alertWarning(data.retval);
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
-
- if (!data.error && data.retval != null)
+ else if (FHC_AjaxClient.hasData(data))
{
+ data = FHC_AjaxClient.getData(data);
+
// Update status 'genehmigt'
- $('#tableWidgetTabulator').tabulator('updateData', data.retval);
+ $('#tableWidgetTabulator').tabulator('updateData', data);
+
+ // Deselect rows
+ var indexesToDeselect = data.map(x => x.anrechnung_id);
+ $("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
// Print success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "anrechnungenWurdenAbgelehnt"));
@@ -457,20 +581,21 @@ $(function(){
{
successCallback: function (data, textStatus, jqXHR)
{
- if (data.error && data.retval != null)
+ if (FHC_AjaxClient.isError(data))
{
// Print error message
- FHC_DialogLib.alertWarning(data.retval);
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
}
-
- if (!data.error && data.retval != null)
+ else if (FHC_AjaxClient.hasData(data))
{
+ data = FHC_AjaxClient.getData(data);
+
// Print info message, if not all selected recommendations were requested
- if (data.retval.length < selected_data.length){
+ if (data.length < selected_data.length){
FHC_DialogLib.alertInfo(
FHC_PhrasesLib.t(
"ui", "empfehlungWurdeAngefordertAusnahmeWoKeineLektoren",
- [selected_data.length, data.retval.length, selected_data.length - data.retval.length])
+ [selected_data.length, data.length, selected_data.length - data.length])
);
}
else
@@ -481,7 +606,11 @@ $(function(){
}
//Update status 'genehmigt'
- $('#tableWidgetTabulator').tabulator('updateData', data.retval);
+ $('#tableWidgetTabulator').tabulator('updateData', data);
+
+ // Deselect rows
+ var indexesToDeselect = data.map(x => x.anrechnung_id);
+ $("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
@@ -595,5 +724,47 @@ var approveAnrechnung = {
break;
}
+ },
+ getSumLvEctsByPreStudent(data){
+
+ var result = [];
+
+ // Berechne für jeden Prestudenten die kumulierte Summe aller selektierten LV ECTS
+ data.reduce((prev, curr) => {
+
+ if (!prev[curr.prestudent_id])
+ {
+ prev[curr.prestudent_id] = {
+ prestudent_id: curr.prestudent_id,
+ ectsSumAnzurechnendeLvsSchulisch: 0,
+ ectsSumAnzurechnendeLvsBeruflich: 0
+ };
+
+ result.push(prev[curr.prestudent_id])
+ }
+
+ // Kumulierte Summe aller selektierten LVs, die angerechnet werden sollen, getrennt nach
+ // schulischer und beruflicher Qualifikation.
+ // Ausgenommen ist die universitäre Qualifikation (5), da diese unbegrenzt möglich sind.
+ if (curr.begruendung_id != 5)
+ {
+ if (curr.begruendung_id == 4)
+ {
+ prev[curr.prestudent_id].ectsSumAnzurechnendeLvsBeruflich += curr.ects;
+ }
+ else
+ {
+ prev[curr.prestudent_id].ectsSumAnzurechnendeLvsSchulisch += curr.ects;
+ }
+ }
+
+ return prev;
+
+ }, {});
+
+ return result;
+ },
+ showNumberSelectedRows(rows){
+ $('#number-selected').html("Ausgewählte Zeilen:
" + rows.length + "");
}
}
\ No newline at end of file
diff --git a/public/js/lehre/anrechnung/requestAnrechnung.js b/public/js/lehre/anrechnung/requestAnrechnung.js
index b664812dc..dd93394d4 100644
--- a/public/js/lehre/anrechnung/requestAnrechnung.js
+++ b/public/js/lehre/anrechnung/requestAnrechnung.js
@@ -2,9 +2,54 @@ const ANRECHNUNGSTATUS_APPROVED = 'approved';
const ANRECHNUNGSTATUS_REJECTED = 'rejected';
const HERKUNFT_DER_KENNTNISSE_MAX_LENGTH = 125;
+const COLOR_DANGER = '#f2dede';
+
$(function(){
const uploadMaxFilesize = $('#requestAnrechnung-uploadfile').data('maxsize') ; // in byte
+ let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz');
+ if (status_kurzbz != ' ' && status_kurzbz != ANRECHNUNGSTATUS_APPROVED)
+ {
+ var ectsLv = parseFloat($('#ects').text());
+ var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
+ var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
+ var begruendung_id = $('#requestAnrechnung-form :input[name="begruendung"]:checked').val();
+
+ // If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
+ if (begruendung_id == 5)
+ {
+ exit;
+ }
+
+ // If max ECTS is ecceeded
+ if (begruendung_id == 4)
+ {
+ if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
+ (sumEctsBeruflich + ectsLv) > 60
+ )
+ {
+ // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
+ var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
+
+ // Add to Checkbox text
+ $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
+ }
+ }
+ else
+ {
+ if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
+ (sumEctsSchulisch + ectsLv) > 60
+ )
+ {
+ // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation
+ var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
+
+ // Add to Checkbox text
+ $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung);
+ }
+ }
+ }
+
// Set status alert color
requestAnrechnung.setStatusAlertColor();
@@ -17,12 +62,64 @@ $(function(){
// Init tooltips
requestAnrechnung.initTooltips();
+ // // Alert message, if maximum ECTS exceeded
+ requestAnrechnung.alertIfMaxEctsExceeded();
+
// Set chars counter for textarea 'Herkunft der Kenntnisse'
requestAnrechnung.setCharsCounter();
// If Sperregrund exists: display Sperre panel, hide Status panel and disable all form elements
requestAnrechnung.displaySperreIfHasSperregrund();
+
+ $('#requestAnrechnung-form :input[name="begruendung"]').click(function(e){
+ var ectsLv = parseFloat($('#ects').text());
+ var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text());
+ var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text());
+ var begruendung_id = $(this).val();
+
+ if ($(this).is(':checked'))
+ {
+ $('#sumEctsMsg').remove();
+
+ // If Begründung is 'Hochschulzeugnis', return. They are accepted without limit.
+ if (begruendung_id == 5)
+ {
+ return;
+ }
+
+ // If max ECTS is ecceeded
+ if (begruendung_id == 4)
+ {
+ if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
+ (sumEctsBeruflich + ectsLv) > 60
+ )
+ {
+ // Get ECTS Überschreitungs-message for berufliche Qualifikation
+ var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
+
+ // Add to Checkbox text
+ $(this).closest('label').append(msgBeiEctsUeberschreitung);
+ }
+ return;
+ }
+ else
+ {
+ if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 ||
+ (sumEctsSchulisch + ectsLv) > 60
+ )
+ {
+ // Get ECTS Überschreitungs-message for schulische Qualifikation
+ var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich);
+
+ // Add to Checkbox text
+ $(this).closest('label').append(msgBeiEctsUeberschreitung);
+ }
+ }
+
+ }
+ })
+
$('#requestAnrechnung-form').submit(function(e){
// Avoid form redirecting automatically
@@ -183,5 +280,57 @@ var requestAnrechnung = {
return true;
}
+ },
+ sumUpEcts: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){
+ if (begruendung_id == 5)
+ {
+ return;
+ }
+
+ if (begruendung_id == 4)
+ {
+ $('#sumEctsBeruflich').text(parseFloat(sumEctsBeruflich) + parseFloat(ects));
+ }
+ else
+ {
+ $('#sumEctsSchulisch').text(parseFloat(sumEctsSchulisch) + parseFloat(ects));
+ }
+
+ $('#sumEctsTotal').text(parseFloat(sumEctsSchulisch) + parseFloat(sumEctsBeruflich) + parseFloat(ects));
+
+
+ },
+ alertIfMaxEctsExceeded: function(){
+
+ if(
+ (parseFloat($('#sumEctsSchulisch').text())) > 60 ||
+ (parseFloat($('#sumEctsBeruflich').text())) > 60 ||
+ (parseFloat($('#sumEctsSchulisch').text()) + parseFloat($('#sumEctsBeruflich').text())) > 90
+ )
+ {
+ $('#requestAnrechnung-maxEctsUeberschrittenMsg')
+ .html("
Die Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz ist überschritten. ")
+ .addClass('bg-danger text-danger')
+ .tooltip({
+ title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
+ placement: 'right',
+ html: true
+ });
+ }
+ },
+ getMsgBeiEctsUeberschreitung: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){
+
+ return $('
')
+ .html(FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTextBeiUeberschreitung",
+ begruendung_id == 4
+ ? [(sumEctsSchulisch + sumEctsBeruflich + ects), sumEctsSchulisch, (sumEctsBeruflich + ects)] // beruflich
+ : [(sumEctsSchulisch + sumEctsBeruflich + ects), (sumEctsSchulisch + ects), sumEctsBeruflich])) // schulisch
+ .append('
')
+ .addClass('bg-danger text-danger')
+ .tooltip({
+ title: FHC_PhrasesLib.t("anrechnung", "anrechnungEctsTooltipTextBeiUeberschreitung"),
+ placement: 'right',
+ html: true
+ });
}
}
\ No newline at end of file
diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js
index 2cf7c1623..fd7155fa0 100644
--- a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js
+++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js
@@ -65,7 +65,7 @@ function func_tableBuilt(table) {
},
target:"_blank"
}
- }, false, "status" // place column after status
+ }, true // place column on the very left
);
}
@@ -127,11 +127,12 @@ var format_empfehlung_anrechnung = function(cell, formatterParams){
* (Ignore rows that are approved, rejected or in request for recommendation)
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
- tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
+ var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row =>
row.getData().status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR
- )
- .forEach((row => row.select()));
+ );
+
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
diff --git a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
index a39fe3667..08a0645bc 100644
--- a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
@@ -274,12 +274,13 @@ function func_renderComplete(table){
* Select all (filtered) rows and ignore rows that are bestellt and erteilt
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
- tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
+ var resultRows = 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()));
+ row.getData().status != 'Geändert'); // AND NOT geändert
+
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
// -----------------------------------------------------------------------------------------------------------------
diff --git a/public/js/lehre/lehrauftrag/approveLehrauftrag.js b/public/js/lehre/lehrauftrag/approveLehrauftrag.js
index cd8816c1e..c16016cf5 100644
--- a/public/js/lehre/lehrauftrag/approveLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/approveLehrauftrag.js
@@ -319,12 +319,13 @@ function func_rowUpdated(row){
* Select all (filtered) rows that are bestellt
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
- tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
+ var resultRows = 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()));
+ row.getData().status != 'Geändert'); // AND NOT geaendert
+
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
// -----------------------------------------------------------------------------------------------------------------
diff --git a/public/js/lehre/lehrauftrag/orderLehrauftrag.js b/public/js/lehre/lehrauftrag/orderLehrauftrag.js
index d6b165b65..06db3ce60 100644
--- a/public/js/lehre/lehrauftrag/orderLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/orderLehrauftrag.js
@@ -343,7 +343,7 @@ function func_rowUpdated(row){
* Select all (filtered) rows and ignore rows which have status bestellt
*/
function tableWidgetHook_selectAllButton(tableWidgetDiv){
- tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
+ var resultRows = tableWidgetDiv.find("#tableWidgetTabulator").tabulator('getRows', true)
.filter(row => (
row.getData().personalnummer > 0 || // not dummies
row.getData().personalnummer == null) && // include Projektbetreuer
@@ -355,8 +355,9 @@ function tableWidgetHook_selectAllButton(tableWidgetDiv){
(row.getData().bestellt != null && // OR (bestellt
row.getData().status == 'Geändert') // AND geaendert)
)
- )
- .forEach((row => row.select()));
+ );
+
+ tableWidgetDiv.find("#tableWidgetTabulator").tabulator('selectRow', resultRows);
}
// -----------------------------------------------------------------------------------------------------------------
diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php
index 6824d350f..14193b32e 100644
--- a/system/dbupdate_3.3.php
+++ b/system/dbupdate_3.3.php
@@ -5169,6 +5169,19 @@ if ($result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_begruendung WHE
}
}
+// Added Bezeichnung 'Hochschulzeugnis' to Anrechnungbegruendung
+if ($result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_begruendung WHERE bezeichnung = 'Hochschulzeugnis';"))
+{
+ if ($db->db_num_rows($result) == 0)
+ {
+ $qry = "INSERT INTO lehre.tbl_anrechnung_begruendung (bezeichnung) VALUES('Hochschulzeugnis');";
+ if (!$db->db_query($qry))
+ echo '
lehre.tbl_anrechnung_begruendung '.$db->db_last_error().'';
+ else
+ echo ' lehre.tbl_anrechnung_begruendung: Added bezeichnung "Hochschulzeugnis"
';
+ }
+}
+
// Add permission to apply for Anrechnung
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'student/anrechnung_beantragen';"))
{
@@ -6259,6 +6272,175 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
}
}
+// Neue Funktion get_ects_summe_schulisch
+if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)"))
+{
+ $qry = 'CREATE FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) RETURNS numeric
+ LANGUAGE plpgsql
+ AS $_$
+ DECLARE var_student_uid ALIAS FOR $1;
+ DECLARE var_prestudent_id ALIAS FOR $2;
+ DECLARE var_studiengang_kz ALIAS FOR $3;
+ DECLARE var_einstiegsausbildungssemester integer;
+ DECLARE var_einstiegsstudiensemester_kurzbz varchar(32);
+ DECLARE var_einstiegsorgform_kurzbz varchar(32);
+ DECLARE rec_quereinstiegs_studiensemester RECORD;
+ DECLARE sum_quereinstiegs_ects numeric(4, 1) := 0;
+ DECLARE sum_schulische_ects numeric(4, 1) := 0;
+
+
+ BEGIN
+
+ -- IF STUDENT IS QUEREINSTEIGER, GET ECTS SUMME OF ANGERECHNETE SEMESTER
+ -- Get Einstiegssemester
+ SELECT INTO var_einstiegsausbildungssemester , var_einstiegsstudiensemester_kurzbz, var_einstiegsorgform_kurzbz ausbildungssemester, studiensemester_kurzbz, orgform_kurzbz from public.tbl_prestudentstatus
+ WHERE prestudent_id = var_prestudent_id
+ AND status_kurzbz = \'Student\'
+ ORDER BY datum, insertamum, ext_id
+ LIMIT 1;
+
+ -- If Einstiegssemester > 1 (= Quereinsteiger)
+ IF (var_einstiegsausbildungssemester > 1) THEN
+ -- ...get all Quereinstiegssemester
+ FOR rec_quereinstiegs_studiensemester IN SELECT studiensemester_kurzbz FROM public.tbl_studiensemester
+ WHERE ende <= (select start from public.tbl_studiensemester WHERE studiensemester_kurzbz = var_einstiegsstudiensemester_kurzbz )
+ ORDER BY start DESC
+ LIMIT (var_einstiegsausbildungssemester -1)
+ -- ...loop the Quereinstiegssemester
+ LOOP
+ -- ...and sum up ECTS of each Quereinstiegssemester
+ sum_quereinstiegs_ects = sum_quereinstiegs_ects + (SELECT
+ SUM(tbl_lehrveranstaltung.ects)
+ FROM
+ lehre.tbl_studienplan
+ JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id)
+ JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
+ WHERE
+ tbl_studienplan.studienplan_id = (
+ SELECT
+ studienplan_id
+ FROM
+ lehre.tbl_studienordnung
+ JOIN lehre.tbl_studienplan USING (studienordnung_id)
+ JOIN lehre.tbl_studienplan_semester USING (studienplan_id)
+ WHERE tbl_studienordnung.studiengang_kz = var_studiengang_kz
+ AND tbl_studienplan_semester.semester = var_einstiegsausbildungssemester - 1
+ AND tbl_studienplan_semester.studiensemester_kurzbz = rec_quereinstiegs_studiensemester.studiensemester_kurzbz
+ AND tbl_studienplan.orgform_kurzbz = var_einstiegsorgform_kurzbz
+
+ LIMIT 1
+ )
+ AND tbl_studienplan_lehrveranstaltung.semester = var_einstiegsausbildungssemester
+ AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene
+ AND tbl_studienplan_lehrveranstaltung.export = TRUE);
+
+ var_einstiegsausbildungssemester = var_einstiegsausbildungssemester - 1;
+ END LOOP;
+ END IF;
+
+
+ -- GET ECTS SUMME OF ALLE BISHER ANGERECHNETEN LEHRVERANSTALTUNGEN. ANRECHNUNGSGRUND: SCHULISCH.
+ SELECT INTO sum_schulische_ects COALESCE(SUM(ects), 0) FROM (
+ SELECT
+ lehrveranstaltung_id, studiensemester_kurzbz, ects
+ FROM
+ lehre.tbl_zeugnisnote
+ LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
+ JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
+ JOIN public.tbl_student USING(student_uid)
+ WHERE
+ tbl_zeugnisnote.note = 6
+ AND student_uid = var_student_uid
+ AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
+ AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
+ AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
+ AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
+
+ UNION
+
+ SELECT
+ lehrveranstaltung_id, studiensemester_kurzbz, ects
+ FROM
+ lehre.tbl_anrechnung
+ JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
+ JOIN public.tbl_student USING(prestudent_id)
+ WHERE
+ genehmigt_von IS NOT NULL
+ AND student_uid = var_student_uid
+ AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen
+ AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen
+ ) lvsangerechnet;
+
+ -- BUILD ECTS SUMME OF QUEREINSTIEGSSEMESTER- + ANGERECHNETEN LVs-ECTS
+ -- Summe aller bisher schulisch begründet angerechneten LVs + der Quereinstiegssemester
+ sum_schulische_ects = sum_schulische_ects + sum_quereinstiegs_ects;
+
+ RETURN sum_schulische_ects ;
+
+ END;
+ $_$;
+
+ ALTER FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) OWNER TO fhcomplete;';
+
+ if(!$db->db_query($qry))
+ echo '
public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz): '.$db->db_last_error().'';
+ else
+ echo '
Funktion
public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz) hinzugefügt';
+}
+
+// Neue Funktion get_ects_summe_beruflich
+if(!@$db->db_query("SELECT public.get_ects_summe_beruflich('')"))
+{
+ $qry = 'CREATE FUNCTION public.get_ects_summe_beruflich(character varying) RETURNS numeric
+ LANGUAGE plpgsql
+ AS $_$
+ DECLARE var_student_uid ALIAS FOR $1;
+ DECLARE sum_berufliche_ects numeric(4, 1) := 0;
+
+ BEGIN
+
+ SELECT INTO sum_berufliche_ects COALESCE(SUM(ects), 0) FROM (
+ SELECT
+ lehrveranstaltung_id, studiensemester_kurzbz, ects
+ FROM
+ lehre.tbl_zeugnisnote
+ LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz)
+ JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
+ JOIN public.tbl_student USING(student_uid)
+ WHERE
+ tbl_zeugnisnote.note = 6
+ AND student_uid = var_student_uid
+ AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL)
+ AND begruendung_id = 4 -- beruflich
+ AND (anrechnung_id IS NULL OR (anrechnung_id IS NOT NULL AND genehmigt_von IS NOT NULL )) -- Anrechnungen aus Zeit vor Anrechnungstool ODER digitale Anrechnungen mit Noteneintrag UND Genehmigung (wichtig, um zurückgenommene Genehmigungen, die in der Notentabelle noch als angerechnet eingetragen sind, rauszufiltern)
+
+ UNION
+
+ SELECT
+ lehrveranstaltung_id, studiensemester_kurzbz, ects
+ FROM
+ lehre.tbl_anrechnung
+ JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
+ JOIN public.tbl_student USING(prestudent_id)
+ WHERE
+ genehmigt_von is not null
+ AND student_uid = var_student_uid
+ AND begruendung_id = 4 -- beruflich
+ ) lvsangerechnet;
+
+ RETURN sum_berufliche_ects;
+
+ END;
+ $_$;
+
+ ALTER FUNCTION public.get_ects_summe_beruflich(character varying) OWNER TO fhcomplete;';
+
+ if(!$db->db_query($qry))
+ echo '
public.get_ects_summe_beruflich(student_uid): '.$db->db_last_error().'';
+ else
+ echo '
Funktion
public.get_ects_summe_beruflich(student_uid) hinzugefügt';
+}
+
// Grant SELECT to bis.tbl_gsprogramm for web-user
if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_gsprogramm' AND table_schema='bis' AND grantee='web' AND privilege_type in ('SELECT')"))
{
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index ca59997fa..7c9a0fcc8 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -10569,6 +10569,26 @@ Any unusual occurrences
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'anrechnung',
+ 'phrase' => 'antragStellenWegenHochschulzeugnis',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'eines Hochschulzeugnisses (vgl. § 4 Abs. 5 Satzung „Studienrechtliche Bestimmungen / Prüfungsordnung)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'a university certificate (see § 4 para. 5, Statute on Studies Act Provisions / Examination Regulations of the UASTW)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -10589,6 +10609,106 @@ Any unusual occurrences
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'anrechnung',
+ 'phrase' => 'bisherAngerechneteEcts',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Bisher angerechnete ECTS',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'All previous recognized ECTS',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'anrechnung',
+ 'phrase' => 'anrechnungEctsTooltipText',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Anzeige aller bisher angerechneten ECTS. Für Quereinsteiger werden die ECTS der angerechneten Semester berechnet.
Vorgabe für Anrechnungen:
Max. 60 ECTS schulische Qualifikation
Max. 60 ECTS berufliche Qualifikation
Max. 90 ECTS INSGESAMT (schulische + berufliche Qualifikation)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'All previous recognized ECTS. Lateral Entries are calculated with full ECTS of all recognized semester.
Condition for Recognition of Prior Knowledge:
Max. 60 ECTS school qualification
Max. 60 ECTS professional qualification
Max. 90 ECTS OVERALL (school + professional qualification)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'anrechnung',
+ 'phrase' => 'anrechnungEctsTooltipTextBeiUeberschreitung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Vorgabe für Anrechnungen:
Max. 60 ECTS schulische Qualifikation
Max. 60 ECTS berufliche Qualifikation
Max. 90 ECTS INSGESAMT (schulische + berufliche Qualifikation)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Condition for Recognition of Prior Knowledge:
Max. 60 ECTS school qualification
Max. 60 ECTS professional qualification
Max. 90 ECTS OVERALL (school + professional qualification)',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'anrechnung',
+ 'phrase' => 'anrechnungEctsTextBeiUeberschreitung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => '
Die Höchstgrenze für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz wird überschritten.
Bisherige ECTS + ECTS dieser LV: Total: {0} [ Schulisch: {1} | Beruflich: {2} ] ',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => '
Exceedance of maximum limit for exemption (see § 12 para. 3, Regulations of the UASTW).
Former ECTS + ECTS of this course: Total: {0} [ School qualification: {1} | Professional qualification: {2} ] ',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'anrechnung',
+ 'phrase' => 'textUebernehmenOderEigenenBegruendungstext',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Begründungstext aus Liste übernehmen oder eigene Begründung angeben',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Copy reason from list above or write your own reason',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
array(
'app' => 'core',
'category' => 'anrechnung',
@@ -11609,6 +11729,26 @@ Any unusual occurrences
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'anrechnung',
+ 'phrase' => 'genehmigungNegativEctsHoechstgrenzeUeberschritten',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Anrechnung wird nicht genehmigt aufgrund einer Überschreitung der Höchstgrenzen für Anrechnungen gem. § 12 Abs. 3 Fachhochschulgesetz.',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Recognition and exemption is rejected because of exceedance of maximum limit for exemption (see § 12 para. 3, Regulations of the UASTW).',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
array(
'app' => 'core',
'category' => 'anrechnung',