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 '';