diff --git a/application/controllers/api/frontend/v1/LvPlan.php b/application/controllers/api/frontend/v1/LvPlan.php index 36054003c..f9d2cc3cf 100644 --- a/application/controllers/api/frontend/v1/LvPlan.php +++ b/application/controllers/api/frontend/v1/LvPlan.php @@ -114,6 +114,7 @@ class LvPlan extends FHCAPI_Controller // fetching lvplan events $result = $this->stundenplanlib->getEventsUser($start_date, $end_date, $uid); + $lvplanEvents = $this->getDataOrTerminateWithError($result); // fetching moodle events diff --git a/application/controllers/api/frontend/v1/Studium.php b/application/controllers/api/frontend/v1/Studium.php index f53a4105c..4794bedd3 100644 --- a/application/controllers/api/frontend/v1/Studium.php +++ b/application/controllers/api/frontend/v1/Studium.php @@ -167,7 +167,9 @@ class Studium extends FHCAPI_Controller if($aktuelles_studienplan){ $lehrveranstaltungen = $this->computeStudienplanLehrveranstaltungen($aktuelles_studienplan->studienplan_id, $aktuelles_semester); foreach($lehrveranstaltungen as $lehrv){ - foreach($lehrv->lehrveranstaltungen as $lv){ + // a lehrveranstaltung without a modul has no children and gets its lektoren directly + $lvs = isset($lehrv->lehrveranstaltungen) ? $lehrv->lehrveranstaltungen : [$lehrv]; + foreach($lvs as $lv){ $lvLektoren =$this->computeLektorenFromLehrveranstaltung($lv->lehrveranstaltung_id,$aktuelles_semester, $aktuelles_studiengang->studiengang_kz, $aktuelles_studiensemester->studiensemester_kurzbz); $lv->lektoren = $lvLektoren; } @@ -286,6 +288,7 @@ SELECT tbl_lehrveranstaltung.*, $lehrveranstaltungen = $this->LehrveranstaltungModel->execReadOnlyQuery($query,[$studienplan_id, $semester]); $lehrveranstaltungen = $this->getDataOrTerminateWithError($lehrveranstaltungen); + usort($lehrveranstaltungen, function($a, $b){ if($a->lehrtyp_kurzbz == "modul"){ return -1; @@ -302,12 +305,17 @@ SELECT tbl_lehrveranstaltung.*, } else{ $parent =array_filter($carry, function($item)use($lehrv){ - return $item->studienplan_lehrveranstaltung_id == $lehrv->studienplan_lehrveranstaltung_id_parent; + return isset($item->lehrveranstaltungen) + && $item->studienplan_lehrveranstaltung_id == $lehrv->studienplan_lehrveranstaltung_id_parent; }); $parent = current($parent); if($parent){ $parent->lehrveranstaltungen[] = $lehrv; } + else{ + // lehrveranstaltung without a modul: keep it on the top level + array_push($carry, $lehrv); + } } return $carry; }, []); diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 39ed72072..6427df0ac 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -108,6 +108,7 @@ class Students extends FHCAPI_Controller 'studiensemester_kurzbz' => $studiensemester_kurzbz ]); + $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz); $this->studentlistlib->addJoin( "( @@ -153,7 +154,8 @@ class Students extends FHCAPI_Controller $this->addMeta('ci_params', [ 'studiensemester_kurzbz' => $studiensemester_kurzbz ]); - + + $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz); $this->studentlistlib->addJoin( "( @@ -213,6 +215,7 @@ class Students extends FHCAPI_Controller 'studiensemester_kurzbz' => $studiensemester_kurzbz ]); + $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz); $this->studentlistlib->addJoin( "( diff --git a/application/libraries/StundenplanLib.php b/application/libraries/StundenplanLib.php index 8d40c7abd..2c13a29d9 100644 --- a/application/libraries/StundenplanLib.php +++ b/application/libraries/StundenplanLib.php @@ -94,13 +94,13 @@ class StundenplanLib if (isError($benutzer_gruppen)) return $benutzer_gruppen; $benutzer_gruppen = getData($benutzer_gruppen); - + $this->_ci->addMeta('spezialgruppen', $benutzer_gruppen); // getting the student_lehrverbaende of the student in the different studiensemester $student_lehrverband = $this->fetchStudentlehrverbandFromStudiensemester($student_uid, $semester_range); if (isError($student_lehrverband)) return $student_lehrverband; $student_lehrverband = getData($student_lehrverband); - + $this->_ci->addMeta('studentlehrvebaende', $student_lehrverband); $stundenplan_query = $this->_ci->StundenplanModel->getStundenplanQuery( $start, $end, @@ -632,6 +632,7 @@ class StundenplanLib $result->semester = $item->semester; $result->verband = $item->verband; $result->gruppe = $item->gruppe; + $result->studiensemester_kurzbz = $item->studiensemester_kurzbz; return $result; }, $lehrverband_query_result); diff --git a/application/libraries/tags/CoreMissingZgvTagLib.php b/application/libraries/tags/CoreMissingZgvTagLib.php index e25aed4cc..2d5df0ffc 100644 --- a/application/libraries/tags/CoreMissingZgvTagLib.php +++ b/application/libraries/tags/CoreMissingZgvTagLib.php @@ -28,10 +28,21 @@ class CoreMissingZgvTagLib $this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); $this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id'); $this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + + $this->ci->PrestudentModel->db->group_start(); + + $this->ci->PrestudentModel->db->where('zgvdatum', null); + $this->ci->PrestudentModel->db->where('typ', 'b'); + + $this->ci->PrestudentModel->db->or_group_start(); + $this->ci->PrestudentModel->db->where('zgvmadatum', null); + $this->ci->PrestudentModel->db->where('typ', 'm'); + $this->ci->PrestudentModel->db->group_end(); + + $this->ci->PrestudentModel->db->group_end(); + $result = $this->ci->PrestudentModel-> loadWhere(array( - 'bn.aktiv' => true, //check if necessary - 'zgvdatum' => null, - 'typ' => 'b', + 'bn.aktiv' => true, 'studiensemester_kurzbz' => $semester )); @@ -60,16 +71,36 @@ class CoreMissingZgvTagLib $semester = $params['studiensemester_kurzbz']; $prestudent_id = $params['id']; + $this->ci->PrestudentModel->addSelect('prestudent_id'); + $this->ci->PrestudentModel->addSelect('start as von'); + $this->ci->PrestudentModel->addSelect('ende as bis'); $this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id'); + + //add studiensemester also here for manual rebuild + $this->ci->PrestudentModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz'); + $this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id'); $this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); - $result = $this->ci->PrestudentModel->loadWhere(array( - 'bn.aktiv' => true, //check if necessary - 'zgvdatum' => null, - 'typ' => 'b', + + $this->ci->PrestudentModel->db->group_start(); + + $this->ci->PrestudentModel->db->where('zgvdatum', null); + $this->ci->PrestudentModel->db->where('typ', 'b'); + + $this->ci->PrestudentModel->db->or_group_start(); + $this->ci->PrestudentModel->db->where('zgvmadatum', null); + $this->ci->PrestudentModel->db->where('typ', 'm'); + $this->ci->PrestudentModel->db->group_end(); + + $this->ci->PrestudentModel->db->group_end(); + $this->ci->PrestudentModel->db->limit(1); + + $result = $this->ci->PrestudentModel-> loadWhere(array( + 'bn.aktiv' => true, 'studiensemester_kurzbz' => $semester, 'prestudent_id' => $prestudent_id )); + if(hasData($result)) { return $result; diff --git a/application/models/crm/Student_model.php b/application/models/crm/Student_model.php index ab073996f..df8c1f983 100644 --- a/application/models/crm/Student_model.php +++ b/application/models/crm/Student_model.php @@ -204,7 +204,7 @@ class Student_model extends DB_Model Events::trigger( 'generate_student_uid', - function ($value) use ($uid) { + function ($value) use (&$uid) { $uid = $value; }, $stgkzl, diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 1db658596..db0996319 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -457,6 +457,7 @@ class Studiengang_model extends DB_Model */ public function getLeitung($studiengang_kz = null) { + $this->addDistinct(); $this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email, titelpre, titelpost, alias'); $this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz'); $this->addJoin('public.tbl_benutzer', 'uid'); diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 1eddd2e2f..0f51e4b71 100644 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -604,11 +604,17 @@ class Stundenplan_model extends DB_Model { foreach($semester_date_range as $sem_date => $sem_date_range) { - if(!array_key_exists($sem_date,$studentlehrverbaende) || count($studentlehrverbaende[$sem_date]) == 0) + if(!array_key_exists($sem,$studentlehrverbaende) || count($studentlehrverbaende[$sem]) == 0) { continue; } - foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband) + $studlvbds = array_filter( + $studentlehrverbaende[$sem], + function($value) use ($sem_date) { + return $value->studiensemester_kurzbz === $sem_date; + } + ); + foreach($studlvbds as $key=>$lehrverband) { $query .= "(((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")"; // Eintraege fuer den ganzen Verband diff --git a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php index acfcbd907..dccc31187 100644 --- a/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php +++ b/application/views/lehre/anrechnung/approveAnrechnungUebersichtData.php @@ -16,7 +16,7 @@ $query = ' anrechnung.begruendung_id, anrechnung.dms_id, CASE - WHEN stg.typ || stg.kurzbz IN (' . $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT . ') THEN TRUE + WHEN stg.oe_kurzbz IN (' . $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT . ') THEN TRUE ELSE FALSE END "schreibberechtigt", anrechnung.studiensemester_kurzbz, diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index fb023c5fd..b5761405c 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -57,7 +57,7 @@
diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 52b18b056..62b896e43 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -351,7 +351,7 @@ if (!$berechtigung->isBerechtigt('admin') { $worksheet->write($lines,3,$elem->vorname); } - $worksheet->write($lines,4,$elem->semester.$elem->verband.$elem->gruppe); + $worksheet->writeString($lines,4,$elem->semester.$elem->verband.$elem->gruppe); $worksheet->write($lines,5,trim($elem->matrikelnr),$format_highlight); $worksheet->write($lines,6, $note, $format_highlightright); diff --git a/include/vertrag.class.php b/include/vertrag.class.php index 1d9ec364b..7cfa64ee2 100644 --- a/include/vertrag.class.php +++ b/include/vertrag.class.php @@ -121,7 +121,7 @@ class vertrag extends basis_db JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) WHERE vertrag_id=tbl_vertrag.vertrag_id - AND studiensemester_kurzbz in (SELECT studiensemester_kurzbz FROM public.tbl_studiensemester WHERE start>=".$this->db_add_param($datum).") + AND studiensemester_kurzbz in (SELECT studiensemester_kurzbz FROM public.tbl_studiensemester WHERE start>".$this->db_add_param($datum).") ) )"; } diff --git a/public/css/components/Detailheader.css b/public/css/components/Detailheader.css index dcfcf6806..e9ebddfc1 100644 --- a/public/css/components/Detailheader.css +++ b/public/css/components/Detailheader.css @@ -62,3 +62,16 @@ top:13%;" z-index: 104; font-size: 1rem; width: 2.5rem; height: 2.5rem; opacity:0; transition: opacity 0.2s; top:13%;" }*/ + +.tag-hover:hover { + background-color: #e9ecef; +} + +.green { + background-color: #e9ecef; +} + +.btn-hover { + --bs-btn-hover-bg: #e9ecef; /* Neue Hintergrundfarbe beim Hover */ + --bs-btn-hover-border-color: #e9ecef; /* Neue Rahmenfarbe beim Hover */ +} diff --git a/public/css/tags.css b/public/css/tags.css index 0634c5ce3..0230cfbda 100644 --- a/public/css/tags.css +++ b/public/css/tags.css @@ -145,3 +145,8 @@ float: right; margin-top: 3px; } + +.btn-hover { + --bs-btn-hover-bg: #e9ecef; + --bs-btn-hover-border-color: #e9ecef; +} diff --git a/public/js/components/Cis/Studium/Studium.js b/public/js/components/Cis/Studium/Studium.js index 721fec8ad..77459c913 100644 --- a/public/js/components/Cis/Studium/Studium.js +++ b/public/js/components/Cis/Studium/Studium.js @@ -206,6 +206,8 @@ export default { }); this.lehrveranstaltungen.forEach((lehrveranstaltung)=>{ + // a lehrveranstaltung without a modul has no children + if(!Array.isArray(lehrveranstaltung.lehrveranstaltungen)) return; lehrveranstaltung.lehrveranstaltungen.sort((lv1,lv2)=>{ if (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) { return 1; @@ -393,6 +395,16 @@ export default {
+
+
+ +
+
diff --git a/public/js/components/DetailHeader/DetailHeader.js b/public/js/components/DetailHeader/DetailHeader.js index 5bf49731b..f57b679db 100644 --- a/public/js/components/DetailHeader/DetailHeader.js +++ b/public/js/components/DetailHeader/DetailHeader.js @@ -400,32 +400,37 @@ export default {
-

+

{{headerData[0].titelpre}} {{headerData[0].vorname}} {{headerData[0].nachname}} , {{headerData[0].titelpost}}

- -
- - {{currentSemester}} + +
+ +
+ + {{currentSemester}} +
+
unruly
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js index e9f6f7492..5d89547d7 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js @@ -553,8 +553,12 @@ export default { } if (!this.formData.akadgrad_id && this.arrAkadGrad.length > 0) { - if(this.student.geschlecht == 'w') - this.formData.akadgrad_id = this.arrAkadGrad[1].akadgrad_id; + const akadGradByGeschlecht = this.arrAkadGrad.find((item) => { + return item.geschlecht === this.student.geschlecht; + }); + + if(akadGradByGeschlecht) + this.formData.akadgrad_id = akadGradByGeschlecht.akadgrad_id; else this.formData.akadgrad_id = this.arrAkadGrad[0].akadgrad_id; } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js index 74c9f1d92..0f9d45883 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js @@ -255,7 +255,7 @@ export default { deleteButton.className = 'btn btn-outline-secondary'; const icon = document.createElement('i'); icon.className = 'fa fa-trash'; - icon.title = this.$p.t('ui/loeschen'); + icon.title = this.$p.t('lehre/info_deleteMarkEntry'); deleteButton.append(icon); deleteButton.addEventListener('click', evt => { evt.stopPropagation(); diff --git a/public/js/components/Stv/Studentenverwaltung/List.js b/public/js/components/Stv/Studentenverwaltung/List.js index b5973dbb0..9422e7790 100644 --- a/public/js/components/Stv/Studentenverwaltung/List.js +++ b/public/js/components/Stv/Studentenverwaltung/List.js @@ -317,6 +317,7 @@ export default { "$p.user_language.value"(n, o) { if (n !== o && o !== undefined && this.$refs.table.tableBuilt) { this.translateTabulator(); + this.$reloadList(); } }, "tagFilterState.selectedOptions": { @@ -821,18 +822,33 @@ export default { @headerFilterOn="handleHeaderFilter" > - + + + -