diff --git a/system/konsistenzpruefung.php b/system/konsistenzpruefung.php new file mode 100644 index 000000000..6db223163 --- /dev/null +++ b/system/konsistenzpruefung.php @@ -0,0 +1,729 @@ + + */ +/* + * Prueft die Daten in der Datenbank auf konsistenz und gibt Hinweise + * bei fehlerhafter Datenmigration oder Datenmanipulation direkt auf Datenbankebene + */ +require_once('../config/vilesci.config.inc.php'); +require_once('../include/functions.inc.php'); +require_once('../include/benutzerberechtigung.class.php'); + +$uid = get_uid(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); + +if(!$rechte->isBerechtigt('admin')) +{ + die('Sie haben keine Berechtigung fuer diese Seite (admin)'); +} + +$db = new basis_db(); + +$error_kritisch=0; +$error_warning=0; + +echo ' + + + Konsistenzpruefung + + + + + + +'; + +/************************************************************************************ + * Pruefung auf falschen Personenkreislauf + * tbl_person->tbl_benutzer->tbl_student->tbl_prestudent->tbl_person + */ + +$qry = "SELECT + vorname, nachname, tbl_benutzer.uid, tbl_prestudent.prestudent_id, + tbl_person.person_id as pers_person_id, tbl_prestudent.person_id pre_person_id + FROM + public.tbl_person + JOIN public.tbl_benutzer USING(person_id) + JOIN public.tbl_student ON(uid=student_uid) + JOIN public.tbl_prestudent USING(prestudent_id) + WHERE + tbl_person.person_id<>tbl_prestudent.person_id + ORDER BY nachname, vorname, uid"; + +if($result = $db->db_query($qry)) +{ + echo '

Inkonsistenter Personenkreislauf tbl_person->tbl_benutzer->tbl_student->tbl_prestudent->tbl_person

'; + $anzahl = $db->db_num_rows($result); + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + + + + '; + + while($row = $db->db_fetch_object($result)) + { + $error_kritisch++; + echo ' + + + + + + + '; + } + echo ''; + } +} +flush(); + + +/************************************************************************************** + * UIDs ohne Student und ohne Mitarbeiter + * + */ +$qry = "SELECT + tbl_benutzer.uid, tbl_benutzer.person_id, tbl_person.vorname, tbl_person.nachname + FROM + public.tbl_benutzer + LEFT JOIN public.tbl_person USING(person_id) + WHERE + NOT EXISTS (SELECT 1 FROM public.tbl_student WHERE student_uid=tbl_benutzer.uid) + AND NOT EXISTS (SELECT 1 FROM public.tbl_mitarbeiter WHERE mitarbeiter_uid=tbl_benutzer.uid)"; + +if($result = $db->db_query($qry)) +{ + echo '

Benutzer ohne Student und ohne Mitarbeiter Eintrag

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Studentenstatus ohne UID + * + */ +$qry = "SELECT + distinct tbl_person.person_id, tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id + FROM + public.tbl_prestudentstatus + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + WHERE + status_kurzbz IN('Student','Absolvent','Diplomand','Incoming') + AND NOT EXISTS (SELECT 1 FROM public.tbl_student WHERE prestudent_id=tbl_prestudent.prestudent_id)"; + +if($result = $db->db_query($qry)) +{ + echo '

Prestudenten mit Studenten/Absolventen/Diplomanden/Incoming Status aber ohne StudentUID

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_kritisch++; + echo ' + + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * StgKz von Stunent und Prestudent unterschiedlich + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id, tbl_student.student_uid, + tbl_student.studiengang_kz as stud_studiengang_kz, tbl_prestudent.studiengang_kz as pre_studiengang_kz + FROM + public.tbl_student + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + WHERE + tbl_student.studiengang_kz<>tbl_prestudent.studiengang_kz"; + +if($result = $db->db_query($qry)) +{ + echo '

Studiengangskennzahl von tbl_student ungleich tbl_prestudent

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_kritisch++; + echo ' + + + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Studenten ohne passenden Status + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id, tbl_student.student_uid, + get_rolle_prestudent(prestudent_id, null) as laststatus + FROM + public.tbl_student + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + WHERE + NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id AND status_kurzbz in('Student','Incoming','Diplomand','Absolvent'))"; + +if($result = $db->db_query($qry)) +{ + echo '

Studenten ohne Status Student/Diplomand/Incoming/Absolvent

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Prestudenten ohne Status + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_prestudent.prestudent_id + FROM + public.tbl_prestudent + JOIN public.tbl_person USING(person_id) + WHERE + NOT EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id)"; + +if($result = $db->db_query($qry)) +{ + echo '

Prestudenten ohne Status

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Studenten ohne Studentlehrverband eintrag + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid + FROM + public.tbl_student + JOIN public.tbl_benutzer ON(uid=student_uid) + JOIN public.tbl_person USING(person_id) + WHERE + NOT EXISTS(SELECT 1 FROM public.tbl_studentlehrverband WHERE student_uid=tbl_student.student_uid)"; + +if($result = $db->db_query($qry)) +{ + echo '

Studenten ohne Studentlehrverband Eintrag

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Incoming ohne IO Datensatz + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid + FROM + public.tbl_student + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + WHERE + NOT EXISTS(SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid) + AND EXISTS(SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id AND status_kurzbz='Incoming')"; + +if($result = $db->db_query($qry)) +{ + echo '

Incoming ohne IO-Datensatz

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Personenkennzeichen passt nicht zur Studiengangskennzahl + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid, tbl_student.matrikelnr, tbl_student.studiengang_kz + FROM + public.tbl_student + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + WHERE + tbl_student.studiengang_kz<1000 AND tbl_student.studiengang_kz>0 + AND tbl_student.studiengang_kz::text!=trim(leading '0' from substring(matrikelnr,5,3))"; + +if($result = $db->db_query($qry)) +{ + echo '

Personenkennzeichen passt nicht zum Studiengang

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Absolventen ohne Abschlusspruefung + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid + FROM + public.tbl_student + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + WHERE + tbl_student.studiengang_kz<1000 AND tbl_student.studiengang_kz>0 + AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE status_kurzbz='Absolvent' AND prestudent_id=tbl_student.prestudent_id) + AND NOT EXISTS(SELECT 1 FROM lehre.tbl_abschlusspruefung WHERE student_uid=tbl_student.student_uid)"; + +if($result = $db->db_query($qry)) +{ + echo '

