From d1af44bcdc8bf7df2afbe87c6b3098b2ea439184 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Thu, 5 Mar 2026 17:33:18 +0100 Subject: [PATCH 01/30] dbupdate entry; WIP table altering statements for lehre.tbl_projektarbeit --- system/dbupdate_3.4.php | 1 + .../75469_le_optional_4_projektarbeit.php | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 4ddb38203..eafd73604 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -92,6 +92,7 @@ require_once('dbupdate_3.4/68744_StV_settings.php'); require_once('dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php'); require_once('dbupdate_3.4/71399_dashboard_update_widget_paths.php'); require_once('dbupdate_3.4/71645_studvw_messagetab_ladezeit.php'); +require_once('dbupdate_3.4/75469_le_optional_4_projektarbeit.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php new file mode 100644 index 000000000..6ad783e2f --- /dev/null +++ b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php @@ -0,0 +1,48 @@ +db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'")) +{ + if($db->db_num_rows($result) === 0) + { + + $qry = "ALTER TABLE lehre.tbl_projektarbeit + ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; + else + echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; + } +} + +// TODO: check for and add fk constraint lehrveranstaltung_id +//if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'")) +//{ +// if($db->db_num_rows($result) === 0) +// { +// +// $qry = "ALTER TABLE lehre.tbl_projektarbeit +// ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; +// +// if(!$db->db_query($qry)) +// echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; +// else +// echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; +// } +//} + +if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'studiensemester_kurzbz'")) +{ + if($db->db_num_rows($result) === 0) + { + + $qry = "ALTER TABLE lehre.tbl_projektarbeit + ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; + else + echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; + } +} \ No newline at end of file From 8ccb9cd892e62eb9f90b4adb1aa27330712bebee Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Fri, 6 Mar 2026 11:47:09 +0100 Subject: [PATCH 02/30] db migrate skript from le_id -> lva_id & stsem_kurzbz via existing references --- .../75469_le_optional_4_projektarbeit.php | 100 ++++++++++++------ 1 file changed, 66 insertions(+), 34 deletions(-) diff --git a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php index 6ad783e2f..939b1ea7e 100644 --- a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php +++ b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php @@ -1,48 +1,80 @@ db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'")) -{ - if($db->db_num_rows($result) === 0) - { +$cols_to_add = [ + 'lehrveranstaltung_id' => "INTEGER", + 'studiensemester_kurzbz' => "INTEGER" +]; - $qry = "ALTER TABLE lehre.tbl_projektarbeit - ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; +foreach ($cols_to_add as $col => $type) { + $check = "SELECT 1 FROM information_schema.columns + WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = '$col'"; - if(!$db->db_query($qry)) - echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; - else - echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; + if ($result = $db->db_query($check)) { + if ($db->db_num_rows($result) === 0) { + $qry = "ALTER TABLE lehre.tbl_projektarbeit ADD COLUMN IF NOT EXISTS $col $type;"; + if ($db->db_query($qry)) { + echo "
Column $col hinzugefuegt."; + } else { + echo "Error adding $col: ".$db->db_last_error()."
"; + } + } } } -// TODO: check for and add fk constraint lehrveranstaltung_id -//if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'")) -//{ -// if($db->db_num_rows($result) === 0) -// { -// -// $qry = "ALTER TABLE lehre.tbl_projektarbeit -// ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; -// -// if(!$db->db_query($qry)) -// echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; -// else -// echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; -// } -//} +// retrieve lehrveranstaltung_id & studiensemester_kurzbz from tbl_lehreinheit +// into new columns based on the existing reference +$migration_qry = "UPDATE lehre.tbl_projektarbeit p + SET lehrveranstaltung_id = l.lehrveranstaltung_id, + studiensemester_kurzbz = l.studiensemester_kurzbz + FROM lehre.tbl_lehreinheit l + WHERE p.lehreinheit_id = l.lehreinheit_id + AND (p.lehrveranstaltung_id IS NULL OR p.studiensemester_kurzbz IS NULL);"; -if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'studiensemester_kurzbz'")) -{ - if($db->db_num_rows($result) === 0) - { +if ($db->db_query($migration_qry)) { + echo "
Datenmigration von lehreinheit_id zu lehrveranstaltung_id & studiensemester_kurzbz abgeschlossen."; +} else { + echo "Migration Error: ".$db->db_last_error()."
"; +} +// set NOT NULL and make lehreinheit_id NULLable +$constraint_qry = "ALTER TABLE lehre.tbl_projektarbeit + ALTER COLUMN lehrveranstaltung_id SET NOT NULL, + ALTER COLUMN studiensemester_kurzbz SET NOT NULL, + ALTER COLUMN lehreinheit_id DROP NOT NULL;"; + +if ($db->db_query($constraint_qry)) { + echo "
Constraints updated lehrveranstaltung_id SET NOT NULL, studiensemester_kurzbz SET NOT NULL, lehreinheit_id DROP NOT NULL."; +} else { + echo "Alter Constraints Error: ".$db->db_last_error()."
"; +} + +// add fkey for lehrveranstaltung_id +$fk_check_lv = "SELECT 1 FROM information_schema.table_constraints + WHERE constraint_name = 'fk_projektarbeit_lehrveranstaltung_id' AND table_schema = 'lehre'"; + +if ($result = $db->db_query($fk_check_lv)) { + if ($db->db_num_rows($result) === 0) { $qry = "ALTER TABLE lehre.tbl_projektarbeit - ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; + ADD CONSTRAINT fk_projektarbeit_lehrveranstaltung_id + FOREIGN KEY (lehrveranstaltung_id) + REFERENCES lehre.tbl_lehrveranstaltung (lehrveranstaltung_id) + ON DELETE RESTRICT;"; + if ($db->db_query($qry)) echo '
fk_projektarbeit_lehrveranstaltung_id hinzugefuegt'; + } +} - if(!$db->db_query($qry)) - echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; - else - echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; +// add fkey for studiensemester_kurzbz +$fk_check_sem = "SELECT 1 FROM information_schema.table_constraints + WHERE constraint_name = 'fk_projektarbeit_studiensemester_kurzbz' AND table_schema = 'lehre'"; + +if ($result = $db->db_query($fk_check_sem)) { + if ($db->db_num_rows($result) === 0) { + $qry = "ALTER TABLE lehre.tbl_projektarbeit + ADD CONSTRAINT fk_projektarbeit_studiensemester_kurzbz + FOREIGN KEY (studiensemester_kurzbz) + REFERENCES public.tbl_studiensemester (studiensemester_kurzbz) + ON DELETE RESTRICT;"; + if ($db->db_query($qry)) echo '
fk_projektarbeit_studiensemester_kurzbz hinzugefuegt'; } } \ No newline at end of file From fce5ee7a16e6ada02a93cec579e3c9c7addc5ea2 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Mon, 9 Mar 2026 11:24:17 +0100 Subject: [PATCH 03/30] adjust abgabetool queries lehreinheit -> lehrveranstaltung table; always redraw with scrollX/Y preserve in abgabetool --- .../models/education/Paabgabe_model.php | 15 +++---- .../models/education/Projektarbeit_model.php | 32 +++++++------- .../Cis/Abgabetool/AbgabetoolAssistenz.js | 42 +++++++++---------- .../Cis/Abgabetool/AbgabetoolMitarbeiter.js | 31 +++++++++----- 4 files changed, 60 insertions(+), 60 deletions(-) diff --git a/application/models/education/Paabgabe_model.php b/application/models/education/Paabgabe_model.php index be42b7660..63fbb3304 100644 --- a/application/models/education/Paabgabe_model.php +++ b/application/models/education/Paabgabe_model.php @@ -50,8 +50,7 @@ class Paabgabe_model extends DB_Model JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) JOIN public.tbl_benutzer bn_student ON(tbl_projektarbeit.student_uid=bn_student.uid) JOIN public.tbl_person person_student ON(bn_student.person_id=person_student.person_id) - JOIN lehre.tbl_lehreinheit ON(tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung ON(tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) JOIN public.tbl_studiengang ON(tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz) JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz) WHERE @@ -68,14 +67,13 @@ class Paabgabe_model extends DB_Model campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum, campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel, UPPER(tbl_studiengang.typ) as stgtyp, UPPER(tbl_studiengang.kurzbz) as stgkz, public.tbl_studiengang.studiengang_kz, - public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_lehreinheit.studiensemester_kurzbz, + public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_projektarbeit.studiensemester_kurzbz, public.tbl_person.anrede, public.tbl_person.titelpre, public.tbl_person.vorname, public.tbl_person.nachname, public.tbl_person.titelpost FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING (paabgabetyp_kurzbz) JOIN lehre.tbl_projektarbeit USING (projektarbeit_id) - JOIN lehre.tbl_lehreinheit using(lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id) - JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz = public.tbl_studiengang.studiengang_kz) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN public.tbl_studiengang ON(lehre.tbl_lehrveranstaltung.studiengang_kz = public.tbl_studiengang.studiengang_kz) JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid) JOIN public.tbl_person USING (person_id) @@ -93,7 +91,7 @@ class Paabgabe_model extends DB_Model campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum, campus.tbl_paabgabe.note, upload_allowed, beurteilungsnotiz, student_uid, tbl_projektarbeit.note, lehre.tbl_projektarbeit.titel, UPPER(tbl_studiengang.typ) as stgtyp, UPPER(tbl_studiengang.kurzbz) as stgkz, public.tbl_studiengang.studiengang_kz, - public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_lehreinheit.studiensemester_kurzbz, + public.tbl_studiengang.oe_kurzbz as stg_oe_kurzbz, tbl_projektarbeit.studiensemester_kurzbz, lehre.tbl_projektbetreuer.betreuerart_kurzbz, lehre.tbl_projektbetreuer.person_id, public.tbl_person.anrede, public.tbl_person.titelpre, public.tbl_person.vorname, public.tbl_person.nachname, public.tbl_person.titelpost @@ -101,8 +99,7 @@ class Paabgabe_model extends DB_Model JOIN campus.tbl_paabgabetyp USING (paabgabetyp_kurzbz) JOIN lehre.tbl_projektarbeit USING (projektarbeit_id) JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) - JOIN lehre.tbl_lehreinheit using(lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz = public.tbl_studiengang.studiengang_kz) JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid) JOIN public.tbl_person ON (public.tbl_benutzer.person_id = public.tbl_person.person_id) diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php index 3b1ea55e5..1c46ca0c6 100644 --- a/application/models/education/Projektarbeit_model.php +++ b/application/models/education/Projektarbeit_model.php @@ -25,7 +25,7 @@ class Projektarbeit_model extends DB_Model { $qry = "SELECT pa.*, tbl_projekttyp.bezeichnung, - tbl_lehreinheit.studiensemester_kurzbz, tbl_lehrveranstaltung.lehrveranstaltung_id, + tbl_projektarbeit.studiensemester_kurzbz, tbl_projektarbeit.lehrveranstaltung_id, tbl_firma.name AS firma_name, ( SELECT @@ -41,7 +41,6 @@ class Projektarbeit_model extends DB_Model FROM lehre.tbl_projektarbeit pa JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) - JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) LEFT JOIN public.tbl_firma USING (firma_id) WHERE @@ -57,7 +56,7 @@ class Projektarbeit_model extends DB_Model if (isset($studiensemester_kurzbz)) { - $qry .= ' AND tbl_lehreinheit.studiensemester_kurzbz=?'; + $qry .= ' AND tbl_projektarbeit.studiensemester_kurzbz=?'; $params[] = $studiensemester_kurzbz; } @@ -134,7 +133,7 @@ class Projektarbeit_model extends DB_Model projektarbeit_id, lehre.tbl_projekttyp.bezeichnung as projekttypbezeichnung, lehre.tbl_projekttyp.projekttyp_kurzbz as projekttypkurzbz, - lehre.tbl_lehreinheit.studiensemester_kurzbz, + lehre.tbl_projektarbeit.studiensemester_kurzbz, lehre.tbl_lehrveranstaltung.studiengang_kz, public.tbl_studiengang.kurzbzlang, lehre.tbl_projektarbeit.note as note, @@ -157,7 +156,6 @@ class Projektarbeit_model extends DB_Model LEFT JOIN public.tbl_benutzer USING(person_id) LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz) - LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) LEFT JOIN public.tbl_mitarbeiter ON(public.tbl_mitarbeiter.mitarbeiter_uid = public.tbl_benutzer.uid) LEFT JOIN public.tbl_studiengang USING(studiengang_kz) @@ -294,23 +292,22 @@ class Projektarbeit_model extends DB_Model * Get a List of Projektarbeiten of a mitarbeiter with zuordnung * used by the mitarbeiter cis4 abgabetool. */ - public function getMitarbeiterProjektarbeiten($uid, $showAll){ + public function getMitarbeiterProjektarbeiten($uid, $showAll) { $qry = "SELECT * FROM (SELECT tbl_person.vorname, tbl_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz, tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, tbl_projektarbeit.note, tbl_projektbetreuer.person_id as betreuer_person_id, tbl_projektbetreuer.betreuerart_kurzbz, tbl_betreuerart.beschreibung AS betreuerart_beschreibung, - tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz, public.tbl_student.student_uid + tbl_benutzer.uid, tbl_student.matrikelnr, tbl_projektarbeit.studiensemester_kurzbz, public.tbl_student.student_uid FROM lehre.tbl_projektarbeit - LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id) - LEFT JOIN lehre.tbl_betreuerart using(betreuerart_kurzbz) - LEFT JOIN public.tbl_benutzer on(uid=student_uid) - LEFT JOIN public.tbl_student on(public.tbl_benutzer.uid=public.tbl_student.student_uid) - LEFT JOIN public.tbl_person on(tbl_benutzer.person_id=tbl_person.person_id) - LEFT JOIN lehre.tbl_lehreinheit using(lehreinheit_id) - LEFT JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id) - LEFT JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz=public.tbl_studiengang.studiengang_kz) + LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id) + LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz) + LEFT JOIN public.tbl_benutzer ON(uid=student_uid) + LEFT JOIN public.tbl_student ON(public.tbl_benutzer.uid=public.tbl_student.student_uid) + LEFT JOIN public.tbl_person ON(tbl_benutzer.person_id=tbl_person.person_id) + LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + LEFT JOIN public.tbl_studiengang ON(lehre.tbl_lehrveranstaltung.studiengang_kz=public.tbl_studiengang.studiengang_kz) LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') AND tbl_projektbetreuer.person_id IN (SELECT person_id FROM public.tbl_benutzer @@ -352,7 +349,7 @@ class Projektarbeit_model extends DB_Model student_benutzer.uid as student_uid, student_person.vorname as student_vorname, student_person.nachname as student_nachname, - tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz, + tbl_student.matrikelnr, tbl_projektarbeit.studiensemester_kurzbz, betreuer_benutzer.uid as betreuer_benutzer_uid, betreuer_person.titelpre as betreuer_titelpre, betreuer_person.vorname as betreuer_vorname, @@ -483,8 +480,7 @@ class Projektarbeit_model extends DB_Model LEFT JOIN public.tbl_benutzer student_benutzer ON (student_benutzer.uid = lehre.tbl_projektarbeit.student_uid) LEFT JOIN public.tbl_person student_person ON (student_benutzer.person_id = student_person.person_id) LEFT JOIN public.tbl_student on(student_benutzer.uid = public.tbl_student.student_uid) - LEFT JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) - LEFT JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) + LEFT JOIN lehre.tbl_lehrveranstaltung ON (lehrveranstaltung_id) LEFT JOIN public.tbl_studiengang ON (public.tbl_student.studiengang_kz = public.tbl_studiengang.studiengang_kz) LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) LEFT JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) diff --git a/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js b/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js index d5caf97a6..66e932d28 100644 --- a/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js +++ b/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js @@ -247,9 +247,23 @@ export const AbgabetoolAssistenz = { ]}; }, methods: { + redrawTableScrollSave() { + const table = this.$refs.abgabeTable.tabulator; + const scrollX = table.rowManager.scrollLeft; + const scrollY = table.rowManager.scrollTop; + this.$refs.abgabeTable.tabulator.redraw(true) + + Vue.nextTick(()=> { + const tableholder = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder') + if(tableholder) { + tableholder.scrollLeft = scrollX; + tableholder.scrollTop = scrollY; + } + }) + }, handlePaUpdated(projektarbeit) { this.checkAbgabetermineProjektarbeit(projektarbeit) - this.$refs.abgabeTable.tabulator.redraw(true) + this.redrawTableScrollSave() }, getQGateStatusList() { return [ @@ -736,24 +750,9 @@ export const AbgabetoolAssistenz = { pa.abgabetermine.sort((a, b) => new Date(a.datum) - new Date(b.datum)) }) - // reset selection to empty - // this.$refs.abgabeTable.tabulator.deselectRow() - const table = this.$refs.abgabeTable.tabulator; - const scrollX = table.rowManager.scrollLeft; - const scrollY = table.rowManager.scrollTop; - - const mappedData = this.mapProjekteToTableData(this.projektarbeiten) + this.projektarbeiten = this.mapProjekteToTableData(this.projektarbeiten) - table.setData(mappedData) - table.redraw(true) - - Vue.nextTick(()=> { - const table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder') - if(table) { - table.scrollLeft = scrollX; - table.scrollTop = scrollY; - } - }) + this.redrawTableScrollSave() }).finally(()=>{ this.saving = false @@ -977,14 +976,13 @@ export const AbgabetoolAssistenz = { return projekt.zweitbetreuer_full_name ?? '' }, async setupData(data){ - this.projektarbeiten = data[0] this.domain = data[1] - - this.tableData = this.mapProjekteToTableData(this.projektarbeiten) + + this.projektarbeiten = this.mapProjekteToTableData(data[0]) await this.tableBuiltPromise - this.$refs.abgabeTable.tabulator.setData(this.tableData); + this.$refs.abgabeTable.tabulator.setData(this.projektarbeiten); }, loadProjektarbeiten(all = false, callback) { this.loading = true diff --git a/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js b/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js index ee1d18942..e84ff90e3 100644 --- a/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js +++ b/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js @@ -43,7 +43,6 @@ export const AbgabetoolMitarbeiter = { }, data() { return { - tableData: null, abgabetypenBetreuer: null, detailIsFullscreen: false, phrasenPromise: null, @@ -205,9 +204,23 @@ export const AbgabetoolMitarbeiter = { ]}; }, methods: { + redrawTableScrollSave() { + const table = this.$refs.abgabeTable.tabulator; + const scrollX = table.rowManager.scrollLeft; + const scrollY = table.rowManager.scrollTop; + this.$refs.abgabeTable.tabulator.redraw(true) + + Vue.nextTick(()=> { + const tableholder = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder') + if(tableholder) { + tableholder.scrollLeft = scrollX; + tableholder.scrollTop = scrollY; + } + }) + }, handlePaUpdated(projektarbeit) { this.checkAbgabetermineProjektarbeit(projektarbeit) - this.$refs.abgabeTable.tabulator.redraw(true) + this.redrawTableScrollSave() }, sammelMailStudent(param) { @@ -601,8 +614,7 @@ export const AbgabetoolMitarbeiter = { this.showAll = showall this.loading = true this.loadProjektarbeiten(showall, () => { - this.$refs.abgabeTable?.tabulator.redraw(true) - this.$refs.abgabeTable?.tabulator.setSort([]); + this.redrawTableScrollSave() this.loading = false }) }, @@ -627,8 +639,7 @@ export const AbgabetoolMitarbeiter = { const oldScrollTop = this.$refs.abgabeTable?.tabulator.rowManager.scrollTop this.loading = true this.loadProjektarbeiten(this.showAll, () => { - this.$refs.abgabeTable?.tabulator.redraw(true) - this.$refs.abgabeTable?.tabulator.setSort([]); + this.redrawTableScrollSave() this.loading = false Vue.nextTick(()=> { @@ -762,11 +773,9 @@ export const AbgabetoolMitarbeiter = { }, setupData(data){ - - this.projektarbeiten = data[0] this.domain = data[1] - - this.tableData = data[0]?.retval?.map(projekt => { + + this.projektarbeiten = data[0]?.retval?.map(projekt => { this.checkAbgabetermineProjektarbeit(projekt) projekt.selectable = projekt.betreuerart_kurzbz !== 'Zweitbegutachter' @@ -787,7 +796,7 @@ export const AbgabetoolMitarbeiter = { }) this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns) - this.$refs.abgabeTable.tabulator.setData(this.tableData); + this.$refs.abgabeTable.tabulator.setData(this.projektarbeiten); }, loadProjektarbeiten(all = false, callback) { this.$api.call(ApiAbgabe.getMitarbeiterProjektarbeiten(all)) From 2fde630971b56a0072b7c0eae79dcba67140f08a Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Mon, 9 Mar 2026 15:25:44 +0100 Subject: [PATCH 04/30] adjust abgabetool queries Studentenverwaltung Projektarbeit Tab: lehreinheit required -> lehreinheit optional, lehrveranstaltung & studiensemester_kurbz required; changed occurences of the typo "Studiensemster" rigorously; --- .../api/frontend/v1/stv/Projektarbeit.php | 23 ++++++++++++++----- .../controllers/jobs/ReihungstestJob.php | 2 +- .../models/crm/Prestudentstatus_model.php | 2 +- .../models/education/Projektarbeit_model.php | 2 +- .../organisation/Studiensemester_model.php | 2 +- include/bisarchiv.class.php | 4 ++-- include/lehrveranstaltung.class.php | 2 +- .../Details/Projektarbeit/Details.js | 6 ++--- .../Details/Projektarbeit/Projektarbeit.js | 2 +- system/checkStudenten.php | 4 ++-- system/prestudentstatus_studienplan_id.php | 2 +- vilesci/bis/archiv.php | 12 +++++----- vilesci/bis/personalmeldung.php | 2 +- 13 files changed, 38 insertions(+), 27 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Projektarbeit.php b/application/controllers/api/frontend/v1/stv/Projektarbeit.php index 8740ef3d6..d31354856 100644 --- a/application/controllers/api/frontend/v1/stv/Projektarbeit.php +++ b/application/controllers/api/frontend/v1/stv/Projektarbeit.php @@ -91,11 +91,13 @@ class Projektarbeit extends FHCAPI_Controller if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) return $this->terminateWithError('Projektarbeit Id missing', self::ERROR_TYPE_GENERAL); $this->ProjektarbeitModel->addSelect( - 'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id, + 'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, + lehre.tbl_projektarbeit.lehrveranstaltung_id, lehre.tbl_projektarbeit.studiensemester_kurzbz, lehre.tbl_projektarbeit.lehreinheit_id, firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name' ); - $this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id'); + $this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); + $this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id', 'LEFT'); $this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT'); $result = $this->ProjektarbeitModel->loadWhere( array('projektarbeit_id' => $projektarbeit_id) @@ -229,7 +231,7 @@ class Projektarbeit extends FHCAPI_Controller } /** - * Get Lehrveranstaltungen by params, incling lehreinheiten for a specific Studiensemester.. + * Get Lehrveranstaltungen by params, including lehreinheiten for a specific Studiensemester.. */ public function getLehrveranstaltungen() { @@ -239,7 +241,7 @@ class Projektarbeit extends FHCAPI_Controller $additional_lehrveranstaltung_id = $this->input->get('additional_lehrveranstaltung_id'); if (!isset($student_uid)) $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL); - if (!isset($studiensemester_kurzbz)) $this->terminateWithError('Studiensemster missing', self::ERROR_TYPE_GENERAL); + if (!isset($studiensemester_kurzbz)) $this->terminateWithError('Studiensemester missing', self::ERROR_TYPE_GENERAL); // get Lvs $lvsResult = $this->LehrveranstaltungModel->getLvsForProjektarbeit($student_uid, $studiengang_kz, $additional_lehrveranstaltung_id); @@ -316,11 +318,18 @@ class Projektarbeit extends FHCAPI_Controller 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Projekttyp']) ]); - $this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'required|is_natural', [ - 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehreinheit']), + $this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'is_natural', [ 'is_natural' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Lehreinheit']) ]); + $this->form_validation->set_rules('lehrveranstaltung_id', 'Lehrveranstaltung', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehrveranstaltung']) + ]); + + $this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester']) + ]); + $this->form_validation->set_rules('beginn', 'Beginn', 'is_valid_date', [ 'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Beginn']) ]); @@ -350,6 +359,8 @@ class Projektarbeit extends FHCAPI_Controller 'projekttyp_kurzbz' => $formData['projekttyp_kurzbz'], 'firma_id' => $formData['firma_id'] ?? null, 'lehreinheit_id' => $formData['lehreinheit_id'], + 'lehrveranstaltung_id' => $formData['lehrveranstaltung_id'], + 'studiensemester_kurzbz' => $formData['studiensemester_kurzbz'], 'beginn' => isset($formData['beginn']) && !isEmptyString($formData['beginn']) ? $formData['beginn'] : null, 'ende' => isset($formData['ende']) && !isEmptyString($formData['ende']) ? $formData['ende'] : null, 'note' => $formData['note'] ?? null, diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 6dd214fbb..83ab9b526 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -803,7 +803,7 @@ class ReihungstestJob extends JOB_Controller { if (!isset($studiensemester) || isEmptyString($studiensemester)) { - $this->logError("Studiensemster not passed as parameter"); + $this->logError("Studiensemester not passed as parameter"); return; } diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index c0ed8595e..618d4be51 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -177,7 +177,7 @@ class Prestudentstatus_model extends DB_Model * @param prestudent_id ID of the Prestudent. * @param $status_kurzbz kurzbz of the status. * @param $ausbildungssemester ausbildungssemester of the status. - * @param $studiensemester_kurzbz studiensemster of the status. + * @param $studiensemester_kurzbz studiensemester of the status. * * @return result object with all the status entries */ diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php index 1c46ca0c6..726bb70a7 100644 --- a/application/models/education/Projektarbeit_model.php +++ b/application/models/education/Projektarbeit_model.php @@ -25,7 +25,7 @@ class Projektarbeit_model extends DB_Model { $qry = "SELECT pa.*, tbl_projekttyp.bezeichnung, - tbl_projektarbeit.studiensemester_kurzbz, tbl_projektarbeit.lehrveranstaltung_id, + pa.studiensemester_kurzbz, pa.lehrveranstaltung_id, tbl_firma.name AS firma_name, ( SELECT diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 5fa6ffb14..48c0aff78 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -177,7 +177,7 @@ class Studiensemester_model extends DB_Model */ public function getByDate($date) { - // gets the studiensemster of a date or the next closest previous studiensemester if a date is not within a studiensemester + // gets the studiensemester of a date or the next closest previous studiensemester if a date is not within a studiensemester $query = " SELECT studiensemester_kurzbz, start, ende FROM public.tbl_studiensemester diff --git a/include/bisarchiv.class.php b/include/bisarchiv.class.php index edec01ae3..7c51ae46c 100644 --- a/include/bisarchiv.class.php +++ b/include/bisarchiv.class.php @@ -48,7 +48,7 @@ class bisarchiv extends basis_db */ protected function validate() { - if($this->studiensemster_kurzbz == null || mb_strlen($this->studiensemster_kurzbz) > 6) + if($this->studiensemester_kurzbz == null || mb_strlen($this->studiensemester_kurzbz) > 6) { $this->errormsg = "Studiensemester ist ungueltig"; return false; @@ -107,7 +107,7 @@ class bisarchiv extends basis_db return false; $qry = "INSERT INTO bis.tbl_archiv (studiensemester_kurzbz, meldung, html, studiengang_kz, insertamum, insertvon, typ) VALUES (" - . $this->db_add_param($this->studiensemster_kurzbz) . "," + . $this->db_add_param($this->studiensemester_kurzbz) . "," . $this->db_add_param($this->meldung) . "," . $this->db_add_param($this->html) . "," . $this->db_add_param($this->studiengang_kz) . "," diff --git a/include/lehrveranstaltung.class.php b/include/lehrveranstaltung.class.php index cc89556c7..234ded019 100644 --- a/include/lehrveranstaltung.class.php +++ b/include/lehrveranstaltung.class.php @@ -2088,7 +2088,7 @@ class lehrveranstaltung extends basis_db /** * lädt die Lehrveranstaltungen zum zugehörigen Mitarbeiter * @param String $uid User ID des Mitarbeiters - * @param String $studiensemster_kurzbz Kurzbezeichnung des Studiensemesters + * @param String $studiensemester_kurzbz Kurzbezeichnung des Studiensemesters */ public function getLVByMitarbeiter($uid, $studiensemester_kurzbz = null) { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js index 34dd99c8f..bee7fef9e 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js @@ -5,6 +5,7 @@ import PvAutoComplete from "../../../../../../../index.ci.php/public/js/componen import ApiStvProjektarbeit from '../../../../../api/factory/stv/projektarbeit.js'; export default { + name: 'ProjektarbeitDetails', components: { FormForm, FormInput, @@ -219,7 +220,8 @@ export default { if (preparedFormData.projektarbeit_id == null) delete(preparedFormData.projektarbeit_id); delete(preparedFormData.firma); delete(preparedFormData.firma_name); - delete(preparedFormData.lehrveranstaltung_id); + + preparedFormData.studiensemester_kurzbz = this.studiensemester return preparedFormData; } @@ -312,7 +314,6 @@ export default { name="lehrveranstaltung_id" @change="lvChanged($event)" > -