From f5d4c0783f3c90aa5fcc67f9a174b0295f05930c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 27 Nov 2007 16:40:46 +0000 Subject: [PATCH] --- content/ToDo_FASo.html | 10 +- include/prestudent.class.php | 6 + include/student.class.php | 8 +- system/check_studentlehrverband.php | 132 ++++++++++ system/sync/stp/inserts.txt | 20 ++ ...sync_stp_vilesci_stgvertiefung_presync.php | 84 ++++++ system/sync/stp/sync_stp_vilesci_student.php | 248 ++++++++++++++++++ 7 files changed, 501 insertions(+), 7 deletions(-) create mode 100644 system/sync/stp/sync_stp_vilesci_stgvertiefung_presync.php create mode 100644 system/sync/stp/sync_stp_vilesci_student.php diff --git a/content/ToDo_FASo.html b/content/ToDo_FASo.html index 0372bf8a4..f89dbc357 100644 --- a/content/ToDo_FASo.html +++ b/content/ToDo_FASo.html @@ -26,6 +26,9 @@ Staatszugehörigkeit und SVNR)
  • Soll beim Drucken der Studienerfolgsbestätigung für alle Semester auch das aktuelle Semester ausgedruckt werden? (möglicherweise enthaelt dies noch nicht alle Noten)
  • +
  • Export mit den fehlenden/abgegebenen Dokumenten der Studenten +(Kontrollliste)
    +
  • Änderungen / Erweiterungen

    @@ -91,8 +94,8 @@ Geburtsdatum konstruiert. Bei den Lehrveranstaltungen der Lektoren soll in der Toolbar die Gesamtstundenzahl des Lektors angezeigt werden - -low + low + 6 @@ -325,7 +328,8 @@ Studenten
    Aufwand [h] -
    + ExcelExport: bei PLZ mit führenden nullen werden diese +beim Export nicht angezeigt

    diff --git a/include/prestudent.class.php b/include/prestudent.class.php index 7359701d9..67dc70e90 100644 --- a/include/prestudent.class.php +++ b/include/prestudent.class.php @@ -725,6 +725,12 @@ class prestudent extends person function getLastStatus($prestudent_id) { + if($prestudent_id=='' || !is_numeric($prestudent_id)) + { + $this->errormsg = 'Prestudent_id ist ungueltig'; + return false; + } + $qry = "SELECT * FROM public.tbl_prestudentrolle WHERE prestudent_id='$prestudent_id' ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1"; if($result = pg_query($this->conn, $qry)) { diff --git a/include/student.class.php b/include/student.class.php index a55cbff01..a37b7b06f 100644 --- a/include/student.class.php +++ b/include/student.class.php @@ -211,8 +211,8 @@ class student extends benutzer $this->studiengang_kz.','. $this->semester.','. ($this->ext_id_student!=''?$this->ext_id_student:'null').','. - ($this->verband!=''?"'".addslashes($this->verband)."'":' ').','. - ($this->gruppe!=''?"'".addslashes($this->gruppe)."'":' ').','. + ($this->verband!=''?"'".addslashes($this->verband)."'":"' '").','. + ($this->gruppe!=''?"'".addslashes($this->gruppe)."'":"' '").','. $this->addslashes($this->insertamum).','. $this->addslashes($this->insertvon).');'; } @@ -227,8 +227,8 @@ class student extends benutzer ' studiengang_kz='.$this->studiengang_kz.','. ' semester='.$this->semester.','. ' ext_id='.($this->ext_id_student!=''?$this->ext_id_student:'null').','. - ' verband='.$this->addslashes($this->verband).','. - ' gruppe='.$this->addslashes($this->gruppe). + ' verband='.($this->verband!=''?"'".addslashes($this->verband)."'":"' '").','. + ' gruppe='.($this->gruppe!=''?"'".addslashes($this->gruppe)."'":"' '"). " WHERE student_uid='".addslashes($this->uid)."';"; } diff --git a/system/check_studentlehrverband.php b/system/check_studentlehrverband.php index e69de29bb..1f684e2ef 100644 --- a/system/check_studentlehrverband.php +++ b/system/check_studentlehrverband.php @@ -0,0 +1,132 @@ +student_uid' AND tbl_prestudent.studiengang_kz='$row->studiengang_kz'"; + if($result_id = pg_query($conn, $qry_id)) + { + if(pg_num_rows($result_id)==1) + { + if($row_id = pg_fetch_object($result_id)) + { + $qry_upd = "UPDATE public.tbl_student SET prestudent_id='$row_id->prestudent_id' WHERE student_uid='$row->student_uid'"; + if(pg_query($conn, $qry_upd)) + { + $text .= "Prestudent_id von $row->student_uid wurde auf $row_id->prestudent_id gesetzt\n"; + $anzahl_neue_prestudent_id++; + } + } + else + { + $text .= "unbekannter Fehler\n"; + $anzahl_fehler_prestudent++; + } + } + elseif(pg_num_rows($result_id)>1) + { + $text .= "Student $row->student_uid hat keine Prestudent_id und MEHRERE passende Prestudenteintraege\n"; + $anzahl_fehler_prestudent++; + } + elseif(pg_num_rows($result_id)==0) + { + $text .= "Student $row->student_uid hat keine Prestudent_id und KEINE passenden Prestudenteintraege\n"; + $anzahl_fehler_prestudent++; + } + } + else + { + $text.="Fehler bei Abfrage:".pg_last_error($conn)."\n"; + $anzahl_fehler_prestudent++; + } + } +} + +// ***** +// * Unterschiedliche Gruppenzuteilungen in tbl_studentlehrverband - tbl_student korrigieren +// ***** + +$stsem = new studiensemester($conn); + +$stsem = $stsem->getNearest(); + +$text.="\n\nKorrigiere Inkonsitenzen in den Tabellen tbl_studentlehrverband, tbl_student (Verwendetes Studiensemester: $stsem)\n\n"; + +$qry = "SELECT + tbl_student.studiengang_kz as studiengang_kz_old, + tbl_student.semester as semester_old, + tbl_student.verband as verband_old, + tbl_student.gruppe as gruppe_old, + tbl_studentlehrverband.student_uid, + tbl_studentlehrverband.studiengang_kz, + tbl_studentlehrverband.semester, + tbl_studentlehrverband.verband, + tbl_studentlehrverband.gruppe + FROM + public.tbl_student JOIN public.tbl_studentlehrverband USING(student_uid) + WHERE + tbl_studentlehrverband.studiensemester_kurzbz='$stsem' AND + ( + tbl_student.studiengang_kz<>tbl_studentlehrverband.studiengang_kz OR + tbl_student.semester<>tbl_studentlehrverband.semester OR + tbl_student.verband<>tbl_studentlehrverband.verband OR + tbl_student.gruppe<>tbl_studentlehrverband.gruppe + )"; + +if($result = pg_query($conn, $qry)) +{ + while($row = pg_fetch_object($result)) + { + $qry = "UPDATE public.tbl_student SET studiengang_kz='$row->studiengang_kz', semester='$row->semester', verband='$row->verband', gruppe='$row->gruppe' WHERE student_uid='$row->student_uid'"; + if(pg_query($conn, $qry)) + { + $text .= "Bei Student $row->student_uid wurde die Gruppenzuordnung von $row->studiengang_kz_old/$row->semester_old/$row->verband_old/$row->gruppe_old auf $row->studiengang_kz/$row->semester/$row->verband/$row->gruppe geaendert\n"; + $anzahl_gruppenaenderung++; + } + else + { + $text.="Fehler beim aendern der Gruppe: ".pg_last_error($conn)."\n"; + $anzahl_gruppenaenderung_fehler++; + } + } +} +else + $text.="Fehler bei Abfrage".pg_last_error($conn); + +$statistik .= "Prestudent_id wurde bei $anzahl_neue_prestudent_id Studenten korrigiert\n"; +$statistik .= "$anzahl_fehler_prestudent Fehler sind bei der Korrektur der Prestudent_id aufgetreten\n"; +$statistik .= "Bei $anzahl_gruppenaenderung Studenten wurde die Gruppenzuordnung korrigiert\n"; +$statistik .= "$anzahl_gruppenaenderung_fehler Fehler sind bei der Korrektur der Gruppenzuordnung aufgetreten\n"; +$statistik .= "\n\n"; + + +//TODO Mailversand +echo nl2br($statistik.$text); + +?> \ No newline at end of file diff --git a/system/sync/stp/inserts.txt b/system/sync/stp/inserts.txt index eb0b33a26..c378ae2f4 100644 --- a/system/sync/stp/inserts.txt +++ b/system/sync/stp/inserts.txt @@ -54,3 +54,23 @@ INSERT INTO bis.tbl_ausbildung VALUES (10, 'Lehrabschluss', 'Lehrabschlusspr INSERT INTO bis.tbl_ausbildung VALUES (11, 'Pflichtschule', 'Pflichtschule'); INSERT INTO bis.tbl_ausbildung VALUES (7, 'tertiär', 'Anderer tertiärer Bildungsabschluss (Kolleg; Meisterprüfung; Universitätslehrgang oder Lehrgang gemäß §14a Abs.3 FHStG, mit dem kein akademischer Grad verbunden war)'); INSERT INTO bis.tbl_ausbildung VALUES (2, 'Univ.-Master', 'Universitäts- oder Hochschulabschluss auf Diplom- oder Masterebene, Doktorat der Medizin bzw. der Human- oder Zahnmedizin oder Doktorat auf Grund von Studienvorschriften aus der Zeit vor dem Inkrafttretendes AHStG BGBl. Nr. 177/1966 oder Abschluss eines Universitätslehrganges oder Lehrganges universitären Charakters (§51 Abs. 2 Z 23 UG 2002 oder §§26 Abs.1 und 28 Abs.1 UniStG) oder eines Lehrganges zur Weiterbildung (§14a Abs.2 FHStG) mit Mastergrad'); + +-- Studiensemester + +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2001', '2001-09-03', '2002-01-31', NULL, 'Wintersemester 2001/2002'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2006', '2006-02-13', '2006-07-01', 9, 'Sommersemester 2006'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2005', '2005-02-14', '2005-07-02', 7, 'Sommersemester 2005'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2004', '2004-02-03', '2004-07-03', 5, 'Sommersemester 2004'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2003', '2003-02-02', '2003-07-02', 3, 'Sommersemester 2003'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2002', '2002-02-01', '2002-07-01', 1, 'Sommersemester 2002'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2009', '2009-02-05', '2009-07-05', 15, 'Sommersemester 2009'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2007', '2007-02-12', '2007-07-01', 11, 'Sommersemester 2007'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('SS2008', '2008-02-04', '2008-07-04', 13, 'Sommersemester 2008'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2009', '2009-09-04', '2010-02-04', 16, 'Wintersemester 2009/2010'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2008', '2008-09-03', '2009-02-03', 14, 'Wintersemester 2008/2009'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2006', '2006-09-04', '2007-02-03', 10, 'Wintersemester 2006/2007'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2005', '2005-09-05', '2006-02-04', 8, 'Wintersemester 2005/2006'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2004', '2004-09-06', '2005-02-05', 6, 'Wintersemester 2004/2005'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2003', '2003-09-02', '2004-02-02', 4, 'Wintersemester 2003/2004'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2002', '2002-09-01', '2003-02-01', 2, 'Wintersemester 2002/2003'); +INSERT INTO public.tbl_studiensemester(studiensemester_kurzbz, start, ende, ext_id, bezeichnung) VALUES ('WS2007', '2007-09-01', '2008-02-01', 12, 'Wintersemester 2007/2008'); diff --git a/system/sync/stp/sync_stp_vilesci_stgvertiefung_presync.php b/system/sync/stp/sync_stp_vilesci_stgvertiefung_presync.php new file mode 100644 index 000000000..062d8e56b --- /dev/null +++ b/system/sync/stp/sync_stp_vilesci_stgvertiefung_presync.php @@ -0,0 +1,84 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ + +//* +//* Kopiert personen TAbelle von FH-DB StPoelten +//* +//* + +require_once('sync_config.inc.php'); + +$starttime=time(); +$conn=pg_connect(CONN_STRING) + or die("Connection zur FH-Complete Datenbank fehlgeschlagen"); +if (!$conn_ext=mssql_connect (STPDB_SERVER, STPDB_USER, STPDB_PASSWD)) + die('Fehler beim Verbindungsaufbau!'); +mssql_select_db(STPDB_DB, $conn_ext); + + + +// Sync-Tabelle fuer Personen checken +if (!@pg_query($conn,'SELECT * FROM sync.stp_stgvertiefung LIMIT 1;')) +{ + $sql='CREATE TABLE sync.stp_stgvertiefung ( + __stgvertiefung integer, + _studiengang integer, + chbezeichnung varchar(256), + chkurzbez varchar(12), + constraint "pk_tbl_sync_stp_stgvertiefung" primary key ("__stgvertiefung")); + Grant select on sync.stp_stgvertiefung to group "admin"; + Grant update on sync.stp_stgvertiefung to group "admin"; + Grant delete on sync.stp_stgvertiefung to group "admin"; + Grant insert on sync.stp_stgvertiefung to group "admin";'; + if (!@pg_query($conn,$sql)) + echo 'sync.stp_stgvertiefung: '.pg_last_error($conn).'
    '; + else + echo 'sync.stp_stgvertiefung wurde angelegt!
    '; +} + +/************************* + * FAS-PORTAL - Synchronisation + */ +?> + + +Synchro - FHDB -> FH-Complete - PreSyncStgVertiefung + + + + +__stgvertiefung','$row->_studiengang',".($row->chbezeichnung==''?'NULL':"'".$row->chbezeichnung."'").",".($row->chkurzbez==''?'NULL':"'".$row->chkurzbez."'").");"; + if(!$result = pg_query($conn, $qry)) + { + echo $qry.'
    '.pg_last_error($conn).'
    '; + } + + echo '.'; + flush(); + + $i++; + } +} +else + echo 'Fehler';//mssql_lasterror($conn_ext); + + echo '
    Time elapsed: '.(time()-$starttime).' seconds!'; + +?> + + \ No newline at end of file diff --git a/system/sync/stp/sync_stp_vilesci_student.php b/system/sync/stp/sync_stp_vilesci_student.php new file mode 100644 index 000000000..ceebf03ff --- /dev/null +++ b/system/sync/stp/sync_stp_vilesci_student.php @@ -0,0 +1,248 @@ + VILESCI +// setzt vorraus: - tbl_benutzer +// - sync.stp_person +// - sync.stp_stgvertiefung +// - public.tbl_studiensemester +// ************************************** + require_once('sync_config.inc.php'); + require_once('../../../include/functions.inc.php'); + require_once('../../../include/person.class.php'); + require_once('../../../include/benutzer.class.php'); + require_once('../../../include/student.class.php'); + require_once('../../../include/lehrverband.class.php'); + + //$adress='pam@technikum-wien.at'; + $adress='oesi@technikum-wien.at'; + //$adress='ruhan@technikum-wien.at'; + + if(!$conn = pg_pconnect(CONN_STRING)) + die('Fehler beim Verbindungsaufbau!'); + + echo ' + + + STP - VILESCI (Student) + + + '; + + echo 'Starte Studenten Syncronisation '.date('H:i:s').'
    '; + flush(); + + $head_text="Dies ist eine automatische Mail!\n\nFolgende Fehler sind bei der Synchronisation der Studenten aufgetreten:\n\n"; + $text=''; + $user_gesamt=0; + $anzahl_fehler=0; + $anzahl_update=0; + $anzahl_insert=0; + $anzahl_fehlender_benutzer=0; + $anzahl_doppelte_uid=0; + $statistik=''; + + // ******** SYNC START ********** // + + $qry = "SELECT __person, studiengang_kz, instudiensemester, chusername, chmatrikelnr FROM sync.stp_person JOIN sync.stp_stgvertiefung ON(_stgvertiefung=__stgvertiefung) JOIN public.tbl_studiengang ON(_studiengang=ext_id) WHERE chusername<>'' AND chusername is not null AND _cxPersonTyp in(1, 2) AND chmatrikelnr!='' AND chmatrikelnr is not null"; + + if($result = pg_query($conn, $qry)) + { + while($row = pg_fetch_object($result)) + { + $user_gesamt++; + + $qry_ext = "SELECT student_uid FROM public.tbl_student WHERE ext_id='$row->__person'"; + + if($result_ext = pg_query($conn, $qry_ext)) + { + if($row_ext = pg_fetch_object($result_ext)) + { + $student_uid = $row_ext->student_uid; + } + else + { + $student_uid=''; + } + } + else + { + $text.="Fehler beim Ermitteln der ext_id: ".pg_last_error($conn)."\n"; + $anzahl_fehler++; + continue; + } + + $student = new student($conn); + + if($student_uid!='') + { + if($student->load($student_uid)) + { + $student->new = false; + } + else + { + $text.="Fehler beim Laden eines Studenten $student_uid: ".$student->errormsg."\n"; + $anzahl_fehler++; + continue; + } + } + else + { + $student->new = true; + } + + //Pruefen ob der Lehrverband existiert und ggf anlegen + $lehrverband = new lehrverband($conn); + if(!$lehrverband->exists($row->studiengang_kz, $row->instudiensemester, '', '')) + { + $lehrverband->studiengang_kz = $row->studiengang_kz; + $lehrverband->semester = $row->instudiensemester; + $lehrverband->verband = ''; + $lehrverband->gruppe = ''; + $lehrverband->aktiv = true; + + if(!$lehrverband->save(true)) + { + $text.="Fehler beim Anlegen des Lehrverbandes $row->studiengang_kz/$row->instudiensemester\n"; + $anzahl_fehler++; + continue; + } + } + + //Pruefen ob Benutzer vorhanden ist + $qry_ext = "SELECT * FROM public.tbl_benutzer WHERE uid='".addslashes($row->chusername)."'"; + if($result_ext = pg_query($conn, $qry_ext)) + { + if(pg_num_rows($result_ext)==0) + { + $text.="Benutzer wurde nicht gefunden: $row->chusername\n"; + $anzahl_fehlender_benutzer++; + $anzahl_fehler++; + continue; + } + } + else + { + $text.="Fehler beim ermitteln des Benutzers\n"; + continue; + } + + if($student_uid=='') + { + //Pruefen ob bereits ein Student mit dieser UID vorhanden ist + $qry_ext = "SELECT * FROM public.tbl_student WHERE student_uid='".addslashes($row->chusername)."'"; + if($result_ext = pg_query($conn, $qry_ext)) + { + if(pg_num_rows($result_ext)>0) + { + $text.="Student mit dieser uid bereits vorhanden: $row->chusername\n"; + $anzahl_doppelte_uid++; + $anzahl_fehler++; + continue; + } + } + else + { + $text.="Fehler beim Suchen nach doppelten Eintraegen\n"; + continue; + } + } + + $updtext=''; + + if($student_uid!='') + { + if(trim($student->matrikelnr)!=$row->chmatrikelnr) + $updtext.=" Matrikelnr wurde von $student->matrikelnr auf $row->chmatrikelnr geaendert\n"; + if($student->studiengang_kz!=$row->studiengang_kz) + $updtext.=" Studiengang wurde von $student->studiengang_kz auf $row->studiengang_kz geaendert\n"; + if($student->semester != $row->instudiensemester) + $updtext.=" Semester wurde von $student->semester auf $row->instudiensemester geaendert\n"; + if(trim($student->verband)!='') + $updtext.=" Verband wurde von $student->verband auf '' geaendert\n"; + if(trim($student->gruppe)!='') + $updtext.=" Gruppe wurde von $student->gruppe auf '' geaendert\n"; + } + + $student->uid = $row->chusername; + $student->matrikelnr = $row->chmatrikelnr; + $student->prestudent_id = ''; + $student->studiengang_kz = $row->studiengang_kz; + $student->semester = $row->instudiensemester; + $student->verband = ''; + $student->gruppe = ''; + $student->updateamum = date('Y-m-d H:i:s'); + $student->updatevon = 'sync'; + $student->insertamum = date('Y-m-d H:i:s'); + $student->insertvon = 'sync'; + $student->ext_id_student = $row->__person; + + if($updtext!='' || $student_uid=='') + { + if($student->save(null, false)) + { + if($student->new) + { + $text.="Student $student->uid wurde neu angelegt\n"; + $anzahl_insert++; + } + else + { + $text.="Student $student->uid wurde aktualisiert\n".$updtext; + $anzahl_update++; + } + } + else + { + $text.="Fehler beim Speichern: ".$student->errormsg."\n"; + $anzahl_fehler++; + continue; + } + } + + $student->studiensemester_kurzbz = 'WS2007'; + if(!$student->save_studentlehrverband()) + { + $text.="Fehler beim Speichern des Studentlehrverbandeintrages:".$student->errormsg."\n"; + $anzahl_fehler++; + } + } + } + else + { + $text.= "Fehler beim Laden der Studenten\n\n"; + $anzahl_fehler++; + } + + $statistik .="Anzahl Studenten: ".($user_gesamt)."\n"; + $statistik .="Anzahl der Fehler: ".($anzahl_fehler)."\n"; + $statistik .="Anzahl Insert: $anzahl_insert\n"; + $statistik .="Anzahl Update: $anzahl_update\n"; + $statistik .="Fehlender Benutzereintrag: $anzahl_fehlender_benutzer\n"; + $statistik .="Mehrfach vorhandene UIDs: $anzahl_doppelte_uid\n"; + $statistik .="\n"; + + $qry = "SELECT count(*) as anzahl FROM sync.stp_person WHERE chmatrikelnr='' AND _cxpersontyp in(1,2) AND chusername<>''"; + if($result = pg_query($conn, $qry)) + if($row = pg_fetch_object($result)) + $statistik .="Studenten mit Username ohne Matrikelnummer: $row->anzahl\n"; + + $qry = "SELECT count(*) as anzahl FROM sync.stp_person WHERE chmatrikelnr<>'' AND _cxpersontyp in(1,2) AND chusername=''"; + if($result = pg_query($conn, $qry)) + if($row = pg_fetch_object($result)) + $statistik .="Studenten mit Matrikelnummer ohne Username: $row->anzahl\n"; + + $text = $statistik."\n\n".$text; + + if(mail($adress, 'SYNC Studenten',$head_text.$text, "From: vilesci@technikum-wien.at")) + echo "Mail wurde an $adress versandt

    "; + else + echo "Fehler beim Senden an $adress

    "; + + echo nl2br($text); +?> + + \ No newline at end of file