From 42fb7a4fc82ed4c3d5537b21cdb98250b339d21b Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 22 Jun 2022 10:47:29 +0200 Subject: [PATCH 01/32] Added ECTS Summe functions to AnrechnungLib Added functions to calculate total ECTS Summe of . angerechnete Studiensemester of Quereinsteiger . bisher angerechnete schulische Kenntnisse . bisher angerechente berufliche Kenntisse --- application/libraries/AnrechnungLib.php | 114 ++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index ee197ab05..610f0cec9 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -80,14 +80,22 @@ class AnrechnungLib // Get latest ZGV $result = $this->ci->PrestudentModel->getLatestZGVBezeichnung($prestudent_id); $latest_zgv_bezeichnung = hasData($result) ? getData($result)[0]->bezeichnung : ''; + + // Get Sum of berufliche and schulische ECTS + $sumEctsQuereinsteiger = $this->getQuereinsteigerEctsSumme($prestudent_id, $lv->studiengang_kz); + $sumEctsSchulisch = $this->getSchulischeAnrechnungenEctsSumme($uid); + $sumEctsBeruflich = $this->getBeruflicheAnrechnungenEctsSumme($uid); // Set the given studiensemester $antrag_data->lv_id = $lv_id; $antrag_data->lv_bezeichnung = $lv->bezeichnung; $antrag_data->ects = $lv->ects; + $antrag_data->sumEctsSchulisch = $sumEctsQuereinsteiger + $sumEctsSchulisch; + $antrag_data->sumEctsBeruflich = $sumEctsBeruflich; $antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz; $antrag_data->vorname = $person->vorname; $antrag_data->nachname = $person->nachname; + $antrag_data->student_uid = $uid; $antrag_data->matrikelnr = $student->matrikelnr; $antrag_data->studiengang_kz = $studiengang->studiengang_kz; $antrag_data->stg_bezeichnung = $studiengang->bezeichnung; @@ -823,4 +831,110 @@ class AnrechnungLib return $anrechnung_data; } + + /** + * If Student is a Quereinsteiger, get ECTS Summe of all angerechnete Studiensemester. + * + * @param $prestudent_id + * @param $studiengang_kz Studiengang_kz der LV + * @return int|mixed + */ + public function getQuereinsteigerEctsSumme($prestudent_id, $studiengang_kz) + { + $sumEctsQuereinsteiger = 0; + + // Check, if student is Quereinsteiger + $this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + $result = $this->ci->PrestudentstatusModel->getFirstStatus($prestudent_id, 'Student'); + + $prestudentFirstStudentStatus = getData($result)[0]; + + // If Prestudent is not a Quereinsteiger + if ($prestudentFirstStudentStatus->ausbildungssemester == 1) + { + return $sumEctsQuereinsteiger; // return 0 + } + + $anzahlAngerechneteStudiensemester = $prestudentFirstStudentStatus->ausbildungssemester - 1; + + // If Prestudent is a Quereinsteiger + if ($prestudentFirstStudentStatus->ausbildungssemester > 1) + { + // Get the 'angerechnete Studiensemester' + $this->ci->load->model('organisations/Studiensemester_model', 'StudiensemesterModel'); + $result = $this->ci->StudiensemesterModel->getPreviousFrom( + $prestudentFirstStudentStatus->studiensemester_kurzbz, + $anzahlAngerechneteStudiensemester + ); + + // Get ECTS Summe of each 'angerechnetes Studiensemester' + foreach (getData($result) as $studiensemester) + { + $result = $this->ci->LehrveranstaltungModel->getSumQuereinstiegsECTSProSemester( + $studiengang_kz, + $studiensemester->studiensemester_kurzbz, + $anzahlAngerechneteStudiensemester--, + $prestudentFirstStudentStatus->orgform_kurzbz + ); + + if (hasData($result)) + { + $sumEctsQuereinsteiger = $sumEctsQuereinsteiger + getData($result)[0]->sum_ects; + } + } + } + return $sumEctsQuereinsteiger; // return sum of ects of all 'angerechnete Studiensemester' + } + + /** + * Get ECTS Summe of all Anrechnungen based on schulische Kenntnisse. + * + * @param $student_uid + * @return int|mixed + */ + public function getSchulischeAnrechnungenEctsSumme($student_uid) + { + $sumEctsSchule = 0; + + $result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid); + + if (hasData($result)) + { + foreach (getData($result) as $ects) + { + if ($ects->begruendung_id != 4) + { + $sumEctsSchule = $sumEctsSchule + $ects->sum; + } + } + } + + return $sumEctsSchule; + } + + /** + * Get ECTS Summe of all Anrechnungen based on berufliche Kenntnisse. + * + * @param $student_uid + * @return int + */ + public function getBeruflicheAnrechnungenEctsSumme($student_uid) + { + $sumEctsBeruflich = 0; + + $result = $this->ci->LehrveranstaltungModel->getSumAngerechneteECTSByBegruendung($student_uid); + + if (hasData($result)) + { + foreach (getData($result) as $ects) + { + if ($ects->begruendung_id == 4) + { + $sumEctsBeruflich = $ects->sum; + } + } + } + + return $sumEctsBeruflich; + } } From 12c9afbd3d0885e4901c5e5c6aff2552b6de23f3 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 22 Jun 2022 10:48:48 +0200 Subject: [PATCH 02/32] Added function getFirstStatus to Prestudentstatus_model.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Funktion liefert den Ersten Status eines Prestudenten mit der übergebenen Statuskurzbezeichnung. --- .../models/crm/Prestudentstatus_model.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index 3335de021..f39a41fda 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -52,6 +52,24 @@ class Prestudentstatus_model extends DB_Model return $this->execQuery($query, $parametersArray); } + /** + * Liefert den Ersten Status eines Prestudenten mit der übergebenen Statuskurzbezeichnung. + * + * @param $prestudent_id + * @param $status_kurzbz + * @return array + */ + public function getFirstStatus($prestudent_id, $status_kurzbz) + { + $this->addOrder('datum, insertamum, ext_id'); + $this->addLimit(1); + + return $this->loadWhere(array( + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => $status_kurzbz + )); + } + /** * updateStufe */ From b52a3c93974586052c629ca85d0c3e439f146606 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 22 Jun 2022 10:51:39 +0200 Subject: [PATCH 03/32] Added DB queries to calculate ECTS Summe in Lehrveranstaltung_model.php --- .../education/Lehrveranstaltung_model.php | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 8517d7f9d..2ef856a40 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -309,4 +309,89 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id)); } + + /** + * Get ECTS Summe pro angerechnetes Quereinstiegssemester. + * + * @param $studiengang_kz + * @param $studiensemester_kurzbz + * @param $ausbildungssemester + * @param $orgform_kurzbz + * @return array|stdClass|null + */ + public function getSumQuereinstiegsECTSProSemester($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester, $orgform_kurzbz) + { + $qry = ' + SELECT + sum(tbl_lehrveranstaltung.ects) as "sum_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 = ? + AND tbl_studienplan_semester.semester = ? + AND tbl_studienplan_semester.studiensemester_kurzbz = ? + AND tbl_studienplan.orgform_kurzbz = ? + + LIMIT 1 + ) + AND tbl_studienplan_lehrveranstaltung.semester = ? + AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene + AND tbl_studienplan_lehrveranstaltung.export = TRUE + '; + + return $this->execQuery($qry, array( + $studiengang_kz, $ausbildungssemester, $studiensemester_kurzbz, $orgform_kurzbz, $ausbildungssemester) + ); + } + + /** + * Get ECTS Summe aller bisher angerechneten LVs. + * Wenn keine explizite Begruendung angegeben ist, wird eine schulische Begruendung angenommen. + * + * @param $student_uid + * @return array|stdClass|null + */ + public function getSumAngerechneteECTSByBegruendung($student_uid) + { + $qry = ' + SELECT sum(ects), begruendung_id FROM ( + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, ects, COALESCE(begruendung_id, 1) as begruendung_id -- fallback auf externes Zeugnis + 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 = ? + AND (lehre.tbl_anrechnung.prestudent_id = tbl_student.prestudent_id + OR lehre.tbl_anrechnung.prestudent_id is null) + + UNION + + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, ects, begruendung_id -- fallback auf externes Zeugnis + 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 = ? + ) lvsangerechnet + GROUP BY begruendung_id + '; + + return $this->execQuery($qry, array($student_uid, $student_uid)); + } } From 7bba155bb5278906f359bd510ea044d17df41ef8 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 22 Jun 2022 10:52:51 +0200 Subject: [PATCH 04/32] Adapted function getPreviousFrom to return more than 1 previous semester if needed --- application/models/organisation/Studiensemester_model.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index e7a3d77b1..bb9b94c92 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -105,7 +105,7 @@ class Studiensemester_model extends DB_Model /** * getPreviousFrom */ - public function getPreviousFrom($studiensemester_kurzbz) + public function getPreviousFrom($studiensemester_kurzbz, $limit = 1) { $query = 'SELECT studiensemester_kurzbz, start, @@ -117,9 +117,9 @@ class Studiensemester_model extends DB_Model WHERE studiensemester_kurzbz = ? ) ORDER BY start DESC - LIMIT 1'; + LIMIT ?'; - return $this->execQuery($query, array($studiensemester_kurzbz)); + return $this->execQuery($query, array($studiensemester_kurzbz, $limit)); } /** From 5f5031e8d1ffcae56f72e29b70dbe999d1e95967 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 22 Jun 2022 10:54:17 +0200 Subject: [PATCH 05/32] Added ECTS Summe to Anrechnung Detail View. --- .../anrechnung/approveAnrechnungDetail.php | 18 +++++++++++----- system/phrasesupdate.php | 21 +++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index cd38fd9ac..f909f7e65 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -123,12 +123,20 @@ $this->load->view( - p->t('lehre', 'ects'); ?> + p->t('lehre', 'ects'); ?> ects ?> + Bisher angerechnete ECTS + + + + + sumEctsSchulisch + $antragData->sumEctsBeruflich. ' [Schulisch: '. $antragData->sumEctsSchulisch. ' / Beruflich: '. $antragData->sumEctsBeruflich. ']' ?> p->t('lehre', 'lektorInnen'); ?> - + lektoren) - 1 ?> lektoren as $key => $lektor): ?> vorname . ' ' . $lektor->nachname; @@ -138,15 +146,15 @@ $this->load->view( p->t('global', 'zgv')); ?> - zgv ?> + zgv ?> p->t('anrechnung', 'herkunftDerKenntnisse'); ?> - anmerkung ?> + anmerkung ?> p->t('anrechnung', 'nachweisdokumente'); ?> - + dokumentname) ?> diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index d7be2d115..d010d70db 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -10589,6 +10589,27 @@ Any unusual occurrences ) ) ), + + 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', From 9d7589ddc4323b5831e72ae6bfa0d6ba3d6b3393 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 7 Jul 2022 10:18:40 +0200 Subject: [PATCH 06/32] Added DB methods to get ECTS Summen by schulische/berufliche Qualifikation --- .../education/Lehrveranstaltung_model.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 392c50ff6..f54443955 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -440,4 +440,35 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($qry, array($student_uid, $student_uid)); } + + /** + * Get ECTS Summe aller bisher schulisch begruendeten angerechneten LVs. + * Derzeit wird auch jede Anrechnung, die nicht beruflich ist, als schulisch angenommen. + * + * @param $student_uid + * @return array|stdClass|null + */ + public function getEctsSumSchulisch($student_uid, $prestudent_id, $studiengang_kz) + { + $qry = ' + SELECT get_ects_summe_schulisch(?, ?, ?) AS ectsSumSchulisch + '; + + return $this->execQuery($qry, array($student_uid, $prestudent_id, $studiengang_kz)); + } + + /** + * Get ECTS Summe aller bisher beruflich angerechneten LVs. + * + * @param $student_uid + * @return array|stdClass|null + */ + public function getEctsSumBeruflich($student_uid) + { + $qry = ' + SELECT get_ects_summe_beruflich(?) AS ectsSumBeruflich + '; + + return $this->execQuery($qry, array($student_uid)); + } } From 1dc49ec4948ab2a3f89229de5f270f9f5777e500 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 7 Jul 2022 10:21:23 +0200 Subject: [PATCH 07/32] Added methods to sum total ECTS, to be displayed on Anrechnung Details and Uebersicht --- .../anrechnung/approveAnrechnungDetail.js | 35 +++++- .../anrechnung/approveAnrechnungUebersicht.js | 114 ++++++++++++++++++ 2 files changed, 147 insertions(+), 2 deletions(-) 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 From 2fb4118e69e89cb0f16de582dfb6d34ceb0d55c4 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 7 Jul 2022 10:23:33 +0200 Subject: [PATCH 08/32] Added to DB Update: Create functions to get total ECTS Summe by berufliche and schulische Qualifikation --- system/dbupdate_3.3.php | 166 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 01839e4b9..759769df7 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6259,6 +6259,172 @@ 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 != 4 -- schulisch + + 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 -- schulisch + ) 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 + + 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'; +} + + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; From 4d05f54b54ac28f222941b25f365df9f3ee86c86 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 7 Jul 2022 10:25:19 +0200 Subject: [PATCH 09/32] Added ECTS Summen top AnrechnungData in the AnrechnungLib --- application/libraries/AnrechnungLib.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 610f0cec9..e0e027889 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -82,10 +82,12 @@ class AnrechnungLib $latest_zgv_bezeichnung = hasData($result) ? getData($result)[0]->bezeichnung : ''; // Get Sum of berufliche and schulische ECTS - $sumEctsQuereinsteiger = $this->getQuereinsteigerEctsSumme($prestudent_id, $lv->studiengang_kz); - $sumEctsSchulisch = $this->getSchulischeAnrechnungenEctsSumme($uid); - $sumEctsBeruflich = $this->getBeruflicheAnrechnungenEctsSumme($uid); - + $result = $this->ci->LehrveranstaltungModel->getEctsSumSchulisch($uid, $prestudent_id, $lv->studiengang_kz); + $sumEctsSchulisch = getData($result)[0]->ectssumschulisch; + + $result = $this->ci->LehrveranstaltungModel->getEctsSumBeruflich($uid); + $sumEctsBeruflich = getData($result)[0]->ectssumberuflich; + // Set the given studiensemester $antrag_data->lv_id = $lv_id; $antrag_data->lv_bezeichnung = $lv->bezeichnung; From b40db6abbd253b1d874b1e9040639b249962aa25 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 7 Jul 2022 10:26:13 +0200 Subject: [PATCH 10/32] =?UTF-8?q?Added=20ECTS=20Summen=20columns=20to=20An?= =?UTF-8?q?rechnung=20=C3=9Cbersichtstable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../approveAnrechnungUebersichtData.php | 128 ++++++++++++------ 1 file changed, 86 insertions(+), 42 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index 368af8b12..f4d63d236 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -16,7 +16,7 @@ $query = ' anrechnung.dms_id, anrechnung.studiensemester_kurzbz, stg.studiengang_kz, - stg.bezeichnung AS "stg_bezeichnung", + stg.bezeichnung AS stg_bezeichnung, lv.orgform_kurzbz, (SELECT ausbildungssemester FROM public.tbl_prestudentstatus press @@ -26,8 +26,10 @@ $query = ' ORDER BY press.datum DESC LIMIT 1 ), - lv.bezeichnung AS "lv_bezeichnung", - lv.ects, + lv.bezeichnung AS lv_bezeichnung, + lv.ects::numeric(4,1), + get_ects_summe_schulisch(student.student_uid, anrechnung.prestudent_id, stg.studiengang_kz) AS ectsSumSchulisch, + get_ects_summe_beruflich(student.student_uid) AS ectsSumBeruflich, (person.nachname || \' \' || person.vorname) AS "student", begruendung.bezeichnung AS "begruendung", dmsversion.name AS "dokument_bezeichnung", @@ -49,7 +51,9 @@ $query = ' WHERE anrechnung_id = anrechnung.anrechnung_id ORDER BY insertamum DESC LIMIT 1 - ) AS status_kurzbz + ) AS status_kurzbz, + student.student_uid, + anrechnung.prestudent_id FROM lehre.tbl_anrechnung AS anrechnung JOIN public.tbl_prestudent USING (prestudent_id) JOIN public.tbl_person AS person USING (person_id) @@ -58,44 +62,70 @@ $query = ' LEFT JOIN campus.tbl_dms_version AS dmsversion USING (dms_id) JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id) JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id) + JOIN public.tbl_student student USING (prestudent_id) + WHERE anrechnung.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' + AND stg.studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ') ) - SELECT anrechnungen.*, - array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung", - CASE - WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL - ELSE - (SELECT insertamum::date - FROM lehre.tbl_anrechnungstatus - JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz) - WHERE anrechnung_id = anrechnungen.anrechnung_id - AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\' - ORDER BY insertamum DESC - LIMIT 1) - END "empfehlungsanfrageAm", - CASE - WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL - ELSE - (SELECT COALESCE( - STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE), - STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE) - ) empfehlungsanfrageAn - FROM ( - SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname, - CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter - FROM lehre.tbl_lehreinheit - JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id) - JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid - JOIN public.tbl_person USING (person_id) - WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' - AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id - AND lema.mitarbeiter_uid NOT like \'_Dummy%\' - AND benutzer.aktiv = TRUE - AND tbl_person.aktiv = TRUE - ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname - ) as tmp_lvlektoren - ) - END "empfehlungsanfrageAn" + SELECT anrechnungen.anrechnung_id, + anrechnungen.lehrveranstaltung_id, + anrechnungen.begruendung_id, + anrechnungen.dms_id, + anrechnungen.studiensemester_kurzbz, + anrechnungen.studiengang_kz, + anrechnungen.stg_bezeichnung, + anrechnungen.orgform_kurzbz, + anrechnungen.ausbildungssemester, + anrechnungen.lv_bezeichnung, + anrechnungen.ects::numeric(4,1) AS ects, + CONCAT_WS(\' \', (COALESCE(ectsSumSchulisch, 0) + COALESCE(ectsSumBeruflich, 0))::numeric(4,1), \' [ S:\', COALESCE(ectsSumSchulisch, 0), \' | B:\', COALESCE(ectsSumBeruflich, 0), \']\') + AS "ectsSumTotal", + anrechnungen.ectsSumSchulisch, + anrechnungen.ectsSumBeruflich, + anrechnungen.student, + anrechnungen.begruendung, + anrechnungen.dokument_bezeichnung, + anrechnungen.anmerkung_student, + anrechnungen.zgv, + anrechnungen.antragsdatum, + anrechnungen.empfehlung_anrechnung, + anrechnungen.status_kurzbz, + array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung", + anrechnungen.prestudent_id, + CASE + WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL + ELSE + (SELECT insertamum::date + FROM lehre.tbl_anrechnungstatus + JOIN lehre.tbl_anrechnung_anrechnungstatus USING (status_kurzbz) + WHERE anrechnung_id = anrechnungen.anrechnung_id + AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\' + ORDER BY insertamum DESC + LIMIT 1) + END "empfehlungsanfrageAm", + CASE + WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL + ELSE + (SELECT COALESCE( + STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = TRUE), + STRING_AGG(CONCAT_WS(\' \', vorname, nachname), \', \') FILTER (WHERE lvleiter = FALSE) + ) empfehlungsanfrageAn + FROM ( + SELECT DISTINCT ON (benutzer.uid) uid, vorname, nachname, + CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE ELSE FALSE END AS lvleiter + FROM lehre.tbl_lehreinheit + JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id) + JOIN public.tbl_benutzer benutzer ON lema.mitarbeiter_uid = benutzer.uid + JOIN public.tbl_person USING (person_id) + WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' + AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id + AND lema.mitarbeiter_uid NOT like \'_Dummy%\' + AND benutzer.aktiv = TRUE + AND tbl_person.aktiv = TRUE + ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname + ) as tmp_lvlektoren + ) + END "empfehlungsanfrageAn" FROM anrechnungen JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz) WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' @@ -118,7 +148,10 @@ $filterWidgetArray = array( ucfirst($this->p->t('lehre', 'organisationsform')), 'Semester', ucfirst($this->p->t('lehre', 'lehrveranstaltung')), - 'ECTS', + 'ECTS (LV)', + 'ECTS (Bisher angerechnet)', + 'ECTS schulisch', + 'ECTS beruflich', ucfirst($this->p->t('person', 'studentIn')), ucfirst($this->p->t('global', 'begruendung')), ucfirst($this->p->t('anrechnung', 'nachweisdokumente')), @@ -128,6 +161,7 @@ $filterWidgetArray = array( ucfirst($this->p->t('anrechnung', 'empfehlung')), 'status_kurzbz', 'Status', + 'PrestudentID', ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAm')), ucfirst($this->p->t('anrechnung', 'empfehlungsanfrageAn')) ), @@ -155,7 +189,13 @@ $filterWidgetArray = array( rowFormatter:function(row){ func_rowFormatter(row); }, - rowUpdated:function(row){ + rowDeselected:function(row){ + func_rowDeselected(row); + }, + rowSelectionChanged:function(data, rows){ + func_rowSelectionChanged(data, rows); + }, + rowUpdated:function(row){ func_rowUpdated(row); }, tooltips: function(cell){ @@ -174,6 +214,9 @@ $filterWidgetArray = array( ausbildungssemester: {headerFilter:"input"}, lv_bezeichnung: {headerFilter:"input"}, ects: {headerFilter:"input", align:"center"}, + ectsSumTotal: {headerFilter:"input", align:"left"}, + ectsSumSchulisch: {visible: false, headerFilter:"input"}, + ectsSumBeruflich: {visible: false, headerFilter:"input"}, student: {headerFilter:"input"}, begruendung: {headerFilter:"input"}, zgv: {visible: false, headerFilter:"input"}, @@ -187,6 +230,7 @@ $filterWidgetArray = array( empfehlung_anrechnung: {headerFilter:"input", align:"center", formatter: format_empfehlung_anrechnung, headerFilterFunc: hf_filterTrueFalse}, status_kurzbz: {visible: false, headerFilter:"input"}, status_bezeichnung: {headerFilter:"input"}, + prestudent_id: {visible: false, headerFilter:"input"}, empfehlungsanfrageAm: {visible: false, align:"center", headerFilter:"input", mutator: mut_formatStringDate}, empfehlungsanfrageAn: {visible: false, headerFilter:"input"} }', // col properties From ade55c9d1fbd5cbd71f7aeaf0cd5b63ca0d591e9 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 7 Jul 2022 10:26:56 +0200 Subject: [PATCH 11/32] Added ECTS Summen to Anrechnung Detail View --- .../anrechnung/approveAnrechnungDetail.php | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index f909f7e65..b44da925b 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -123,17 +123,23 @@ $this->load->view( - p->t('lehre', 'ects'); ?> - ects ?> - Bisher angerechnete ECTS - + p->t('lehre', 'ects'); ?> + ects ?> + + + Bisher angerechnete ECTS + - - sumEctsSchulisch + $antragData->sumEctsBeruflich. ' [Schulisch: '. $antragData->sumEctsSchulisch. ' / Beruflich: '. $antragData->sumEctsBeruflich. ']' ?> - + + + Total: sumEctsSchulisch + $antragData->sumEctsBeruflich ?> + [Schulisch: sumEctsSchulisch ?> / + Beruflich: sumEctsBeruflich ?> ] + + p->t('lehre', 'lektorInnen'); ?> @@ -186,8 +192,10 @@ $this->load->view(
- + + + + From b2715bb408dea330a53d14a7221737748a0c9d62 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 7 Jul 2022 10:27:50 +0200 Subject: [PATCH 12/32] Fixed: Added missing Summe ECTS Schulisch to AntragData. --- application/libraries/AnrechnungLib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index e0e027889..8c67b4d14 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -92,7 +92,7 @@ class AnrechnungLib $antrag_data->lv_id = $lv_id; $antrag_data->lv_bezeichnung = $lv->bezeichnung; $antrag_data->ects = $lv->ects; - $antrag_data->sumEctsSchulisch = $sumEctsQuereinsteiger + $sumEctsSchulisch; + $antrag_data->sumEctsSchulisch = $sumEctsSchulisch; $antrag_data->sumEctsBeruflich = $sumEctsBeruflich; $antrag_data->studiensemester_kurzbz = $studiensemester_kurzbz; $antrag_data->vorname = $person->vorname; From a8f329e50116e7c6a56b458e974b1afb28360197 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 11 Jul 2022 10:46:53 +0200 Subject: [PATCH 13/32] Added new Anrechnungbegruendung: Hochschulzeugnis --- system/dbupdate_3.3.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 759769df7..db6fc05ed 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';")) { From 91447d7218e92d53979b08512c1e574a215f75ea Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 11 Jul 2022 11:29:42 +0200 Subject: [PATCH 14/32] =?UTF-8?q?Adapted=20Query=20getEctsSummeSchulisch:?= =?UTF-8?q?=20exclude=20Anrechnung=20aufgrund=20universit=C3=A4rer=20Quali?= =?UTF-8?q?fikation.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Anrechnungen mit universiäterer Qualifikation sind unbegrenzt möglich. --- system/dbupdate_3.3.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index db6fc05ed..d0396ff2f 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6352,7 +6352,8 @@ if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)")) 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 -- schulisch + AND begruendung_id != 5 -- universitäre ECTS nicht mitrechnen + AND begruendung_id != 4 -- berufliche ECTS nicht mitrechnen UNION @@ -6365,7 +6366,8 @@ if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)")) WHERE genehmigt_von IS NOT NULL AND student_uid = var_student_uid - AND begruendung_id != 4 -- schulisch + 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 From 3b1d0f3aaa959c0dba76dcdc6a221b0c72df78a7 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 18 Jul 2022 10:24:12 +0200 Subject: [PATCH 15/32] Merged DB Model Int/Float conversion + query type cast adaptation --- application/core/DB_Model.php | 54 ++++++++++++++++--- .../approveAnrechnungUebersichtData.php | 12 ++--- 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/application/core/DB_Model.php b/application/core/DB_Model.php index 4e555be6c..bdd5316e7 100644 --- a/application/core/DB_Model.php +++ b/application/core/DB_Model.php @@ -22,11 +22,16 @@ class DB_Model extends CI_Model const PGSQL_BOOLEAN_FALSE = 'f'; const PGSQL_BOOLEAN_TYPE = 'bool'; const PGSQL_BOOLEAN_ARRAY_TYPE = '_bool'; + const PGSQL_INT2_TYPE = 'int2'; + const PGSQL_INT4_TYPE = 'int4'; + const PGSQL_INT8_TYPE = 'int8'; + const PGSQL_FLOAT4_TYPE = 'float4'; + const PGSQL_FLOAT8_TYPE = 'float8'; protected $dbTable; // Name of the DB-Table for CI-Insert, -Update, ... - protected $pk; // Name of the PrimaryKey for DB-Update, Load, ... + protected $pk; // Name of the PrimaryKey for DB-Update, Load, ... protected $hasSequence; // False if this table has a composite primary key that is not using a sequence - // True if this table has a primary key that uses a sequence + // True if this table has a primary key that uses a sequence private $executedQueryMetaData; private $executedQueryListFields; @@ -271,11 +276,6 @@ class DB_Model extends CI_Model /** * Load data and convert a record into a list of data from the main table, * and linked to every element, the data from the side tables - * - * TODO: - * - Adding support for composed primary key - * - Adding support for cascading side tables (useful?) - * * NOTE: sub queries are not supported in the from clause * * @return array @@ -598,6 +598,28 @@ class DB_Model extends CI_Model return $val; } + /** + * Convert PG-Int* to PHP-Integer + */ + public function pgIntPhp($val) + { + // If it is null, let it be null + if ($val == null) return $val; + + return intval($val); + } + + /** + * Convert PG-Float* to PHP-Float + */ + public function pgFloatPhp($val) + { + // If it is null, let it be null + if ($val == null) return $val; + + return floatval($val); + } + /** * Converts from PostgreSQL array to php array * It also takes care about array of booleans @@ -892,6 +914,11 @@ class DB_Model extends CI_Model // If array type, boolean type OR a UDF if (strpos($eqmd->type, DB_Model::PGSQL_ARRAY_TYPE) !== false || $eqmd->type == DB_Model::PGSQL_BOOLEAN_TYPE + || $eqmd->type == DB_Model::PGSQL_INT2_TYPE + || $eqmd->type == DB_Model::PGSQL_INT4_TYPE + || $eqmd->type == DB_Model::PGSQL_INT8_TYPE + || $eqmd->type == DB_Model::PGSQL_FLOAT4_TYPE + || $eqmd->type == DB_Model::PGSQL_FLOAT8_TYPE || $this->udflib->isUDFColumn($eqmd->name, $eqmd->type)) { // If UDFs are inside this result set @@ -941,6 +968,19 @@ class DB_Model extends CI_Model { $resultElement->{$toBeConverted->name} = $this->pgBoolPhp($resultElement->{$toBeConverted->name}); } + // Integer type + elseif ($toBeConverted->type == DB_Model::PGSQL_INT2_TYPE + || $toBeConverted->type == DB_Model::PGSQL_INT4_TYPE + || $toBeConverted->type == DB_Model::PGSQL_INT8_TYPE) + { + $resultElement->{$toBeConverted->name} = $this->pgIntPhp($resultElement->{$toBeConverted->name}); + } + // Float type + elseif ($toBeConverted->type == DB_Model::PGSQL_FLOAT4_TYPE + || $toBeConverted->type == DB_Model::PGSQL_FLOAT8_TYPE) + { + $resultElement->{$toBeConverted->name} = $this->pgFloatPhp($resultElement->{$toBeConverted->name}); + } } } } diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index f4d63d236..8ec74276f 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -77,12 +77,12 @@ $query = ' anrechnungen.orgform_kurzbz, anrechnungen.ausbildungssemester, anrechnungen.lv_bezeichnung, - anrechnungen.ects::numeric(4,1) AS ects, - CONCAT_WS(\' \', (COALESCE(ectsSumSchulisch, 0) + COALESCE(ectsSumBeruflich, 0))::numeric(4,1), \' [ S:\', COALESCE(ectsSumSchulisch, 0), \' | B:\', COALESCE(ectsSumBeruflich, 0), \']\') - AS "ectsSumTotal", - anrechnungen.ectsSumSchulisch, - anrechnungen.ectsSumBeruflich, - anrechnungen.student, + anrechnungen.ects::float4 AS ects, + NULL AS "ectsSumBisherUndNeu", + anrechnungen.ectsSumSchulisch::float4 AS "ectsSumBisherUndNeuSchulisch", + anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBisherUndNeuBeruflich", + anrechnungen.ectsSumSchulisch::float4 AS "ectsSumSchulisch", + anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBeruflich", anrechnungen.begruendung, anrechnungen.dokument_bezeichnung, anrechnungen.anmerkung_student, From 1544653fa375eac8d7671c15cb16243809c006de Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 18 Jul 2022 17:33:50 +0200 Subject: [PATCH 16/32] =?UTF-8?q?Added=20Begr=C3=BCndungstext=20'Max=20ECT?= =?UTF-8?q?S=20=C3=BCberschritten'=20als=20Ablehnungsgrund?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anrechnung/approveAnrechnungDetail.php | 8 ++++++++ .../approveAnrechnungUebersicht.php | 6 ++++++ system/phrasesupdate.php | 20 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index b44da925b..69456ab75 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -325,6 +325,14 @@ $this->load->view( +
  • + p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?> + + + +
  • p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?> load->view(
  • +
  • p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?> + + + +
  • p->t('anrechnung', 'andereBegruendung'); ?>

  • diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 786caa47d..19b1b2f6a 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -11630,6 +11630,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', From 4ba1f2cef53a7763e349a424a79207d916fe1543 Mon Sep 17 00:00:00 2001 From: Cris Date: Mon, 18 Jul 2022 17:38:20 +0200 Subject: [PATCH 17/32] Changed: Dynamic ECTS Summen (LV ECTS Sum by Prestudent + former ECTS) now build with tabulators mutator and rowFormatter --- .../approveAnrechnungUebersichtData.php | 26 +-- .../anrechnung/approveAnrechnungUebersicht.js | 170 ++++++++++-------- 2 files changed, 106 insertions(+), 90 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index 8ec74276f..21dc90694 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -84,6 +84,7 @@ $query = ' anrechnungen.ectsSumSchulisch::float4 AS "ectsSumSchulisch", anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBeruflich", anrechnungen.begruendung, + anrechnungen.student, anrechnungen.dokument_bezeichnung, anrechnungen.anmerkung_student, anrechnungen.zgv, @@ -149,11 +150,13 @@ $filterWidgetArray = array( 'Semester', ucfirst($this->p->t('lehre', 'lehrveranstaltung')), 'ECTS (LV)', - 'ECTS (Bisher angerechnet)', - 'ECTS schulisch', - 'ECTS beruflich', - ucfirst($this->p->t('person', 'studentIn')), + 'ECTS (LV + Bisher)', + 'ECTS (LV + Schule)', + 'ECTS (LV + Beruf)', + 'ECTS (Bisher schulisch)', + 'ECTS (Bisher beruflich', ucfirst($this->p->t('global', 'begruendung')), + ucfirst($this->p->t('person', 'studentIn')), ucfirst($this->p->t('anrechnung', 'nachweisdokumente')), ucfirst($this->p->t('anrechnung', 'herkunft')), ucfirst($this->p->t('global', 'zgv')), @@ -175,7 +178,7 @@ $filterWidgetArray = array( headerFilterPlaceholder: " ", index: "anrechnung_id", // assign specific column as unique id (important for row indexing) selectable: true, // allow row selection - selectableRangeMode: "click", // allow range selection using shift end click on end of range + selectableRangeMode: "click", // allow range selection using shift end click on end of range -- TODO: check, löst rowSelectionChanged 2* aus selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated tableBuilt: function(){ func_tableBuilt(this); @@ -189,9 +192,6 @@ $filterWidgetArray = array( rowFormatter:function(row){ func_rowFormatter(row); }, - rowDeselected:function(row){ - func_rowDeselected(row); - }, rowSelectionChanged:function(data, rows){ func_rowSelectionChanged(data, rows); }, @@ -214,11 +214,13 @@ $filterWidgetArray = array( ausbildungssemester: {headerFilter:"input"}, lv_bezeichnung: {headerFilter:"input"}, ects: {headerFilter:"input", align:"center"}, - ectsSumTotal: {headerFilter:"input", align:"left"}, - ectsSumSchulisch: {visible: false, headerFilter:"input"}, - ectsSumBeruflich: {visible: false, headerFilter:"input"}, + ectsSumBisherUndNeu: {mutator: mut_getEctsSumBisherUndNeu, formatter:"html"}, + ectsSumBisherUndNeuSchulisch: {headerFilter: "input", visible: false}, + ectsSumBisherUndNeuBeruflich: {headerFilter: "input", visible: false}, + ectsSumSchulisch: {visible: true, headerFilter:"input", align:"right"}, + ectsSumBeruflich: {visible: true, headerFilter:"input", align:"right"}, + begruendung: {headerFilter:"input", visible: true}, student: {headerFilter:"input"}, - begruendung: {headerFilter:"input"}, zgv: {visible: false, headerFilter:"input"}, dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams:{ labelField:"dokument_bezeichnung", diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index b6a2182d8..97415a8f2 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -10,7 +10,8 @@ const ANRECHNUNGSTATUS_REJECTED = 'rejected'; const COLOR_LIGHTGREY = "#f5f5f5"; const COLOR_DANGER = '#f2dede'; -var previousSelectedRows = []; +var tabulator = null; // Set in tableBuilt function. +var rowSelectionChanged = false; // Set in rowSelectionChanged function. Useful in rowUpdate to differ update behaviour. // ----------------------------------------------------------------------------------------------------------------- // Mutators - setter methods to manipulate table data when entering the tabulator @@ -26,6 +27,20 @@ var mut_formatStringDate = function(value, data, type, params, component) { } } +var mut_getEctsSumBisherUndNeu = function(value, data, type, params, component){ + + let ectsSumBisherUndNeuTotal = (data.ectsSumBisherUndNeuSchulisch + data.ectsSumBisherUndNeuBeruflich); + let ectsSumBisherUndNeuSchulisch = data.ectsSumBisherUndNeuSchulisch; + let ectsSumBisherUndNeuBeruflich = data.ectsSumBisherUndNeuBeruflich; + + // Format text + ectsSumBisherUndNeuTotal = (ectsSumBisherUndNeuTotal > 90) ? "" + ectsSumBisherUndNeuTotal + "" : ectsSumBisherUndNeuTotal; + ectsSumBisherUndNeuSchulisch = (ectsSumBisherUndNeuSchulisch > 60) ? "" + ectsSumBisherUndNeuSchulisch + "" : ectsSumBisherUndNeuSchulisch; + ectsSumBisherUndNeuBeruflich = (ectsSumBisherUndNeuBeruflich > 60) ? "" + ectsSumBisherUndNeuBeruflich + "" : ectsSumBisherUndNeuBeruflich; + + return "T: " + ectsSumBisherUndNeuTotal + " [ S: " + ectsSumBisherUndNeuSchulisch + " | B: " + ectsSumBisherUndNeuBeruflich + " ]"; +} + // TABULATOR FUNCTIONS // --------------------------------------------------------------------------------------------------------------------- // Returns relative height (depending on screen size) @@ -55,6 +70,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", @@ -82,13 +101,31 @@ function func_tableBuilt(table) { // Formats the rows function func_rowFormatter(row){ let status_kurzbz = row.getData().status_kurzbz; + let begruendung_id = row.getData().begruendung_id; + let ectsSumBisherUndNeuSchulisch = row.getData().ectsSumBisherUndNeuSchulisch; + let ectsSumBisherUndNeuBeruflich = row.getData().ectsSumBisherUndNeuBeruflich; - row.getCells().forEach(function(cell){ - if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL) + if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL) + { + row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default + } + + // Color column if maximum ECTS exceeded + if (begruendung_id != 5 && row.isSelected()) + { + if ( + (ectsSumBisherUndNeuSchulisch + ectsSumBisherUndNeuBeruflich) > 90 || + ectsSumBisherUndNeuSchulisch > 60 || + ectsSumBisherUndNeuBeruflich > 60 + ) { - row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default + row.getCell('ectsSumBisherUndNeu').getElement().style["background-color"] = COLOR_DANGER; } - }); + } + else + { + row.getCell('ectsSumBisherUndNeu').getElement().style.removeProperty('background-color'); + } } // Formats row selectable/unselectable @@ -102,79 +139,56 @@ 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; + var tableData = tabulator.getData(true); // only the filtered / sorted table 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; - } + rowSelectionChanged = true; // Sum up over all anzurechnenden LV-ECTS by Prestudent - var result = []; - result = approveAnrechnung.getSumLvEctsByPreStudent(selectedData); + var selectedPrestudentWithAccumulatedLvEcts = []; + selectedPrestudentWithAccumulatedLvEcts = 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 - ); + // Loop through table rows + tableData.forEach(function(td){ - // Mark all Prestudenten - if (selectedRows.length > 0) - { - selectedRows.forEach((row) => { + let selectedPrestudent = selectedPrestudentWithAccumulatedLvEcts.find(x => x.prestudent_id === td.prestudent_id); - //row.reformat(); - approveAnrechnung.unmarkEctsRow(row); - - if (exceededEctsByPreStud.length > 0) - { - exceededEctsByPreStud.forEach((val) => { - if (row.getData().prestudent_id == val.prestudent_id) - { - approveAnrechnung.markEctsRow(row); + // Add accumulated LV ECTS to bisherige ECTS in ECTS 'controlling column', if Prestudent is selected at least once + if (selectedPrestudent != undefined) + { + td.ectsSumBisherUndNeuSchulisch = td.ectsSumSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch; + td.ectsSumBisherUndNeuBeruflich = td.ectsSumBeruflich + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich; - } - }) - } + } + // ..else reset to bisherige ECTS + else + { + td.ectsSumBisherUndNeuSchulisch = td.ectsSumSchulisch; + td.ectsSumBisherUndNeuBeruflich = td.ectsSumBeruflich; + } + }); - }); - } - - // Keep the selected rows for next selection. - previousSelectedRows = selectedRows; + // Update ECTS columns + tabulator.updateData(tableData); // Show number of selected rows. approveAnrechnung.showNumberSelectedRows(selectedRows); + + rowSelectionChanged = false; } // Performes after row was updated function func_rowUpdated(row){ - // Refresh row formatters - row.reformat(); + + // If rowUpdate is called on row selection change, return to avoid following row deselection and formatting. + if (rowSelectionChanged) + { + return; + } // Deselect and disable new selection of updated rows row.deselect(); @@ -668,38 +682,38 @@ var approveAnrechnung = { } }, - 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){ + getSumLvEctsByPreStudent(data){ var result = []; - - selectedData.reduce((prev, curr) => { + + // 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] = { - anrechnung_id: curr.anrechnung_id, prestudent_id: curr.prestudent_id, - ectsSumAnzurechnendeLvs: 0, - ectsSumSchulisch: parseFloat(curr.ectssumschulisch), - ectsSumBeruflich: parseFloat(curr.ectssumberuflich) + ectsSumAnzurechnendeLvsSchulisch: 0, + ectsSumAnzurechnendeLvsBeruflich: 0 }; result.push(prev[curr.prestudent_id]) } - prev[curr.prestudent_id].ectsSumAnzurechnendeLvs+= parseFloat(curr.ects); + // 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; From 760e5758cea0cd3a27933537f0426f493ac233e1 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 19 Jul 2022 17:33:28 +0200 Subject: [PATCH 18/32] =?UTF-8?q?Optimized=20performance=20of=20all=20'All?= =?UTF-8?q?e=20ausw=C3=A4hlen'-buttons=20defined=20via=20tableWidgetHook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ...by passing an array of rows to be selected, instead of selecting each row one by one. Further triggered functions, e.g. rowSelectionChanged, are now called once only, not for each row. --- public/js/lehre/anrechnung/approveAnrechnungUebersicht.js | 7 ++++--- public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js | 7 ++++--- public/js/lehre/lehrauftrag/acceptLehrauftrag.js | 7 ++++--- public/js/lehre/lehrauftrag/approveLehrauftrag.js | 7 ++++--- public/js/lehre/lehrauftrag/orderLehrauftrag.js | 7 ++++--- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index 97415a8f2..d16218de6 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -222,11 +222,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); } diff --git a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js index 2cf7c1623..2d5d65ac9 100644 --- a/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/reviewAnrechnungUebersicht.js @@ -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); } // ----------------------------------------------------------------------------------------------------------------- From 86d7f8a35e0ae33b72f3ab74dd188dd2cb729589 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 19 Jul 2022 17:56:16 +0200 Subject: [PATCH 19/32] Code refactoring of Dynamic ECTS Summen . now build with tabulators column formatter. . rows are reinitialized instead of using the updateData. . format of cell background-color has moved out from row formatter to cell formatter --- .../anrechnung/approveAnrechnungDetail.php | 4 +- .../approveAnrechnungUebersichtData.php | 10 +- .../anrechnung/approveAnrechnungDetail.js | 1 - .../anrechnung/approveAnrechnungUebersicht.js | 138 ++++++++---------- 4 files changed, 69 insertions(+), 84 deletions(-) diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 69456ab75..15887dfd5 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -127,7 +127,8 @@ $this->load->view(
    - diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index 21dc90694..e78bf4059 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -79,8 +79,6 @@ $query = ' anrechnungen.lv_bezeichnung, anrechnungen.ects::float4 AS ects, NULL AS "ectsSumBisherUndNeu", - anrechnungen.ectsSumSchulisch::float4 AS "ectsSumBisherUndNeuSchulisch", - anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBisherUndNeuBeruflich", anrechnungen.ectsSumSchulisch::float4 AS "ectsSumSchulisch", anrechnungen.ectsSumBeruflich::float4 AS "ectsSumBeruflich", anrechnungen.begruendung, @@ -151,8 +149,6 @@ $filterWidgetArray = array( ucfirst($this->p->t('lehre', 'lehrveranstaltung')), 'ECTS (LV)', 'ECTS (LV + Bisher)', - 'ECTS (LV + Schule)', - 'ECTS (LV + Beruf)', 'ECTS (Bisher schulisch)', 'ECTS (Bisher beruflich', ucfirst($this->p->t('global', 'begruendung')), @@ -178,7 +174,7 @@ $filterWidgetArray = array( headerFilterPlaceholder: " ", index: "anrechnung_id", // assign specific column as unique id (important for row indexing) selectable: true, // allow row selection - selectableRangeMode: "click", // allow range selection using shift end click on end of range -- TODO: check, löst rowSelectionChanged 2* aus + selectableRangeMode: "click", // allow range selection using shift end click on end of range selectablePersistence:false, // deselect previously selected rows when table is filtered, sorted or paginated tableBuilt: function(){ func_tableBuilt(this); @@ -214,9 +210,7 @@ $filterWidgetArray = array( ausbildungssemester: {headerFilter:"input"}, lv_bezeichnung: {headerFilter:"input"}, ects: {headerFilter:"input", align:"center"}, - ectsSumBisherUndNeu: {mutator: mut_getEctsSumBisherUndNeu, formatter:"html"}, - ectsSumBisherUndNeuSchulisch: {headerFilter: "input", visible: false}, - ectsSumBisherUndNeuBeruflich: {headerFilter: "input", visible: false}, + ectsSumBisherUndNeu: {formatter: format_ectsSumBisherUndNeu}, ectsSumSchulisch: {visible: true, headerFilter:"input", align:"right"}, ectsSumBeruflich: {visible: true, headerFilter:"input", align:"right"}, begruendung: {headerFilter:"input", visible: true}, diff --git a/public/js/lehre/anrechnung/approveAnrechnungDetail.js b/public/js/lehre/anrechnung/approveAnrechnungDetail.js index ffa989056..6658a4b15 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungDetail.js +++ b/public/js/lehre/anrechnung/approveAnrechnungDetail.js @@ -568,7 +568,6 @@ var approveAnrechnungDetail = { (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 diff --git a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js index d16218de6..b971745a2 100644 --- a/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js +++ b/public/js/lehre/anrechnung/approveAnrechnungUebersicht.js @@ -11,7 +11,9 @@ const COLOR_LIGHTGREY = "#f5f5f5"; const COLOR_DANGER = '#f2dede'; var tabulator = null; // Set in tableBuilt function. -var rowSelectionChanged = false; // Set in rowSelectionChanged function. Useful in rowUpdate to differ update behaviour. + +// 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 @@ -27,20 +29,6 @@ var mut_formatStringDate = function(value, data, type, params, component) { } } -var mut_getEctsSumBisherUndNeu = function(value, data, type, params, component){ - - let ectsSumBisherUndNeuTotal = (data.ectsSumBisherUndNeuSchulisch + data.ectsSumBisherUndNeuBeruflich); - let ectsSumBisherUndNeuSchulisch = data.ectsSumBisherUndNeuSchulisch; - let ectsSumBisherUndNeuBeruflich = data.ectsSumBisherUndNeuBeruflich; - - // Format text - ectsSumBisherUndNeuTotal = (ectsSumBisherUndNeuTotal > 90) ? "" + ectsSumBisherUndNeuTotal + "" : ectsSumBisherUndNeuTotal; - ectsSumBisherUndNeuSchulisch = (ectsSumBisherUndNeuSchulisch > 60) ? "" + ectsSumBisherUndNeuSchulisch + "" : ectsSumBisherUndNeuSchulisch; - ectsSumBisherUndNeuBeruflich = (ectsSumBisherUndNeuBeruflich > 60) ? "" + ectsSumBisherUndNeuBeruflich + "" : ectsSumBisherUndNeuBeruflich; - - return "T: " + ectsSumBisherUndNeuTotal + " [ S: " + ectsSumBisherUndNeuSchulisch + " | B: " + ectsSumBisherUndNeuBeruflich + " ]"; -} - // TABULATOR FUNCTIONS // --------------------------------------------------------------------------------------------------------------------- // Returns relative height (depending on screen size) @@ -98,34 +86,65 @@ 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; + 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; - let begruendung_id = row.getData().begruendung_id; - let ectsSumBisherUndNeuSchulisch = row.getData().ectsSumBisherUndNeuSchulisch; - let ectsSumBisherUndNeuBeruflich = row.getData().ectsSumBisherUndNeuBeruflich; if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_STGL) { row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default } - - // Color column if maximum ECTS exceeded - if (begruendung_id != 5 && row.isSelected()) - { - if ( - (ectsSumBisherUndNeuSchulisch + ectsSumBisherUndNeuBeruflich) > 90 || - ectsSumBisherUndNeuSchulisch > 60 || - ectsSumBisherUndNeuBeruflich > 60 - ) - { - row.getCell('ectsSumBisherUndNeu').getElement().style["background-color"] = COLOR_DANGER; - } - } - else - { - row.getCell('ectsSumBisherUndNeu').getElement().style.removeProperty('background-color'); - } } // Formats row selectable/unselectable @@ -139,57 +158,28 @@ function func_selectableCheck(row){ ); } -// Format rows when maximum ECTS are exceeded. +// 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){ - var selectedData = data; - var selectedRows = rows; - var tableData = tabulator.getData(true); // only the filtered / sorted table rows - - rowSelectionChanged = true; - // Sum up over all anzurechnenden LV-ECTS by Prestudent - var selectedPrestudentWithAccumulatedLvEcts = []; - selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(selectedData); + selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data); - // Loop through table rows - tableData.forEach(function(td){ + // Loop through all active rows + var rowManager = tabulator.rowManager; + for (var i = 0; i < rowManager.activeRows.length; i++) { - let selectedPrestudent = selectedPrestudentWithAccumulatedLvEcts.find(x => x.prestudent_id === td.prestudent_id); - - // Add accumulated LV ECTS to bisherige ECTS in ECTS 'controlling column', if Prestudent is selected at least once - if (selectedPrestudent != undefined) - { - td.ectsSumBisherUndNeuSchulisch = td.ectsSumSchulisch + selectedPrestudent.ectsSumAnzurechnendeLvsSchulisch; - td.ectsSumBisherUndNeuBeruflich = td.ectsSumBeruflich + selectedPrestudent.ectsSumAnzurechnendeLvsBeruflich; - - } - // ..else reset to bisherige ECTS - else - { - td.ectsSumBisherUndNeuSchulisch = td.ectsSumSchulisch; - td.ectsSumBisherUndNeuBeruflich = td.ectsSumBeruflich; - } - }); - - // Update ECTS columns - tabulator.updateData(tableData); + // Reinitialize row -> triggers formatters. + rowManager.activeRows[i].reinitialize(); + } // Show number of selected rows. - approveAnrechnung.showNumberSelectedRows(selectedRows); - - rowSelectionChanged = false; + approveAnrechnung.showNumberSelectedRows(rows); } // Performes after row was updated function func_rowUpdated(row){ - // If rowUpdate is called on row selection change, return to avoid following row deselection and formatting. - if (rowSelectionChanged) - { - return; - } - // Deselect and disable new selection of updated rows row.deselect(); row.getElement().style["pointerEvents"] = "none"; From 6a439283224f0ace25beb0c9f8da261f3d388ca4 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 26 Jul 2022 18:14:23 +0200 Subject: [PATCH 20/32] Added: Display (Qualifikations-)Begruendung in STGL Anrechnungen Detail View --- application/libraries/AnrechnungLib.php | 4 ++++ .../views/lehre/anrechnung/approveAnrechnungDetail.php | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/application/libraries/AnrechnungLib.php b/application/libraries/AnrechnungLib.php index 8c67b4d14..86a81fb55 100644 --- a/application/libraries/AnrechnungLib.php +++ b/application/libraries/AnrechnungLib.php @@ -122,6 +122,7 @@ class AnrechnungLib $anrechnung_data = new StdClass(); + $this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id'); $result = $this->ci->AnrechnungModel->load($anrechnung_id); if (isError($result)) @@ -155,6 +156,7 @@ class AnrechnungLib $anrechnung_data->prestudent_id = ''; $anrechnung_data->lehrveranstaltung = ''; $anrechnung_data->begruendung_id = ''; + $anrechnung_data->begruendung = ''; $anrechnung_data->anmerkung = ''; $anrechnung_data->dms_id = ''; $anrechnung_data->insertamum = ''; @@ -165,6 +167,7 @@ class AnrechnungLib $anrechnung_data->status = getUserLanguage() == 'German' ? 'neu' : 'new'; $anrechnung_data->dokumentname = ''; + $this->ci->AnrechnungModel->addJoin('lehre.tbl_anrechnung_begruendung', 'begruendung_id'); $result = $this->ci->AnrechnungModel->loadWhere( array( 'lehrveranstaltung_id' => $lehrveranstaltung_id, @@ -810,6 +813,7 @@ class AnrechnungLib $anrechnung_data->prestudent_id = $anrechnung->prestudent_id; $anrechnung_data->lehrveranstaltung_id = $anrechnung->lehrveranstaltung_id; $anrechnung_data->begruendung_id = $anrechnung->begruendung_id; + $anrechnung_data->begruendung = $anrechnung->bezeichnung; $anrechnung_data->anmerkung = $anrechnung->anmerkung_student; $anrechnung_data->dms_id = $anrechnung->dms_id; $anrechnung_data->insertamum = (new DateTime($anrechnung->insertamum))->format('d.m.Y'); diff --git a/application/views/lehre/anrechnung/approveAnrechnungDetail.php b/application/views/lehre/anrechnung/approveAnrechnungDetail.php index 15887dfd5..995a032b7 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungDetail.php +++ b/application/views/lehre/anrechnung/approveAnrechnungDetail.php @@ -167,6 +167,10 @@ $this->load->view( target="_blank">dokumentname) ?> + + + +
    ects ?>
    Bisher angerechnete ECTS + + p->t('anrechnung', 'bisherAngerechneteEcts'); ?> @@ -139,6 +140,7 @@ $this->load->view( [Schulisch: sumEctsSchulisch ?> / Beruflich: sumEctsBeruflich ?> ] +
    p->t('lehre', 'lektorInnen'); ?>
    p->t('global', 'begruendung'); ?>begruendung ?>
    From 7b9fd39bbc44c536efbdb4f22f8b000563253b66 Mon Sep 17 00:00:00 2001 From: Cris Date: Tue, 26 Jul 2022 18:18:08 +0200 Subject: [PATCH 21/32] Added: Hochschul-Qualifikation + ECTS Anzeige in Student View MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Checkbox zur Angabe von Hochschulqualifikation Anzeige, wenn ECTS Grenzen überschritten werden. --- .../lehre/anrechnung/requestAnrechnung.php | 38 ++++- .../js/lehre/anrechnung/requestAnrechnung.js | 149 ++++++++++++++++++ system/phrasesupdate.php | 81 +++++++++- 3 files changed, 264 insertions(+), 4 deletions(-) diff --git a/application/views/lehre/anrechnung/requestAnrechnung.php b/application/views/lehre/anrechnung/requestAnrechnung.php index 978dd5606..7b51898f6 100644 --- a/application/views/lehre/anrechnung/requestAnrechnung.php +++ b/application/views/lehre/anrechnung/requestAnrechnung.php @@ -31,7 +31,9 @@ $this->load->view( ), 'anrechnung' => array( 'deadlineUeberschritten', - 'benotungDerLV' + 'benotungDerLV', + 'anrechnungEctsTextBeiUeberschreitung', + 'anrechnungEctsTooltipTextBeiUeberschreitung' ), 'person' => array( 'student', @@ -80,9 +82,13 @@ $this->load->view(
    + - + + + +
    @@ -119,8 +125,23 @@ $this->load->view( p->t('lehre', 'ects'); ?> - ects ?> + ects, 1) ?> ECTS + + + p->t('anrechnung', 'bisherAngerechneteEcts'); ?> + + + + + + Total ECTS: sumEctsSchulisch + $antragData->sumEctsBeruflich, 1) ?> + [ Schulisch: sumEctsSchulisch ?> | + Beruflich: sumEctsBeruflich ?> ] + + + p->t('lehre', 'lektorInnen')); ?> @@ -152,6 +173,17 @@ $this->load->view(
    +
    + +