diff --git a/system/checkStudenten.php b/system/checkStudenten.php index 40424649e..187079b8f 100644 --- a/system/checkStudenten.php +++ b/system/checkStudenten.php @@ -19,244 +19,431 @@ * Andreas Oesterreicher and * Karl Burkhart */ -// ************************************ -// * Script zur Pruefung und Korrektur -// * moeglicher Inkonsistenzen -// * -// * - Abbrecher dürfen nicht mehr aktiv sein -// * - Studiengang muss beim Prestudenten und beim Studenten gleich sein -// ********************************** + require_once('../config/vilesci.config.inc.php'); +require_once('../include/basis_db.class.php'); require_once('../include/studiensemester.class.php'); -require_once('../include/person.class.php'); -require_once('../include/benutzer.class.php'); -require_once('../include/student.class.php'); +require_once('../include/organisationsform.class.php'); require_once('../include/prestudent.class.php'); -require_once('../include/lehrverband.class.php'); -require_once('../include/mail.class.php'); +require_once('../include/student.class.php'); +require_once('../include/studiengang.class.php'); +require_once('../include/functions.inc.php'); +require_once('../include/datum.class.php'); $db = new basis_db(); +$datum = new datum(); +$studiensemester = new studiensemester(); +$aktSem = $studiensemester->getaktorNext(); +$ausgabe = array(); -$anzahl_neue_prestudent_id=0; -$anzahl_fehler_prestudent=0; -$anzahl_gruppenaenderung=0; -$anzahl_gruppenaenderung_fehler=0; -$text=''; -$statistik =''; -$abunterbrecher_verschoben_error=0; -$abunterbrecher_verschoben=0; +$text =""; +?> + + + Check Studenten + + + + + + + +

Studenten Checkskript für BIS-Meldung

+
"; -$qry = "SELECT student_uid, studiengang_kz FROM public.tbl_student WHERE prestudent_id is null"; -if($result = $db->db_query($qry)) +if($db->db_query($qry)) { - $text.="Suche Studenten mit fehlender Prestudent_id ...\n\n"; - - while($row = $db->db_fetch_object($result)) + while($row = $db->db_fetch_object()) { - $qry_id = "SELECT tbl_prestudent.prestudent_id FROM campus.vw_student JOIN public.tbl_prestudent USING(person_id) WHERE uid='".addslashes($row->student_uid)."' AND tbl_prestudent.studiengang_kz='$row->studiengang_kz'"; - if($result_id = $db->db_query($qry_id)) - { - if($db->db_num_rows($result_id)==1) - { - if($row_id = $db->db_fetch_object($result_id)) - { - $qry_upd = "UPDATE public.tbl_student SET prestudent_id='$row_id->prestudent_id' WHERE student_uid='".addslashes($row->student_uid)."'"; - if($db->db_query($qry_upd)) - { - $text .= "Prestudent_id von $row->student_uid wurde auf $row_id->prestudent_id gesetzt\n"; - $anzahl_neue_prestudent_id++; - } - } - else - { - $text .= "unbekannter Fehler\n"; - $anzahl_fehler_prestudent++; - } - } - elseif($db->db_num_rows($result_id)>1) - { - $text .= "Student $row->student_uid hat keine Prestudent_id und MEHRERE passende Prestudenteintraege\n"; - $anzahl_fehler_prestudent++; - } - elseif($db->db_num_rows($result_id)==0) - { - $text .= "Student $row->student_uid hat keine Prestudent_id und KEINE passenden Prestudenteintraege\n"; - $anzahl_fehler_prestudent++; - } - } - else - { - $text.="Fehler bei Abfrage:".$db->db_last_error()."\n"; - $anzahl_fehler_prestudent++; - } + $ausgabe[$row->studiengang][1][]= $row->student_uid; + $text.="Studenten-uid: ".$row->student_uid."
"; } } +else + $text.="Fehler bei der Abfrage aufgetreten.
"; -// ***** -// * Gruppenzuteilung von Abbrechern und Unterbrechern korrigieren. -// * Abbrecher werden in die Gruppe 0A verschoben -// * Unterbrecher in die Gruppe 0B -// ***** -$text.="\n\nKorrigiere Gruppenzuteilungen von Ab-/Unterbrechern\n"; +/* + * Abbrecher dürfen nicht mehr aktiv sein + */ + +$text.= "
Suche alle Abbrecher die noch aktiv sind ...

