diff --git a/admin/sync/fas/sync_fas_portal_student.php b/admin/sync/fas/sync_fas_portal_student.php index a443b5f57..a1bc2129f 100644 --- a/admin/sync/fas/sync_fas_portal_student.php +++ b/admin/sync/fas/sync_fas_portal_student.php @@ -25,7 +25,6 @@ */ require_once('../../../vilesci/config.inc.php'); - $conn=pg_connect(CONN_STRING) or die("Connection zur Portal Datenbank fehlgeschlagen"); $conn_fas=pg_connect(CONN_STRING_FAS) or die("Connection zur FAS Datenbank fehlgeschlagen"); @@ -34,6 +33,16 @@ $text = ''; $anzahl_eingefuegt=0; $anzahl_fehler=0; +$new_person=false; +$new_prestudent=false; +$new_student=false; +$new_benutzer=false; + +function addslashes($var) +{ + return ($var!=''?"'".addslashes($var)."'":'null'); +} + // *********************************** // * VILESCI->PORTAL - Synchronisation // *********************************** @@ -84,7 +93,7 @@ if($result = pg_query($conn_fas, $qry)) $aufmerksam_kurzbz=$row->aufmerksamdurch; $person_id=''; $studiengang_kz=''; - $beruftaetigkeit_code=$row->berufstaetigkeit; + $berufstaetigkeit_code=$row->berufstaetigkeit; $ausbildungcode=''; $zgv_code=$row->zgv; $zgvort=$row->zgvort; @@ -94,7 +103,7 @@ if($result = pg_query($conn_fas, $qry)) $zgvmadatum=$row->zgvmagisterdatum; $facheinschlberuf=($row->berufstätigkeit=='J'?true:false); $reihungstest_id=''; - $punkte=''; + $punkte=$row->punkte; $ext_id_pre=$row->person_pk; $anmeldungreihungstest=''; @@ -142,7 +151,7 @@ if($result = pg_query($conn_fas, $qry)) } //Start der Transaktion - pg_query($this->conn,'BEGIN;'); + pg_query($conn,'BEGIN;'); //Reihenfolge: person - prestudent - student - benutzer @@ -197,7 +206,6 @@ if($result = pg_query($conn_fas, $qry)) { $new_person=false; $person_id=$rowz->person_id; - //echo nl2br("update3 von ".$row->uid.", ".$row->familienname."\n"); } else { @@ -209,7 +217,6 @@ if($result = pg_query($conn_fas, $qry)) { //insert $new_person=true; - //echo nl2br("insert von ".$row->uid.", ".$row->familienname."\n"); } } } @@ -219,32 +226,550 @@ if($result = pg_query($conn_fas, $qry)) if(new_person) { //insert person - + $qry = 'INSERT INTO public.tbl_person (sprache, anrede, titelpost, titelpre, nachname, vorname, vornamen, + gebdatum, gebort, gebzeit, foto, anmerkungen, homepage, svnr, ersatzkennzeichen, + familienstand, anzahlkinder, aktiv, insertamum, insertvon, updateamum, updatevon, + geschlecht, geburtsnation, staatsbuergerschaft, ext_id) + VALUES('.$this->addslashes($sprache).','. + $this->addslashes($anrede).','. + $this->addslashes($titelpost).','. + $this->addslashes($titelpre).','. + $this->addslashes($nachname).','. + $this->addslashes($vorname).','. + $this->addslashes($vornamen).','. + $this->addslashes($gebdatum).','. + $this->addslashes($gebort).','. + $this->addslashes($gebzeit).','. + $this->addslashes($foto).','. + $this->addslashes($anmerkungen).','. + $this->addslashes($homepage).','. + $this->addslashes($svnr).','. + $this->addslashes($ersatzkennzeichen).','. + $this->addslashes($familienstand).','. + $this->addslashes($anzahlkinder).','. + ($aktiv?'true':'false').','. + "now()".','. + $this->addslashes($insertvon).','. + "now()".','. + $this->addslashes($updatevon).','. + $this->addslashes($geschlecht).','. + $this->addslashes($geburtsnation).','. + $this->addslashes($staatsbuergerschaft).','. + $this->addslashes($ext_id_person).');'; } else { //update person + //person_id auf gueltigkeit pruefen + if(!is_numeric($person_id)) + { + $error=true; + $error_log.= 'person_id muss eine gueltige Zahl sein'; + } + + //update nur wenn änderungen gemacht + $qry="SELECT * FROM public.tbl_person WHERE person_id='$person_id';"; + if($result = pg_query($conn, $qry)) + { + while($row = pg_fetch_object($result)) + { + $update=false; + if($row->sprache!=$sprache) $update=true; + if($row->anrede!=$anrede) $update=true; + if($row->titelpost!=$titelpost) $update=true; + if($row->titelpre!=$titelpre) $update=true; + if($row->nachname!=$nachname) $update=true; + if($row->vorname!=$vorname) $update=true; + if($row->vornamen!=$vornamen) $update=true; + if($row->gebdatum!=$gebdatum) $update=true; + if($row->gebort!=$gebort) $update=true; + //if($row->gebzeit!=$gebzeit) $update=true; + //if($row->foto!=$foto) $update=true; + if($row->anmerkungen!=$anmerkungen) $update=true; + if($row->homepage!=$homepage) $update=true; + if($row->svnr!=$svnr) $update=true; + if($row->ersatzkennzeichen!=$ersatzkennzeichen) $update=true; + if($row->familienstand!=$familienstand) $update=true; + if($row->anzahlkinder!=$anzahlkinder) $update=true; + if($row->aktiv!=$aktiv) $update=true; + if($row->geburtsnation!=$geburtsnation) $update=true; + if($row->geschlecht!=$geschlecht) $update=true; + if($row->staatsbuergerschaft!=$staatsbuergerschaft) $update=true; + + + if($update) + { + $qry = 'UPDATE public.tbl_person SET'. + ' sprache='.$this->addslashes($sprache).','. + ' anrede='.$this->addslashes($anrede).','. + ' titelpost='.$this->addslashes($titelpost).','. + ' titelpre='.$this->addslashes($titelpre).','. + ' nachname='.$this->addslashes($nachname).','. + ' vorname='.$this->addslashes($vorname).','. + ' vornamen='.$this->addslashes($vornamen).','. + ' gebdatum='.$this->addslashes($gebdatum).','. + ' gebort='.$this->addslashes($gebort).','. + //' gebzeit='.$this->addslashes($gebzeit).','. + //' foto='.$this->addslashes($foto).','. + ' anmerkungen='.$this->addslashes($anmerkungen).','. + ' homepage='.$this->addslashes($homepage).','. + ' svnr='.$this->addslashes($svnr).','. + ' ersatzkennzeichen='.$this->addslashes($ersatzkennzeichen).','. + ' familienstand='.$this->addslashes($familienstand).','. + ' anzahlkinder='.$this->addslashes($anzahlkinder).','. + ' aktiv='.($aktiv?'true':'false').','. + ' updateamum='.$this->addslashes($updateamum).','. + ' updatevon='.$this->addslashes($updatevon).','. + ' geschlecht='.$this->addslashes($geschlecht).','. + ' geburtsnation='.$this->addslashes($geburtsnation).','. + ' staatsbuergerschaft='.$this->addslashes($staatsbuergerschaft).','. + " insertamum=now()".','. + ' insertvon='.$this->addslashes($insertvon).','. + " updateamum=now()".','. + " updatevon=".$this->addslashes($updatevon).','. + ' ext_id='.$this->addslashes($ext_id_person). + ' WHERE person_id='.$person_id.';'; + } + } + } + } + if(pg_query(conn,$qry)) + { + if(new_person) + { + $qry = "SELECT currval('public.tbl_person_person_id_seq') AS id;"; + if($row=pg_fetch_object(pg_query($conn,$qry))) + $person_id=$row->id; + else + { + $error=true; + $error_log.='Person-Sequence konnte nicht ausgelesen werden'; + } + } + } + else + { + $error=true; + $error_log.='Fehler beim Speichern des Person-Datensatzes:'.$nachname.' '.$qry; } if(!$error) { - //Reihenfolge: prestudent - student - benutzer + //Weitere Reihenfolge: prestudent - student - benutzer + + //Prestudent schon vorhanden? + $qry="SELECT prestudent_id FROM public.tbl_prestudent WHERE ext_id='$row->student_pk'"; + if($resultu = pg_query($conn, $qry)) + { + if(pg_num_rows($resultu)>0) //wenn dieser eintrag schon vorhanden ist + { + if($rowu=pg_fetch_object($resultu)) + { + $prestudent_id=$rowu->prestudent_id; + $new_prestudent=true; + } + else $new_prestudent=false; + } + else $new_prestudent=false; + } + else + { + $error=true; + $error_log.='Fehler beim Zugriff auf Tabelle tbl_prestudent bei student_pk: '.$row->student_pk; + } + + //Studiengang ermitteln + $qry="SELECT studiengang_kz FROM public.tbl_studiengang WHERE ext_id"; + if($resultu = pg_query($conn, $qry)) + { + if(pg_num_rows($resultu)>0) //wenn dieser eintrag schon vorhanden ist + { + if($rowu=pg_fetch_object($resultu)) + { + $studiengang_kz=$rowu->studiengang_kz; + } + } + } + if(new_prestudent) + { + //insert prestudent + + $qry = 'INSERT INTO public.tbl_prestudent (aufmerksamdurch_kurzbz, person_id, studiengang_kz, + berufstaetigkeit_code, zgv_code, zgvort, zgvdatum, zgvmas_code, zgvmaort, zgvmadatum, + facheinschlberuf, reihungstest_id, punkte, anmeldungreihungstest, + insertamum, insertvon, updateamum, updatevon, ext_id) + VALUES('.$this->addslashes($aufmerksam_kurzbz).', '. + $this->addslashes($person_id).', '. + $this->addslashes($studiengang_kz).', '. + $this->addslashes($berufstaetigkeit_code).', '. + $this->addslashes($zgv_code).', '. + $this->addslashes($zgvort).', '. + $this->addslashes($zgvdatum).', '. + $this->addslashes($zgvmas_code).', '. + $this->addslashes($zgvmaort).', '. + $this->addslashes($zgvmadatum).', '. + $this->addslashes($facheinschlberuf).', '. + $this->addslashes($reihungstest_id).', '. + $this->addslashes($punkte).', '. + $this->addslashes($anmeldungreihungstest).', '. + "now()".', '. + 'SYNC'.', '. + "now()".', '. + 'SYNC'.', '. + $this->addslashes($ext_id_pre).';'; + } + else + { + //update prestudent + + //prestudent_id auf gueltigkeit pruefen + if(!is_numeric($prestudent_id)) + { + $error=true; + $error_log.= 'prestudent_id muss eine gueltige Zahl sein'; + } + + //update nur wenn änderungen gemacht + $qry="SELECT * FROM public.tbl_prestudent WHERE prestudent_id='$prestudent_id';"; + if($result = pg_query($conn, $qry)) + { + while($row = pg_fetch_object($result)) + { + $update=false; + if($row->aufmerksam_durch_kurzbz!=$aufmerksamdurch_kurzbz) $update=true; + if($row->person_id!=$person_id) $update=true; + if($row->studiengang_kz!=$studiengang_kz) $update=true; + if($row->berufstaetigkeit_code!=$berufstaetigkeit_code) $update=true; + if($row->zgv_code!=$zgv_code) $update=true; + if($row->zgvort!=$zgvort) $update=true; + if($row->zgvdatum!=$zgvdatum) $update=true; + if($row->zgvmas_code!=$zgvmas_code) $update=true; + if($row->zgvmaort!=$zgvmaort) $update=true; + if($row->zgvmadatum!=$zgvmadatum) $update=true; + if($row->facheinschlberuf!=$facheinschlberuf) $update=true; + if($row->reihungstest_id!=$reihungstest_id) $update=true; + if($row->punkte!=$punkte) $update=true; + if($row->anmeldungreihungstest!=$anmeldungreihungstest) $update=true; + + if($update) + { + $qry = 'UPDATE public.tbl_prestudent SET'. + ' aufmerksamdurch_kurzbz='.$this->addslashes($aufmerksamdurch_kurzbz).','. + ' person_id='.$this->addslashes($person_id).','. + ' studiengang_kz='.$this->addslashes($studiengang_kz).','. + ' berufstaetigkeit_code='.$this->addslashes($berufstaetigkeit_code).','. + ' zgv_code='.$this->addslashes($zgv_code).','. + ' zgvort='.$this->addslashes($zgvort).','. + ' zgvdatum='.$this->addslashes($zgvdatum).','. + ' zgvmas_code='.$this->addslashes($zgvmas_code).','. + ' zgvmaort='.$this->addslashes($zgvmaort).','. + ' zgvmadatum='.$this->addslashes($person_id).','. + ' facheinschlberuf='.$this->addslashes($facheinschlberuf).','. + ' reihungstest_id='.$this->addslashes($reihungstest_id).','. + ' punkte='.$this->addslashes($punkte).','. + ' anmeldungreihungstest='.$this->addslashes($anmeldungreihungstest).','. + " insertamum=now()".','. + ' insertvon='.$this->addslashes($insertvon).','. + " updateamum=now()".','. + " updatevon=".$this->addslashes($updatevon).','. + ' ext_id='.$this->addslashes($ext_id_pre). + ' WHERE prestudent_id='.$prestudent_id.';'; + } + } + } + } + + if(pg_query(conn,$qry)) + { + if(new_pre) + { + $qry = "SELECT currval('public.tbl_prestudent_prestudent_id_seq') AS id;"; + if($row=pg_fetch_object(pg_query($conn,$qry))) + $prestudent_id=$row->id; + else + { + $error=true; + $error_log.='Prestudent-Sequence konnte nicht ausgelesen werden'; + } + } + } + else + { + $error=true; + $error_log.='Fehler beim Speichern des Prestudent-Datensatzes:'.$nachname.' '.$qry; + } + + if(!$error) + { + //Weitere Reihenfolge: student, benutzer + + //Student schon vorhanden? + $qry="SELECT student_id FROM public.tbl_student WHERE ext_id='$row->student_pk'"; + if($resultu = pg_query($conn, $qry)) + { + if(pg_num_rows($resultu)>0) //wenn dieser eintrag schon vorhanden ist + { + if($rowu=pg_fetch_object($resultu)) + { + $student_id=$rowu->student_id; + $new_student=true; + } + else $new_student=false; + } + else $new_student=false; + } + else + { + $error=true; + $error_log.='Fehler beim Zugriff auf Tabelle tbl_student bei student_pk: '.$row->student_pk; + } + + //Gruppenverband ermitteln + $qry="SELECT fas_function_find_verband_from_student(".$row->student_pk.") as verband + fas_function_find_jahrgang_from_student(".$row->student_pk.") as jahrgang + fas_function_find_gruppe_from_student(".$row->student_pk.") as gruppe;"; + if($resultu = pg_query($conn, $qry)) + { + if(pg_num_rows($resultu)>0) //wenn dieser eintrag schon vorhanden ist + { + if($rowu=pg_fetch_object($resultu)) + { + $semester=$rowu->$rowu->jahrgang; + $verband=$rowu->$rowu->verband; + $gruppe=$rowu->gruppe; + } + } + } + + if(new_student) + { + //insert student + + $qry = 'INSERT INTO public.tbl_student (matrikelnr, prestudent_id, studiengang_kz, + semester, verband, gruppe, + insertamum, insertvon, updateamum, updatevon, ext_id) + VALUES('.$this->addslashes($matrikelnr).', '. + $this->addslashes($prestudent_id).', '. + $this->addslashes($studiengang_kz).', '. + $this->addslashes($semester).', '. + $this->addslashes($verband).', '. + $this->addslashes($gruppe).', '. + "now()".', '. + "SYNC".', '. + "now()".', '. + "SYNC".', '. + $this->addslashes($ext_id_student).', '; + } + else + { + //update student + + //student_uid auf gueltigkeit pruefen + if(!is_numeric($student_uid)) + { + $error=true; + $error_log.= 'student_id muss eine gueltige Zahl sein'; + } + + //update nur wenn änderungen gemacht + $qry="SELECT * FROM public.tbl_student WHERE student_id='$student_id';"; + if($result = pg_query($conn, $qry)) + { + while($row = pg_fetch_object($result)) + { + $update=false; + if($row->matrikelnr!=$matrikelnr) $update=true; + if($row->prestudent_id!=$prestudent_id) $update=true; + if($row->studiengang_kz!=$studiengang_kz) $update=true; + if($row->semester!=$semester) $update=true; + if($row->verband!=$verband) $update=true; + if($row->gruppe!=$gruppe) $update=true; + + if($update) + { + $qry = 'UPDATE public.tbl_student SET'. + ' matrikelnr='.$this->addslashes($matrikelnr).','. + ' prestudent_id='.$this->addslashes($prestudent_id).','. + ' studiengang_kz='.$this->addslashes($studiengang_kz).','. + ' semester='.$this->addslashes($semester).','. + ' verband='.$this->addslashes($verband).','. + ' gruppe='.$this->addslashes($gruppe).','. + " insertamum=now()".','. + ' insertvon='.$this->addslashes($insertvon).','. + " updateamum=now()".','. + " updatevon=".$this->addslashes($updatevon).','. + ' ext_id='.$this->addslashes($ext_id_student). + ' WHERE student_id='.$student_id.';'; + } + } + } + } + if(pg_query(conn,$qry)) + { + if(new_student) + { + $qry = "SELECT currval('public.tbl_student_student_id_seq') AS id;"; + if($row=pg_fetch_object(pg_query($conn,$qry))) + $student_id=$row->id; + else + { + $error=true; + $error_log.='Student-Sequence konnte nicht ausgelesen werden'; + } + } + } + else + { + $error=true; + $error_log.='Fehler beim Speichern des Student-Datensatzes:'.$nachname.' '.$qry; + } + + if(!$error) + { + //Weitere Reihenfolge: benutzer + + //Benutzer schon vorhanden? + $qry="SELECT uid, person_id FROM public.tbl_benutzer WHERE ext_id='$row->student_pk'"; + if($resultu = pg_query($conn, $qry)) + { + if(pg_num_rows($resultu)>0) //wenn dieser eintrag schon vorhanden ist + { + if($rowu=pg_fetch_object($resultu)) + { + $new_beutzer=true; + } + else $new_benutzer=false; + } + else $new_benutzer=false; + } + else + { + $error=true; + $error_log.='Fehler beim Zugriff auf Tabelle tbl_benutzer bei student_pk: '.$row->student_pk; + } + + //Benutzer aktiv? + $qry="SELECT * FORM (SELECT status, creationdate FROM student_ausbildungssemester WHERE student_fk= ".$row->student_pk." AND + studiensemester_fk=(SELECT studiensemester_pk FROM studiensemester WHERE aktuell='J') ORDER BY 2 DESC LIMIT 1) + WHERE status IN ('3', '10', '11', '12', '13');"; + + if($resultu = pg_query($conn_fas, $qry)) + { + if(pg_num_rows($resultu)>0) + { + $aktiv=true; + } + else + { + $aktiv=false; + } + } + else + { + $error=true; + $error_log.='Fehler beim Holen des aktuellen Status bei student_pk: '.$row->student_pk; + } + + if(new_benutzer) + { + //insert benutzer + $qry = 'INSERT INTO public.tbl_benutzer (uid, person_id, aktiv, alias, + insertamum, insertvon, updateamum, updatevon, ext_id) + VALUES('.$this->addslashes($student_uid).', '. + $this->addslashes($person_id).', '. + $this->addslashes($aktiv).', '. + $this->addslashes($alias).', '. + "now()".', '. + "SYNC".', '. + "now()".', '. + "SYNC".', '. + $this->addslashes($ext_id_benutzer).', '; + + } + else + { + //update benutzer + //uid auf gueltigkeit pruefen + if(!is_numeric($uid)) + { + $error=true; + $error_log.= 'uid muss eine gueltige Zahl sein'; + } + if(!is_numeric($person_id)) + { + $error=true; + $error_log.= 'person_id muss eine gueltige Zahl sein'; + } + + + //update nur wenn änderungen gemacht + $qry="SELECT * FROM public.tbl_benutzer WHERE ext_id='$ext_id_benutzer';"; + if($result = pg_query($conn, $qry)) + { + while($row = pg_fetch_object($result)) + { + $update=false; + if($row->aktiv!=$aktiv) $update=true; + + if($update) + { + $qry = 'UPDATE public.tbl_benutzer SET'. + ' uid='.$this->addslashes($student_id).','. + ' person_id='.$this->addslashes($person_id).','. + ' aktiv='.$this->addslashes($aktiv).','. + " insertamum=now()".','. + ' insertvon='.$this->addslashes($insertvon).','. + " updateamum=now()".','. + " updatevon=".$this->addslashes($updatevon). + ' WHERE ext_id='.$ext_id_benutzer.';'; + } + } + } + } + if(pg_query(conn,$qry)) + { + if(new_student) + { + $qry = "SELECT currval('public.tbl_student_student_id_seq') AS id;"; + if($row=pg_fetch_object(pg_query($conn,$qry))) + $student_id=$row->id; + else + { + $error=true; + $error_log.='Student-Sequence konnte nicht ausgelesen werden'; + } + } + } + else + { + $error=true; + $error_log.='Fehler beim Speichern des Student-Datensatzes:'.$nachname.' '.$qry; + } + + if(!$error) + { + pg_query($this->conn,'COMMIT;'); + } + else + { + pg_query($conn,'ROLLBACK;'); + } + } + else + { + pg_query($conn,'ROLLBACK;'); + } + } + else + { + pg_query($conn,'ROLLBACK;'); + } } else { - pg_query($this->conn,'ROLLBACK;'); - } - - - - - - //Basisdaten speichern - if(!benutzer::save()) - { - pg_query($this->conn,'ROLLBACK;'); - return false; + pg_query($conn,'ROLLBACK;'); } + } } ?>