diff --git a/system/sync/fas/sync_fas_vilesci_note_stg.php b/system/sync/fas/sync_fas_vilesci_note_stg.php new file mode 100755 index 000000000..dc04c5756 --- /dev/null +++ b/system/sync/fas/sync_fas_vilesci_note_stg.php @@ -0,0 +1,585 @@ + VILESCI +// setzt vorraus: - tbl_sprache +// - tbl_studiengang +// einschraenkung auf studiengang_fk per http-get: +// sync_fas_vilesci_note_stg.php?stg_von=x&stg_bis=y +// ************************************** + require_once('../../../vilesci/config.inc.php'); + require_once('../../../include/zeugnisnote.class.php'); + require_once('../../../include/pruefung.class.php'); + $adress='fas_sync@technikum-wien.at'; + //$adress='raab@technikum-wien.at'; + + $conn=pg_connect(CONN_STRING) or die("Connection zur Portal Datenbank fehlgeschlagen"); + $conn_fas=pg_connect(CONN_STRING_FAS) or die("Connection zur Vilesci Datenbank fehlgeschlagen"); + + $startzeit = time(); + + $plausi_error=0; + $double_error=0; + + $update_error_pruef=0; + $insert_error_pruef=0; + $update_error_zeug=0; + $insert_error_zeug=0; + + $anz_update_pruef=0; + $anz_not_updated_pruef=0; + $anz_not_updated_zeug=0; + $anz_insert_pruef=0; + $anz_update_zeug=0; + $anz_insert_zeug=0; + $anz_processed_pruef=0; + $anz_processed_zeug=0; + $anz_processed=0; + $anz_students_processed = 0; + $stg_processed = ""; + + $headtext=''; + $head_stg_text="Dies ist eine automatische Mail!\n\nFolgende Fehler sind bei der Synchronisation der Lehrveranstaltungen aufgetreten:\n\n"; + $text=''; + $double_lva = array(); + $stg_data = array(); + + $fasnoten_arr = array(); //mehrdimensionaler array (lehrverstaltung_fk->(note_pk->("note"->"x","datum"->"y" ..))) + $mitarbeiter_arr = array(); //array (ext_id->mitarbeiter_uid) + $studenten_arr = array(); //array (ext_id->student_uid) + $lv_arr = array(); //array (lehrveranstaltung_fk->lehrveranstaltung_id) + $studsem_arr = array(); //array (ext_id->studiensemester_kurzbz) + $lehreinheiten_fas_arr = array(); + $lehreinheiten_sync_arr = array(); + + //array aller mitarbeiter (ext_id->mitarbeiter_uid) + $sqlstr = "SELECT ext_id, mitarbeiter_uid FROM tbl_mitarbeiter"; + if($result = pg_query($conn, $sqlstr)) + { + while($row = pg_fetch_object($result)) + $mitarbeiter_arr[$row->ext_id] = $row->mitarbeiter_uid; + } + + //array aller studenten (ext_id->mitarbeiter_uid) + $sqlstr = "SELECT ext_id, student_uid FROM tbl_student"; + if($result = pg_query($conn, $sqlstr)) + { + while($row = pg_fetch_object($result)) + $studenten_arr[$row->ext_id] = $row->student_uid; + } + + //array aller lehrveranstaltungen aus sync-tabelle (lva_fas->lva_vilesci) + $sqlstr = "SELECT lva_fas, lva_vilesci FROM sync.tbl_synclehrveranstaltung"; + if($result = pg_query($conn, $sqlstr)) + { + while($row = pg_fetch_object($result)) + $lv_arr[$row->lva_fas] = $row->lva_vilesci; + } + + //array aller studiensemester (ext_id->studiensemester_kurzbz) + $sqlstr = "SELECT * FROM tbl_studiensemester"; + if($result = pg_query($conn, $sqlstr)) + { + while($row = pg_fetch_object($result)) + $studsem_arr[$row->ext_id] = $row->studiensemester_kurzbz; + } + + //array aller lehreinheiten in der synctabelle + $sqlstr = "SELECT * FROM sync.tbl_synclehreinheit"; + if($result = pg_query($conn, $sqlstr)) + { + while($row = pg_fetch_object($result)) + $lehreinheiten_sync_arr[$row->lehreinheit_pk] = $row->lehreinheit_id; + } + + + //**** FUNCTIONS **** + function getNoten4Student($conn_fas, $student_fk) + { + $fasnoten_arr = array(); + $mehrfach_arr = array(); + + $sqlstr = "SELECT note.note_pk, + note.student_fk, + note.lehrveranstaltung_fk, + note.datum, + note.note, + note.status, + note.bemerkung, + note.creationdate, + benutzer.name, + lehrveranstaltung.studiensemester_fk, + lehrveranstaltung.notenlektor_fk + FROM note, benutzer, lehrveranstaltung + WHERE note.creationuser = benutzer.benutzer_pk AND + note.lehrveranstaltung_fk = lehrveranstaltung.lehrveranstaltung_pk AND + note.student_fk = '".$student_fk."' + ORDER BY note.lehrveranstaltung_fk ASC, note.datum DESC, note.creationdate DESC"; + if($result = pg_query($conn_fas, $sqlstr)) + { + //$anzahl_quelle = pg_num_rows($result); + while($row = pg_fetch_object($result)) + { + $bemerkung_history = ""; + + if (key_exists($row->lehrveranstaltung_fk,$fasnoten_arr)) + { + $bemerkung_history = "Note am ".$row->datum.": ".$row->note; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 0; + } + else + { + $mehrfach_arr[$row->lehrveranstaltung_fk]["main"] = $row->note_pk; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 1; + } + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["note"] = $row->note; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["status"] = $row->status; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["creationdate"] = $row->creationdate; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["creationuser_name"] = $row->name; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["name"] = $row->name; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["studiensemester_fk"] = $row->studiensemester_fk; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["bemerkung"] = $row->bemerkung; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["datum"] = $row->datum; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["notenlektor_fk"] = $row->notenlektor_fk; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["student_fk"] = $row->student_fk; + $fasnoten_arr[$row->lehrveranstaltung_fk][$row->note_pk]["ext_id"] = $row->note_pk; + if ($bemerkung_history != "") + $fasnoten_arr[$row->lehrveranstaltung_fk][$mehrfach_arr[$row->lehrveranstaltung_fk]["main"]]["bemerkung"] .= "\n".$bemerkung_history; + } + + } + return $fasnoten_arr; + } + + function getNoten4Studiengang($conn_fas, $studiengang_pk) + { + $fasnoten_arr = array(); + $mehrfach_arr = array(); + + $sqlstr = "SELECT note.note_pk, + note.student_fk, + note.lehrveranstaltung_fk, + note.datum, + note.note, + note.status, + note.bemerkung, + note.creationdate, + benutzer.name, + lehrveranstaltung.studiensemester_fk, + lehrveranstaltung.notenlektor_fk, + note.student_fk + FROM note, benutzer, lehrveranstaltung, student + WHERE note.creationuser = benutzer.benutzer_pk AND + note.lehrveranstaltung_fk = lehrveranstaltung.lehrveranstaltung_pk AND + note.student_fk = student.student_pk AND + student.studiengang_fk = '".$studiengang_pk."' + ORDER BY note.student_fk ASC, note.lehrveranstaltung_fk ASC, note.datum DESC, note.creationdate DESC"; + if($result = pg_query($conn_fas, $sqlstr)) + { + //$anzahl_quelle = pg_num_rows($result); + while($row = pg_fetch_object($result)) + { + $bemerkung_history = ""; + + if (key_exists($row->student_fk, $fasnoten_arr)) + { + if (key_exists($row->lehrveranstaltung_fk,$fasnoten_arr[$row->student_fk])) + { + $bemerkung_history = "Note am ".$row->datum.": ".$row->note; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 0; + } + else + { + $mehrfach_arr[$row->student_fk][$row->lehrveranstaltung_fk]["main"] = $row->note_pk; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 1; + } + + } + else + { + $mehrfach_arr[$row->student_fk][$row->lehrveranstaltung_fk]["main"] = $row->note_pk; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["main"] = 1; + } + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["note"] = $row->note; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["status"] = $row->status; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["creationdate"] = $row->creationdate; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["creationuser_name"] = $row->name; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["name"] = $row->name; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["studiensemester_fk"] = $row->studiensemester_fk; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["bemerkung"] = $row->bemerkung; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["datum"] = $row->datum; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["notenlektor_fk"] = $row->notenlektor_fk; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["student_fk"] = $row->student_fk; + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$row->note_pk]["ext_id"] = $row->note_pk; + if ($bemerkung_history != "") + $fasnoten_arr[$row->student_fk][$row->lehrveranstaltung_fk][$mehrfach_arr[$row->student_fk][$row->lehrveranstaltung_fk]["main"]]["bemerkung"] .= "\n".$bemerkung_history; + } + + } + return $fasnoten_arr; + } + + + + function getPruefungstyp($status) + { + + $pruefungstyp = ""; + if ($status == 1) + $pruefungstyp = "Termin1"; + else if ($status == 2) + $pruefungstyp = "Termin2"; + else if ($status == 11) + $pruefungstyp = "kommPruef"; + else + $pruefungstyp = 'undefiniert'; //$status; + return $pruefungstyp; + } + + function checkUpdatePruefung($conn, $pruef) + { + $sqlstr = "select * from lehre.tbl_pruefung where ext_id = '".$pruef->ext_id."'"; + if($res = pg_query($conn, $sqlstr)) + { + if($row = pg_fetch_object($res)) + { + if ($row->lehreinheit_id == $pruef->lehreinheit_id && $row->student_uid == $pruef->student_uid && $row->mitarbeiter_uid == $pruef->mitarbeiter_uid && $row->note == $pruef->note && $row->pruefungstyp_kurzbz == $pruef->pruefungstyp_kurzbz && $row->datum == $pruef->datum and $row->anmerkung == $pruef->anmerkung) + return -1; + else + return $row->pruefung_id; + + } + } + else + { + return false; + } + } + + function checkUpdateZeugnis($conn, $zeug) + { + $sqlstr = "select * from lehre.tbl_zeugnisnote where ext_id = '".$zeug->ext_id."'"; + if($res = pg_query($conn, $sqlstr)) + { + if($row = pg_fetch_object($res)) + { + if ($row->lehrveranstaltung_id == $zeug->lehrveranstaltung_id && $row->student_uid == $zeug->student_uid && $row->studiensemester_kurzbz == $zeug->studiensemester_kurzbz && $row->note == $zeug->note && $row->bemerkung == $zeug->bemerkung) + return -1; + else + return 1; + } + + else + { + return false; + } + } + } + + function getLehreinheitID($conn_fas, $note_pk) + { + $lehreinheiten_fas_arr = array(); + $sqlstr = "select lehreinheit.lehreinheit_pk,note.note_pk from lehreinheit, lehrveranstaltung, note, student_gruppe where lehrveranstaltung.lehrveranstaltung_pk = lehreinheit.lehrveranstaltung_fk and note.lehrveranstaltung_fk = lehrveranstaltung.lehrveranstaltung_pk and note.student_fk=student_gruppe.student_fk and student_gruppe.gruppe_fk = lehreinheit.gruppe_fk and note.note_pk = '".$note_pk."'"; + if($result = pg_query($conn_fas, $sqlstr)) + { + while($row = pg_fetch_object($result)) + $lehreinheiten_fas_arr[] = $row->lehreinheit_pk; + return $lehreinheiten_fas_arr; + } + else + return false; + } + + + $text .= ""; + + //query bauen: falls http-get-einschraenkungen fuer student_fk + //sync_fas_vilesci_note.php?student_fk_von=x&student_fk_bis=y + + /* + $getstr = ""; + $sqlstr = "SELECT DISTINCT student_fk FROM note"; + if (isset($_REQUEST["student_fk_von"])) + $getstr .= " student_fk >='".$_REQUEST["student_fk_von"]."'"; + if (isset($_REQUEST["student_fk_bis"])) + { + if ($getstr != "") + $getstr .= " AND"; + + $getstr .= " student_fk <='".$_REQUEST["student_fk_bis"]."'"; + } + if ($getstr != "") + $getstr = " WHERE ".$getstr; + + $sqlstr = $sqlstr.$getstr." order by student_fk"; + */ + $getstr = ""; + $sqlstr = "select * from studiengang"; + if (isset($_REQUEST["stg_von"])) + $getstr .= " studiengang_pk >= '".$_REQUEST["stg_von"]."'"; + if (isset($_REQUEST["stg_bis"])) + { + if ($getstr != "") + $getstr .= " AND"; + $getstr .= " studiengang_pk <= '".$_REQUEST["stg_bis"]."'"; + } + if ($getstr != "") + $getstr = " WHERE".$getstr; + + $sqlstr = $sqlstr.$getstr." order by studiengang_pk"; + //echo $sqlstr; + //$sqlstr ="select count(*) from note, student where note.student_fk = student.student_pk and student.studiengang_fk = '16' and (note.student_fk=12217 or note.student_fk = 10704);"; + if($result = pg_query($conn_fas, $sqlstr)) + { + + while($row = pg_fetch_object($result)) + { + //$fasnoten_arr = getNoten4Student($conn_fas,$row->student_fk); + $fasnoten_arr = getNoten4Studiengang($conn_fas,$row->studiengang_pk); + + $stg_processed .= $row->kuerzel." / "; + + $studkeys_arr = array_keys($fasnoten_arr); + foreach ($studkeys_arr as $studkey) + { + $text .= "*** Student: ".$studkey."
"; + $anz_students_processed++; + + $lvkeys_arr = array_keys($fasnoten_arr[$studkey]); + foreach ($lvkeys_arr as $lvkey) + { + $idkeys_arr = array_keys($fasnoten_arr[$studkey][$lvkey]); + foreach ($idkeys_arr as $idkey) + { + //echo "___".$idkey."
"; + $anz_processed++; + + $lehreinheit_id = $lvkey; + if (key_exists($fasnoten_arr[$studkey][$lvkey][$idkey]["student_fk"],$studenten_arr)) + $student_uid = $studenten_arr[$fasnoten_arr[$studkey][$lvkey][$idkey]["student_fk"]]; + else + $student_uid = "FEHLT"; + + $mitarbeiter_uid = $mitarbeiter_arr[$fasnoten_arr[$studkey][$lvkey][$idkey]["notenlektor_fk"]]; + $note = $fasnoten_arr[$studkey][$lvkey][$idkey]["note"]; + $pruefungstyp_kurzbz = getPruefungstyp($fasnoten_arr[$studkey][$lvkey][$idkey]["status"]); + $datum = $fasnoten_arr[$studkey][$lvkey][$idkey]["datum"]; + $anmerkung = $fasnoten_arr[$studkey][$lvkey][$idkey]["bemerkung"]; + $insertamum = $fasnoten_arr[$studkey][$lvkey][$idkey]["creationdate"]; + $insertvon = $fasnoten_arr[$studkey][$lvkey][$idkey]["creationuser_name"]; + $updatevon = "sync"; + $ext_id = $idkey; + + $zeugnistabeintrag = $fasnoten_arr[$studkey][$lvkey][$idkey]["main"]; + if (key_exists($lvkey,$lv_arr)) + $lehrveranstaltung_id = $lv_arr[$lvkey]; + else + $lehrveranstaltung_id = "FEHLT"; + $studiensemester_kurzbz = $studsem_arr[$fasnoten_arr[$studkey][$lvkey][$idkey]["studiensemester_fk"]]; + + if($lehreinheit_id_arr = getLehreinheitID($conn_fas,$idkey)) + { + $lehreinheit_id = "FEHLT"; + foreach($lehreinheit_id_arr as $lehreinh) + { + if (key_exists($lehreinh,$lehreinheiten_sync_arr)) + { + $lehreinheit_id = $lehreinheiten_sync_arr[$lehreinh]; + break; + } + } + } + else + $lehreinheit_id = "FEHLT"; + + + //begin insert tbl_pruefung + $anz_processed_pruef++; + + if($student_uid == "FEHLT") + { + $insert_error_pruef++; + $text .= "Prüfung: Datensatz FAS ID".$idkey.": student_uid ohne zuordnung
"; + } + else if($lehreinheit_id == "FEHLT") + { + $insert_error_pruef++; + $text .= "Prüfung: Datensatz FAS ID".$idkey.": Lehreinheit ohne zuordnung
"; + } + else + { + $pruef = new pruefung($conn); + + $pruef->lehreinheit_id=$lehreinheit_id; + $pruef->student_uid=$student_uid; + $pruef->mitarbeiter_uid=$mitarbeiter_uid; + $pruef->note=$note; + $pruef->pruefungstyp_kurzbz=$pruefungstyp_kurzbz; + $pruef->datum=$datum; + $pruef->anmerkung=$anmerkung; + $pruef->insertamum=$insertamum; + $pruef->insertvon=$insertvon; + $pruef->updateamum=date("Y-m-d H:m:s"); + $pruef->updatevon=$updatevon; + $pruef->ext_id=$ext_id; + + if (!($pruef->pruefung_id=checkUpdatePruefung($conn,$pruef))) + $pruef->new = 1; + + + if($pruef->pruefung_id == -1) + $anz_not_updated_pruef++; + + else + { + if(!$pruef->save()) + { + echo $pruef->errormsg."
"; + $text .= "Prüfung: Datensatz FAS ID".$idkey.": ".$pruef->errormsg."
"; + if($pruef->new) + $insert_error_pruef++; + else + $update_error_pruef++; + } + else + if($pruef->new) + $anz_insert_pruef++; + else + $anz_update_pruef++; + } + } + + //begin insert tbl_zeugnisnote + if ($zeugnistabeintrag == 1) + { + $anz_processed_zeug++; + + if($student_uid == "FEHLT") + { + $insert_error_zeug++; + $text .= "Zeugnis: Datensatz FAS ID".$idkey.": student_uid ohne zuordnung
"; + } + else if ($lehrveranstaltung_id == "FEHLT") + { + $insert_error_zeug++; + $text .= "Zeugnis: Datensatz FAS ID".$idkey.": lehrveranstaltung_id ohne zuordnung
"; + } + else + { + $zeug = new zeugnisnote($conn); + + $zeug->lehrveranstaltung_id = $lehrveranstaltung_id; + $zeug->student_uid = $student_uid; + $zeug->studiensemester_kurzbz = $studiensemester_kurzbz; + $zeug->note = $note; + $zeug->uebernahmedatum = null; + $zeug->benotungsdatum = $datum; + $zeug->updateamum = date("Y-m-d H:m:s"); + $zeug->updatevon = $updatevon; + $zeug->insertamum = $insertamum; + $zeug->insertvon = $insertvon; + $zeug->ext_id = $ext_id; + $zeug->bemerkung = $anmerkung; + + if (!($zeug->check = checkUpdateZeugnis($conn,$zeug))) + $zeug->new = 1; + + if($zeug->check == -1) + $anz_not_updated_zeug++; + + else + { + if(!$zeug->save()) + { + $text .= "Zeugnis: Datensatz FAS ID".$idkey.": ".$zeug->errormsg."
"; + if($zeug->new) + $insert_error_zeug++; + else + $update_error_zeug++; + } + else + if($zeug->new) + $anz_insert_zeug++; + else + $anz_update_zeug++; + } + } + } + + //debug-output start + /* + if ($zeugnistabeintrag == 1) + $text .= ""; + else + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + $text .= ""; + if ($zeugnistabeintrag == 1) + { + $text .= ""; + $text .= ""; + } + else + $text .= ""; + $text .= ""; + */ + //debug-output ende + + } + } + } + + } + $text .= "
".$lehreinheit_id."".$student_uid."
(".$fasnoten_arr[$lvkey][$idkey]["student_fk"].")
".$mitarbeiter_uid."".$note."".$pruefungstyp_kurzbz."".$insertamum."".$insertvon."now()".$updatevon."".$ext_id."".$lehrveranstaltung_id."".$studiensemester_kurzbz."
"; + $text .= "