"; -//Alle Ab-/Unterbrecher holen die nicht im 0. Semester sind -$qry = "SELECT - student_uid, - tbl_student.studiengang_kz, - tbl_prestudent.prestudent_id, - status_kurzbz, - studiensemester_kurzbz - FROM - public.tbl_student, - public.tbl_prestudent, - public.tbl_prestudentstatus - WHERE - tbl_student.prestudent_id=tbl_prestudent.prestudent_id AND - tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id AND - ( - tbl_prestudentstatus.status_kurzbz='Unterbrecher' OR - tbl_prestudentstatus.status_kurzbz='Abbrecher' - ) - AND - EXISTS (SELECT - * - FROM - public.tbl_studentlehrverband - WHERE - student_uid=tbl_student.student_uid AND - studiensemester_kurzbz=tbl_prestudentstatus.studiensemester_kurzbz AND - semester<>0 - ) - "; +$qry ="select pre_status.status_kurzbz, benutzer.aktiv, benutzer.uid, student.studiengang_kz studiengang +from public.tbl_prestudentstatus pre_status +join public.tbl_prestudent pre using(prestudent_id) +join public.tbl_student student using(prestudent_id) +join public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid) +where pre_status.status_kurzbz ='Abbrecher' and benutzer.aktiv = 'true';"; -if($result = $db->db_query($qry)) +if($db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while($row = $db->db_fetch_object()) { - //Eintrag nur korrigieren wenn der Abbrecher/Unterbrecher Status der letzte in diesem Studiensemester ist - $prestd = new prestudent(); - $prestd->getLastStatus($row->prestudent_id, $row->studiensemester_kurzbz); - - if($prestd->status_kurzbz=='Unterbrecher' || $prestd->status_kurzbz=='Abbrecher') - { - //Studentlehrverbandeintrag aktualisieren - $student = new student(); - if($student->studentlehrverband_exists($row->student_uid, $row->studiensemester_kurzbz)) - $student->new = false; - else - { - $student->new = true; - $student->insertamum = date('Y-m-d H:i:s'); - $student->insertvon = 'chkstudentlvb'; - } - - $student->uid = $row->student_uid; - $student->studiensemester_kurzbz=$row->studiensemester_kurzbz; - $student->studiengang_kz = $row->studiengang_kz; - $student->semester = '0'; - $student->verband = ($prestd->status_kurzbz=='Unterbrecher'?'B':'A'); - $student->gruppe = ' '; - $student->updateamum = date('Y-m-d H:i:s'); - $student->updatevon = 'chkstudentlvb'; - - //Pruefen ob der Lehrverband exisitert, wenn nicht dann wird er angelegt - $lehrverband = new lehrverband(); - if(!$lehrverband->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe)) - { - $lehrverband->studiengang_kz = $student->studiengang_kz; - $lehrverband->semester = $student->semester; - $lehrverband->verband = $student->verband; - $lehrverband->gruppe = $student->gruppe; - $lehrverband->bezeichnung = ($student->verband=='A'?'Abbrecher':'Unterbrecher'); - - $lehrverband->save(true); - } - - if($student->save_studentlehrverband()) - { - $text.="Student $student->uid wurde im $row->studiensemester_kurzbz in die Gruppe $student->semester$student->verband verschoben\n"; - $abunterbrecher_verschoben++; - } - else - { - $text.="Fehler biem Speichern des Lehrverbandeintrages bei $student->student_uid:".$student->errormsg."\n"; - $abunterbrecher_verschoben_error++; - } - } + $ausgabe[$row->studiengang][2][]= $row->uid; + $text .="Studenten-uid: ".$row->uid."
"; } } +else + $text.= "Fehler bei der Abfrage aufgetreten.
"; -// ***** -// * Unterschiedliche Gruppenzuteilungen in tbl_studentlehrverband - tbl_student korrigieren -// ***** -$stsem = new studiensemester(); -$stsem = $stsem->getNearest(); +/* + * Organisationsform eines Studienganges, sollte mit den Organisationsformen der Studenten übereinstimmen + */ -$text.="\n\nKorrigiere Inkonsitenzen in den Tabellen tbl_studentlehrverband, tbl_student (Verwendetes Studiensemester: $stsem)\n\n"; +$text.= "
Suche Studenten mit ungleichen Organisationsformeinträgen (Studiengang <--> Prestudentstatus) ...

