diff --git a/content/student/aufnahmetermine.xul.php b/content/student/aufnahmetermine.xul.php
index 792623fbf..0776226cd 100644
--- a/content/student/aufnahmetermine.xul.php
+++ b/content/student/aufnahmetermine.xul.php
@@ -132,6 +132,14 @@ echo ']>
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/aufnahmetermine/rdf#rt_person_id" />
+
+
+
+
@@ -148,6 +156,8 @@ echo ']>
+
+
diff --git a/include/reihungstest.class.php b/include/reihungstest.class.php
index 739ae1a09..9be3a4aa4 100644
--- a/include/reihungstest.class.php
+++ b/include/reihungstest.class.php
@@ -428,7 +428,8 @@ class reihungstest extends basis_db
return false;
}
- public function getTeilnehmerAnzahl($reihungstest_id) {
+ public function getTeilnehmerAnzahl($reihungstest_id)
+ {
$qry = 'SELECT count(*) AS anzahl '
. 'FROM public.tbl_prestudent '
@@ -911,4 +912,61 @@ class reihungstest extends basis_db
return false;
}
}
+
+ /**
+ * Laedt Reihungstests die den Suchkriterien entsprechen
+ * @param $datum Datum
+ * @param $studiensemester_kurzbz Studiensemester optional
+ * @param $stufe Stufe optional
+ * @return boolean true wenn erfolgreich, false im Fehlerfall
+ */
+ public function findReihungstest($datum, $studiensemester_kurzbz = null, $stufe = null)
+ {
+ $qry = "SELECT
+ *
+ FROM
+ public.tbl_reihungstest
+ WHERE
+ datum=".$this->db_add_param($datum);
+
+ if(!is_null($studiensemester_kurzbz))
+ $qry.=" AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz);
+ if(!is_null($stufe))
+ $qry.=" AND stufe=".$this->db_add_param($stufe);
+ $qry .=" ORDER BY reihungstest_id";
+
+ if($result = $this->db_query($qry))
+ {
+ while($row = $this->db_fetch_object($result))
+ {
+ $obj = new reihungstest();
+
+ $obj->reihungstest_id = $row->reihungstest_id;
+ $obj->studiengang_kz = $row->studiengang_kz;
+ $obj->ort_kurzbz = $row->ort_kurzbz;
+ $obj->anmerkung = $row->anmerkung;
+ $obj->datum = $row->datum;
+ $obj->uhrzeit = $row->uhrzeit;
+ $obj->ext_id = $row->ext_id;
+ $obj->insertamum = $row->insertamum;
+ $obj->insertvon = $row->insertvon;
+ $obj->updateamum = $row->updateamum;
+ $obj->updatevon = $row->updatevon;
+ $obj->max_teilnehmer = $row->max_teilnehmer;
+ $obj->oeffentlich = $this->db_parse_bool($row->oeffentlich);
+ $obj->freigeschaltet = $this->db_parse_bool($row->freigeschaltet);
+ $obj->studiensemester_kurzbz =$row->studiensemester_kurzbz;
+ $obj->stufe = $row->stufe;
+ $obj->anmeldefrist = $row->anmeldefrist;
+
+ $this->result[] = $obj;
+ }
+ return true;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler beim Laden der Daten';
+ return false;
+ }
+ }
}
diff --git a/rdf/aufnahmetermine.rdf.php b/rdf/aufnahmetermine.rdf.php
index f291ef46c..5dfe05cdd 100644
--- a/rdf/aufnahmetermine.rdf.php
+++ b/rdf/aufnahmetermine.rdf.php
@@ -26,6 +26,7 @@ require_once('../include/datum.class.php');
require_once('../include/benutzer.class.php');
require_once('../include/prestudent.class.php');
require_once('../include/reihungstest.class.php');
+require_once('../include/studienplan.class.php');
$user = get_uid();
@@ -74,6 +75,9 @@ function drawrow($row)
$reihungstest_obj = new reihungstest();
$reihungstest_obj->load($row->rt_id);
+ $studienplan = new studienplan();
+ $studienplan->loadStudienplan($row->studienplan_id);
+
$i=$oRdf->newObjekt($row->rt_person_id);
$oRdf->obj[$i]->setAttribut('rt_person_id',$row->rt_person_id,true);
$oRdf->obj[$i]->setAttribut('rt_id',$row->rt_id,true);
@@ -86,6 +90,7 @@ function drawrow($row)
$oRdf->obj[$i]->setAttribut('reihungstest',$reihungstest_obj->datum.' '.$reihungstest_obj->anmerkung,true);
$oRdf->obj[$i]->setAttribut('stufe',$reihungstest_obj->stufe,true);
$oRdf->obj[$i]->setAttribut('studienplan_id',$row->studienplan_id,true);
+ $oRdf->obj[$i]->setAttribut('studienplan_bezeichnung',$studienplan->bezeichnung,true);
$oRdf->addSequence($row->rt_person_id);
}
diff --git a/system/dbupdate_3.2/migrate_reihungstest.php b/system/dbupdate_3.2/migrate_reihungstest.php
new file mode 100644
index 000000000..bf9011957
--- /dev/null
+++ b/system/dbupdate_3.2/migrate_reihungstest.php
@@ -0,0 +1,322 @@
+
+ */
+/*
+Dieses Script kopiert die Reihungstestanmeldungen und Punkte aus
+der Tabelle public.tbl_prestudent in die Tabelle public.tbl_rt_person
+
+Dieses muss einmalig gestartet werden beim Umstieg auf die CI Version
+
+Vorgehensweise
+Alle Einträge aus tbl_prestudent holen
+
+Wenn Reihungstest Termin zugeteilt ist
+ 1. Eintrag in tbl_rt_person erstellen
+ Punkte1 in Punkte Feld speichern
+ 2. Wenn Punkte2 gesetzt dann Reihungstest erstellen mit Stufe 2
+ und selben Datum wie der Ursprungstermin
+ Punkte2 in das Punkte Feld speichern
+ 3. Wenn Punkte3 gesetzt dann Reihungstest erstellen mit Stufe 3
+ und selben Datum wie der Ursprungstermin
+ Punkte3 in das Punkte Feld speichern
+Wenn kein Reihungstest zugeteilt ist aber Punkte vorhanden sind
+ 1. Reihungstest erstellen mit Datum des Semesterstarts des Studiensemesters
+ des letzten Interessentenstatus des Studierenden
+ und diesen für die Punkte 1 verwenden. Weiter vorgehensweise mit
+ Punkt2 und Punkte3 wie oben
+Wenn kein Reihungstest zugeteilt und keine Punkte eingetragen sind,
+dann nichts tun
+*/
+require_once('../../config/vilesci.config.inc.php');
+require_once('../../include/functions.inc.php');
+require_once('../../include/benutzerberechtigung.class.php');
+require_once('../../include/studiensemester.class.php');
+require_once('../../include/reihungstest.class.php');
+require_once('../../include/prestudent.class.php');
+require_once('../../include/studienplan.class.php');
+
+$uid = get_uid();
+$rechte = new benutzerberechtigung();
+$rechte->getBerechtigungen($uid);
+
+if(!$rechte->isBerechtigt('admin', null, 'suid'))
+ die($rechte->errormsg);
+
+echo '
+
+
+
+
+
+ Reihungstest Migration
+
+
+Reihungstest Migration
+';
+if(!isset($_POST['run']))
+{
+ echo '
+ Dieses Script migriert die Reihungstestanmeldungen und Punkte von der
+ tbl_prestudent in die neue Tabelle public.tbl_rt_person.
+ Dabei werden ggf neue Reihungstesttermine erstellt für Stufe2 und Stufe3 Tests.
+ Dieses Script sollte einmalig gestartet werden nach dem Update auf 3.2 (CI)
+ Die Migration kann einige Minuten dauern.
+
+ ';
+}
+else
+{
+ set_time_limit(10000);
+
+ $db = new basis_db();
+
+ $qry = "SELECT
+ tbl_prestudent.*, tbl_person.nachname, tbl_person.vorname
+ FROM
+ public.tbl_prestudent
+ JOIN public.tbl_person USING(person_id)
+ WHERE
+ reihungstest_id IS NOT NULL
+ OR rt_punkte1 is not null
+ OR rt_punkte2 is not null
+ ";
+
+ $count_zuordnungen = 0;
+ $count_neue_reihungsests = 0;
+ $count_zuordnung_vorhanden = 0;
+
+ if($result = $db->db_query($qry))
+ {
+ while($row = $db->db_fetch_object($result))
+ {
+ $error = false;
+ $errormsg = '';
+ $reihungstest_id = '';
+ $studienplan_id = '';
+ $stufe = 1;
+ $ausbildungssemester = 1;
+ $studiensemester_kurzbz = '';
+
+ if($row->reihungstest_id == '')
+ {
+ // Reihungstesttermin nicht eingetragen -> erstellen
+ $prestudent_obj = new prestudent();
+ if($prestudent_obj->getLastStatus($row->prestudent_id, '','Interessent'))
+ {
+ $ausbildungssemester = $prestudent_obj->ausbildungssemester;
+
+ $stsem_obj = new studiensemester();
+ if($stsem_obj->load($prestudent_obj->studiensemester_kurzbz))
+ {
+ $datum = $stsem_obj->start;
+ $studiensemester_kurzbz = $prestudent_obj->studiensemester_kurzbz;
+ $studienplan_id = $prestudent_obj->studienplan_id;
+ }
+ else
+ {
+ $errorsmg .= 'Fehler beim Laden des Studiensemesters';
+ $error = true;
+ }
+ }
+ else
+ {
+ $errormsg .= 'kein Interessentenstatus für PrestudentID '.$row->prestudent_id.' gefunden';
+ $error = true;
+ }
+
+ if(!$error)
+ {
+ $reihungstest_id = getReihungstest($datum, $studiensemester_kurzbz, $stufe, $row->studiengang_kz);
+ }
+ }
+ else
+ $reihungstest_id = $row->reihungstest_id;
+
+ if($studienplan_id=='')
+ {
+ // Wenn kein Studienplan eingetragen ist, dann wird geraten
+ $studienplanObj = new studienplan();
+ $studienplanObj->getStudienplaeneFromSem($row->studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester);
+
+ if(isset($studienplanObj->result[0]))
+ $studienplan_id = $studienplanObj->result[0]->studienplan_id;
+ else
+ {
+ $error = true;
+ $errormsg .= 'StudienplanID nicht gefunden für '.$row->prestudent_id.' '.$row->nachname.' '.$row->vorname;
+ }
+ }
+
+ if($reihungstest_id == '')
+ {
+ $error = true;
+ $errormsg .= 'Reihungstest kann nicht ermittelt werden';
+ }
+
+ if(!$error)
+ {
+ //echo "
AddReihungstestPerson1 $reihungstest_id, $row->rt_punkte1, $studienplan_id";
+ if(addReihungstestPerson($row, $reihungstest_id, $row->rt_punkte1, $studienplan_id)===false)
+ $error = true;
+ }
+
+ if(!$error)
+ {
+ if($row->rt_punkte2 != '')
+ {
+ $stufe = 2;
+ $rt = new reihungstest();
+ $rt->load($reihungstest_id);
+
+ $reihungstest_id = getReihungstest($rt->datum, $rt->studiensemester_kurzbz, $stufe, $row->studiengang_kz);
+ //echo "
AddReihungstestPerson2 $reihungstest_id, $row->rt_punkte2, $studienplan_id";
+ if(addReihungstestPerson($row, $reihungstest_id, $row->rt_punkte2, $studienplan_id)===false)
+ $error = true;
+ }
+ if($row->rt_punkte3 != '' && $row->rt_punkte3 != '0.0000')
+ {
+ $stufe = 3;
+ $rt = new reihungstest();
+ $rt->load($reihungstest_id);
+
+ $reihungstest_id = getReihungstest($rt->datum, $rt->studiensemester_kurzbz, $stufe, $row->studiengang_kz);
+ //echo "
AddReihungstestPerson3 $reihungstest_id, $row->rt_punkte3, $studienplan_id";
+ if(addReihungstestPerson($row, $reihungstest_id, $row->rt_punkte3, $studienplan_id)===false)
+ $error = true;
+ }
+ }
+
+ if($error)
+ echo $errormsg.'
';
+ }
+ }
+
+ echo 'Migration abgeschlossen
+ Neue Zuordnungen: '.$count_zuordnungen.'
+ Neue Reihungstests: '.$count_neue_reihungsests.'
+ Bereits vorhandene Zuordnungen: '.$count_zuordnung_vorhanden;
+}
+echo '
+';
+
+/*** FUNKTIONEN ***/
+
+/**
+ * Erstellt die Zuordnung einer Person zu einem Reihungstest
+ */
+function addReihungstestPerson($row, $reihungstest_id, $punkte, $studienplan_id)
+{
+ global $count_zuordnungen, $count_zuordnung_vorhanden;
+
+ // Suchen ob bereits ein Eintrag vorhanden ist in rt_person
+ $rt_obj = new reihungstest();
+ if(!$rt_obj->getPersonReihungstest($row->person_id, $reihungstest_id))
+ {
+ // Zuordnung noch nicht vorhanden
+ // Neue Zuordnung erstellen
+ $rt_obj->person_id = $row->person_id;
+ $rt_obj->rt_id = $reihungstest_id;
+ $rt_obj->studienplan_id = $studienplan_id;
+ $rt_obj->anmeldedatum = $row->anmeldungreihungstest;
+ $rt_obj->teilgenommen = ($row->reihungstestangetreten=='t'?true:false);
+ $rt_obj->punkte = $punkte;
+ $rt_obj->new = true;
+ if(!$rt_obj->savePersonReihungstest())
+ {
+ return 'Fehler beim Eintragen der RT-Zuordnung'.$rt_obj->errormsg;
+ }
+ else
+ {
+ $count_zuordnungen++;
+ // schauen ob der Studienplan dem Reihungstest zugeordnet ist und
+ // gegebenenfalls zuordnen
+ $rt_obj = new reihungstest();
+ $rt_obj->getStudienplaeneReihungstest($reihungstest_id);
+ $found = false;
+ foreach($rt_obj->result as $row)
+ {
+ if($row->studienplan_id==$studienplan_id)
+ {
+ $found = true;
+ break;
+ }
+ }
+ if(!$found)
+ {
+ $rt_obj->new=true;
+ $rt_obj->rt_id = $reihungstest_id;
+ $rt_obj->studienplan_id = $studienplan_id;
+ $rt_obj->saveStudienplanReihungstest();
+ }
+ return true;
+ }
+ }
+ else
+ {
+ // Eintrag bereits vorhanden.
+ // keine weiter aktion nötig.
+ $count_zuordnung_vorhanden++;
+ return true;
+ }
+}
+
+/**
+ * Liefert eine ReihungstestID die den Kriterien entspricht
+ * Wenn es keine passenden Termin gibt, dann wird einer erstellt
+ */
+function getReihungstest($datum, $studiensemester_kurzbz, $stufe, $studiengang_kz)
+{
+ global $errormsg, $error, $count_neue_reihungsests;
+
+ // Pruefen ob bereits ein passender Reihungstesttermin vorhanden ist
+ $reihungstest_obj = new reihungstest();
+ $reihungstest_obj->findReihungstest($datum, $studiensemester_kurzbz, $stufe);
+ if(!isset($reihungstest_obj->result[0]))
+ {
+ // Wenn kein Termin gefunden wurde, dann einen neuen Anlegen
+ $reihungstest_obj = new reihungstest();
+ $reihungstest_obj->new = true;
+ $reihungstest_obj->datum = $datum;
+ $reihungstest_obj->freigeschaltet = false;
+ $reihungstest_obj->oeffentlich = false;
+ $reihungstest_obj->stufe = $stufe;
+ $reihungstest_obj->studiensemester_kurzbz = $studiensemester_kurzbz;
+ $reihungstest_obj->studiengang_kz = $studiengang_kz;
+
+ if($reihungstest_obj->save())
+ {
+ $reihungstest_id = $reihungstest_obj->reihungstest_id;
+ $count_neue_reihungsests++;
+ }
+ else
+ {
+ $errormsg .= 'Fehler beim Erstellen des Reihungstesttermins'.$reihungstest_obj->errormsg;
+ $error = true;
+ return false;
+ }
+ }
+ else
+ {
+ $reihungstest_id = $reihungstest_obj->result[0]->reihungstest_id;
+ }
+ return $reihungstest_id;
+}
+?>
\ No newline at end of file