* 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 '';
}
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="