"; -$qry = "SELECT - tbl_student.studiengang_kz as studiengang_kz_old, - tbl_student.semester as semester_old, - tbl_student.verband as verband_old, - tbl_student.gruppe as gruppe_old, - tbl_studentlehrverband.student_uid, - tbl_studentlehrverband.studiengang_kz, - tbl_studentlehrverband.semester, - tbl_studentlehrverband.verband, - tbl_studentlehrverband.gruppe - FROM - public.tbl_student JOIN public.tbl_studentlehrverband USING(student_uid) - WHERE - tbl_studentlehrverband.studiensemester_kurzbz='$stsem' AND - ( - tbl_student.studiengang_kz<>tbl_studentlehrverband.studiengang_kz OR - tbl_student.semester<>tbl_studentlehrverband.semester OR - tbl_student.verband<>tbl_studentlehrverband.verband OR - tbl_student.gruppe<>tbl_studentlehrverband.gruppe - )"; +$orgArray = array(); +$orgForm = new organisationsform(); -if($result = $db->db_query($qry)) +$qry ="select studiengang.orgform_kurzbz as studorgkz, student.student_uid, prestudentstatus.orgform_kurzbz as studentorgkz, student.studiengang_kz studiengang +from public.tbl_studiengang studiengang +join public.tbl_student student using(studiengang_kz) +join public.tbl_prestudent prestudent using(prestudent_id) +join public.tbl_prestudentstatus prestudentstatus using(prestudent_id) +join public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid) +where benutzer.aktiv = 'true' and prestudentstatus.status_kurzbz ='Student' +and studiengang.studiengang_kz < 10000 +and prestudentstatus.studiensemester_kurzbz = '$aktSem' +order by student_uid; "; + + +if($db->db_query($qry)) { - while($row = $db->db_fetch_object($result)) + while($row = $db->db_fetch_object()) { - $qry = "UPDATE public.tbl_student SET studiengang_kz='$row->studiengang_kz', semester='$row->semester', verband='$row->verband', gruppe='$row->gruppe' WHERE student_uid='$row->student_uid'"; - if($db->db_query($qry)) + $studOrgform = $row->studorgkz; + $student_uid = $row->student_uid; + $studentOrgform = $row->studentorgkz; + + $orgArray = $orgForm->checkOrgForm($studOrgform); + if(!in_array($studentOrgform, $orgArray)) { - $text .= "Bei Student $row->student_uid wurde die Gruppenzuordnung von $row->studiengang_kz_old/$row->semester_old/$row->verband_old/$row->gruppe_old auf $row->studiengang_kz/$row->semester/$row->verband/$row->gruppe geaendert\n"; - $anzahl_gruppenaenderung++; - } - else - { - $text.="Fehler beim Aendern der Gruppe: ".$db->db_last_error()."\n"; - $anzahl_gruppenaenderung_fehler++; + $ausgabe[$row->studiengang][3][]= $row->student_uid; + $text.= "Student_uid: $student_uid
"; } } } else - $text.="Fehler bei Abfrage".$db->db_last_error(); + $text.="Fehler bei der Abfrage aufgetreten.
"; + -$statistik .= "Prestudent_id wurde bei $anzahl_neue_prestudent_id Studenten korrigiert\n"; -$statistik .= "$anzahl_fehler_prestudent Fehler sind bei der Korrektur der Prestudent_id aufgetreten\n"; -$statistik .= "$abunterbrecher_verschoben Studenten wurden ins 0. Semester verschoben\n "; -$statistik .= "$abunterbrecher_verschoben_error Fehler sind beim Verschieben aufgetreten\n "; -$statistik .= "Bei $anzahl_gruppenaenderung Studenten wurde die Gruppenzuordnung korrigiert\n"; -$statistik .= "$anzahl_gruppenaenderung_fehler Fehler sind bei der Korrektur der Gruppenzuordnung aufgetreten\n"; -$statistik .= "\n\n"; +/* + * Abbrecher dürfen nicht wieder einen Status bekommen + */ -$mail = new mail(MAIL_ADMIN, 'vilesci@'.DOMAIN, 'CHECK Studentlehrverband', $statistik.$text); -if($mail->send()) - echo 'Mail an '.MAIL_ADMIN.' wurde versandt'; -else - echo 'Fehler beim Versenden des Mails an '.MAIL_ADMIN; +$prestudentAbbrecher = new prestudent(); +$prestudentLast = new prestudent(); +$text.= "
Suche alle Abbrecher die wieder einen Status bekommen haben...

