This commit is contained in:
Andreas Österreicher
2008-02-14 16:13:36 +00:00
parent 50aa66e94b
commit f94cfe6e99
@@ -0,0 +1,307 @@
<?php
// ************************************
// * Script befuellt/aktualisiert Aufgrund der Eintraege in der
// * Tabelle prestudentrolle die Tabelle studentlehrverband
// * Bei 50ern und 60ern wird das Semester fortlaufend vergeben
// * und nicht anhand der rolle
// **********************************
require_once('../../../vilesci/config.inc.php');
require_once('../../../include/studiensemester.class.php');
require_once('../../../include/person.class.php');
require_once('../../../include/benutzer.class.php');
require_once('../../../include/student.class.php');
require_once('../../../include/prestudent.class.php');
require_once('../../../include/lehrverband.class.php');
if(!$conn = pg_pconnect(CONN_STRING))
die('Fehler beim Hestellen der DB Verbindung');
$text='';
//Alle Studenten mit Studiensemester der Rolle holen
$qry = "SELECT
distinct student_uid, tbl_prestudent.prestudent_id, tbl_prestudentrolle.studiensemester_kurzbz, tbl_student.studiengang_kz
FROM
public.tbl_prestudent JOIN public.tbl_student USING(prestudent_id)
JOIN public.tbl_prestudentrolle USING(prestudent_id)
ORDER BY
student_uid";
$text.="Studentlehrverbandeintraege mit Prestudentrollen abgleichen\n\n";
if($result = pg_query($conn, $qry))
{
while($row = pg_fetch_object($result))
{
$student = new student($conn);
$prestd = new prestudent($conn);
//Aktuellen Status in diesem Studiensemester holen
if(!$prestd->getLastStatus($row->prestudent_id, $row->studiensemester_kurzbz))
{
$text.="Fehler beim Laden des Status von $row->prestudent_id\n";
continue;
}
//Abbrecher und Unterbrecher ins 0. Semester verschieben
if($prestd->rolle_kurzbz=='Abbrecher')
{
$semester='0';
$verband='A';
}
elseif($prestd->rolle_kurzbz=='Unterbrecher')
{
$semester='0';
$verband='B';
}
else
{
$semester = $prestd->ausbildungssemester;
$verband=' ';
}
//Keinen Eintrag erstellen fuer Semester in denen er noch kein Student war und
//keinen Eintrag fuer Diplomanden und Absolventen (werden weiter unten gesondert behandelt)
if(in_array($prestd->rolle_kurzbz, array('Interessent','Bewerber','Abgewiesener','Aufgenommener','Wartender', 'Diplomand','Absolvent')))
continue;
if($student->load_studentlehrverband($row->student_uid, $row->studiensemester_kurzbz))
{
$student->new = false;
//Wenn der gleiche Eintrag schon vorhanden ist dann ueberspringen
if($student->semester==$semester)
continue;
}
else
{
$student->new = true;
$student->insertamum = date('Y-m-d H:i:s');
$student->insertvon = 'chkstdlvbrolle';
$student->verband = $verband;
$student->gruppe = ' ';
}
$student->uid = $row->student_uid;
$student->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$student->studiengang_kz = $row->studiengang_kz;
$student->semester = $semester;
$student->updateamum = date('Y-m-d H:i:s');
$student->updatevon = 'chkstdlvbrolle';
//Lehrverband anlegen falls dieser nicht existiert
$lvb = new lehrverband($conn);
if(!$lvb->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe))
{
$lvb->studiengang_kz = $student->studiengang_kz;
$lvb->semester = $student->semester;
$lvb->verband = $student->verband;
$lvb->gruppe = $student->gruppe;
$lvb->aktiv = true;
if(!$lvb->save(true))
{
$text.="Fehler beim Anlegen des Lehrverbandes: ".$lvb->errormsg;
}
}
//Zuteilung Speichern
if($student->save_studentlehrverband())
{
if($student->new)
$text.="Erstelle Studentlehrverbandeintrag für $row->student_uid im $row->studiensemester_kurzbz in Semester $student->semester\n";
else
$text.="Aktualisiere Studentlehrverbandeintrag für $row->student_uid im $row->studiensemester_kurzbz in Semester $student->semester\n";
}
else
{
$text.="Fehler bei $student->uid im $student->studiensemester_kurzbz Semester $student->semester Studiengang $student->studiengang_kz Verband '$student->verband' Gruppe '$student->gruppe'\n";
}
}
}
$text.="\n\nAbsolventen, Diplomanden, 50er und 60er abgleichen\n\n";
//Absolventen, Diplomanden, 50er und 60er
// Bei 50ern und 60ern wird das Semester immer weitergezaehlt. In der Prestudentrolle
// steht aber weiterhin das wirkliche Semester. Daher wird zum Semester dass in der Prestudentrolle
// steht die Anzahl der Semester hinzugezaehlt in denen er schon Diplomand ist.
//Alle Studenten holen die einen Diplomanden oder Absolventeneintrag haben
$qry = "SELECT distinct student_uid, prestudent_id, studiengang_kz, verband FROM public.tbl_prestudentrolle JOIN public.tbl_student USING(prestudent_id) WHERE rolle_kurzbz='Diplomand' OR rolle_kurzbz='Absolvent'";
if($result = pg_query($conn, $qry))
{
while($row = pg_fetch_object($result))
{
//Alle Diplomandeneintraege des Studenten holen
$qry_diplomand = "SELECT * FROM public.tbl_prestudentrolle WHERE prestudent_id='$row->prestudent_id' AND rolle_kurzbz='Diplomand' ORDER BY datum";
if($result_diplomand = pg_query($conn, $qry_diplomand))
{
$i=0;
while($row_diplomand = pg_fetch_object($result_diplomand))
{
$student = new student($conn);
$prestd = new prestudent($conn);
//Aktuellen Status in diesem Studiensemester holen
if(!$prestd->getLastStatus($row->prestudent_id, $row_diplomand->studiensemester_kurzbz))
{
$text.="Fehler beim Laden des Status von $row->prestudent_id\n";
continue;
}
//Wenn Diplomand nicht der letzte Status in diesem Semester ist, dann Weiterspringen
if($prestd->rolle_kurzbz!='Diplomand')
{
$i++;
continue;
}
//50er und 60er rutschen immer ein Semester weiter
$semester = $row_diplomand->ausbildungssemester+$i;
//Studentlehrverband Eintrag laden
if($student->load_studentlehrverband($row->student_uid, $row_diplomand->studiensemester_kurzbz))
{
$student->new = false;
//Wenn der gleiche Eintrag schon vorhanden ist dann ueberspringen
if($student->semester==$semester)
{
$i++;
continue;
}
}
else
{
$student->new = true;
$student->insertamum = date('Y-m-d H:i:s');
$student->insertvon = 'chkstdlvbrolle';
$student->verband = ' ';
$student->gruppe = ' ';
}
$student->uid = $row->student_uid;
$student->studiensemester_kurzbz = $row_diplomand->studiensemester_kurzbz;
$student->studiengang_kz = $row->studiengang_kz;
$student->semester = $semester;
$student->updateamum = date('Y-m-d H:i:s');
$student->updatevon = 'chkstdlvbrolle';
//Lehrverband anlegen falls dieser nicht existiert
$lvb = new lehrverband($conn);
if(!$lvb->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe))
{
$lvb->studiengang_kz = $student->studiengang_kz;
$lvb->semester = $student->semester;
$lvb->verband = $student->verband;
$lvb->gruppe = $student->gruppe;
$lvb->aktiv = true;
if(!$lvb->save(true))
{
$text.="Fehler beim Anlegen des Lehrverbandes: ".$lvb->errormsg;
}
}
//Zuteilung Speichern
if($student->save_studentlehrverband())
{
if($student->new)
$text.="Erstelle Studentlehrverbandeintrag für $row->student_uid im $row_diplomand->studiensemester_kurzbz in Semester $student->semester (Diplomand)\n";
else
$text.="Aktualisiere Studentlehrverbandeintrag für $row->student_uid im $row_diplomand->studiensemester_kurzbz in Semester $student->semester (Diplomand)\n";
}
else
{
$text.="Fehler bei $student->uid im $student->studiensemester_kurzbz Semester $student->semester Studiengang $student->studiengang_kz Verband '$student->verband' Gruppe '$student->gruppe'\n";
}
//Semester um eins weiterzaehlen
$i++;
}
//Absolventen Eintrag in der Tabelle Studentlehrverband anlegen
//Absolventeneintrag holen
$qry_absolvent = "SELECT * FROM public.tbl_prestudentrolle WHERE prestudent_id='$row->prestudent_id' AND rolle_kurzbz='Absolvent' ORDER BY datum";
if($result_absolvent = pg_query($conn, $qry_absolvent))
{
while($row_absolvent = pg_fetch_object($result_absolvent))
{
$student = new student($conn);
//Der Absolventeneintrag befindet sich im gleichen Semester wie der letzte Diplomandeneintrag
$semester = $row_absolvent->ausbildungssemester+($i!=0?$i-1:0);
//Studentlehrverband Eintrag laden
if($student->load_studentlehrverband($row->student_uid, $row_absolvent->studiensemester_kurzbz))
{
$student->new = false;
//Wenn der gleiche Eintrag schon vorhanden ist dann ueberspringen
if($student->semester==$semester)
continue;
}
else
{
$student->new = true;
$student->insertamum = date('Y-m-d H:i:s');
$student->insertvon = 'chkstdlvbrolle';
$student->verband = $row->verband;
$student->gruppe = ' ';
}
$student->uid = $row->student_uid;
$student->studiensemester_kurzbz = $row_absolvent->studiensemester_kurzbz;
$student->studiengang_kz = $row->studiengang_kz;
$student->semester = $semester;
$student->updateamum = date('Y-m-d H:i:s');
$student->updatevon = 'chkstdlvbrolle';
//Lehrverband anlegen falls dieser nicht existiert
$lvb = new lehrverband($conn);
if(!$lvb->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe))
{
$lvb->studiengang_kz = $student->studiengang_kz;
$lvb->semester = $student->semester;
$lvb->verband = $student->verband;
$lvb->gruppe = $student->gruppe;
$lvb->aktiv = true;
if(!$lvb->save(true))
{
$text.="Fehler beim Anlegen des Lehrverbandes: ".$lvb->errormsg;
}
}
//Zuteilung Speichern
if($student->save_studentlehrverband())
{
if($student->new)
$text.="Erstelle Studentlehrverbandeintrag für $student->uid im $student->studiensemester_kurzbz in Semester $student->semester (Absolvent)\n";
else
$text.="Aktualisiere Studentlehrverbandeintrag für $student->uid im $student->studiensemester_kurzbz in Semester $student->semester (Absolvent)\n";
}
else
{
$text.="Fehler bei $student->uid im $student->studiensemester_kurzbz Semester $student->semester Studiengang $student->studiengang_kz Verband '$student->verband' Gruppe '$student->gruppe'\n";
}
}
}
else
{
$text.="\nFehler beim Ermitteln des Absolventeneintrages:".$qry_absolvent;
}
}
else
{
$text.="\nFehler beim Ermitteln des Diplomandeneintrages:".$qry_diplomand;
}
}
}
else
{
$text.="\nFehler beim Ermitteln der Absolventen und Diplomanden".$qry;
}
echo nl2br($text);
?>