From a0dce925d43f687db814a611561edc5ae562a2b8 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 14 Jan 2025 10:56:28 +0100 Subject: [PATCH 01/84] =?UTF-8?q?-=20rt=20holt=20sich=20zus=C3=A4tzlich=20?= =?UTF-8?q?alle=20gebiete=20aus=20den=20semestern=20davor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/testtool/login.php | 1 + cis/testtool/menu.php | 48 ++++++--- include/gebiet_pruefling.class.php | 97 +++++++++++++++++++ system/dbupdate_3.4.php | 2 + ...eihungstest_ablauf_fuer_quereinsteiger.php | 39 ++++++++ 5 files changed, 172 insertions(+), 15 deletions(-) create mode 100644 include/gebiet_pruefling.class.php create mode 100644 system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php diff --git a/cis/testtool/login.php b/cis/testtool/login.php index d1944fe7a..2bd4601db 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -604,6 +604,7 @@ elseif (isset($prestudent_id)) $ps_obj->lastStatus = $ps_tmp->status_kurzbz; // letzten Status dem result array hinzufügen $ps_obj->status_mehrsprachig = $ps_tmp->status_mehrsprachig; + $ps_obj->ausbildungssemester = $ps_tmp->ausbildungssemester; } // Falls Status 'Abgewiesene' vorhanden, nach hinten reihen diff --git a/cis/testtool/menu.php b/cis/testtool/menu.php index 7c8b12b9d..42ab8f8d3 100644 --- a/cis/testtool/menu.php +++ b/cis/testtool/menu.php @@ -29,6 +29,7 @@ require_once('../../include/sprache.class.php'); require_once '../../include/phrasen.class.php'; require_once '../../include/studiengang.class.php'; require_once('../../include/gebiet.class.php'); +require_once('../../include/gebiet_pruefling.class.php'); if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); @@ -193,8 +194,8 @@ if (isset($_SESSION['pruefling_id'])) ) - SELECT DISTINCT ON - (gebiet_id, semester, reihung) + SELECT * FROM (SELECT DISTINCT ON + (gebiet_id) semester, gebiet_id, STRING_AGG(studiengang_kz::TEXT, ', ' ORDER BY studiengang_kz) AS studiengang_kz_list, @@ -221,13 +222,7 @@ if (isset($_SESSION['pruefling_id'])) JOIN testtool.tbl_gebiet USING (gebiet_id) WHERE - ( - (prestudent_data.semester= 1 AND tbl_ablauf.semester = 1) - OR - (prestudent_data.semester= 2 AND tbl_ablauf.semester = 2) - OR - (prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3)) - ) + tbl_ablauf.semester <= prestudent_data.semester AND ( prestudent_data.studienplan_id = tbl_ablauf.studienplan_id OR @@ -254,9 +249,7 @@ if (isset($_SESSION['pruefling_id'])) JOIN testtool.tbl_gebiet USING (gebiet_id) WHERE - (prestudent_data.semester= 1 AND tbl_ablauf.semester = 1) - OR - (prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3)) + tbl_ablauf.semester <= prestudent_data.semester ) ) temp ) temp2 @@ -265,7 +258,7 @@ if (isset($_SESSION['pruefling_id'])) semester, gebiet_id, bezeichnung, - ". $bezeichnung_mehrsprachig_sel ." + ". $bezeichnung_mehrsprachig_sel ." ) temp3 ORDER BY semester, @@ -278,6 +271,8 @@ if (isset($_SESSION['pruefling_id'])) $lastsemester = ''; $quereinsteiger_stg = ''; $_SESSION['alleGebiete']= []; + $gebiet_pruefling = new gebiet_pruefling(); + $quereinsteiger_menu = false; while($row = $db->db_fetch_object($result)) { //Jedes Semester in einer eigenen Tabelle anzeigen @@ -289,8 +284,25 @@ if (isset($_SESSION['pruefling_id'])) } $lastsemester = $row->semester; - echo ''; - echo ''; + if ($row->semester == '1') + { + // Basisgebiete anzeigen + echo '
'. ($row->semester == '1' ? $p->t('testtool/basisgebiete') : $p->t('testtool/quereinstiegsgebiete')).'
'; + echo ''; + } + else + { + if (!$quereinsteiger_menu) + { + echo '
' . $p->t('testtool/basisgebiete') . '
'; + echo ''; + $quereinsteiger_menu = true; + } + else + { + echo '
' . $p->t('testtool/quereinstiegsgebiete') . '
'; + } + } } // Bei Quereinstiegsgebieten nach STG clustern und die STG anzeigen @@ -386,6 +398,12 @@ if (isset($_SESSION['pruefling_id'])) '; + if (!$gebiet_pruefling->checkIfExists($_SESSION['pruefling_id'], $row->gebiet_id)) + { + $gebiet_pruefling->pruefling_id = $_SESSION['pruefling_id']; + $gebiet_pruefling->gebiet_id = $row->gebiet_id; + $gebiet_pruefling->saveGebietForPruefling(); + } $_SESSION['alleGebiete'][] = $row->gebiet_id; } else diff --git a/include/gebiet_pruefling.class.php b/include/gebiet_pruefling.class.php new file mode 100644 index 000000000..9578bb546 --- /dev/null +++ b/include/gebiet_pruefling.class.php @@ -0,0 +1,97 @@ +db_add_param($pruefling_id, FHC_INTEGER); + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->prueflinggebiet_id = $row->prueflinggebiet_id; + $this->pruefling_id = $row->pruefling_id; + $this->gebiet_id = $row->gebiet_id; + return true; + } + else + { + $this->errormsg = "Pruefling nicht gefunden"; + return false; + } + } + else + { + $this->errormsg = "Fehler beim Laden der Gebiete für den Pruefling"; + return false; + } + } + + public function checkIfExists($pruefling_id, $gebiet_id) + { + $qry = "SELECT 1 + FROM testtool.tbl_pruefling_gebiet + WHERE pruefling_id =".$this->db_add_param($pruefling_id, FHC_INTEGER) ." AND gebiet_id =".$this->db_add_param($gebiet_id, FHC_INTEGER); + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + return true; + else + return false; + } + } + + public function saveGebietForPruefling() + { + $qry = "INSERT INTO testtool.tbl_pruefling_gebiet + (pruefling_id, gebiet_id) + VALUES(". + $this->db_add_param($this->pruefling_id, FHC_INTEGER).','. + $this->db_add_param($this->gebiet_id, FHC_INTEGER).');'; + + if ($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern der Daten'; + return true; + } + } + +} +?> diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 0af314c46..75bb58898 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -67,6 +67,7 @@ require_once('dbupdate_3.4/25999_C4_permission.php'); require_once('dbupdate_3.4/33683_digitale_anwesenheitsliste_und_entschuldigungsmanagement_fuer_studierende_prototyp.php'); require_once('dbupdate_3.4/40717_lv_faktor.php'); require_once('dbupdate_3.4/48526_pep_tagging.php'); +require_once('dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen @@ -377,6 +378,7 @@ $tabellen=array( "testtool.tbl_pruefling_frage" => array("prueflingfrage_id","pruefling_id","frage_id","nummer","begintime","endtime"), "testtool.tbl_frage_sprache" => array("frage_id","sprache","text","bild","audio","insertamum","insertvon","updateamum","updatevon"), "testtool.tbl_vorschlag_sprache" => array("vorschlag_id","sprache","text","bild","audio","insertamum","insertvon","updateamum","updatevon"), + "testtool.tbl_pruefling_gebiet" => array("prueflinggebiet_id","pruefling_id","gebiet_id","insertamum"), "system.tbl_app" => array("app"), "system.tbl_appdaten" => array("appdaten_id","uid","app","appversion","version","bezeichnung","daten","freigabe","insertamum","insertvon","updateamum","updatevon"), "system.tbl_cronjob" => array("cronjob_id","server_kurzbz","titel","beschreibung","file","last_execute","aktiv","running","jahr","monat","tag","wochentag","stunde","minute","standalone","reihenfolge","updateamum", "updatevon","insertamum","insertvon","variablen"), diff --git a/system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php b/system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php new file mode 100644 index 000000000..8898afdf3 --- /dev/null +++ b/system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php @@ -0,0 +1,39 @@ +db_query('SELECT 1 FROM testtool.tbl_pruefling_gebiet LIMIT 1')) +{ + $qry = 'CREATE TABLE testtool.tbl_pruefling_gebiet + ( + prueflinggebiet_id integer NOT NULL, + pruefling_id integer NOT NULL, + gebiet_id integer NOT NULL, + insertamum timestamp DEFAULT now() + ); + + ALTER TABLE testtool.tbl_pruefling_gebiet OWNER TO fhcomplete; + ALTER TABLE testtool.tbl_pruefling_gebiet ADD CONSTRAINT pk_tbl_pruefling_gebiet PRIMARY KEY (prueflinggebiet_id); + + CREATE SEQUENCE testtool.tbl_pruefling_gebiet_prueflinggebiet_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + ALTER TABLE testtool.tbl_pruefling_gebiet_prueflinggebiet_id_seq OWNER TO fhcomplete; + ALTER TABLE testtool.tbl_pruefling_gebiet ALTER COLUMN prueflinggebiet_id SET DEFAULT nextval(\'testtool.tbl_pruefling_gebiet_prueflinggebiet_id_seq\'); + + GRANT SELECT, UPDATE, INSERT, DELETE ON testtool.tbl_pruefling_gebiet TO web; + GRANT SELECT, UPDATE, INSERT, DELETE ON testtool.tbl_pruefling_gebiet TO vilesci; + GRANT SELECT, UPDATE ON testtool.tbl_pruefling_gebiet_prueflinggebiet_id_seq TO vilesci; + GRANT SELECT, UPDATE ON testtool.tbl_pruefling_gebiet_prueflinggebiet_id_seq TO web; + '; + + if (!$db->db_query($qry)) + echo 'public.tbl_pruefling_gebiet: '.$db->db_last_error().'
'; + else + echo '
public.tbl_pruefling_gebiet table created'; +} + From d3210f0d3d19eff642888f1803ee08d140266f19 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 18 Feb 2025 13:51:20 +0100 Subject: [PATCH 02/84] - foreign keys hinzugefuegt - beim zuruecksetzen der gebiete, wird auch tbl_pruefling_gebiet zurueckgesetzt --- ...eihungstest_ablauf_fuer_quereinsteiger.php | 2 + vilesci/stammdaten/auswertung_fhtw.php | 57 ++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php b/system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php index 8898afdf3..41532cfe0 100644 --- a/system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php +++ b/system/dbupdate_3.4/54225_reihungstest_ablauf_fuer_quereinsteiger.php @@ -14,6 +14,8 @@ if (!$result = @$db->db_query('SELECT 1 FROM testtool.tbl_pruefling_gebiet LIMIT ALTER TABLE testtool.tbl_pruefling_gebiet OWNER TO fhcomplete; ALTER TABLE testtool.tbl_pruefling_gebiet ADD CONSTRAINT pk_tbl_pruefling_gebiet PRIMARY KEY (prueflinggebiet_id); + ALTER TABLE testtool.tbl_pruefling_gebiet ADD CONSTRAINT fk_tbl_pruefling_gebiet_pruefling_id FOREIGN KEY (pruefling_id) REFERENCES testtool.tbl_pruefling(pruefling_id) ON UPDATE CASCADE ON DELETE RESTRICT; + ALTER TABLE testtool.tbl_pruefling_gebiet ADD CONSTRAINT fk_tbl_pruefling_gebiet_gebiet_id FOREIGN KEY (gebiet_id) REFERENCES testtool.tbl_gebiet(gebiet_id) ON UPDATE CASCADE ON DELETE RESTRICT; CREATE SEQUENCE testtool.tbl_pruefling_gebiet_prueflinggebiet_id_seq START WITH 1 diff --git a/vilesci/stammdaten/auswertung_fhtw.php b/vilesci/stammdaten/auswertung_fhtw.php index 8d928dacf..d4ece9c72 100644 --- a/vilesci/stammdaten/auswertung_fhtw.php +++ b/vilesci/stammdaten/auswertung_fhtw.php @@ -251,6 +251,31 @@ if ($deleteSingleResult) exit(); } + $qry = "SELECT * FROM testtool.tbl_pruefling_gebiet + WHERE pruefling_id=" . $db->db_add_param($pruefling->pruefling_id) . " AND gebiet_id=" . $db->db_add_param($_POST['gebiet_id']) . ""; + + if ($db->db_query($qry)) + { + while ($row = $db->db_fetch_object()) + { + $undo .= " INSERT INTO testtool.tbl_pruefling_gebiet(prueflinggebiet_id,pruefling_id,gebiet_id, insertamum) VALUES (" . + $db->db_add_param($row->prueflinggebiet_id, FHC_INTEGER) . ', ' . + $db->db_add_param($row->pruefling_id, FHC_INTEGER) . ', ' . + $db->db_add_param($row->gebiet_id, FHC_INTEGER) . ', ' . + $db->db_add_param($row->insertamum) . ');'; + } + } + else + { + $db->db_query('ROLLBACK'); + echo json_encode(array( + 'status' => 'fehler', + 'msg' => 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_pruefling_gebiet' + )); + exit(); + } + + //Antworten loeschen $qry = "DELETE FROM testtool.tbl_pruefling_frage where pruefling_id=" . $db->db_add_param($pruefling->pruefling_id, FHC_INTEGER) . " AND frage_id IN (SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id=" . $db->db_add_param($_POST['gebiet_id']) . "); @@ -258,7 +283,9 @@ if ($deleteSingleResult) DELETE FROM testtool.tbl_antwort WHERE pruefling_id=" . $db->db_add_param($pruefling->pruefling_id) . " AND vorschlag_id IN (SELECT vorschlag_id FROM testtool.tbl_vorschlag WHERE frage_id IN - (SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id=" . $db->db_add_param($_POST['gebiet_id']) . "));"; + (SELECT frage_id FROM testtool.tbl_frage WHERE gebiet_id=" . $db->db_add_param($_POST['gebiet_id']) . ")); + + DELETE FROM testtool.tbl_pruefling_gebiet where pruefling_id=" . $db->db_add_param($pruefling->pruefling_id, FHC_INTEGER) . " AND gebiet_id=" . $db->db_add_param($_POST['gebiet_id']) . ";"; if ($result = $db->db_query($qry)) { @@ -388,9 +415,35 @@ if ($deleteAllResults) exit(); } + $qry = "SELECT * FROM testtool.tbl_pruefling_gebiet WHERE pruefling_id=" . $db->db_add_param($pruefling->pruefling_id, FHC_INTEGER) . "; + "; + + if ($db->db_query($qry)) + { + while ($row = $db->db_fetch_object()) + { + $undo .= " INSERT INTO testtool.tbl_pruefling_gebiet(prueflinggebiet_id,pruefling_id,gebiet_id,insertamum) VALUES (" . + $db->db_add_param($row->prueflinggebiet_id, FHC_INTEGER) . ', ' . + $db->db_add_param($row->pruefling_id, FHC_INTEGER) . ', ' . + $db->db_add_param($row->gebiet_id, FHC_INTEGER) . ', ' . + $db->db_add_param($row->insertamum) . ');'; + } + } + else + { + $db->db_query('ROLLBACK'); + echo json_encode(array( + 'status' => 'fehler', + 'msg' => 'Fehler beim Erstellen des UNDO Befehls fuer testtool.tbl_pruefling_gebiet' + )); + exit(); + } + + //Antworten loeschen $qry = " DELETE FROM testtool.tbl_pruefling_frage where pruefling_id=".$db->db_add_param($pruefling->pruefling_id)."; - DELETE FROM testtool.tbl_antwort WHERE pruefling_id=".$db->db_add_param($pruefling->pruefling_id).";"; + DELETE FROM testtool.tbl_antwort where pruefling_id=".$db->db_add_param($pruefling->pruefling_id)."; + DELETE FROM testtool.tbl_pruefling_gebiet WHERE pruefling_id=".$db->db_add_param($pruefling->pruefling_id).";"; if ($result = $db->db_query($qry)) { From 6495f741b928498fa3e5580cef01a39f73ed0b06 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 9 Jul 2025 14:02:41 +0200 Subject: [PATCH 03/84] added missing phrase --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 0203b3c2f..bc067f3f0 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -19663,6 +19663,26 @@ array( ) ) ), + array( + 'app' => 'international', + 'category' => 'international', + 'phrase' => 'personenMassnahmen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'alle Maßnahmen der Personen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => ' all measures of the people', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'international', 'category' => 'international', From 9183c4f04c37aecc9141aaddfaea077d4795ccfc Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 1 Oct 2025 12:03:18 +0200 Subject: [PATCH 04/84] massnahme einmalig flag hinzugefuegt --- system/phrasesupdate.php | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index ceb265b14..5078fb12d 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -19963,6 +19963,46 @@ array( ) ) ), + array( + 'app' => 'international', + 'category' => 'international', + 'phrase' => 'einmalig', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Nur einmal planbar', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'One-time only', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'international', + 'category' => 'international', + 'phrase' => 'erroreinmalig', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Diese Maßnahme kann nur einmal geplant werden', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This measure can only be planned once.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'gruppenmanagement', From efc67d14a5bc1432ad8af522dff062e3c164c08c Mon Sep 17 00:00:00 2001 From: ma0048 Date: Thu, 6 Nov 2025 12:38:13 +0100 Subject: [PATCH 05/84] qulikurs spalte hinzugekommen bei infocenter freigegebendata --- application/config/infocenter.php | 1 + .../infocenter/infocenterFreigegebenData.php | 33 +++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/application/config/infocenter.php b/application/config/infocenter.php index 555c30996..15889ef78 100644 --- a/application/config/infocenter.php +++ b/application/config/infocenter.php @@ -3,3 +3,4 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); $config['infocenter_studiengang_kz'] = '10021, 10027, 10002'; +$config['infocenter_qualifikationskurs_kz'] = '10002'; diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 38285b6ae..55d8f403e 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -8,6 +8,7 @@ $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Attempt to register with existing mailadress\', \'Access code sent\', \'Personal data saved\''; $REJECTED_STATUS = '\'Abgewiesener\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); + $QUALIFIKATIONSKURS = $this->config->item('infocenter_qualifikationskurs_kz'); $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $ORG_NAME = '\'InfoCenter\''; @@ -277,7 +278,26 @@ $query = ' WHERE konto.person_id = p.person_id AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .' AND konto.buchungstyp_kurzbz = '. $KAUTION_DRITT_STAAT .' - ) AS "Kaution" + ) AS "Kaution", + ( + SELECT 1 + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + JOIN lehre.tbl_studienordnung so USING(studienordnung_id) + WHERE pss.status_kurzbz = '.$INTERESSENT_STATUS.' + AND pss.bewerbung_abgeschicktamum IS NOT NULL + AND ps.person_id = p.person_id + AND sg.studiengang_kz in('.$QUALIFIKATIONSKURS.') + AND NOT EXISTS ( + SELECT 1 + FROM tbl_prestudentstatus spss + WHERE spss.prestudent_id = ps.prestudent_id + AND spss.status_kurzbz = '.$REJECTED_STATUS.' + ) + LIMIT 1 + ) AS "Qualikurs" FROM public.tbl_person p LEFT JOIN ( SELECT tpl.person_id, @@ -351,7 +371,8 @@ $query = ' 'ZGV Nation MA', 'InfoCenter Mitarbeiter', 'Identitätsnachweis', - ucfirst($this->p->t('infocenter', 'kaution')) + ucfirst($this->p->t('infocenter', 'kaution')), + 'Qualikurs' ), 'formatRow' => function($datasetRaw) { @@ -480,6 +501,14 @@ $query = ' $datasetRaw->{'Kaution'} = 'Offen'; } + if ($datasetRaw->{'Qualikurs'} === null) + { + $datasetRaw->{'Qualikurs'} = 'Nein'; + } + else + { + $datasetRaw->{'Qualikurs'} = 'Ja'; + } return $datasetRaw; }, 'markRow' => function($datasetRaw) { From c664c14afc07a4f98e0c43fa4b27894c5c18927a Mon Sep 17 00:00:00 2001 From: ma0048 Date: Thu, 18 Dec 2025 11:10:08 +0100 Subject: [PATCH 06/84] phrase hinzugefuegt --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 5078fb12d..98dff6edb 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -19103,6 +19103,26 @@ array( ) ) ), + array( + 'app' => 'international', + 'category' => 'international', + 'phrase' => 'massnahmeneinmalig', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Diese Maßnahme ist nur einmalig planbar.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This measure may only be planned once.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'international', 'category' => 'international', From d1af44bcdc8bf7df2afbe87c6b3098b2ea439184 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Thu, 5 Mar 2026 17:33:18 +0100 Subject: [PATCH 07/84] 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 08/84] 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 09/84] 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 10/84] 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)" > -