"; -echo nl2br("\n\n".$statistik.$text); +$qry ="select student.student_uid, prestudent.prestudent_id, student.studiengang_kz studiengang +from public.tbl_student student +join public.tbl_prestudent prestudent using(prestudent_id) +join public.tbl_prestudentstatus prestatus using(prestudent_id) +where prestatus.status_kurzbz = 'Abbrecher'; "; -?> \ No newline at end of file +if($db->db_query($qry)) +{ + while($row = $db->db_fetch_object()) + { + $student_uid = $row->student_uid; + $prestudent_id = $row->prestudent_id; + + $prestudentLast->result = array(); + + $prestudentLast->getLastStatus($prestudent_id); + + if($prestudentLast->status_kurzbz != 'Abbrecher') + { + $ausgabe[$row->studiengang][4][]= $student_uid; + $text.= "Studenten-uid: ".$student_uid."
"; + } + } +} + + +/* + * Aktuelles Semester beim Studenten stimmt nicht mit dem Ausbildungssemester des aktuellen Status überein + */ + +$text .="

Suche Studenten deren Semstern nicht mit dem Ausbildungssemesters des aktuellen Status übereinstimmt ...

"; + +$student = new student(); +$prestudent = new prestudent(); +$qry = "select distinct(student.student_uid), prestudent.prestudent_id, status.ausbildungssemester, lv.semester, student.studiengang_kz studiengang +from public.tbl_student student +join public.tbl_studentlehrverband lv using(student_uid) +join public.tbl_prestudent prestudent using(prestudent_id) +join public.tbl_prestudentstatus status using(prestudent_id) +WHERE status.studiensemester_kurzbz = '$aktSem' +and lv.studiensemester_kurzbz = '$aktSem' +and get_rolle_prestudent (prestudent_id, null)='Student';"; + +if($db->db_query($qry)) +{ + while($row = $db->db_fetch_object()) + { + $student_uid = $row->student_uid; + + if($row->ausbildungssemester != $row->semester) + { + $ausgabe[$row->studiengang][5][]= $student_uid; + $text.="Studenten-uid: ".$student_uid."
"; + } + } +} + + +/* + * Inaktive Studenten sollen keinen "aktiven" Status haben (Diplomant, Student, Unterbrecher, Praktikant) + */ + +$text.="

Suche alle inaktiven Studenten mit einem aktiven Status ...

