From 3301aa87ddd7183f6bc5c9ab25e58ff864774186 Mon Sep 17 00:00:00 2001 From: Manfred Date: Tue, 7 Dec 2021 21:00:53 +0100 Subject: [PATCH] =?UTF-8?q?Export=20f=C3=BCr=20alle=20Bachelor=20und=20Mas?= =?UTF-8?q?terstudieng=C3=A4nge.=20BIS-Datum=20als=20GET?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/studentenmeldung.php | 261 +++++++++++++++++++------------ 1 file changed, 161 insertions(+), 100 deletions(-) diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index 710e38ead..6d1650f53 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -54,7 +54,6 @@ $error_log_hinweis=''; $error_log1=''; $error_log_all=""; $error_log_io = ''; // error log fuer plausichecks von incomings/outgoings -$stgart=''; $fehler=''; $maxsemester=0; $v=''; @@ -106,6 +105,8 @@ $student_data=array(); $datum_obj = new datum(); //Beginn- und Endedatum des aktuellen Semesters +// Update 07.12.2021 kindlm: scheint nicht verwendet zu werden +/* $qry="SELECT * FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($ssem).";"; if($result = $db->db_query($qry)) { @@ -114,7 +115,8 @@ if($result = $db->db_query($qry)) $beginn=$row->start; $ende=$row->ende; } -} +}*/ + //Ermittlung aktuelles und letztes BIS-Meldedatum if(mb_strstr($ssem,"WS")) { @@ -130,6 +132,13 @@ else { die('Ungültiges Studiensemester!'); } + +//Wenn bisdatum als GET-Parameter übergeben wird, dieses Datum nehmen +if (isset($_GET['bisdatum'])) +{ + $bisdatum = $_GET['bisdatum']; +} + //ausgewaehlter Studiengang if(isset($_GET['stg_kz'])) { @@ -178,75 +187,46 @@ $kodex_studstatuscode_array['Unterbrecher']=2; $kodex_studstatuscode_array['Absolvent'] =3; $kodex_studstatuscode_array['Abbrecher'] =4; -//Studiengangsdaten auslesen -$stg_obj = new studiengang(); -if($stg_obj->load($stg_kz)) -{ - $maxsemester=$stg_obj->max_semester; - if($maxsemester==0) - { - echo "Die maximale Semesteranzahl des Studienganges ist nicht angegeben!"; - exit; - } - - $erhalter = sprintf('%03s',$stg_obj->erhalter_kz); - - switch($stg_obj->typ) - { - case 'b': $stgart=1; break; - case 'm': $stgart=2; break; - case 'd': $stgart=3; break; - case 'e': $stgart=4; break; - default: die('

Dieser Studiengangstyp kann nicht gemeldet werden. Typ muss (b, m, d oder e) sein

