diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php
index 8517d7f9d..0390613f7 100644
--- a/application/models/education/Lehrveranstaltung_model.php
+++ b/application/models/education/Lehrveranstaltung_model.php
@@ -309,4 +309,50 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
}
+
+ /**
+ * Sucht nach LV Templates und gibt Id und Label ("bezeichnung [kurzbz]") aus
+ * Diese funktion ist für autocomplete gedacht
+ *
+ * @param string $filter Suchfilter
+ * @return \stdClass A return object
+ */
+ public function loadTemplates($filter)
+ {
+ $filter = strtolower($filter);
+ $qry = "SELECT
+ tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_lehrveranstaltung.bezeichnung, tbl_lehrveranstaltung.kurzbz
+ FROM
+ lehre.tbl_lehrveranstaltung
+ WHERE
+ tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND (
+ CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) LIKE '%".$this->db_escape($filter)."%' OR
+ LOWER(tbl_lehrveranstaltung.bezeichnung) LIKE '%".$this->db_escape($filter). "%' OR
+ LOWER(tbl_lehrveranstaltung.kurzbz) LIKE '%".$this->db_escape($filter). "%'
+ )
+ ";
+ return $this->execQuery($qry);
+ }
+
+ /**
+ * Lädt Template und gibt Id und Label ("bezeichnung [kurzbz]") zurück
+ * Diese funktion ist für autocomplete gedacht
+ *
+ * @param string $name
+ * @return \stdClass A return object
+ */
+ public function loadTemplateByName($name)
+ {
+ $qry = "SELECT
+ tbl_lehrveranstaltung.lehrveranstaltung_id as id, CONCAT(tbl_lehrveranstaltung.bezeichnung, ' [', tbl_lehrveranstaltung.kurzbz, ']') as label
+ FROM
+ lehre.tbl_lehrveranstaltung
+ WHERE
+ tbl_lehrveranstaltung.lehrtyp_kurzbz = 'tpl' AND (
+ CAST(tbl_lehrveranstaltung.lehrveranstaltung_id AS TEXT) = '".($name ? $this->db_escape($name) : 0)."' OR tbl_lehrveranstaltung.bezeichnung = '".$this->db_escape($name). "' OR tbl_lehrveranstaltung.kurzbz = '".$this->db_escape($name). "'
+ )
+ ";
+ return $this->execQuery($qry);
+ }
+
}
diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php
index 173cec529..8875fd4c5 100644
--- a/application/models/person/Person_model.php
+++ b/application/models/person/Person_model.php
@@ -82,7 +82,7 @@ class Person_model extends DB_Model
}
else
{
- $person['svnr'] = $person['svnr'] . 'v' . ($result->retval[0]->svnr{11} + 1);
+ $person['svnr'] = $person['svnr'] . 'v' . ($result->retval[0]->svnr[11] + 1);
}
}
}
@@ -283,8 +283,8 @@ class Person_model extends DB_Model
SELECT p2.person_id
FROM public.tbl_person p
JOIN public.tbl_person p2
- ON p.vorname = p2.vorname
- AND p.nachname = p2.nachname
+ ON lower(p.vorname) = lower(p2.vorname)
+ AND lower(p.nachname) = lower(p2.nachname)
AND p.gebdatum = p2.gebdatum
AND p.person_id = ?
)
@@ -310,8 +310,8 @@ class Person_model extends DB_Model
SELECT p2.person_id
FROM public.tbl_person p
JOIN public.tbl_person p2
- ON p.vorname = p2.vorname
- AND p.nachname = p2.nachname
+ ON lower(p.vorname) = lower(p2.vorname)
+ AND lower(p.nachname) = lower(p2.nachname)
AND p.gebdatum = p2.gebdatum
AND p.person_id = ?
)
@@ -330,7 +330,7 @@ class Person_model extends DB_Model
SELECT vorname, nachname, gebdatum, person_id
FROM tbl_person
) p2
- ON (p1.vorname = p2.vorname AND p1.nachname = p2.nachname AND p1.gebdatum = p2.gebdatum)
+ ON (lower(p1.vorname) = lower(p2.vorname) AND lower(p1.nachname) = lower(p2.nachname) AND p1.gebdatum = p2.gebdatum)
WHERE p1.person_id != p2.person_id AND (p1.person_id = ?)";
return $this->execQuery($qry, array($person_id, $person_id, $person_id));
diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php
index 9748a6b30..acf8944d6 100644
--- a/application/views/system/infocenter/infocenterData.php
+++ b/application/views/system/infocenter/infocenterData.php
@@ -254,6 +254,22 @@
ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC
LIMIT 1
) AS "ZGVMNation",
+ (
+ SELECT upper(tbl_nation.nationengruppe_kurzbz)
+ FROM public.tbl_prestudent ps
+ JOIN bis.tbl_nation ON ps.zgvnation = tbl_nation.nation_code
+ WHERE ps.person_id = p.person_id
+ ORDER BY ps.zgvnation DESC NULLS LAST, ps.prestudent_id DESC
+ LIMIT 1
+ ) AS "ZGVNationGruppe",
+ (
+ SELECT upper(tbl_nation.nationengruppe_kurzbz)
+ FROM public.tbl_prestudent ps
+ JOIN bis.tbl_nation ON ps.zgvmanation = tbl_nation.nation_code
+ WHERE ps.person_id = p.person_id
+ ORDER BY ps.zgvmanation DESC NULLS LAST, ps.prestudent_id DESC
+ LIMIT 1
+ ) AS "ZGVMNationGruppe",
(
SELECT tbl_organisationseinheit.bezeichnung
FROM public.tbl_benutzerfunktion
@@ -361,6 +377,8 @@
ucfirst($this->p->t('lehre', 'studiengang')).' ('.$this->p->t('global', 'aktiv').')',
'ZGV Nation BA',
'ZGV Nation MA',
+ 'ZGV Gruppe BA',
+ 'ZGV Gruppe MA',
'InfoCenter Mitarbeiter'
),
'formatRow' => function($datasetRaw) {
@@ -452,6 +470,16 @@
$datasetRaw->{'ZGVMNation'} = '-';
}
+ if ($datasetRaw->{'ZGVNationGruppe'} == null)
+ {
+ $datasetRaw->{'ZGVNationGruppe'} = '-';
+ }
+
+ if ($datasetRaw->{'ZGVMNationGruppe'} == null)
+ {
+ $datasetRaw->{'ZGVMNationGruppe'} = '-';
+ }
+
if ($datasetRaw->{'InfoCenterMitarbeiter'} === null)
{
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein';
diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php
index 8bfa169e1..75d60a179 100644
--- a/application/views/system/infocenter/infocenterFreigegebenData.php
+++ b/application/views/system/infocenter/infocenterFreigegebenData.php
@@ -199,14 +199,15 @@ $query = '
LIMIT 1
) AS "ReihungstestApplied",
(
- SELECT rtp.datum
+ SELECT CONCAT(rtp.datum, rtp.uhrzeit)
FROM public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id)
LEFT JOIN (
SELECT rtp.person_id,
rt.studiensemester_kurzbz,
rtp.teilgenommen,
- rt.datum
+ rt.datum,
+ rt.uhrzeit
FROM public.tbl_rt_person rtp
JOIN tbl_reihungstest rt ON(rtp.rt_id = rt.reihungstest_id)
WHERE rt.stufe = 1
@@ -409,13 +410,13 @@ $query = '
$datasetRaw->{'ReihungstestApplied'} = 'Nein';
}
- if ($datasetRaw->{'ReihungstestDate'} == null)
+ if ($datasetRaw->{'ReihungstestDate'} == '')
{
$datasetRaw->{'ReihungstestDate'} = '-';
}
else
{
- $datasetRaw->{'ReihungstestDate'} = date_format(date_create($datasetRaw->{'ReihungstestDate'}),'Y-m-d');
+ $datasetRaw->{'ReihungstestDate'} = date_format(date_create($datasetRaw->{'ReihungstestDate'}),'Y-m-d H:i');
}
if ($datasetRaw->{'ZGVNation'} == null)
diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php
index a3b011531..ce05ecf8a 100644
--- a/application/views/system/issues/issuesData.php
+++ b/application/views/system/issues/issuesData.php
@@ -31,15 +31,35 @@ $query = "WITH zustaendigkeiten AS (
$query .= " THEN TRUE
ELSE FALSE
END AS \"zustaendig\"
- FROM system.tbl_fehler_zustaendigkeiten zst
+ FROM system.tbl_fehler_zustaendigkeiten zst
)";
$query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\",
- inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
+ inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\",
ftyp.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlertyp\", stat.bezeichnung_mehrsprachig[".$LANGUAGE_INDEX."] AS \"Fehlerstatus\",
verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\",
fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\",
- pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
+ pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\",
+ (
+ /* show all relevant Studiengänge of person and wether it is an employee*/
+ SELECT STRING_AGG(studiengang || ' ' || last_status, ' | ')
+ || (CASE WHEN EXISTS (
+ SELECT 1 FROM public.tbl_mitarbeiter ma
+ JOIN public.tbl_benutzer ben ON ma.mitarbeiter_uid = ben.uid
+ WHERE person_id = prestudents.person_id
+ AND ben.aktiv
+ ) THEN ' | Mitarbeiter' ELSE '' END)
+ FROM (
+ SELECT DISTINCT person_id, prestudent_id, UPPER(stg.typ || stg.kurzbz) AS studiengang, get_rolle_prestudent(ps.prestudent_id, null) AS last_status
+ FROM public.tbl_prestudent ps
+ JOIN public.tbl_studiengang stg USING (studiengang_kz)
+ WHERE person_id = pers.person_id
+ ORDER BY prestudent_id DESC
+ ) prestudents
+ WHERE last_status IN ('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')
+ GROUP BY person_id
+ LIMIT 1;
+ ) AS \"Zugehörigkeit\",
CASE
WHEN
EXISTS(SELECT 1
@@ -60,7 +80,7 @@ $query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern
FROM system.tbl_fehler_zustaendigkeiten
JOIN public.tbl_person USING (person_id)
WHERE fehlercode = fr.fehlercode
- GROUP BY fehlercode
+ GROUP BY fehlercode
) AS \"Person Zuständigkeiten\",
(
SELECT string_agg(organisationseinheittyp_kurzbz || ' ' || oe.bezeichnung || COALESCE(' - ' || fu.beschreibung, ''), ' | ' ORDER BY bezeichnung, oe_kurzbz)
@@ -68,7 +88,7 @@ $query .= "SELECT issue_id, fehlercode AS \"Fehlercode\", iss.fehlercode_extern
LEFT JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
LEFT JOIN public.tbl_funktion fu USING (funktion_kurzbz)
WHERE fehlercode = fr.fehlercode
- GROUP BY fehlercode
+ GROUP BY fehlercode
) AS \"Organisationseinheit Zuständigkeiten\"
FROM system.tbl_issue iss
JOIN system.tbl_fehler fr USING (fehlercode)
@@ -95,13 +115,13 @@ if (!isEmptyArray($all_oe_kurzbz_berechtigt))
AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */
FROM public.tbl_prestudentstatus ps_finished
JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz)
- WHERE prestudent_id = ps.prestudent_id
+ WHERE prestudent_id = ps.prestudent_id
AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener')
AND datum::date + interval '2 months' < NOW()
AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */
JOIN public.tbl_prestudentstatus USING (prestudent_id)
JOIN public.tbl_studiensemester USING (studiensemester_kurzbz)
- WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS
+ WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS
AND person_id = ps.person_id
AND prestudent_id <> ps_finished.prestudent_id
AND tbl_studiensemester.start::date > sem_finished.start::date)
@@ -149,6 +169,7 @@ $filterWidgetArray = array(
ucfirst($this->p->t('fehlermonitoring', 'statuscode')),
ucfirst($this->p->t('person', 'vorname')),
ucfirst($this->p->t('person', 'nachname')),
+ ucfirst($this->p->t('fehlermonitoring', 'zugehoerigkeit')),
ucfirst($this->p->t('fehlermonitoring', 'hauptzustaendig')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigePersonen')),
ucfirst($this->p->t('fehlermonitoring', 'zustaendigeOrganisationseinheiten'))
@@ -180,16 +201,16 @@ $filterWidgetArray = array(
$datasetRaw->{'OE'} = '-';
}
- if ($datasetRaw->{'Verarbeitet am'} == null)
- {
- $datasetRaw->{'Verarbeitet am'} = '-';
- }
-
if ($datasetRaw->{'Verarbeitet von'} == null)
{
$datasetRaw->{'Verarbeitet von'} = '-';
}
+ if ($datasetRaw->{'Zugehörigkeit'} == null)
+ {
+ $datasetRaw->{'Zugehörigkeit'} = '-';
+ }
+
if ($datasetRaw->{'Person Zuständigkeiten'} == null)
{
$datasetRaw->{'Person Zuständigkeiten'} = '-';
@@ -200,8 +221,6 @@ $filterWidgetArray = array(
$datasetRaw->{'Organisationseinheit Zuständigkeiten'} = '-';
}
-
-
return $datasetRaw;
},
'markRow' => function($datasetRaw) {
diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php
index 8e449b12d..4a03685dd 100644
--- a/cis/private/profile/zeitsperre_resturlaub.php
+++ b/cis/private/profile/zeitsperre_resturlaub.php
@@ -282,7 +282,7 @@ function showHideBezeichnungDropDown()
}
else if (dd.options[dd.selectedIndex].value == 'DienstF')
{
- sp.innerHTML = 'Dienstfreistellungen nur in Absprache mit Personalservice eintragen!
';
+ sp.innerHTML = 'Dienstfreistellungen nur in Absprache mit HR Service eintragen!
';
}
else
{
diff --git a/cis/private/tools/suche.php b/cis/private/tools/suche.php
index b4574a95f..15d75c546 100644
--- a/cis/private/tools/suche.php
+++ b/cis/private/tools/suche.php
@@ -275,7 +275,7 @@ function searchOE($searchItems)
$oe->result[] = new organisationseinheit($row->oe_kurzbz);
}
- if(count($oe->result)>0)
+ if(is_array($oe->result) && count($oe->result)>0)
{
echo '
',$p->t('global/organisationseinheiten'),'
';
echo '
diff --git a/content/fasDBDML.php b/content/fasDBDML.php
index 2c4fcccbc..899f0096c 100644
--- a/content/fasDBDML.php
+++ b/content/fasDBDML.php
@@ -496,7 +496,7 @@ if(!$error)
elseif(isset($_POST['stsem_aktuell']))
{
$stsem = new studiensemester();
- $studiensemester_kurzbz = $stsem->getakt();
+ $studiensemester_kurzbz = $stsem->getNearest();
$variable->name = 'semester_aktuell';
$variable->wert = $studiensemester_kurzbz;
diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php
index ffadb94f2..9827dec4f 100644
--- a/content/lvplanung/lehrveranstaltungDBDML.php
+++ b/content/lvplanung/lehrveranstaltungDBDML.php
@@ -1477,7 +1477,7 @@ if(!$error)
$lema_new->insertamum = date('Y-m-d H:i:s');
$lema_new->insertvon = $user;
$lema_new->ext_id = $row->ext_id;
- $lema_new->vertrag_id = $row->vertrag_id;
+ $lema_new->vertrag_id = '';
if (!$lema_new->save(true))
{
diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php
index 4a4b64201..e9c657635 100644
--- a/content/student/studentDBDML.php
+++ b/content/student/studentDBDML.php
@@ -95,6 +95,7 @@ if(!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz') && !$r
$data = '';
$error = true;
}
+$check_statusaenderung_berechtigung = 'student/keine_studstatuspruefung';
// *** FUNKTIONEN ***
@@ -372,6 +373,175 @@ function isBuchungAllowedToChange($buchung_obj)
return true;
}
+/**
+ *
+ * Prüft für einen Prestudenten, ob eine bestimmte Statusänderung valide ist.
+ * @param $prestudent_id
+ * @param $status_kurzbz des neuen/bearbeiteten Status
+ * @param $new_status_studiensemester Studiensemester des neuen/zu ändernen Status
+ * @param $new_status_datum Datum des neuen/zu ändernen Status
+ * @param $new_status_ausbildungssemester Ausbildungssemester des neuen/zu ändernen Status
+ * @param $old_status_studiensemester Studiensemester des alten Status, leer wenn neuer Status
+ * @param $old_status_ausbildungssemester Ausbildungssemester des alten Status, leer wenn neuer Status
+ * @return array
+ */
+function checkStatusaenderung(
+ $prestudent_id, $status_kurzbz, $new_status_studiensemester, $new_status_datum, $new_status_ausbildungssemester,
+ $old_status_studiensemester = '', $old_status_ausbildungssemester = ''
+)
+{
+ global $db;
+ // Es ist ein neuer Status wenn es kein altes Semester gibt
+ $isNewStatus = $old_status_studiensemester == '' && $old_status_ausbildungssemester == '';
+ // status_kurzbz für Endstatus
+ $endstatusArr = array('Absolvent', 'Abbrecher');
+ // Datum des neuen Status setzen
+ $new_status_datum = new DateTime($new_status_datum);
+
+ // Wenn neuer Status
+ if ($isNewStatus)
+ {
+ // Datum des neuen Status darf nicht in Vergangenheit liegen, sonst Probleme wenn neues Datum < Bismeldedatum
+ $current_date = new DateTime('today');
+ if ($new_status_datum < $current_date)
+ {
+ return array(
+ 'error' => true,
+ 'errormsg' => 'Datum eines neuen Statuseintrags darf nicht in der Vergangenheit liegen'
+ );
+ }
+ }
+
+ // start des Studiensemesters holen
+ $studiensemester = new studiensemester();
+ $studiensemester->load($new_status_studiensemester);
+ $new_status_semesterstart = new DateTime($studiensemester->start);
+
+ // Alle bisherigen prestudentstatus nach Datum sortiert
+ $qry = "SELECT status_kurzbz, studiensemester_kurzbz, ausbildungssemester, datum, sem.start AS studiensemester_start
+ FROM public.tbl_prestudentstatus pss
+ JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
+ WHERE prestudent_id=".$db->db_add_param($prestudent_id, FHC_INTEGER);
+
+ // zu ändernden Status rausfiltern wenn Status bearbeitet wird
+ if (!$isNewStatus)
+ {
+ $qry .= " AND NOT (
+ status_kurzbz=".$db->db_add_param($status_kurzbz)
+ ." AND studiensemester_kurzbz=".$db->db_add_param($old_status_studiensemester)
+ ." AND ausbildungssemester=".$db->db_add_param($old_status_ausbildungssemester, FHC_INTEGER)."
+ )";
+ }
+
+ $qry .= " ORDER BY datum DESC, pss.insertamum DESC, pss.ext_id DESC";
+
+ $statusArr = array();
+ if ($result = $db->db_query($qry))
+ {
+ $newStatusInserted = false;
+
+ // für jeden Status
+ while ($row = $db->db_fetch_object($result))
+ {
+ $studiensemester_start = new DateTime($row->studiensemester_start);
+ $status_datum = new DateTime($row->datum);
+
+ // Neuer/editierter Statuseintrag nach bestehendem Statuseintrag
+ if ($new_status_datum >= $status_datum && $new_status_semesterstart >= $studiensemester_start)
+ {
+ if (!$newStatusInserted)
+ {
+ // neuer Status erstmals größer als Datum eines bestehenden Status -> neuen Status einfügen
+ $new_status = new stdClass();
+ $new_status->status_kurzbz = $status_kurzbz;
+ $new_status->studiensemester_kurzbz = $new_status_studiensemester;
+ $new_status->datum = $new_status_datum;
+ $new_status->ausbildungssemester = $new_status_ausbildungssemester;
+ $statusArr[] = $new_status;
+ $newStatusInserted = true;
+ }
+
+ // Gültige Zeitabfolge, bestehenden Status hinzufügen
+ $statusArr[] = $row;
+ }
+ // oder Neuer/editierter Statuseintrag nach bestehendem Statuseintrag
+ elseif ($new_status_datum <= $status_datum && $new_status_semesterstart <= $studiensemester_start)
+ {
+ // Gültige Zeitabfolge, bestehenden Status hinzufügen
+ $statusArr[] = $row;
+ }
+ else
+ {
+ // Zeitabfolge ungültig, Fehler
+ return array(
+ 'error' => true,
+ 'errormsg' => 'Datum des Statuseintrags muss nach dem Statusdatum,'
+ .' Semesterstartdatum nach Semesterstartdatum des vorherigen Statuseintrags sein'
+ );
+ }
+ }
+
+ // Prüfungen den Prestudentstatus betreffend
+ // Über alle gespeicherten Status gehen und Statusabfolge prüfen
+ for ($i = 0; $i < count($statusArr); $i++)
+ {
+ $curr_status = $statusArr[$i];
+ $curr_status_kurzbz = $curr_status->status_kurzbz;
+ $curr_status_ausbildungssemester = $curr_status->ausbildungssemester;
+ $next_idx = $i - 1; //absteigend sortiert, nächster Status ist vorheriger Eintrag
+ $next_status = isset($statusArr[$next_idx]) ? $statusArr[$next_idx] : null;
+
+ // Abbrecher- oder Absolventenstatus muss Endstatus sein
+ if (isset($next_status) && in_array($curr_status_kurzbz, $endstatusArr))
+ {
+ return array(
+ 'error' => true,
+ 'errormsg' => 'Nach Abbrecher- und Absolventenstatus darf kein anderer Status mehr eingetragen werden'
+ );
+ }
+
+ // wenn Unterbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
+ if (
+ $curr_status_kurzbz == 'Unterbrecher' && isset($next_status) && $next_status->status_kurzbz == 'Unterbrecher'
+ && $curr_status_ausbildungssemester != $next_status->ausbildungssemester
+ )
+ {
+ return array(
+ 'error' => true,
+ 'errormsg' => 'Aufeinanderfolgende Unterbrecher müssen gleiches Ausbildungssemester haben'
+ );
+ }
+
+ // wenn Abbrecher auf Unterbrecher folgt, muss Ausbildungssemester gleich sein
+ if (
+ isset($next_status) && $curr_status_kurzbz == 'Unterbrecher'
+ && $next_status->status_kurzbz == 'Abbrecher' && $curr_status_ausbildungssemester != $next_status->ausbildungssemester
+ )
+ {
+ return array(
+ 'error' => true,
+ 'errormsg' => 'Unterbrecher und folgender Abbrecher müssen gleiches Ausbildungssemester haben'
+ );
+ }
+
+ // keine Studenten nach Diplomand Status
+ if (
+ isset($next_status) && $curr_status_kurzbz == 'Diplomand' && $next_status->status_kurzbz == 'Student'
+ )
+ {
+ return array(
+ 'error' => true,
+ 'errormsg' => 'Nach Diplomantenstatus darf kein Studentenstatus mehr eingetragen werden'
+ );
+ }
+ }
+ }
+ else
+ return array('error' => true, 'errormsg' => 'Fehler bei Statusänderungcheck');
+
+ return array('error' => false, 'errormsg' => '');
+}
+
if(!$error)
{
@@ -403,7 +573,7 @@ if(!$error)
$return = false;
$errormsg = 'Geburtsdatum ist nicht korrekt.';
$error = true;
- }
+ }
if(!$error)
{
@@ -648,12 +818,12 @@ if(!$error)
$prestudent->zgvort = $_POST['zgvort'];
$prestudent->zgvdatum = $_POST['zgvdatum'];
$prestudent->zgvnation = $_POST['zgvnation'];
- $prestudent->zgv_erfuellt = $_POST['zgv_erfuellt'];
+ $prestudent->zgv_erfuellt = $_POST['zgv_erfuellt'];
$prestudent->zgvmas_code = $_POST['zgvmas_code'];
$prestudent->zgvmaort = $_POST['zgvmaort'];
$prestudent->zgvmadatum = $_POST['zgvmadatum'];
$prestudent->zgvmanation = $_POST['zgvmanation'];
- $prestudent->zgvmas_erfuellt = $_POST['zgvmas_erfuellt'];
+ $prestudent->zgvmas_erfuellt = $_POST['zgvmas_erfuellt'];
$prestudent->zgvdoktor_code = $_POST['zgvdoktor_code'];
$prestudent->zgvdoktorort = $_POST['zgvdoktorort'];
$prestudent->zgvdoktordatum = $_POST['zgvdoktordatum'];
@@ -808,6 +978,28 @@ if(!$error)
}
}
+ // wenn keine spezielle Berechtiung zur Umgebung, Statusänderung Checks durchführen
+ if (!$rechte->isBerechtigt($check_statusaenderung_berechtigung))
+ {
+ $new_status_datum = isset($_POST['datum']) ? $_POST['datum'] : date('Y-m-d');
+
+ $check_statusaenderung_result = checkStatusaenderung(
+ $prestudent_id,
+ $_POST['status_kurzbz'],
+ $studiensemester,
+ $new_status_datum,
+ $sem
+ );
+
+ if (isset($check_statusaenderung_result['error']) && $check_statusaenderung_result['error'] === true)
+ {
+ $return = false;
+ $error = true;
+ $errormsg .= isset($check_statusaenderung_result['errormsg']) ? $check_statusaenderung_result['errormsg'] : '';
+ $anzahl_fehler++;
+ }
+ }
+
if(!$error)
{
$prestd_neu = new prestudent();
@@ -1003,7 +1195,7 @@ if(!$error)
isset($_POST['prestudent_id']) && is_numeric($_POST['prestudent_id']) &&
isset($_POST['ausbildungssemester']) && is_numeric($_POST['ausbildungssemester']))
{
- if($_POST['status_kurzbz']=='Student' && !$rechte->isBerechtigt('admin', null, 'suid'))
+ if($_POST['status_kurzbz']=='Student' && !$rechte->isBerechtigt('admin', null, 'suid') && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'))
{
$return = false;
$errormsg = 'Studentenrolle kann nur durch den Administrator geloescht werden';
@@ -1019,7 +1211,7 @@ if(!$error)
if($row->anzahl<=1)
{
$deletePrestudent = true;
- if (!$rechte->isBerechtigt('admin', null, 'suid'))
+ if (!$rechte->isBerechtigt('admin', null, 'suid') && !$rechte->isBerechtigt('student/keine_studstatuspruefung', null, 'suid'))
{
$return = false;
$errormsg = 'Die letzte Rolle kann nur durch den Administrator geloescht werden';
@@ -1307,6 +1499,28 @@ if(!$error)
$rolle->new = false;
}
+ // Statuschecks durchführen wenn keine spezielle Berechtigung zur Umgehung
+ if (!$rechte->isBerechtigt($check_statusaenderung_berechtigung))
+ {
+ // allgemeine Prüfung bei Änderung oder Hinzufügen eines Status, inkludiert alle Status
+ $check_statusaenderung_result = checkStatusaenderung(
+ $_POST['prestudent_id'],
+ $_POST['status_kurzbz'],
+ $_POST['studiensemester_kurzbz'],
+ $_POST['datum'],
+ $_POST['ausbildungssemester'],
+ $_POST['studiensemester_old'],
+ $_POST['ausbildungssemester_old']
+ );
+
+ if (isset($check_statusaenderung_result['error']) && $check_statusaenderung_result['error'] === true)
+ {
+ $return = false;
+ $error = true;
+ $errormsg = isset($check_statusaenderung_result['errormsg']) ? $check_statusaenderung_result['errormsg'] : '';
+ }
+ }
+
if(!$error)
{
// Bei Studenten wird der Studentlehrverband Eintrag angelegt/korrigiert
@@ -2361,7 +2575,7 @@ if(!$error)
{
if ($dokument_kurzbz === 'Sonst' && $sonst !== 0)
continue;
-
+
if($dokument_kurzbz!='')
{
$dok = new dokument();
@@ -2374,7 +2588,7 @@ if(!$error)
$dok->new = true;
if ($dokument_kurzbz === 'Sonst')
$sonst++;
-
+
if(!$dok->save())
{
diff --git a/content/student/studentdetailoverlay.xul.php b/content/student/studentdetailoverlay.xul.php
index 51be7d554..0ac45f3d9 100644
--- a/content/student/studentdetailoverlay.xul.php
+++ b/content/student/studentdetailoverlay.xul.php
@@ -71,9 +71,10 @@ echo '';
-
+
+