"; + +$qry = "Select distinct(student.student_uid), student.studiengang_kz studiengang +from public.tbl_benutzer benutzer +join public.tbl_student student on(benutzer.uid = student.student_uid) +join public.tbl_prestudent prestudent using(prestudent_id) +where benutzer.aktiv = 'false' +and get_rolle_prestudent (prestudent_id, '$aktSem') in ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant')"; + +if($db->db_query($qry)) +{ + while($row = $db->db_fetch_object()) + { + $ausgabe[$row->studiengang][6][]= $row->student_uid; + $text.="Studenten-uid: ".$row->student_uid."
"; + } +} + +/* + * Das Datum der Inskription darf nicht vor der letzten BIS-Meldung liegen + * zB. Wenn Student im WS2009 studiert darf Studentenstatus nicht vor 15.4.2009 liegen + * zB. Wenn Student im SS2010 studiert darf Studentenstatus nicht vor 15.11.2009 liegen + */ + +$text.="

Suche alle Studenten deren Inskription im aktuellen Semester vor der letzten BIS-Meldung liegt ...

"; + +$qry ="Select distinct(student.student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang +from public.tbl_benutzer benutzer +join public.tbl_student student on(benutzer.uid = student.student_uid) +join public.tbl_prestudent prestudent using(prestudent_id) +join public.tbl_prestudentstatus prestatus using(prestudent_id) +where benutzer.aktiv = 'true'"; + +if($db->db_query($qry)) +{ + while($row = $db->db_fetch_object()) + { + $prestudent = new prestudent(); + + $prestudent->getFirstStatus($row->prestudent_id, 'Student'); + // wenn Student im aktuellen Semester zum ersten Mal den Status Student bekommt + if($prestudent->studiensemester_kurzbz == $aktSem) + { + $datumBIS = getDateForInscription($aktSem); + $datumInscription = $datum->formatDatum($prestudent->datum, 'Y-m-d'); + + // Wenn Inscriptionsdatum vor der letzten BIS Meldung liegt + if($datumInscription < $datumBIS) + { + $ausgabe[$row->studiengang][7][]= $row->student_uid; + $text.= $row->student_uid ." Inskribiert am: ".$datumInscription." BIS Meldung: ".$datumBIS."
"; + } + } + + } +} + + +/* + * Datum und Studiensemester bei den Stati sind in falscher Reihenfolge + */ + +$text.="

Suche alle Studenten die Datum und Studiensemester in deren Stati in falscher Reihenfolge haben ...

"; +$prestudentFirst = new prestudent(); +$prestudentSecond = new prestudent(); +$i = 0; + +// alle aktiven Studenten die im aktuellen Semster den Status Student haben +$qry_student ="Select distinct(student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang +from public.tbl_student student +join public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) +join public.tbl_prestudent prestudent using(prestudent_id) +join public.tbl_prestudentstatus status using(prestudent_id) +where benutzer.aktiv = 'true' +and status.status_kurzbz ='Student' +and status.studiensemester_kurzbz = '$aktSem';"; + +if($result = $db->db_query($qry_student)) +{ + while($student = $db->db_fetch_object($result)) + { + $qry_orderSemester ="SELECT * FROM public.tbl_prestudentstatus status + join public.tbl_studiensemester semester using(studiensemester_kurzbz) + where prestudent_id = '$student->prestudent_id' + order by start DESC, datum DESC;"; + + if($result1 = $db->db_query($qry_orderSemester)) + { + $prestudentSecond->result = array(); + $prestudentFirst->result = array(); + while($row = $db->db_fetch_object($result1)) + { + $prestudentStatus = new prestudent(); + + $prestudentStatus->prestudent_id = $row->prestudent_id; + $prestudentStatus->status_kurzbz = $row->status_kurzbz; + $prestudentStatus->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $prestudentStatus->ausbildungssemester = $row->ausbildungssemester; + $prestudentStatus->datum = $row->datum; + $prestudentStatus->insertamum = $row->insertamum; + $prestudentStatus->insertvon = $row->insertvon; + $prestudentStatus->updateamum = $row->updateamum; + $prestudentStatus->updatevon = $row->updatevon; + $prestudentStatus->ext_id = $row->ext_id; + $prestudentStatus->orgform_kurzbz = $row->orgform_kurzbz; + + $prestudentFirst->result[] = $prestudentStatus; + } + } + else + $text.= "Fehler"; + + if(!$prestudentSecond->getPrestudentRolle($student->prestudent_id,null,null,'Datum DESC, insertamum DESC')) + $text.= "ERROR:".$prestudentSecond->errormsg; + + for($i=0; $iresult); $i++) + { + if($prestudentFirst->result[$i]->studiensemester_kurzbz != $prestudentSecond->result[$i]->studiensemester_kurzbz) + { + $ausgabe[$student->studiengang][8][]= $student->student_uid; + $text.= "Studenten-uid: ".$student->student_uid."
"; + continue 2; + } + } + } +} + +/* + * Aktive Studenten ohne Status in aktuellen Studiensemester + */ + +$prestudent = new prestudent(); +$text.="

Suche alle aktiven Studenten die keinen Status im aktuellen Studiensemester haben.

"; + +$qry ="Select distinct (student_uid), prestudent.prestudent_id, student.studiengang_kz studiengang +from public.tbl_student student +join public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid) +join public.tbl_prestudent prestudent using(prestudent_id) +join public.tbl_prestudentstatus status using(prestudent_id) +where benutzer.aktiv = 'true'"; + +if($result = $db->db_query($qry)) +{ + while($row = $db->db_fetch_object($result)) + { + if(!$prestudent->getLastStatus($row->prestudent_id, $aktSem)) + { + $ausgabe[$row->studiengang][9][]= $row->student_uid; + $text.= $row->student_uid."
"; + } + } +} + +// Ausgabe der Studenten +foreach($ausgabe as $stg_kz=>$value) +{ + $studiengang = new studiengang(); + $studiengang->load($stg_kz); + + echo "

