diff --git a/system/generate_missing_sto.php b/system/generate_missing_sto.php
new file mode 100644
index 000000000..87af8298a
--- /dev/null
+++ b/system/generate_missing_sto.php
@@ -0,0 +1,224 @@
+
+ */
+require_once('../config/system.config.inc.php');
+require_once('../include/basis_db.class.php');
+require_once('../include/benutzerberechtigung.class.php');
+require_once('../include/studiensemester.class.php');
+
+// Datenbank Verbindung
+$db = new basis_db();
+
+
+$uid = get_uid();
+$rechte = new benutzerberechtigung();
+$rechte->getBerechtigungen($uid);
+
+if(!$rechte->isBerechtigt('admin'))
+{
+ exit('Sie haben keine Berechtigung');
+}
+
+echo '
+
+ Studienordnung generieren
+
+
+
+
+';
+if(isset($_POST["start"]) && $_POST["start"] == "start")
+{
+ $qry = "
+ SELECT
+ upper(typ || kurzbz) as kurzbz, kurzbzlang, studiengang_kz, bezeichnung, english,max_semester, orgform_kurzbz,
+ (
+ SELECT
+ studiensemester_kurzbz
+ FROM
+ public.tbl_prestudentstatus
+ JOIN public.tbl_prestudent USING(prestudent_id)
+ JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
+ WHERE
+ studiengang_kz=tbl_studiengang.studiengang_kz
+ ORDER BY
+ tbl_studiensemester.start asc limit 1
+ ) as start_studiensemester,
+ (
+ SELECT
+ studiensemester_kurzbz
+ FROM
+ public.tbl_prestudentstatus
+ JOIN public.tbl_prestudent USING(prestudent_id)
+ JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
+ WHERE
+ studiengang_kz=tbl_studiengang.studiengang_kz
+ AND tbl_prestudentstatus.status_kurzbz='Student'
+ ORDER BY
+ tbl_studiensemester.start desc limit 1
+ ) as letztes_studenten_studiensemester,
+ (
+ SELECT
+ gueltigvon
+ FROM
+ lehre.tbl_studienordnung
+ JOIN public.tbl_studiensemester ON(tbl_studiensemester.studiensemester_kurzbz=tbl_studienordnung.gueltigvon)
+ WHERE
+ tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz
+ ORDER BY
+ tbl_studiensemester.start asc limit 1
+ ) as start_studienordnung
+ FROM
+ public.tbl_studiengang
+ ORDER BY typ, kurzbz
+ ";
+
+ if($result = $db->db_query($qry))
+ {
+ while($row = $db->db_fetch_object($result))
+ {
+ if($row->start_studienordnung == '')
+ {
+ echo $row->bezeichnung.' wird uebersprungen da keine Studienordnung vorhanden ist ';
+ continue;
+ }
+ if($row->start_studiensemester == '')
+ {
+ echo $row->bezeichnung.' wird uebersprungen da keine Statuseintraege vorhanden sind ';
+ continue;
+ }
+ if($row->start_studiensemester == $row->start_studienordnung)
+ {
+ echo $row->bezeichnung.' wird uebersprungen da bereits eine vollstaendige Studienordnung vorhanden ist ';
+ continue;
+ }
+ $stsem = new studiensemester();
+ $stsem_bis = $stsem->getPreviousFrom($row->start_studienordnung);
+
+ $bezeichnung = sprintf("%04s",$row->studiengang_kz).'-'.$row->kurzbz.'-'.$row->start_studiensemester;
+
+ // Studienordnung anlegen
+
+ $qry_sto = "INSERT INTO lehre.tbl_studienordnung(studiengang_kz, version, gueltigvon, gueltigbis,
+ bezeichnung, ects, studiengangbezeichnung, studiengangbezeichnung_englisch, studiengangkurzbzlang,
+ insertamum, insertvon, status_kurzbz) VALUES(".
+ $db->db_add_param($row->studiengang_kz).','.
+ "'01',".
+ $db->db_add_param($row->start_studiensemester).','.
+ $db->db_add_param($stsem_bis).','.
+ $db->db_add_param($bezeichnung).','.
+ $db->db_add_param($row->max_semester*30).','.
+ $db->db_add_param($row->bezeichnung).','.
+ $db->db_add_param($row->english).','.
+ $db->db_add_param($row->kurzbzlang).",now(),'autogenerate','approved');";
+
+ if($db->db_query('BEGIN;'.$qry_sto))
+ {
+ $qry="SELECT currval('lehre.seq_studienordnung_studienordnung_id') as id;";
+ if($db->db_query($qry))
+ {
+ if($rowseq = $db->db_fetch_object())
+ {
+ $studienordnung_id = $rowseq->id;
+ }
+ }
+
+ // Studienplan anlegen
+ $qry_stpl = 'INSERT INTO lehre.tbl_studienplan (studienordnung_id, orgform_kurzbz,version,
+ bezeichnung, regelstudiendauer, sprache, aktiv, semesterwochen, testtool_sprachwahl,
+ pflicht_sws, pflicht_lvs, ects_stpl, insertamum, insertvon) VALUES ('.
+ $db->db_add_param($studienordnung_id, FHC_INTEGER).', '.
+ $db->db_add_param($row->orgform_kurzbz).', '.
+ "'V1', ".
+ $db->db_add_param($bezeichnung.'-'.$row->orgform_kurzbz).', '.
+ $db->db_add_param($row->max_semester, FHC_INTEGER).', '.
+ "'German', true, 15, false, 0, 0,".
+ $db->db_add_param($row->max_semester*30, FHC_INTEGER).', '.
+ "now(),'autogenerate');";
+
+ if($db->db_query($qry_stpl))
+ {
+ $qry="SELECT currval('lehre.seq_studienplan_studienplan_id') as id;";
+ if($db->db_query($qry))
+ {
+ if($row_seq = $db->db_fetch_object())
+ {
+ $studienplan_id = $row_seq->id;
+ }
+ }
+
+ // Gueltigkeiten setzen
+ $qry = "SELECT
+ *
+ FROM
+ public.tbl_studiensemester
+ WHERE
+ start>=(SELECT start FROM public.tbl_studiensemester
+ WHERE studiensemester_kurzbz=".$db->db_add_param($row->start_studiensemester).")
+ AND ende<=(SELECT ende FROM public.tbl_studiensemester
+ WHERE studiensemester_kurzbz=".$db->db_add_param($stsem_bis).")";
+
+ if($result_stsem = $db->db_query($qry))
+ {
+ while($row_stsem = $db->db_fetch_object($result_stsem))
+ {
+ if(mb_substr($row_stsem->studiensemester_kurzbz,0,2)=='WS')
+ $sem=1;
+ else
+ $sem=2;
+
+ while($sem<=$row->max_semester)
+ {
+ $qry_stplsem = "INSERT INTO lehre.tbl_studienplan_semester (
+ studienplan_id, studiensemester_kurzbz, semester) VALUES (" .
+ $db->db_add_param($studienplan_id) . ', ' .
+ $db->db_add_param($row_stsem->studiensemester_kurzbz) . ', ' .
+ $db->db_add_param($sem) . '); ';
+
+ $db->db_query($qry_stplsem);
+ $sem+=2;
+ }
+ }
+ }
+ }
+
+ echo "Generiere ".$bezeichnung." für ".$row->bezeichnung.' ';
+ $db->db_query('COMMIT;');
+ }
+ }
+ }
+}
+else
+{
+ echo '
+ Studienordnungen generieren
+ Dieses Script generiert pro Studiengang eine Studienordnung wenn Statuseinträge vorhanden sind
+ jedoch keine dazupassende Studienordnung. Es werden nur Studienordnungen angelegt VOR bereits bestehenden Studienordnungen.
+ Es werden keine Lücken gefüllt. Wenn noch keine Studienordnung vorhanden ist, wird der Studiengang uebersprungen.
+ Es wird jeweils eine Studienordnung, ein Studienplan und die Gültigkeit gesetzt. Es werde leere Dummy Studienpläne erstellt
+ die keine Lehrveranstaltungen zugeordnet haben.
+ Dieses Script sollte nur einmalig beim Update auf Version 3.2 gestartet werden und nur dann wenn die Studienpläne
+ nicht bereits vollständig eingetragen sind.
+ ';
+}
+echo '
+';
\ No newline at end of file