* Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > * Rudolf Hangl < rudolf.hangl@technikum-wien.at > * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > */ /** * Studentenmeldung * * Erstellt ein XML File fuer die Studentenmeldung an den FHR * Das XML-File wird im Filesystem abgelegt. * Zusaetzlich wird eine Uebersichtsliste ueber die im File enthaltenen Daten erstellt und * nicht plausible Daten * * Parameter: stg_kz ... Kennzahl des Studienganges */ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/studiensemester.class.php'); require_once('../../include/datum.class.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/functions.inc.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/bisio.class.php'); require_once('../../include/prestudent.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); $uid = get_uid(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); if(!$rechte->isBerechtigt('student/stammdaten',null,'suid') && !$rechte->isBerechtigt('assistenz',null,'suid') && !$rechte->isBerechtigt('admin',null,'suid')) die('Sie haben keine Berechtigung für diese Seite'); $error_log=''; $error_log_hinweis=''; $error_log1=''; $error_log_all=""; $error_log_io = ''; // error log fuer plausichecks von incomings/outgoings $fehler=''; $maxsemester=0; $v=''; $studiensemester=new studiensemester(); // Wenn Studiensemester als GET übergeben wird, dieses laden, sonst getaktorNext() if (isset($_GET['studiensemester'])) { $ssem = $_GET['studiensemester']; $psem = $studiensemester->getPreviousFrom($ssem); } else { $ssem = $studiensemester->getaktorNext(); $psem = $studiensemester->getPrevious(); } $anzahl_fehler=0; $erhalter=''; $stgart=''; $orgform_code=''; $status=''; $datei=''; $dateiNurBewerber=''; $aktstatus=''; $aktstatus_datum=''; $mob=''; $gast=''; $herkunft=''; $avon=''; $abis=''; $zweck=''; $bewerberM=array(); $bewerberW=array(); $bsem=array(); $stsem=array(); $usem=array(); $asem=array(); $absem=array(); $iosem=array(); $gssem=array(); $bewerbercount=array(); $orgform_kurzbz=''; $tabelle=''; $stlist=''; $bwlist=''; $storgfor=''; $verwendete_orgformen=array(); $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)) { if($row = $db->db_fetch_object($result)) { $beginn=$row->start; $ende=$row->ende; } }*/ //Ermittlung aktuelles und letztes BIS-Meldedatum if(mb_strstr($ssem,"WS")) { $bisdatum=date("Y-m-d", mktime(0, 0, 0, 11, 15, date("Y"))); $bisprevious=date("Y-m-d", mktime(0, 0, 0, 04, 15, date("Y"))); } elseif(mb_strstr($ssem,"SS")) { $bisdatum=date("Y-m-d", mktime(0, 0, 0, 04, 15, date("Y"))); $bisprevious=date("Y-m-d", mktime(0, 0, 0, 11, 15, date("Y")-1)); } 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'])) { $stg_kz=$_GET['stg_kz']; } else { die('

Es wurde kein Studiengang ausgewählt!

'); } /* Obsolete - Standort wird nun aus DB geholt standortcode 22=Wien derzeit fuer alle Studierende der gleiche Standort ToDo: Standort sollte pro Student konfigurierbar sein. $standortcode='22'; if(in_array($stg_kz,array('265','268','761','760','266','267','764','269','400','794','795','786','859','871'))) $standortcode='14'; // Pinkafeld elseif(in_array($stg_kz,array('639','640','263','743','364','635','402','401','725','264','271','781'))) $standortcode='3'; // Eisenstadt */ $datumobj=new datum(); $qry='SELECT * FROM bis.tbl_orgform'; if($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) { $orgform_code_array[$row->orgform_kurzbz]=$row->code; } } $qry = 'SELECT * FROM bis.tbl_gsstudientyp'; if($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) { $kodex_studientyp_array[$row->gsstudientyp_kurzbz]=$row->studientyp_code; } } // StudStatusCode $kodex_studstatuscode_array['Student'] =1; $kodex_studstatuscode_array['Unterbrecher']=2; $kodex_studstatuscode_array['Absolvent'] =3; $kodex_studstatuscode_array['Abbrecher'] =4; //Ausgabe aktiver Studenten, die nicht gemeldet werden if ($stg_kz != 'alleBaMa') { $qry_akt = " SELECT DISTINCT ON(student_uid, nachname, vorname) *, public.tbl_person.person_id AS pers_id, public.tbl_prestudent.foerderrelevant as pre_foerderrelevant, public.tbl_studiengang.foerderrelevant as stg_foerderrelevant 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=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)) { 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 = " SELECT DISTINCT ON(student_uid, nachname, vorname) *, public.tbl_person.person_id AS pers_id, public.tbl_prestudent.foerderrelevant as pre_foerderrelevant, public.tbl_studiengang.foerderrelevant as stg_foerderrelevant 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_student.studiengang_kz=".$db->db_add_param($stg_kz)." 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)) { $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) { $qry=" SELECT DISTINCT ON(student_uid, nachname, vorname) *, public.tbl_person.person_id AS pers_id, to_char(gebdatum, 'ddmmyy') AS vdat, public.tbl_prestudent.foerderrelevant as pre_foerderrelevant, public.tbl_studiengang.foerderrelevant as stg_foerderrelevant, COALESCE(tbl_prestudent.standort_code, tbl_studiengang.standort_code) AS bis_standort_code 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 (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 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_student.studiengang_kz, matrikelnr, nachname, vorname) *, public.tbl_person.person_id AS pers_id, to_char(gebdatum, 'ddmmyy') AS vdat, public.tbl_prestudent.foerderrelevant as pre_foerderrelevant, public.tbl_studiengang.foerderrelevant as stg_foerderrelevant, COALESCE(tbl_prestudent.standort_code, tbl_studiengang.standort_code) AS bis_standort_code 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','e') AND tbl_studiengang.melderelevant=TRUE AND tbl_studiengang.studiengang_kz > 0 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_student.studiengang_kz, matrikelnr, nachname, vorname "; } else { $qry=" SELECT DISTINCT ON(student_uid, nachname, vorname) *, public.tbl_person.person_id AS pers_id, to_char(gebdatum, 'ddmmyy') AS vdat, public.tbl_prestudent.foerderrelevant as pre_foerderrelevant, public.tbl_studiengang.foerderrelevant as stg_foerderrelevant, COALESCE(tbl_prestudent.standort_code, tbl_studiengang.standort_code) AS bis_standort_code 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_student.studiengang_kz=".$db->db_add_param($stg_kz)." 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 student_uid, nachname, vorname "; } if($result = $db->db_query($qry)) { $stg_kz_index = ''; $num_rows = $db->db_num_rows($result); $row_num = 1; while($row = $db->db_fetch_object($result)) { $row->pre_foerderrelevant = $db->db_parse_bool($row->pre_foerderrelevant); $row->stg_foerderrelevant = $db->db_parse_bool($row->stg_foerderrelevant); 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); // Erstes Studiengang Tag am Beginn rausschreiben if ($stg_kz_index == '') { $header = " ".$erhalter." ".date("dmY", $datumobj->mktime_fromdate($bisdatum))." ".$row->studiengang_kz.""; $datei .= $header; $dateiNurBewerber .= $header; } } // Student Daten schreiben $datei .= GenerateXMLStudentBlock($row); // wenn neuer Studiengang oder letzter Durchlauf... if (($row_num > 1 && $row->studiengang_kz != $stg_kz_index) || $row_num == $num_rows) { // ...Studiengang Tag schliessen $stgClose = " "; $datei .= $stgClose; $dateiNurBewerber .= $stgClose; } // wenn neuer Studiengang... if ($row->studiengang_kz != $stg_kz_index) { if ($row_num > 1) { // ...neuen Studiengang Tag öffnen $stgOpen = " ".$row->studiengang_kz.""; $datei .= $stgOpen; $dateiNurBewerber .= $stgOpen; } //Bewerberblock // (bei Ausserordentlichen nicht anzeigen) if($row->studiengang_kz!=('9'.$erhalter)) { $stg_obj = new studiengang(); if($orgform_code==3 || $stg_obj->isMischform($row->studiengang_kz,$ssem) || $stg_obj->isMischform($row->studiengang_kz,$psem)) { $orgcodes = array_unique($orgform_code_array); //Mischform foreach($orgcodes as $code) { $bewerberBlock=GenerateXMLBewerberBlock($row->studiengang_kz, $code); $dateiNurBewerber.=$bewerberBlock; } } else { $bewerberBlock=GenerateXMLBewerberBlock($row->studiengang_kz); $dateiNurBewerber.=$bewerberBlock; } } }; // Studiengang kz speichern und Zeile erhöhen $stg_kz_index = $row->studiengang_kz; $row_num++; } } $footer=" "; $datei.=$footer; $dateiNurBewerber.=$footer; echo ' BIS - Meldung Student - ('.$stg_kz.') '; include('../../include/meta/jquery.php'); include('../../include/meta/jquery-tablesorter.php'); echo ' '; if ($rechte->isBerechtigt('admin')) { echo '
'; echo 'Studiengang: '; echo '
'; } 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"); //Tabelle mit Ergebnissen ausgeben $tabelle="