".$studiengang->bezeichnung ." (".$studiengang->kurzbzlang.")

"; + echo ""; + foreach($value as $code=>$uid) + { + switch ($code) { + case 1: + echo ''; + break; + case 2: + echo ""; + break; + case 3: + echo ""; + break; + case 4: + echo ""; + break; + case 5: + echo ""; + break; + case 6: + echo ""; + break; + case 7: + echo ""; + break; + case 8: + echo ""; + break; + case 9: + echo ""; + break; + default: + echo ""; + break; + } + + foreach ($uid as $student_id) + { echo ""; + $student = new student(); + $student->load($student_id); + echo ''; + echo ""; + } + + } + echo "
 
Studenten deren Studiengänge (Prestudent <-> Student) nicht gleich sind
 
Abrecher die noch aktiv sind
 
Studenten mit nicht identischen Organisationsformeinträgen (Studiengang <-> Prestudentstatus)
 
Abbrecher die wieder einen Status bekommen haben
 
Studenten deren Semester nicht mit dem Ausbildungssemester des aktuellen Status übereinstimmt
 
Inaktive Studenten mit deinem aktiven Status
 
Studenten deren Inskription im aktuellen Semester vor der letzten BIS-Meldung liegt
 
Studenten die Datum und Studiensemestern in deren Stati in falscher Reihenfolge haben
 
Aktive Studenten die keinen Status im aktuellen Studiensemester haben
 
Ungültiger Code
'.$student->vorname.''.$student->nachname.''.$student->uid.'
"; +} + +//echo $text; + +/* + * Gibt das Datum der BIS Meldung des übergebenen Semesters zurück + */ +function getDateForInscription ($semester) +{ + global $datum; + + $semesterYear = substr($semester,2,6); + $semesterType = substr($semester,0,2); + + if($semesterType == 'SS') + { + $date = "15.11.".($semesterYear-1); + $date = $datum->formatDatum($date, 'Y-m-d'); + return $date; + } + + if($semesterType == 'WS') + { + $date = '15.04'.$semesterYear; + $date = $datum->formatDatum($date, 'Y-m-d'); + return $date; + } +} +?> + + \ No newline at end of file