Stats


"; + $text .= "Bearbeitete Studiengänge: ".$stg_processed."
"; + $text .= "Anzahl der bearbeiteten Studenten: ".$anz_students_processed."
"; + $text .= "Anzahl der bearbeiteten Datensätze: ".$anz_processed."
"; + $text .= "Anzahl Prüfungseinträge: ".$anz_processed_pruef."
"; + $text .= "Prüfungen insert fehler/ok: ".$insert_error_pruef."/".$anz_insert_pruef."
"; + $text .= "Prüfungen update fehler/ok/noupdate: ".$update_error_pruef."/".$anz_update_pruef."/".$anz_not_updated_pruef."
"; + $text .= "Anzahl Zeugniseinträge: ".$anz_processed_zeug."
"; + $text .= "Zeugnisnoten insert fehler/ok: ".$insert_error_zeug."/".$anz_insert_zeug.")
"; + $text .= "Zeugnisnoten update fehler/ok/noupdate: ".$update_error_zeug."/".$anz_update_zeug."/".$anz_not_updated_zeug."
"; + + $stopzeit = time(); + $runzeit = $stopzeit - $startzeit; + $text .= "Dauer: ".$runzeit." s"; + + $text.="\nEND OF SYNCHRONISATION\n"; + + if (mail($adress,"FAS - Vilesci (Noten/Pruefungen)",$headtext."\n\n".$text,"From: vilesci@technikum-wien.at")) + $sendmail=true; + else + $sendmail=false; + } +?> + + + + FAS - Vilesci (Noten) + + + +'; +else + echo "Mail konnte nicht verschickt werden!
"; +echo $headtext; +echo "

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