'); break; - } - - // DoubleDegree Studierende werden per Default aus BB gemeldet. - // Wenn es ein reiner VZ Studiengang ist, dann sollen diese aber als VZ gemeldet werden. - if($stg_obj->orgform_kurzbz=='VZ') - $orgform_code_array['DDP']=$orgform_code_array['VZ']; - - $orgform_code = $orgform_code_array[$stg_obj->orgform_kurzbz]; - $orgform_kurzbz=$stg_obj->orgform_kurzbz; -} -else - die('Fehler:'.$stg_obj->errormsg); - - //Ausgabe aktiver Studenten, die nicht gemeldet werden -$qry_akt=" - SELECT - DISTINCT ON(student_uid, nachname, vorname) *, public.tbl_person.person_id AS pers_id - FROM - public.tbl_student - JOIN public.tbl_benutzer ON(student_uid=uid) - JOIN public.tbl_person USING (person_id) - JOIN public.tbl_prestudent USING (prestudent_id) - JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) - WHERE - bismelden=FALSE - AND tbl_student.studiengang_kz=".$db->db_add_param($stg_kz)." - AND (tbl_prestudentstatus.studiensemester_kurzbz=".$db->db_add_param($ssem)." AND status_kurzbz IN ('Student','Diplomand','Unterbrecher','Praktikant','Outgoing')) - AND tbl_prestudent.prestudent_id NOT IN - ( - SELECT prestudent_id - FROM public.tbl_prestudentstatus - WHERE - tbl_prestudentstatus.studiensemester_kurzbz=".$db->db_add_param($ssem)." - AND (status_kurzbz='Abbrecher' OR status_kurzbz='Absolvent') - ) - ORDER BY student_uid, nachname, vorname - "; -if($result_akt = $db->db_query($qry_akt)) +if ($stg_kz != 'alleBaMa') { - while($row_akt = $db->db_fetch_object($result_akt)) + $qry_akt = " + SELECT + DISTINCT ON(student_uid, nachname, vorname) *, public.tbl_person.person_id AS pers_id + FROM + public.tbl_student + JOIN public.tbl_benutzer ON(student_uid=uid) + JOIN public.tbl_person USING (person_id) + JOIN public.tbl_prestudent USING (prestudent_id) + JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + WHERE + bismelden=FALSE + AND tbl_student.studiengang_kz=".$db->db_add_param($stg_kz)." + AND (tbl_prestudentstatus.studiensemester_kurzbz=".$db->db_add_param($ssem)." AND status_kurzbz IN ('Student','Diplomand','Unterbrecher','Praktikant','Outgoing')) + AND tbl_prestudent.prestudent_id NOT IN + ( + SELECT prestudent_id + FROM public.tbl_prestudentstatus + WHERE + tbl_prestudentstatus.studiensemester_kurzbz=".$db->db_add_param($ssem)." + AND (status_kurzbz='Abbrecher' OR status_kurzbz='Absolvent') + ) + ORDER BY student_uid, nachname, vorname + "; + if ($result_akt = $db->db_query($qry_akt)) { - $v.="Person (UID, Vorname, Nachname) '".$row_akt->student_uid."', '".$row_akt->nachname."', '".$row_akt->vorname."' hat Status $row_akt->status_kurzbz, wird aber nicht BIS gemeldet!!!
\n"; - $anzahl_fehler++; + while ($row_akt = $db->db_fetch_object($result_akt)) + { + $v .= "Person (UID, Vorname, Nachname) '".$row_akt->student_uid."', '".$row_akt->nachname."', '".$row_akt->vorname."' hat Status $row_akt->status_kurzbz, wird aber nicht BIS gemeldet!!!
\n"; + $anzahl_fehler++; + } } } +if ($stg_kz != 'alleBaMa') +{ //Incoming ohne I/O Datensatz anzeigen -$qry_in=" + $qry_in = " SELECT DISTINCT ON(student_uid, nachname, vorname) *, public.tbl_person.person_id AS pers_id FROM @@ -261,16 +241,16 @@ $qry_in=" AND (status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid)) ORDER BY student_uid, nachname, vorname "; -if($result_in = $db->db_query($qry_in)) -{ - while($row_in = $db->db_fetch_object($result_in)) + if ($result_in = $db->db_query($qry_in)) { - $v.="Bei Student (UID, Vorname, Nachname) '".$row_in->student_uid."', '".$row_in->nachname."', '".$row_in->vorname."' ($row_in->status_kurzbz): \n"; - $v.="     Es fehlt der I/O-Datensatz\n\n"; - $anzahl_fehler++; + while ($row_in = $db->db_fetch_object($result_in)) + { + $v .= "Bei Student (UID, Vorname, Nachname) '".$row_in->student_uid."', '".$row_in->nachname."', '".$row_in->vorname."' ($row_in->status_kurzbz): \n"; + $v .= "     Es fehlt der I/O-Datensatz\n\n"; + $anzahl_fehler++; + } } } - //Hauptselect // An der FHTW können nur die Incomings ausgelesen werden, wenn die stg_kz 10006 übergeben wird if (CAMPUS_NAME == 'FH Technikum Wien' && $stg_kz==10006) @@ -292,6 +272,34 @@ if (CAMPUS_NAME == 'FH Technikum Wien' && $stg_kz==10006) ORDER BY student_uid, nachname, vorname "; } +// Wenn "alleBaMa" als $stg_kz übergeben wird, wird ein großes XML mit allen Studiengängen geladen +elseif ($stg_kz == 'alleBaMa') +{ + $qry=" + SELECT + DISTINCT ON(tbl_studiengang.typ, tbl_student.studiengang_kz, matrikelnummer, nachname, vorname) *, public.tbl_person.person_id AS pers_id, to_char(gebdatum, 'ddmmyy') AS vdat + FROM + public.tbl_student + JOIN public.tbl_benutzer ON(student_uid=uid) + JOIN public.tbl_person USING (person_id) + JOIN public.tbl_prestudent USING (prestudent_id) + JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + JOIN public.tbl_studiengang ON (tbl_studiengang.studiengang_kz=tbl_student.studiengang_kz) + WHERE + bismelden=TRUE + AND tbl_studiengang.typ IN ('b','m') + AND (((tbl_prestudentstatus.studiensemester_kurzbz=".$db->db_add_param($ssem).") AND (tbl_prestudentstatus.datum<=".$db->db_add_param($bisdatum).") + AND (status_kurzbz='Student' OR status_kurzbz='Outgoing' + OR status_kurzbz='Praktikant' OR status_kurzbz='Diplomand' OR status_kurzbz='Absolvent' + OR status_kurzbz='Abbrecher' OR status_kurzbz='Unterbrecher')) + OR ((tbl_prestudentstatus.studiensemester_kurzbz=".$db->db_add_param($psem).") AND (status_kurzbz='Absolvent' + OR status_kurzbz='Abbrecher') AND tbl_prestudentstatus.datum>".$db->db_add_param($bisprevious).") + OR (status_kurzbz='Incoming' AND student_uid IN (SELECT student_uid FROM bis.tbl_bisio WHERE (tbl_bisio.bis>=".$db->db_add_param($bisprevious).") + OR (tbl_bisio.von<=".$db->db_add_param($bisdatum)." AND (tbl_bisio.bis>=".$db->db_add_param($bisdatum)." OR tbl_bisio.bis IS NULL)) + ))) + ORDER BY tbl_studiengang.typ, tbl_student.studiengang_kz, matrikelnummer, nachname, vorname + "; +} else { $qry=" @@ -321,25 +329,72 @@ else if($result = $db->db_query($qry)) { - $header =" - - ".$erhalter." - ".date("dmY", $datumobj->mktime_fromdate($bisdatum))." - - - ".$stg_kz.""; - - - $datei .= $header; - $dateiNurBewerber .= $header; + $stg_kz_index = ''; while($row = $db->db_fetch_object($result)) { - $datei.= GenerateXMLStudentBlock($row); + if ($row->studiengang_kz != $stg_kz_index) + { + //Studiengangsdaten auslesen + $stg_obj = new studiengang(); + if($stg_obj->load($row->studiengang_kz)) + { + $maxsemester = $stg_obj->max_semester; + if($maxsemester == 0) + { + echo "Die maximale Semesteranzahl des Studienganges ist nicht angegeben!"; + exit; + } + + $erhalter = sprintf('%03s',$stg_obj->erhalter_kz); + + switch($stg_obj->typ) + { + case 'b': $stgart = 1; break; + case 'm': $stgart = 2; break; + case 'd': $stgart = 3; break; + case 'e': $stgart = 4; break; + default: die('