Absolventen ohne Abschlusspruefung

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + '; + } + echo ''; + } +} + +/************************************************************************************** + * Studenten mit mind. 2 Stati ohne Noten + * + */ +$qry = "SELECT + tbl_person.vorname, tbl_person.nachname, tbl_student.student_uid + FROM + public.tbl_student + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + WHERE + tbl_student.studiengang_kz<1000 AND tbl_student.studiengang_kz>0 + AND 1<(SELECT count(*) FROM public.tbl_prestudentstatus WHERE status_kurzbz='Student' AND prestudent_id=tbl_student.prestudent_id) + AND NOT EXISTS(SELECT 1 FROM lehre.tbl_zeugnisnote WHERE student_uid=tbl_student.student_uid)"; + +if($result = $db->db_query($qry)) +{ + echo '

Studenten mit mind. 2 Studentenstati aber ohne Noten

'; + + $anzahl = $db->db_num_rows($result); + + echo ''.$anzahl.' Probleme gefunden'; + + if($anzahl>0) + { + echo '
Anzeigen >>'; + echo ' + + + + + + + + + + '; + while($row = $db->db_fetch_object($result)) + { + $error_warning++; + echo ' + + + + + '; + } + echo ''; + } +} +// ************************************************************************************ +echo '
'; +echo '
Kritische Fehler: '.($error_kritisch>0?'':'').$error_kritisch.''; +echo '
Warnungen: '.($error_warning>0?'':'').$error_warning.''; +echo '







'; +?>