BIS-Meldungsübersicht:


"; $semester_arr = array(1,2,3,4,5,6,7,8,50,60); sort($verwendete_orgformen); $orgformen = implode('/',$verwendete_orgformen); $aktiv=" "; $unterbrecher=" "; $abbrecher=" "; $absolventen=" "; $outgoing=" "; $gemeinsamestudien=" "; foreach ($semester_arr as $semester) { $aktiv.=''; $unterbrecher.=''; $abbrecher.=''; $absolventen.=''; $outgoing.=''; $gemeinsamestudien.=''; } $aktiv.=''; $unterbrecher.=''; $abbrecher.=''; $absolventen.=''; $outgoing.=''; $gemeinsamestudien.=''; $tabelle.=$aktiv.$unterbrecher.$abbrecher.$absolventen.$outgoing.$gemeinsamestudien. " "; $tabelle.= "
Semester 1 2 3 4 5 6 7 8 50 60
aktive Studenten ($orgformen)
Unterbrecher ($orgformen)
Abbrecher ($orgformen)
Absolventen ($orgformen)
Outgoing ($orgformen)
GemeinsameStudien '; $unterbrecher.=' '; $abbrecher.=' '; $absolventen.=' '; $outgoing.=' '; $gemeinsamestudien.=' '; $i=0; foreach($verwendete_orgformen as $orgform) { if($i!=0) { $aktiv.=' / '; $unterbrecher.=' / '; $abbrecher.=' / '; $absolventen.=' / '; $outgoing.=' / '; $gemeinsamestudien .=' / '; } $aktiv .= (isset($stsem[$orgform][$semester])?$stsem[$orgform][$semester]:''); $unterbrecher .= (isset($usem[$orgform][$semester])?$usem[$orgform][$semester]:''); $abbrecher .= (isset($asem[$orgform][$semester])?$asem[$orgform][$semester]:''); $absolventen .= (isset($absem[$orgform][$semester])?$absem[$orgform][$semester]:''); $outgoing .= (isset($iosem[$orgform][$semester])?$iosem[$orgform][$semester]:''); $gemeinsamestudien .= (isset($gssem[$orgform][$semester])?$gssem[$orgform][$semester]:''); $i++; } $aktiv.='
Incoming ".(isset($iosem[0])?$iosem[0]:'')."
Bewerber(ges.)($orgformen) ".(isset($bewerbercount[0])?$bewerbercount[0]:0)." "; for($i=0;$i

"; echo $tabelle; $ddd='bisdaten/bismeldung_'.$ssem.'_Stg'.$stg_kz.'.xml'; $dateiausgabe=fopen($ddd,'w'); fwrite($dateiausgabe,$datei); fclose($dateiausgabe); $dddNurBew='bisdaten/bismeldung_bewerber_'.$ssem.'_Stg'.$stg_kz.'.xml'; $dateiausgabe=fopen($dddNurBew,'w'); fwrite($dateiausgabe,$dateiNurBewerber); fclose($dateiausgabe); $eee='bisdaten/tabelle_'.$ssem.'_Stg'.$stg_kz.'.html'; $dateiausgabe=fopen($eee,'w'); fwrite($dateiausgabe,$tabelle); fclose($dateiausgabe); if(file_exists($ddd)) { echo 'BIS-Meldung Stg '.$stg_kz.' archivieren
'; echo 'XML-Datei für BIS-Meldung Stg '.$stg_kz.'
'; } if(file_exists($dddNurBew)) echo 'XML-Datei für BIS-Meldung Stg '.$stg_kz.' - Bewerberdaten
'; if(file_exists($eee)) { echo 'BIS-Meldeübersicht der BIS-Meldung Stg '.$stg_kz.'

