Files
FHC-Core/system/sync/stp/check_prestudentrolle.php
T
Rudolf Hangl 660e277e2e
2008-02-15 15:20:37 +00:00

404 lines
14 KiB
PHP

<?php
/* Copyright (C) 2008 Technikum-Wien
*
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
//*
//* Synchronisiert Prestudentrollendatensaetze von FAS DB in PORTAL DB
//*
//*
//* setzt voraus: sync von sync.stp_person, sync.stp_staat
//* benoetigt: tbl_syncperson, tbl_studiensemester
require_once('sync_config.inc.php');
require_once('../../../include/functions.inc.php');
$starttime=time();
$conn=pg_connect(CONN_STRING)
or die("Connection zur FH-Complete Datenbank fehlgeschlagen");
function myaddslashes($var)
{
return ($var!=''?"'".addslashes($var)."'":'null');
}
$error_log='';
$error_log_ext='';
$error_log1='';
$ausgabe="";
$text = '';
$error = '';
$cont='';
$anzahl_quelle=0;
$eingefuegt=0;
$fehler=0;
$update=0;
$plausi='';
$start='';
$stg='';
$Kalender='';
$rolle='';
$iu='';
$log_qry_ins='';
$beginnsem='';
$semstart=array();
$semende=array();
$studiensemester=array();
$maxsemester=array();
$semdiff=0;
$instg='';
$rolle_kurzbz='';
$i=0;
/*************************
* StP-PORTAL - Synchronisation
*/
?>
<html>
<head>
<title>Check - StPoelten - Prestudentrollen (Lückenfüller)</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$start=date("d.m.Y H:i:s");
//einlesen von studiensemesterdaten in arrays
$qry="SELECT * FROM public.tbl_studiensemester ORDER BY start;";
if($result = pg_query($conn,$qry))
{
while($row=pg_fetch_object($result))
{
$studiensemester[$i]=$row->studiensemester_kurzbz;
$semstart[$row->studiensemester_kurzbz]=$row->start;
$semende[$row->studiensemester_kurzbz]=$row->ende;
$i++;
}
}
//einlesen von studiendauer der stg in array
$qry="SELECT * FROM public.tbl_studiengang;";
if($result = pg_query($conn,$qry))
{
while($row=pg_fetch_object($result))
{
$maxsemester[$row->studiengang_kz]=$row->max_semester;
}
}
//$adress="ruhan@technikum-wien.at";
//*********** Neue Daten holen *****************
$qry="SELECT __Person, chtitel, chnachname, chvorname, daEintrittDat, prestudent_id
FROM sync.stp_person JOIN public.tbl_prestudent ON (__Person=ext_id)
WHERE (_cxPersonTyp='1' OR _cxPersonTyp='2');";
//alle prestudentrollen sortiert nach datum desc
//bis zu Semester von daEintrittDat fehlende Rollen eintragen - vergleich studiensemester mit getStudiensemesterFromDatum($conn, $datum, $naechstes=true) von deintrittdat
if($resultall = pg_query($conn,$qry))
{
$anzahl_gesamt=pg_num_rows($resultall);
$error_log_ext.="Anzahl der Datensätze: ".$anzahl_gesamt."\n";
echo nl2br($error_log_ext);
while($rowall=pg_fetch_object($resultall))
{
//echo nl2br("\n".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname));
$cont='';
if($rowall->daeintrittdat==NULL || $rowall->daeintrittdat=='')
{
$error_log1.="\nKein Eintrittsdatum eingetragen";
$cont=true;
$error=true;
}
if($error)
{
$error_log.="\n*****\n".$rowall->__person." - ".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname).": ".$error_log1;
$error_log1='';
$error=false;
if($cont)
{
$fehler++;
continue;
}
}
$qry_pre="SELECT * FROM public.tbl_prestudent WHERE prestudent_id=".myaddslashes($rowall->prestudent_id).";";
if($resultpre = pg_query($conn,$qry_pre))
{
if($rowpre=pg_fetch_object($resultpre))
{
//Studiengang des aktuellen prestudenten
$instg=$rowpre->studiengang_kz;
}
}
else
{
$fehler++;
$error_log.= "\n".$qry_rl."\n".pg_last_error($conn)."\n";
}
$qry_rl="SELECT * FROM public.tbl_prestudentrolle WHERE prestudent_id=".myaddslashes($rowall->prestudent_id)." ORDER BY datum desc LIMIT 1";
if($resultrl = pg_query($conn,$qry_rl))
{
if($rowrl=pg_fetch_object($resultrl))
{
$beginnsem=getStudiensemesterFromDatum($conn, $rowall->daeintrittdat, true);
if($rowrl->ausbildungssemester==NULL || $rowrl->ausbildungssemester=='')
{
$error_log.="\n*****\n".$rowall->__person." - ".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname)." (Prestudent ".$rowall->prestudent_id.")";
$error_log.="\nAusbildungssemester = ".$rowrl->ausbildungssemester." !";
$fehler++;
}
else
{
//wieviele semester seit studienbeginn
$semdiff=array_search($rowrl->studiensemester_kurzbz, $studiensemester)-array_search($beginnsem, $studiensemester)+1;
if($semdiff<1)
{
$semdiff=1;
}
$ausgabe.="\n*****\n".$rowall->__person." - ".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname).": ".$rowall->daeintrittdat."/".$beginnsem." (Prestudent ".$rowall->prestudent_id.")";
$ausgabe.="\nAusbildungssemester = ".$rowrl->ausbildungssemester." / semdiff= ".$semdiff.".";
while (array_search($rowrl->studiensemester_kurzbz, $studiensemester)>=array_search($beginnsem, $studiensemester))
{
if($semdiff>=$maxsemester[$instg])
{
$rolle_kurzbz="Diplomand";
}
else
{
$rolle_kurzbz="Student";
}
if($semdiff>$maxsemester[$instg])
{
$ausbsem=$maxsemester[$instg];
}
else
{
$ausbsem=$semdiff;
}
$qry_chk="SELECT * FROM public.tbl_prestudentrolle
WHERE prestudent_id=".myaddslashes($rowall->prestudent_id)."
AND studiensemester_kurzbz=".myaddslashes($rowrl->studiensemester_kurzbz)."
AND rolle_kurzbz=".myaddslashes($rolle_kurzbz)."
AND ausbildungssemester=".myaddslashes($ausbsem).";";
if($resultchk = pg_query($conn,$qry_chk))
{
if(pg_num_rows($resultchk)==0)
{
//INSERT Prestudentrolle
if($rowrl->studiensemester_kurzbz==$beginnsem)
{
$rowrl->datum=$rowall->daeintrittdat;
}
$qry_ins="INSERT INTO public.tbl_prestudentrolle (prestudent_id, rolle_kurzbz,
studiensemester_kurzbz, ausbildungssemester,datum, orgform_kurzbz,
insertamum, insertvon, updateamum, updatevon, ext_id)
VALUES (".
myaddslashes($rowall->prestudent_id).", ".
myaddslashes($rolle_kurzbz).", ".
myaddslashes($rowrl->studiensemester_kurzbz).", ";
//wenn semdiff>maxsemester dann maxsemester sonst semdiff
if($semdiff>$maxsemester[$instg])
{
$qry_ins.=myaddslashes($maxsemester[$instg]).", ";
}
else
{
$qry_ins.=myaddslashes($semdiff).", ";
}
$qry_ins.=myaddslashes($rowrl->datum).", ".
myaddslashes($rowrl->orgform_kurzbz).",
now(), 'SYNC', NULL, NULL, NULL)";
if(!$resultins = pg_query($conn,$qry_ins))
{
$fehler++;
$error_log.="\n*****\n".$rowall->__person." - ".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname).": ".$rowall->daeintrittdat;
$error_log.= "\n".$qry_ins."\n".pg_last_error($conn)."\n";
}
else
{
$eingefuegt++;
//$ausgabe.="\n---".$qry_ins;
$ausgabe.="\n---".$rowrl->studiensemester_kurzbz.": ".($semdiff>=$maxsemester[$instg]?'Diplomand':'Student').", ".($semdiff>$maxsemester[$instg]?$maxsemester[$instg]:$semdiff).".Semester, Datum: ".$rowrl->datum.", Orgform: ".$rowrl->orgform_kurzbz.";";
}
}
else
{
$qry_chk='';
if($row_chk=pg_fetch_object($resultchk))
{
if($semdiff>=$maxsemester[$instg])
{
if($row_chk->rolle_kurzbz!='Diplomand')
{
$qry_chk="rolle_kurzbz='Diplomand', ";
}
}
else
{
if($row_chk->rolle_kurzbz!='Student')
{
$qry_chk="rolle_kurzbz='Student', ";
}
}
if($semdiff>$maxsemester[$instg])
{
if($row_chk->ausbildungssemester!=$maxsemester[$instg])
{
$qry_chk.="ausbildungssemester=".myaddslashes($maxsemester[$instg]).", ";
}
}
else
{
if($row_chk->ausbildungssemester!=$semdiff)
{
$qry_chk.="ausbildungssemester=".myaddslashes($semdiff).", ";
}
}
if($row_chk->datum!=$rowrl->datum)
{
$qry_chk.="datum=".myaddslashes($rowrl->datum).", ";
}
if($row_chk->orgform_kurzbz!=$rowrl->orgform_kurzbz)
{
$qry_chk.="orgform_kurzbz=".myaddslashes($rowrl->orgform_kurzbz).", ";
}
if($qry_chk!='')
{
$qry_upd="UPDATE public.tbl_prestudentrolle SET ".$qry_chk."updateamum=now(), updatevon='sync'
WHERE prestudent_id=".myaddslashes($rowall->prestudent_id)."
AND studiensemester_kurzbz=".myaddslashes($rowrl->studiensemester_kurzbz)."
AND rolle_kurzbz=".myaddslashes($rolle_kurzbz)."
AND ausbildungssemester=".$ausbsem.";";
if(!$resultins = pg_query($conn,$qry_upd))
{
$fehler++;
$error_log.="\n*****\n".$rowall->__person." - ".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname).": ".$rowall->daeintrittdat;
$error_log.= "\n".$qry_upd."\n".pg_last_error($conn)."\n";
}
else
{
$eingefuegt++;
//$ausgabe.="\n---".$qry_ins;
$ausgabe.="\n---".$qry_chk.";";
}
}
else
{
$ausgabe.="\nEintrag in Semester ".$rowrl->studiensemester_kurzbz." bereits vorhanden!";
}
}
}
}
//studiensemester, ausbildungssemester, datum
if(array_search($rowrl->studiensemester_kurzbz, $studiensemester)-1>=array_search($beginnsem,$studiensemester))
{
$rowrl->studiensemester_kurzbz=$studiensemester[array_search($rowrl->studiensemester_kurzbz, $studiensemester)-1];
//ausbildungssemester nicht kleiner als 1
if($semdiff>1)
{
//$rowrl->ausbildungssemester=$rowrl->ausbildungssemester-1;
$semdiff=$semdiff-1;
}
else
{
//$rowrl->ausbildungssemester=1;
$semdiff=1;
}
$rowrl->datum=$semstart[$rowrl->studiensemester_kurzbz];
}
else
{
break;
}
}
//Interessent (6Mon.) und Bewerber (4Mon.) eintragen
if($rowrl->studiensemester_kurzbz==$beginnsem)
{
$rowrl->datum=$rowall->daeintrittdat;
}
$qry_chk="SELECT * FROM public.tbl_prestudentrolle WHERE prestudent_id=".myaddslashes($rowall->prestudent_id)." AND rolle_kurzbz='Bewerber';";
if($resultchk = pg_query($conn,$qry_chk))
{
if(pg_num_rows($resultchk)==0)
{
$qry_ins="INSERT INTO public.tbl_prestudentrolle (prestudent_id, rolle_kurzbz,
studiensemester_kurzbz, ausbildungssemester,datum, orgform_kurzbz,
insertamum, insertvon, updateamum, updatevon, ext_id)
VALUES (".
myaddslashes($rowall->prestudent_id).",
'Bewerber', ".
myaddslashes($rowrl->studiensemester_kurzbz).", ".
myaddslashes($semdiff).", ".
myaddslashes(date('Y-m-d', strtotime($rowrl->datum.' -4 months'))).", ".
myaddslashes($rowrl->orgform_kurzbz).",
now(), 'SYNC', NULL, NULL, NULL)";
if(!$resultins = pg_query($conn,$qry_ins))
{
$fehler++;
$error_log.="\n*****\n".$rowall->__person." - ".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname).": ".$rowall->daeintrittdat;
$error_log.= "\n".$qry_ins."\n<strong>".pg_last_error($conn)." </strong>\n";
}
else
{
$eingefuegt++;
$ausgabe.="\n---".$rowrl->studiensemester_kurzbz.": Bewerber, ".$semdiff.".Semester , Datum: ".date('Y-m-d', strtotime($rowrl->datum.' -4 months')).", Orgform: ".$rowrl->orgform_kurzbz.";";
//$ausgabe.="\n".$qry_ins;
}
}
}
$qry_chk="SELECT * FROM public.tbl_prestudentrolle WHERE prestudent_id=".myaddslashes($rowall->prestudent_id)." AND rolle_kurzbz='Interessent';";
if($resultchk = pg_query($conn,$qry_chk))
{
if(pg_num_rows($resultchk)==0)
{
$qry_ins="INSERT INTO public.tbl_prestudentrolle (prestudent_id, rolle_kurzbz,
studiensemester_kurzbz, ausbildungssemester,datum, orgform_kurzbz,
insertamum, insertvon, updateamum, updatevon, ext_id)
VALUES (".
myaddslashes($rowall->prestudent_id).",
'Interessent', ".
myaddslashes($rowrl->studiensemester_kurzbz).", ".
myaddslashes($semdiff).", ".
myaddslashes(date('Y-m-d', strtotime($rowrl->datum.' -6 months'))).", ".
myaddslashes($rowrl->orgform_kurzbz).",
now(), 'SYNC', NULL, NULL, NULL)";
if(!$resultins = pg_query($conn,$qry_ins))
{
$fehler++;
$error_log.="\n*****\n".$rowall->__person." - ".trim($rowall->chtitel)." ".trim($rowall->chnachname).", ".trim($rowall->chvorname).": ".$rowall->daeintrittdat;
$error_log.= "\n".$qry_ins."\n<strong>".pg_last_error($conn)." </strong>\n";
}
else
{
$update++;
$ausgabe.="\n---".$rowrl->studiensemester_kurzbz.": Interessent, ".$semdiff.".Semester , Datum: ".$new_date = date('Y-m-d', strtotime($rowrl->datum.' -6 months')).", Orgform: ".$rowrl->orgform_kurzbz.";";
}
}
}
}
}
}
else
{
$fehler++;
$error_log.= "\n".$qry_rl."\n".pg_last_error($conn)."\n";
}
}
}
echo nl2br($ausgabe);
mail($adress, 'SYNC-Fehler StP-Prestudentrollen von '.$_SERVER['HTTP_HOST'], $error_log,"From: nsc@fhstp.ac.at");
mail($adress, 'SYNC StP-Prestudentrollen von '.$_SERVER['HTTP_HOST'], "Sync Person\n------------\n\n"
."Personen: Gesamt: ".$anzahl_gesamt." / Fehler: ".$fehler." / Eingefügte Rollen: ".$eingefuegt." Geändert: ".$update
."\n\nBeginn: ".$start."\nEnde: ".date("d.m.Y H:i:s")."\n\n".$ausgabe, "From: nsc@fhstp.ac.at");
?>
</body>
</html>