Dieser Studiengangstyp kann nicht gemeldet werden. Typ muss (b, m, d oder e) sein

'); break; + } + + // DoubleDegree Studierende werden per Default aus BB gemeldet. + // Wenn es ein reiner VZ Studiengang ist, dann sollen diese aber als VZ gemeldet werden. + if($stg_obj->orgform_kurzbz == 'VZ') + $orgform_code_array['DDP'] = $orgform_code_array['VZ']; + + $orgform_code = $orgform_code_array[$stg_obj->orgform_kurzbz]; + $orgform_kurzbz = $stg_obj->orgform_kurzbz; + } + else + die('Fehler:'.$stg_obj->errormsg); + + // Header am Beginn rausschreiben + if ($stg_kz_index == '') + { + $header = " + + ".$erhalter." + ".date("dmY", $datumobj->mktime_fromdate($bisdatum))." + "; + + $datei .= $header; + $dateiNurBewerber .= $header; + } + if ($stg_kz_index != '' && $row->studiengang_kz != $stg_kz_index) + { + $datei .= " +
"; + } + $stg_kz_index = $row->studiengang_kz; + $datei .= " + + ".$row->studiengang_kz.""; + } + $datei .= GenerateXMLStudentBlock($row); } //Bewerberblock bei Ausserordentlichen nicht anzeigen - if($stg_kz!=('9'.$erhalter)) + /*if($stg_kz!=('9'.$erhalter)) { $stg_obj = new studiengang(); @@ -360,7 +415,7 @@ if($result = $db->db_query($qry)) $datei.=$bewerberBlock; $dateiNurBewerber.=$bewerberBlock; } - } + }*/ } $footer=" @@ -421,6 +476,7 @@ if ($rechte->isBerechtigt('admin')) { echo '
'; echo 'Studiengang: '; echo '
'; } -$studiengang = new studiengang($stg_kz); -$typ = new studiengang($stg_kz); -$typ->getStudiengangTyp($studiengang->typ); -echo "

BIS - Studentendaten werden überprüft! Studiengang: ".$db->convert_html_chars($stg_kz)." - ".$typ->bezeichnung." ".$studiengang->bezeichnung."

\n"; +if ($stg_kz != 'alleBaMa') +{ + $studiengang = new studiengang($stg_kz); + $typ = new studiengang($stg_kz); + $typ->getStudiengangTyp($studiengang->typ); + echo "

BIS - Studentendaten werden überprüft. Studiengang: ".$db->convert_html_chars($stg_kz)." - ".$typ->bezeichnung." ".$studiengang->bezeichnung."

\n"; +} +else +{ + echo "

BIS - Studentendaten aller Bachelor- und Master-Studiengänge werden überprüft.

\n"; +} echo "

Nicht plausible BIS-Daten (für Meldung ".$db->convert_html_chars($ssem)."):


"; echo nl2br($v."\n\n"); @@ -821,7 +884,7 @@ function GenerateXMLStudentBlock($row) } if($row->svnr!='' && $row->svnr!=null && substr($row->svnr,4,6)!=$row->vdat && substr($row->vdat,0,4)!='0101' && substr($row->vdat,0,4)!='0107') { - $error_log_hinweis.=(!empty($error_log)?', ':'')."SVNR ('".$row->svnr."') enthält Geburtsdatum (".$datum_obj->formatDatum($row->gebdatum,'d.m.Y').") nicht"; + $error_log_hinweis.=(!empty($error_log_hinweis)?', ':'')."SVNR ('".$row->svnr."') enthält Geburtsdatum (".$datum_obj->formatDatum($row->gebdatum,'d.m.Y').") nicht"; } if($row->ersatzkennzeichen!='' && $row->ersatzkennzeichen!=null && substr($row->ersatzkennzeichen,4,6)!=$row->vdat) { @@ -853,7 +916,7 @@ function GenerateXMLStudentBlock($row) } if($row->bpk == '' || $row->bpk == null) { - $error_log .= (!empty($error_log) ? ', ' : '') . "bPK fehlt"; + $error_log_hinweis .= (!empty($error_log_hinweis) ? ', ' : '') . "bPK fehlt"; } if($row->bpk != '' && $row->bpk != null) { @@ -996,8 +1059,7 @@ function GenerateXMLStudentBlock($row) { if ($db->db_num_rows($resultAbbrecher) == 0) { - $error_log .= (!empty($error_log) ? ', ' : '')."Der Student ist Abbrecher vor der ersten BIS-Meldung. Bitte im FAS das Hakerl bei \"Bismelden\" im Reiter \"Prestudent\" entfernen"; - + //$error_log .= (!empty($error_log) ? ', ' : '')."Der Student ist Abbrecher vor der ersten BIS-Meldung. Bitte im FAS das Hakerl bei \"Bismelden\" im Reiter \"Prestudent\" entfernen"; } } } @@ -1322,9 +1384,11 @@ function GenerateXMLStudentBlock($row) " . $row->ersatzkennzeichen . ""; } - $datei .= " - " . $row->bpk . " - "; + if($row->bpk != '' && $row->bpk != null) + { + $datei.=" + ".$row->bpk.""; + } $datei .= " " . $row->staatsbuergerschaft . " @@ -1333,14 +1397,11 @@ function GenerateXMLStudentBlock($row) " . $nation . ""; - if (!$ausserordentlich && !$incoming) - { - $datei .= " + $datei .= " " . $zustell_plz . " " . $zustell_gemeinde . " " . $zustell_strasse . " " . $zustell_nation . ""; - } if ($co_name != '') {