'; } echo ' ',$stlist,'
UID PersKZ Nachname Vorname Status Semester Orgform
'; echo '
Bewerberübersicht'; echo ' ',$bwlist,'
Nachname Vorname Orgform Geschlecht
'; echo ''; /************************************************************************** * FUNKTIONEN **************************************************************************/ /** * Generiert den Studenten Block */ function GenerateXMLStudentBlock($row) { global $bisdatum, $db; global $ssem, $psem; global $v; global $stgart, $maxsemester, $orgform_kurzbz, $bisprevious,$anzahl_fehler; global $iosem, $stsem, $usem, $asem, $absem, $stlist, $gssem; //global $verwendete_orgformen, $datum_obj,$orgform_code_array,$standortcode; global $verwendete_orgformen, $datum_obj,$orgform_code_array; global $kodex_studientyp_array, $kodex_studstatuscode_array; global $stg_kz; $error_log=''; $error_log_hinweis=''; $error_log1=''; $error_log_io = ''; $datei = ''; $datumobj = new datum(); $laststatus = new prestudent(); $laststatus->getLastStatus($row->prestudent_id); //Pruefen ob Ausserordnetlicher Studierender (4.Stelle in Personenkennzeichen = 9) if(mb_substr($row->matrikelnr,3,1)=='9') $ausserordentlich=true; else $ausserordentlich=false; // Pruefen, ob Incoming (3.Stelle in Personenkennzeichen = 0) $incoming = mb_substr($row->matrikelnr,2,1) == '0' ? true : false; $qryadr="SELECT * FROM public.tbl_adresse WHERE heimatadresse IS TRUE AND person_id=".$db->db_add_param($row->pers_id).";"; $results=$db->db_query($qryadr); if($db->db_num_rows($results)!=1) { $error_log1="Es sind ".$db->db_num_rows($results)." Heimatadressen eingetragen\n"; } if($rowadr=$db->db_fetch_object($results)) { $plz=$rowadr->plz; $gemeinde=$rowadr->gemeinde; $strasse=$rowadr->strasse; $nation=$rowadr->nation; $co_name = $rowadr->co_name; } else { $plz=''; $gemeinde=''; $strasse=''; $nation=''; $co_name = ''; } // Zustelladresse & c/o Name(=abweichender Empfaenger) $qryzustelladr = " SELECT * FROM public.tbl_adresse WHERE zustelladresse IS TRUE AND person_id=". $db->db_add_param($row->pers_id). "; "; $results = $db->db_query($qryzustelladr); if ($db->db_num_rows($results) != 1) { $error_log1.= "Es sind ".$db->db_num_rows($results)." Zustelladressen eingetragen\n"; } $zustell_plz = ''; $zustell_gemeinde = ''; $zustell_strasse = ''; $zustell_nation = ''; if ($rowzustelladr = $db->db_fetch_object($results)) { $zustell_plz = $rowzustelladr->plz; $zustell_gemeinde = $rowzustelladr->gemeinde; $zustell_strasse = $rowzustelladr->strasse; $zustell_nation = $rowzustelladr->nation; } // FH eMail-Adresse FH aus UID@Domain $email = ''; if ($row->student_uid != '') { $email = $row->student_uid. '@'. DOMAIN; } // private eMail-Adresse $email_privat = ''; $qry_privmail = " SELECT kontakt FROM public.tbl_kontakt WHERE zustellung = TRUE AND kontakttyp = 'email' AND person_id=". $db->db_add_param($row->pers_id). " ORDER BY insertamum DESC LIMIT 1; "; if ($privmail_result = $db->db_query($qry_privmail)) { if($db->db_num_rows($privmail_result) == 1) { if ($row_privmail = $db->db_fetch_object($privmail_result)) { $email_privat = $row_privmail->kontakt; } } } if($row->gebdatum<'1920-01-01' OR $row->gebdatum==null OR $row->gebdatum=='') { $error_log.=(!empty($error_log)?', ':'')."Geburtsdatum ('".$row->gebdatum."')"; } if($row->geschlecht!='m' && $row->geschlecht!='w' && $row->geschlecht!='x') { $error_log.=(!empty($error_log)?', ':'')."Geschlecht ('".$row->geschlecht."')"; } if($row->vorname=='' || $row->vorname==null) { $error_log.=(!empty($error_log)?', ':'')."Vorname ('".$row->vorname."')"; } if($row->nachname=='' || $row->nachname==null) { $error_log.=(!empty($error_log)?', ':'')."Nachname ('".$row->nachname."')"; } if($row->matr_nr=='') { $error_log.=(!empty($error_log)?', ':'')."Matrikelnummer fehlt"; } if($row->matr_nr!='' && $row->matr_nr!=null && mb_strlen(trim($row->matr_nr))!=8) { $error_log.=(!empty($error_log)?', ':'')."Matrikelnummer ('".trim($row->matr_nr)."') ist nicht 8 Zeichen lang"; } if($row->svnr!='' && $row->svnr!=null && mb_strlen(trim($row->svnr))!=10) { $error_log.=(!empty($error_log)?', ':'')."SVNR ('".trim($row->svnr)."') ist nicht 10 Zeichen lang"; } if($row->ersatzkennzeichen!='' && $row->ersatzkennzeichen!=null && mb_strlen(trim($row->ersatzkennzeichen))!=10) { $error_log.=(!empty($error_log)?', ':'')."Ersatzkennzeichen ('".trim($row->ersatzkennzeichen)."') ist nicht 10 Zeichen lang"; } 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_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) { $error_log.=(!empty($error_log)?', ':'')."Ersatzkennzeichen ('".$row->ersatzkennzeichen."') enthält Geburtsdatum (".$datum_obj->formatDatum($row->gebdatum,'d.m.Y').") nicht"; } if(($row->svnr=='' || $row->svnr==null)&&($row->ersatzkennzeichen=='' || $row->ersatzkennzeichen==null)) { $error_log.=(!empty($error_log)?', ':'')."SVNR ('".$row->svnr."') bzw. ErsKz ('".$row->ersatzkennzeichen."') fehlt"; } if($row->staatsbuergerschaft=='' || $row->staatsbuergerschaft==null) { $error_log.=(!empty($error_log)?', ':'')."Staatsbürgerschaft ('".$row->staatsbuergerschaft."')"; } if($plz=='' || $plz==null) { $error_log.=(!empty($error_log)?', ':'')."Heimat-PLZ ('".$plz."')"; } if($gemeinde=='' || $gemeinde==null) { $error_log.=(!empty($error_log)?', ':'')."Heimat-Gemeinde ('".$gemeinde."')"; } if($strasse=='' || $strasse==null) { $error_log.=(!empty($error_log)?', ':'')."Heimat-Strasse ('".$strasse."')"; } if($nation=='' || $nation==null) { $error_log.=(!empty($error_log)?', ':'')."Heimat-Nation ('".$nation."')"; } if($row->bpk == '' || $row->bpk == null) { $error_log_hinweis .= (!empty($error_log_hinweis) ? ', ' : '') . "bPK fehlt"; } if($row->bpk != '' && $row->bpk != null) { if (!preg_match('/[a-zA-Z0-9\+\/]{27}=/', $row->bpk)) { $error_log.=(!empty($error_log) ? ', ' : ''). "bPK-Zeichenfolge ist ungültig"; } if (strlen($row->bpk) != 28) { $error_log.=(!empty($error_log) ? ', ' : ''). "bPK ist nicht 28 Zeichen lang"; } } if (!$ausserordentlich && !$incoming) { if ($zustell_plz == '' || $zustell_plz == null) { $error_log.=(!empty($error_log)?', ':'')."Zustell-PLZ fehlt"; } if ($zustell_gemeinde == '' || $zustell_gemeinde == null) { $error_log.=(!empty($error_log)?', ':'')."Zustell-Gemeinde fehlt"; } if ($zustell_strasse == '' || $zustell_strasse == null) { $error_log.=(!empty($error_log)?', ':'')."Zustell-Strasse fehlt"; } if ($zustell_nation == '' || $zustell_nation == null) { $error_log.=(!empty($error_log)?', ':'')."Zustell-Nation fehlt"; } if ($email == '' || $email == null) { $error_log.=(!empty($error_log)?', ':'')."Studenten-eMail Adresse fehlt (keine Student-UID eingetragen)."; } } if(!$ausserordentlich) { if($row->zgv_code=='' || $row->zgv_code==null) { $error_log.=(!empty($error_log)?', ':'')."ZugangCode ('".$row->zgv_code."')"; } if($row->zgvdatum=='' || $row->zgvdatum==null) { $error_log.=(!empty($error_log)?', ':'')."ZugangDatum ('".$row->zgvdatum."')"; } else { if($row->zgvdatum>date("Y-m-d")) { $error_log.=(!empty($error_log)?', ':'')."ZugangDatum liegt in der Zukunft ('".$row->zgvdatum."')"; } } if($stgart==2) // Master-Studiengang { if($row->zgvmas_code=='' || $row->zgvmas_code==null) { $error_log.=(!empty($error_log)?', ':'')."ZugangMaCode ('".$row->zgvmas_code."')"; } if($row->zgvmadatum=='' || $row->zgvmadatum==null) { $error_log.=(!empty($error_log)?', ':'')."ZugangMaDatum ('".$row->zgvmadatum."')"; } else { if($row->zgvmadatum>date("Y-m-d")) { $error_log.=(!empty($error_log)?', ':'')."ZugangMaDatum liegt in der Zukunft ('".$row->zgvmadatum."')"; } if($row->zgvmadatum<$row->zgvdatum) { $error_log.=(!empty($error_log)?', ':'')."ZugangMaDatum ('".$row->zgvmadatum."') kleiner als Zugangdatum ('".$row->zgvdatum."')"; } if($row->zgvmadatum<$row->gebdatum) { $error_log.=(!empty($error_log)?', ':'')."ZugangMaDatum ('".$row->zgvmadatum."') kleiner als Geburtsdatum ('".$row->gebdatum."')"; } } } } $aktstatus_stsem = $ssem; //StudStatusCode und Semester ermitteln $qrystatus="SELECT * FROM public.tbl_prestudentstatus WHERE prestudent_id=".$db->db_add_param($row->prestudent_id)." AND studiensemester_kurzbz=".$db->db_add_param($ssem)." AND (tbl_prestudentstatus.datum<=".$db->db_add_param($bisdatum).") ORDER BY datum desc, insertamum desc, ext_id desc;"; if($resultstatus = $db->db_query($qrystatus)) { if($db->db_num_rows($resultstatus)>0) { if($rowstatus = $db->db_fetch_object($resultstatus)) { $qry1="SELECT count(*) AS dipl FROM public.tbl_prestudentstatus WHERE prestudent_id=".$db->db_add_param($row->prestudent_id)." AND (tbl_prestudentstatus.datum<=".$db->db_add_param($bisdatum).") AND status_kurzbz='Diplomand'"; if($result1 = $db->db_query($qry1)) { if($row1 = $db->db_fetch_object($result1)) { $sem=$rowstatus->ausbildungssemester; if($sem>$maxsemester) { $sem=$maxsemester; } if($row1->dipl>1) { $sem=50; } if($row1->dipl>3) { $sem=60; } } } if($rowstatus->status_kurzbz=="Student" || $rowstatus->status_kurzbz=="Outgoing" || $rowstatus->status_kurzbz=="Incoming" || $rowstatus->status_kurzbz=='Praktikant' || $rowstatus->status_kurzbz=="Diplomand") { $status=1; $meldestatus='I'; // Wiedereintrittsdatum // letzten Status des letzten Semesters holen $prestudent_last_status = new prestudent(); if ($prestudent_last_status->getLastStatus($row->prestudent_id, $psem)) { // Datum setzen wenn aktiver Status nach Unterbrecher if ($prestudent_last_status->status_kurzbz == 'Unterbrecher') $wiedereintrittsdatum = $rowstatus->datum; } } else if($rowstatus->status_kurzbz=="Unterbrecher" ) { $status=2; $meldestatus='U'; $qryVorherigerErsterStatus = " SELECT status.datum, status.status_kurzbz FROM public.tbl_prestudentstatus status JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz) WHERE prestudent_id = ".$db->db_add_param($row->prestudent_id)." AND sem.start::date <= (SELECT start from public.tbl_studiensemester WHERE studiensemester_kurzbz = ".$db->db_add_param($ssem).")::date ORDER BY sem.start DESC, status.datum DESC"; $unterbrechungsdatum = null; if($result_unt = $db->db_query($qryVorherigerErsterStatus)) { while($row_unt = $db->db_fetch_object($result_unt)) { if($row_unt->status_kurzbz === 'Unterbrecher') $unterbrechungsdatum = $row_unt->datum; else break; } } } else if($rowstatus->status_kurzbz=="Absolvent" ) { $status=3; $meldestatus='I'; } else if($rowstatus->status_kurzbz=="Abbrecher" ) { $status=4; $meldestatus='O'; // Checken, ob der Student Abbrecher vor der Meldung war und noch nie gemeldet wurde $qryAbbrecher = "SELECT * FROM public.tbl_prestudentstatus WHERE prestudent_id = ".$db->db_add_param($row->prestudent_id)." AND status_kurzbz='Student' AND datum <=".$db->db_add_param($bisprevious); if($resultAbbrecher = $db->db_query($qryAbbrecher)) { 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"; } } } else { $error_log.= (!empty($error_log)?', ':''). "$row->vorname $row->nachname wird nicht gemeldet da kein gueltiger Status vorhanden ist!"; return ''; } $aktstatus=$rowstatus->status_kurzbz; $aktstatus_datum=$rowstatus->datum; $storgform=$rowstatus->orgform_kurzbz; $aktstatus_stsem = $rowstatus->studiensemester_kurzbz; } } else { $qrystatus="SELECT * FROM public.tbl_prestudentstatus WHERE prestudent_id=".$db->db_add_param($row->prestudent_id)." AND studiensemester_kurzbz=".$db->db_add_param($psem)." AND (tbl_prestudentstatus.datum<=".$db->db_add_param($bisdatum).") ORDER BY datum desc, insertamum desc, ext_id desc;"; if($resultstatus = $db->db_query($qrystatus)) { if($rowstatus = $db->db_fetch_object($resultstatus)) { $qry1="SELECT count(*) AS dipl FROM public.tbl_prestudentstatus WHERE prestudent_id=".$db->db_add_param($row->prestudent_id)." AND status_kurzbz='Diplomand' AND (tbl_prestudentstatus.datum<=".$db->db_add_param($bisdatum).")"; if($result1 = $db->db_query($qry1)) { if($row1 = $db->db_fetch_object($result1)) { $sem=$rowstatus->ausbildungssemester; if($sem>$maxsemester) { $sem=$maxsemester; } if($row1->dipl>1) { $sem=50; } if($row1->dipl>3) { $sem=60; } } } // statuscode und meldestatus von studstatus ableiten if($ausserordentlich) { $status=1; $meldestatus='I'; } else if($rowstatus->status_kurzbz=="Incoming") { $status=1; $meldestatus='A'; } else if($rowstatus->status_kurzbz=="Absolvent" ) { $status=3; $meldestatus='I'; } else if($rowstatus->status_kurzbz=="Abbrecher" ) { $status=4; $meldestatus='O'; } else { $error_log.= (!empty($error_log)?', ':''). "$row->vorname $row->nachname wird nicht gemeldet da kein gueltiger Status vorhanden ist!"; return ''; } $aktstatus=$rowstatus->status_kurzbz; $aktstatus_datum=$rowstatus->datum; $storgform=$rowstatus->orgform_kurzbz; $aktstatus_stsem = $rowstatus->studiensemester_kurzbz; } else { $aktstatus=''; $storgform=''; $aktstatus_datum=''; $aktstatus_stsem=''; $sem=''; $error_log.= (!empty($error_log)?', ':''). "kein gueltiger Status vorhanden"; } } else { $aktstatus=''; $storgform=''; $aktstatus_datum=''; $aktstatus_stsem=''; $sem=''; $error_log.= (!empty($error_log)?', ':''). "kein gueltiger Status vorhanden"; } } } //Wenn im Status keine Organisationsform eingetragen ist, wird die des Studienganges uebernommen if($storgform=='') { // Wenn FHTW und studiengang_kz 10006 (Campus International) wird die OrgForm des Studiengangs vom Incoming ermittelt if (CAMPUS_NAME == 'FH Technikum Wien' && $stg_kz == 10006) { $studiengang = new studiengang($row->studiengang_kz); $storgform = $studiengang->orgform_kurzbz; } else { $storgform=$orgform_kurzbz; } } // **** GS Container ****/ $gsstatus=''; $gsblock=''; $gemeinsamestudien=false; $qrygs="SELECT tbl_mobilitaet.*, tbl_gsprogramm.programm_code, tbl_gsprogramm.studienkennung_uni, tbl_firma.partner_code FROM bis.tbl_mobilitaet LEFT JOIN bis.tbl_gsprogramm USING(gsprogramm_id) LEFT JOIN public.tbl_firma USING(firma_id) WHERE prestudent_id=".$db->db_add_param($row->prestudent_id)." AND (studiensemester_kurzbz=".$db->db_add_param($aktstatus_stsem)." OR (studiensemester_kurzbz=".$db->db_add_param($psem)." AND status_kurzbz = 'Absolvent')) ORDER BY tbl_mobilitaet.insertamum DESC limit 1;"; $studtyp = ''; if($resultgs = $db->db_query($qrygs)) { while($rowgs = $db->db_fetch_object($resultgs)) { $gsstatus = 'GS '.$rowgs->status_kurzbz.' '.$row->gsstudientyp_kurzbz; $gemeinsamestudien=true; $studtyp = $kodex_studientyp_array[$row->gsstudientyp_kurzbz]; $studstatuscode = (isset($kodex_studstatuscode_array[$rowgs->status_kurzbz])?$kodex_studstatuscode_array[$rowgs->status_kurzbz]:''); $gserror=''; if($studstatuscode=='') $gserror.="     Gemeinsame Studien - Status ist nicht gesetzt\n"; if($studtyp=='') $gserror.="     Gemeinsame Studien - Studientyp ist nicht gesetzt\n"; if($rowgs->partner_code=='') $gserror.="     Gemeinsame Studien - Partner Code ist leer\n"; if($rowgs->programm_code=='') $gserror.="     Gemeinsame Studien - Programm ist leer\n"; if($gserror!='') { $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; $v.=$gserror."\n"; return ''; } $gsblock.=" ".$rowgs->mobilitaetsprogramm_code." ".$rowgs->programm_code." ".$studtyp." ".$rowgs->partner_code." ".$rowgs->ausbildungssemester." ".$studstatuscode." ".(isset($rowgs->studienkennung_uni) ? "".$rowgs->studienkennung_uni."" : "")." "; if(!isset($gssem[$storgform][$rowgs->ausbildungssemester])) { $gssem[$storgform][$rowgs->ausbildungssemester]=0; } $gssem[$storgform][$rowgs->ausbildungssemester]++; } } //bei Absolventen das Beendigungsdatum (Sponsion oder Abschlussprüfung) überprüfen if($aktstatus=='Absolvent' && !$gemeinsamestudien) { $qry_ap="SELECT * FROM lehre.tbl_abschlusspruefung WHERE student_uid=".$db->db_add_param($row->student_uid)." AND abschlussbeurteilung_kurzbz!='nicht' AND abschlussbeurteilung_kurzbz IS NOT NULL"; if($result_ap = $db->db_query($qry_ap)) { $ap=0; while($row_ap = $db->db_fetch_object($result_ap)) { if($row_ap->datum=='' || $row_ap->datum==null) { $error_log.=(!empty($error_log)?', ':'')."Datum der Abschlussprüfung ('".$row_ap->datum."')"; } if($row_ap->sponsion=='' || $row_ap->sponsion==null) { $error_log_hinweis.=(!empty($error_log_hinweis)?', ':'')."Datum der Sponsion ('".$row_ap->sponsion."')"; } $ap++; } if($ap!=1) { $error_log.=(!empty($error_log)?', ':'').$ap." bestandene Abschlußprüfungen"; } } else { die("\nQry Failed:".$qry_ap); } } if($orgform_code_array[$storgform]!=1) // Wenn nicht Vollzeit { if($row->berufstaetigkeit_code=='' || $row->berufstaetigkeit_code==null) { $error_log.=(!empty($error_log)?', ':'')."Berufstätigkeitscode ('".$row->berufstaetigkeit_code."')"; } } if($aktstatus!='Incoming') { if(!$row->reihungstestangetreten) { $error_log.=(!empty($error_log)?', ':'')."Zum Reihungstest angetreten"; } if($sem==0) { $error_log.=(!empty($error_log)?', ':'')."Aktuelles Semester (Rolle) ('".$sem."')"; } } else { if($nation=='A' || $nation=='a') { $error_log.=(!empty($error_log)?', ':'')."Heimat-Nation bei Incoming('".$nation."')"; } } $qryad="SELECT * FROM public.tbl_prestudentstatus WHERE prestudent_id=".$db->db_add_param($row->prestudent_id)." AND (status_kurzbz='Student' OR status_kurzbz='Unterbrecher') AND (tbl_prestudentstatus.datum<=".$db->db_add_param($bisdatum).") ORDER BY datum asc;"; if($resultad = $db->db_query($qryad)) { if($rowad = $db->db_fetch_object($resultad)) { $beginndatum = $rowad->datum; } else $beginndatum=''; } $ausstellungsstaat=''; $ausstellungsstaat_master=''; if($row->zgvmanation!='' && $stgart==2) // Master $ausstellungsstaat_master = $row->zgvmanation; if($row->zgvnation!='') $ausstellungsstaat = $row->zgvnation; else $ausstellungsstaat = $row->ausstellungsstaat; if($ausstellungsstaat=='' && ($datumobj->mktime_fromdate($beginndatum) > $datumobj->mktime_fromdate('2011-04-15')) && !$ausserordentlich) { $error_log.=(!empty($error_log)?', ':'')."Ausstellungsstaat ist nicht eingetragen"; } if($error_log!='' OR $error_log1!='') { $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; if($error_log!='') { $v.="     Fehler: ".$error_log."\n"; } if($error_log1!='') { $v.="     ".$error_log1; } if($error_log_hinweis != '') { $v.="     ".$error_log_hinweis." (Nicht BIS-Relevant)\n"; $error_log_hinweis = ''; } $anzahl_fehler++; $v.="\n"; $error_log=''; $error_log1=''; return ''; } else { if($error_log_hinweis != '') { $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; $v.="     ".$error_log_hinweis." (Nicht BIS-Relevant)\n\n"; $error_log_hinweis = ''; } $datei .= " " . trim($row->matrikelnr) . ""; $datei .= " " . $row->matr_nr . ""; if (!$ausserordentlich) { $datei .= " " . $orgform_code_array[$storgform] . ""; } // duales studium if ($row->dual === 't') { $dualesstudium='J'; } else { $dualesstudium='N'; } $datei.=" ".$dualesstudium.""; $datei .= " " . date("dmY", $datumobj->mktime_fromdate($row->gebdatum)) . " " . strtoupper($row->geschlecht) . ""; if ($row->titelpre != '') { $datei .= " " . $row->titelpre . ""; } if ($row->titelpost != '') { $datei .= " " . $row->titelpost . ""; } $datei .= " " . $row->vorname . " " . $row->nachname . ""; if ($row->svnr != '') { $datei .= " " . $row->svnr . ""; } // Ersatzkennzeichen nur inkludieren wenn svnr nicht gesetzt if ($row->ersatzkennzeichen != '' && $row->svnr == null) { $datei .= " " . $row->ersatzkennzeichen . ""; } if($row->bpk != '' && $row->bpk != null) { $datei.=" ".$row->bpk.""; } $datei .= " " . $row->staatsbuergerschaft . " " . $plz . " " . $gemeinde . " " . $nation . ""; $datei .= " " . $zustell_plz . " " . $zustell_gemeinde . " " . $zustell_strasse . " " . $zustell_nation . ""; if ($co_name != '') { $datei .= " " . $co_name . " "; } if ($email_privat != '') { $datei .= " " . $email_privat . ""; } if ($email != '') { $datei .= " " . $email . ""; } if(!$ausserordentlich) { $datei.=" ".$row->zgv_code.""; $datei.=" ".date("dmY", $datumobj->mktime_fromdate($row->zgvdatum)).""; if($aktstatus!='Incoming') { if($row->zgvnation!='') $ausstellungsstaat = $row->zgvnation; else $ausstellungsstaat = $row->ausstellungsstaat; if($ausstellungsstaat!='' && ($datumobj->mktime_fromdate($beginndatum) > $datumobj->mktime_fromdate('2011-04-15'))) { $datei.=' '.$ausstellungsstaat.''; } } } if($stgart==2) // Master-Studiengang { $datei.=" ".$row->zgvmas_code.""; $datei.=" ".date("dmY", $datumobj->mktime_fromdate($row->zgvmadatum)).""; if($aktstatus!='Incoming' && !$ausserordentlich) { if($row->zgvmanation!='') $ausstellungsstaat_master = $row->zgvmanation; if($ausstellungsstaat_master!='' && ($datumobj->mktime_fromdate($beginndatum) > $datumobj->mktime_fromdate('2011-04-15'))) { $datei.=' '.$ausstellungsstaat_master.''; } } } if($beginndatum!='' && !$ausserordentlich && $studtyp!='E') { $datei.=" ".date("dmY", $datumobj->mktime_fromdate($beginndatum)).""; } if(($aktstatus=='Absolvent' || $aktstatus=='Abbrecher') && $studtyp!='E') { $datei.=" ".date("dmY", $datumobj->mktime_fromdate($aktstatus_datum)).""; } if(isset($unterbrechungsdatum)) { $datei.=" ".date("dmY", $datumobj->mktime_fromdate($unterbrechungsdatum)).""; } if(isset($wiedereintrittsdatum)) { $datei.=" ".date("dmY", $datumobj->mktime_fromdate($wiedereintrittsdatum)).""; } /* Ausbildungssemester nicht anzeigen wenn Incoming Ausserordentlich Studierender */ if($aktstatus!='Incoming' && !$ausserordentlich && $studtyp!='E') { $datei.=" ".$sem.""; } if($studtyp!='E') { $datei.=" ".$status.""; } // IO container query $qryio="SELECT * FROM bis.tbl_bisio WHERE student_uid=".$db->db_add_param($row->student_uid)." AND (von>".$db->db_add_param($bisprevious)." OR bis IS NULL OR bis>".$db->db_add_param($bisprevious).") AND von<=".$db->db_add_param($bisdatum).";"; $ioresults=$db->db_query($qryio); // wenn Mobilität vorhanden, meldestatus auf Auslandsaufenthalt setzen if($db->db_num_rows($ioresults)>0) $meldestatus='A'; $datei.=" ".$meldestatus.""; if($orgform_code_array[$storgform]!=1 && !$ausserordentlich) // Wenn nicht Vollzeit und nicht Ausserordentlich { $datei.=" ".$row->berufstaetigkeit_code.""; } if(!$ausserordentlich) { $datei.=" ".$row->bis_standort_code.""; } /* * BMWFFoerderrung derzeit fuer alle Studierende auf Ja gesetzt * Ausnahme: * ausserordnetliche Studierende * Incoming * Externe Teilnehmer an Gemeinsamen Studien * * ToDo: sollte pro Studierenden konfigurierbar sein */ //if($aktstatus=='Incoming' || $ausserordentlich // || ($gemeinsamestudien && $kodex_studientyp_array[$row->gsstudientyp_kurzbz]=='E')) // $bmwf='N'; //else // $bmwf='J'; if ($row->pre_foerderrelevant === true) { $bmwf='J'; } else if ($row->pre_foerderrelevant === false) { $bmwf='N'; } else if ($row->stg_foerderrelevant === true) { $bmwf='J'; } else { $bmwf='N'; } $datei.=" ".$bmwf.""; // **** IO Container ****/ $outgoing_count=0; if($resultio = $db->db_query($qryio)) { while($rowio = $db->db_fetch_object($resultio)) { $mob=$rowio->mobilitaetsprogramm_code; $gast=$rowio->nation_code; $herkunft=$rowio->herkunftsland_code; $avon=date("dmY", $datumobj->mktime_fromdate($rowio->von)); $abis=date("dmY", $datumobj->mktime_fromdate($rowio->bis)); $adauer = (is_null($rowio->von) || is_null($rowio->bis)) ? null : $datumobj->DateDiff($rowio->von, $rowio->bis); // Aufenthaltszweckcode -------------------------------------------------------------------------------- $bisio_zweck = new bisio(); $bisio_zweck->getZweck($rowio->bisio_id); $zweck_code_arr = array(); // Es muss immer mindestens 1 Aufenthaltszweck geben if (count($bisio_zweck->result) == 0) { $error_log_io .= (!empty($error_log_io) ? ', ' : ''). "Es muss mindestens ein Aufenthaltszweck eingetragen sein"; } // Bei Incomings... if ($aktstatus == 'Incoming') { // ...max 1 Aufenthaltszweck if (count($bisio_zweck->result) > 1) { $error_log_io .= (!empty($error_log_io) ? ', ' : ''). "Es sind". count($bisio_zweck->result). " Aufenthaltszwecke eingetragen (max. 1 Zweck für Incomings)"; } //...nur Zweck 1, 2 oder 3 erlaubt if (count($bisio_zweck->result) == 1 && empty(array_intersect(array(1, 2, 3), array_column($bisio_zweck->result, 'zweck_code')))) { $error_log_io .= (!empty($error_log_io) ? ', ' : ''). "Aufenthaltszweckcode ist ". $bisio_zweck->result[0]->zweck_code. " (für Incomings ist nur Zweck 1, 2, 3 erlaubt)"; } } foreach ($bisio_zweck->result as $row_zweck) { // Nur eindeutige Werte (bei Mehrfachangaben; trifft auf Outgoings zu) if (!in_array($row_zweck->zweck_code, $zweck_code_arr)) { // Aufenthaltszweck 1, 2, 3 nicht gemeinsam melden if (in_array(1,$zweck_code_arr) && in_array(2,$zweck_code_arr) && in_array(3,$zweck_code_arr)) { $error_log_io .= (!empty($error_log_io) ? ', ' : ''). "Aufenthaltzweckcode 1, 2, 3 dürfen nicht gemeinsam gemeldet werden"; } $zweck_code_arr []= $row_zweck->zweck_code; } } // Aufenthaltfoerderungscode --------------------------------------------------------------------------- $aufenthaltfoerderung_code_arr = array(); // Nur bei Outgoings Aufenthaltsfoerderungscode melden if ($aktstatus != 'Incoming') { $bisio_foerderung = new bisio(); $bisio_foerderung->getFoerderungen($rowio->bisio_id); // ... mindestens 1 Aufenthaltfoerderung melden, wenn Auslandsaufenthalt >= 29 Tage if ((!$bisio_foerderung->result || count($bisio_foerderung->result) == 0) && $adauer >= 29) { $error_log_io .= (!empty($error_log_io) ? ', ' : '') . "Keine Aufenthaltsfoerderung angegeben (bei Outgoings >= 29 Tage Monat im Ausland muss mind. 1 gemeldet werden)"; } foreach ($bisio_foerderung->result as $row_foerderung) { // ...wenn code = 5, nur ein Wert erlaubt (keine Mehrfachangaben) if ($row_foerderung->aufenthaltfoerderung_code == 5) { unset($aufenthaltfoerderung_code_arr); $aufenthaltfoerderung_code_arr [] = $row_foerderung->aufenthaltfoerderung_code; break; } // nur eindeutige Werte if (!in_array($row_foerderung->aufenthaltfoerderung_code, $aufenthaltfoerderung_code_arr)) { $aufenthaltfoerderung_code_arr [] = $row_foerderung->aufenthaltfoerderung_code; } } if($datumobj->mktime_fromdate($rowio->bis) < $datumobj->mktime_fromdate($bisdatum)) $aufenthalt_finished = true; else $aufenthalt_finished = false; if ($rowio->ects_erworben == '' && $adauer >= 29 && $aufenthalt_finished) { $error_log_io .= (!empty($error_log_io) ? ', ' : '') . "Erworbene ECTS fehlen (Meldepflicht bei Outgoings >= 29 Tage Monat im Ausland)"; } if ($rowio->ects_angerechnet == '' && $adauer >= 29 && $aufenthalt_finished) { $error_log_io .= (!empty($error_log_io) ? ', ' : '') . "Angerechnete ECTS fehlen (Meldepflicht bei Outgoings >= 29 Tage Monat im Ausland)"; } } // Bei validen Daten errorlog ausgeben if($error_log_io != '') { $v.="Bei Student (UID, Nachname, Vorname) '".$row->student_uid."', '".$row->nachname."', '".$row->vorname."' ($laststatus->status_kurzbz): \n"; if($error_log_io != '') { $v.="      Fehler: ".$error_log_io. "\n"; } $v.="\n"; $error_log_io = ''; return ''; } // Bei validen Daten XML-Datensatz bauen else { $datei.=" ".$mob." ".$gast." ".$herkunft." ".$avon.""; if($datumobj->mktime_fromdate($rowio->bis)<$datumobj->mktime_fromdate($bisdatum) && $datumobj->mktime_fromdate($rowio->bis)>$datumobj->mktime_fromdate($bisprevious)) { $datei.=" ".$abis.""; } foreach ($zweck_code_arr as $zweck) { $datei.=" ". $zweck. ""; } if ($aktstatus != 'Incoming' && $rowio->ects_erworben != '') { $datei.=" ".round($rowio->ects_erworben).""; } if ($aktstatus != 'Incoming' && $rowio->ects_angerechnet != '') { $datei.=" ".round($rowio->ects_angerechnet).""; } foreach ($aufenthaltfoerderung_code_arr as $aufenthaltfoerderung_code) { $datei.=" ". $aufenthaltfoerderung_code. ""; } $datei.=" "; } if($aktstatus!='Incoming') { if(!isset($iosem[$storgform][$sem])) { $iosem[$storgform][$sem]=0; } $iosem[$storgform][$sem]++; $outgoing_count++; } else { if(!isset($iosem[0])) { $iosem[0]=0; } $iosem[0]++; } } } $datei.= $gsblock; $datei.=" "; // Aktive Studierende - keine Incoming, keine Externen GS if(($aktstatus=='Student' || $aktstatus=='Diplomand' || $aktstatus=='Praktikant' || $aktstatus=='Outgoing') && !($gemeinsamestudien && $kodex_studientyp_array[$row->gsstudientyp_kurzbz]=='E')) { if(!isset($stsem[$storgform][$sem])) { $stsem[$storgform][$sem]=0; } $stsem[$storgform][$sem]++; } if($aktstatus=='Unterbrecher') { if(!isset($usem[$storgform][$sem])) { $usem[$storgform][$sem]=0; } $usem[$storgform][$sem]++; } if($aktstatus=='Abbrecher') { if(!isset($asem[$storgform][$sem])) { $asem[$storgform][$sem]=0; } $asem[$storgform][$sem]++; } if($aktstatus=='Absolvent') { if(!isset($absem[$storgform][$sem])) { $absem[$storgform][$sem]=0; } $absem[$storgform][$sem]++; } } if(!in_array($storgform, $verwendete_orgformen)) $verwendete_orgformen[]=$storgform; $status = ''; if($gsstatus!='') $status = $gsstatus; else $status = $aktstatus; if($outgoing_count>0) { $status .= ' ( Outgoing '; if($outgoing_count>1) $status.= $outgoing_count.'x'; $status .= ')'; } //Studentenliste $stlist.=" ".trim($row->student_uid)." ".trim($row->matrikelnr)." ".trim($row->nachname)." ".trim($row->vorname)." ".$status." ".trim($sem)." ".trim($storgform)." "; return $datei; } /** * Erstellt die Bewerbermeldung * * Wenn der Parameter orgformcode uebergeben wird, werden nur die Bewerberzahlen dieser Orgform geliefert * sonst alle */ function GenerateXMLBewerberBlock($studiengang_kz, $orgformcode=null) { global $db; global $ssem, $stgart, $psem; global $bisdatum; global $bwlist, $orgform_kurzbz; global $bewerbercount,$orgform_code_array; $datei = ''; $bewerberM=array(); $bewerberW=array(); if(mb_strstr($ssem,"WS")) { //Bewerber $qrybw=" SELECT *, transform_geschlecht(tbl_person.geschlecht, tbl_person.gebdatum) as geschlecht_imputiert FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) JOIN public.tbl_person USING(person_id) LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) WHERE (studiensemester_kurzbz=".$db->db_add_param($ssem)." OR studiensemester_kurzbz=".$db->db_add_param($psem).") AND tbl_prestudent.studiengang_kz=".$db->db_add_param($studiengang_kz)." AND (tbl_prestudentstatus.datum<=".$db->db_add_param($bisdatum).") AND status_kurzbz='Bewerber' AND reihungstestangetreten "; if(!is_null($orgformcode)) $qrybw.=" AND tbl_orgform.code=".$db->db_add_param($orgformcode); if($resultbw = $db->db_query($qrybw)) { while($rowbw = $db->db_fetch_object($resultbw)) { // Bachelor / Diplom if(($stgart==1 || $stgart==3) && $rowbw->zgv_code!=NULL) { if(strtoupper($rowbw->geschlecht_imputiert)=='M') { if(!isset($bewerberM[$rowbw->zgv_code])) { $bewerberM[$rowbw->zgv_code]=0; } $bewerberM[$rowbw->zgv_code]++; } else { if(!isset($bewerberW[$rowbw->zgv_code])) { $bewerberW[$rowbw->zgv_code]=0; } $bewerberW[$rowbw->zgv_code]++; } } // Master if($stgart==2 && $rowbw->zgvmas_code!=NULL) { if(strtoupper($rowbw->geschlecht_imputiert)=='M') { if(!isset($bewerberM[$rowbw->zgvmas_code])) { $bewerberM[$rowbw->zgvmas_code]=0; } $bewerberM[$rowbw->zgvmas_code]++; } else { if(!isset($bewerberW[$rowbw->zgvmas_code])) { $bewerberW[$rowbw->zgvmas_code]=0; } $bewerberW[$rowbw->zgvmas_code]++; } } $bworgform = ($rowbw->orgform_kurzbz!=''?$rowbw->orgform_kurzbz:$orgform_kurzbz); if(isset($bewerbercount[0])) $bewerbercount[0]++; else $bewerbercount[0]=1; if(isset($bewerbercount[$bworgform])) $bewerbercount[$bworgform]++; else $bewerbercount[$bworgform]=1; if($rowbw->geschlecht_imputiert!=$rowbw->geschlecht) $geschlecht_imputiert = ' -> '.$rowbw->geschlecht_imputiert; else $geschlecht_imputiert = ''; $bwlist.=' '.trim($rowbw->nachname).' '.trim($rowbw->vorname).' '.$bworgform.' '.$rowbw->geschlecht.$geschlecht_imputiert.' '; } } foreach(array_keys($bewerberM) as $key) if(!isset($bewerberW[$key])) $bewerberW[$key]=0; foreach(array_keys($bewerberW) as $key) { if(!isset($bewerberM[$key])) $bewerberM[$key]=0; $datei.=" ".$orgform_code_array[$bworgform].""; if($stgart==2) $datei.=' '.$key.''; else $datei.=' '.$key.''; $datei.=' '.$bewerberM[$key].' '.$bewerberW[$key].' '; } } return $datei; } ?>