diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ed10d62a..42e898deb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - **[CORE]** Infocenter Seite hinzugefügt zur zentralen Verwaltung und ZGV Prüfung von Interessenten - **[CORE]** Unterstützung für Matrikelnummern und BPK - Anbindung an den Datenverbund - **[CORE]** Digitale Signatur für Dokumente +- **[FAS]** Direkte Zuordnung von Personen zu Lehreinheiten für Wiederholer, Incoming, etc ### CHANGED - **[CORE]** Berechtigungsprüfung wurde angepasst damit deaktivierte Benutzer keine Berechtigungen mehr haben diff --git a/application/controllers/api/v1/ressource/Mitarbeiter.php b/application/controllers/api/v1/ressource/Mitarbeiter.php index 89ead5681..70f4b441c 100644 --- a/application/controllers/api/v1/ressource/Mitarbeiter.php +++ b/application/controllers/api/v1/ressource/Mitarbeiter.php @@ -21,7 +21,11 @@ class Mitarbeiter extends APIv1_Controller */ public function __construct() { - parent::__construct(array('Mitarbeiter' => 'basis/mitarbeiter:rw')); + parent::__construct(array( + 'Mitarbeiter' => 'basis/mitarbeiter:rw', + 'Update' => 'basis/mitarbeiter:rw' + ) + ); // Load model MitarbeiterModel $this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel'); @@ -71,6 +75,41 @@ class Mitarbeiter extends APIv1_Controller } } + /** + * Updates an Employee Record + * + * @return json Response Object + */ + public function postUpdate() + { + if ($this->_validate($this->post())) + { + if (isset($this->post()['mitarbeiter_uid'])) + { + $result_load = $this->MitarbeiterModel->load($this->post()['mitarbeiter_uid']); + if(isSuccess($result_load) && hasData($result_load)) + { + $result = $this->MitarbeiterModel->update($this->post()['mitarbeiter_uid'], $this->post()); + $this->response($result, REST_Controller::HTTP_OK); + } + else + { + $result = error('mitarbeiter_uid not found'); + $this->response($result, REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + } + } + else + { + $result = error('Parameter mitarbeiter_uid is missing'); + $this->response($result, REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + } + } + else + { + $this->response(); + } + } + private function _validate($mitarbeiter = NULL) { return true; diff --git a/application/controllers/jobs/ReihungstestJob.php b/application/controllers/jobs/ReihungstestJob.php index 76e55bfe3..3b68f2fe4 100644 --- a/application/controllers/jobs/ReihungstestJob.php +++ b/application/controllers/jobs/ReihungstestJob.php @@ -42,7 +42,9 @@ class ReihungstestJob extends FHC_Controller // Load models $this->load->model('crm/Reihungstest_model', 'ReihungstestModel'); + $this->load->model('crm/RtStudienplan_model', 'RtStudienplanModel'); $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); // Load helpers $this->load->helper('hlp_sancho_helper'); @@ -489,4 +491,85 @@ class ReihungstestJob extends FHC_Controller return $content_data_arr; } + + + /** + * Checks the upcoming placement tests if there are correct studyplans assigned + * If there are invalid studyplans assigned (outdated because there exists a new version), + * it tries to find a better one and assigns it additionaly + */ + public function correctStudienplan() + { + // get all placement tests with incorrect studyplan + $qry = " + SELECT + tbl_reihungstest.reihungstest_id, + tbl_studienplan.studienplan_id, + tbl_reihungstest.studiensemester_kurzbz, + tbl_studienordnung.studiengang_kz + FROM + public.tbl_reihungstest + JOIN public.tbl_rt_studienplan ON(tbl_rt_studienplan.reihungstest_id=tbl_reihungstest.reihungstest_id) + JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + WHERE + NOT EXISTS( + SELECT 1 FROM lehre.tbl_studienplan_semester + WHERE studienplan_id=tbl_rt_studienplan.studienplan_id + AND tbl_studienplan_semester.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz + ) + AND tbl_reihungstest.datum >= now() + AND NOT EXISTS( + SELECT + 1 + FROM + public.tbl_rt_studienplan rtstp + JOIN lehre.tbl_studienplan stp USING(studienplan_id) + JOIN lehre.tbl_studienordnung sto USING(studienordnung_id) + JOIN lehre.tbl_studienplan_semester stpsem USING(studienplan_id) + WHERE + sto.studiengang_kz=tbl_studienordnung.studiengang_kz + AND rtstp.reihungstest_id=tbl_reihungstest.reihungstest_id + AND stpsem.studiensemester_kurzbz=tbl_reihungstest.studiensemester_kurzbz + ) + "; + + $db = new DB_Model(); + $result_rt = $db->execReadOnlyQuery($qry); + + if(hasdata($result_rt)) + { + foreach ($result_rt->retval as $row_rt) + { + // find an active studyplan for the same degree program with is valid in this semester + $result_stpl = $this->StudienplanModel->getStudienplaeneBySemester( + $row_rt->studiengang_kz, + $row_rt->studiensemester_kurzbz + ); + + if(hasData($result_stpl)) + { + foreach($result_stpl->retval as $row_stpl) + { + // Add new Studyplan to RtStudienplan if missing + $rt_studienplan = $this->RtStudienplanModel->loadWhere(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $row_stpl->studienplan_id + )); + + if(!hasData($rt_studienplan)) + { + echo "\nAdding StudienplanId: $row_stpl->studienplan_id"; + echo " to ReihungstestId: $row_rt->reihungstest_id"; + + $this->RtStudienplanModel->insert(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $row_stpl->studienplan_id + )); + } + } + } + } + } + } } diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index e07a5c350..8358806f2 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -10,5 +10,72 @@ class Lehreinheit_model extends DB_Model parent::__construct(); $this->dbTable = 'lehre.tbl_lehreinheit'; $this->pk = 'lehreinheit_id'; + + $this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel'); + $this->load->model('education/lehreinheitgruppe_model', 'LehreinheitgruppeModel'); + $this->load->model('education/lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel'); + } + + /** + * Gets Lehreinheiten for a Lehrveranstaltung in a Studiensemester. + * Includes Lehrfach, Lehreinheitgruppen and Lektoren. + * @param $lehrveranstaltung_id + * @param $studiensemester + * @return array with Lehreinheiten and their Lehreinheitgruppen + */ + public function getLesForLv($lehrveranstaltung_id, $studiensemester) + { + $lehreinheiten = array(); + + $les = $this->loadWhere( + array('lehrveranstaltung_id' => $lehrveranstaltung_id, + 'studiensemester_kurzbz' => $studiensemester) + ); + + if (hasData($les)) + { + $this->LehrveranstaltungModel->addSelect('kurzbz, bezeichnung'); + foreach ($les->retval as $le) + { + $lehrfach = $this->LehrveranstaltungModel->load($le->lehrfach_id); + if (hasData($lehrfach)) + { + $letoadd = $le; + $letoadd->lehrfach_bezeichnung = $lehrfach->retval[0]->bezeichnung; + $letoadd->lehrfach_kurzbz = $lehrfach->retval[0]->kurzbz; + + // add lehreinheitgruppen, each lehreinheitid + // having (maybe multiple) lehreinheitgruppen + $letoadd->lehreinheitgruppen = array(); + $lehreinheitgruppen = $this->LehreinheitgruppeModel->loadWhere(array('lehreinheit_id' => $le->lehreinheit_id)); + if (hasData($lehreinheitgruppen)) + { + foreach ($lehreinheitgruppen->retval as $lehreinheitgruppe) + { + $letoadd->lehreinheitgruppen[] = array( + 'semester' => $lehreinheitgruppe->semester, + 'verband' => $lehreinheitgruppe->verband, + 'gruppe' => $lehreinheitgruppe->gruppe + ); + } + } + + // add lektoren + $letoadd->lektoren = array(); + $lehreinheitmitarbeiter = $this->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $le->lehreinheit_id)); + if (hasData($lehreinheitmitarbeiter)) + { + foreach ($lehreinheitmitarbeiter->retval as $lehreinheitma) + { + $letoadd->lektoren[] = $lehreinheitma->mitarbeiter_uid; + } + } + + $lehreinheiten[] = $letoadd; + } + } + } + + return $lehreinheiten; } } diff --git a/application/models/education/Lehreinheitgruppe_model.php b/application/models/education/Lehreinheitgruppe_model.php index 8390d41c5..796ae574b 100644 --- a/application/models/education/Lehreinheitgruppe_model.php +++ b/application/models/education/Lehreinheitgruppe_model.php @@ -10,15 +10,258 @@ class Lehreinheitgruppe_model extends DB_Model parent::__construct(); $this->dbTable = 'lehre.tbl_lehreinheitgruppe'; $this->pk = 'lehreinheitgruppe_id'; + $this->load->model('education/lehreinheit_model', 'LehreinheitModel'); + $this->load->model('organisation/studiengang_model', 'StudiengangModel'); + $this->load->model('organisation/gruppe_model', 'GruppeModel'); + $this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel'); } + /** + * Gets group directly assigned to a Lehreinheit + * @param $lehreinheit_id + * @return array + */ public function getDirectGroup($lehreinheit_id) { $this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz'); - return $this->loadWhere(array( + return $this->loadWhere( + array( 'tbl_gruppe.direktinskription' => true, 'lehreinheit_id' => $lehreinheit_id ) ); } + + /** + * Gets direct group assignment, consisting of lehreinheitgruppe, gruppe and benutzergruppe + * @param $uid + * @param $lehreinheit_id + * @return array + */ + public function getDirectGroupAssignment($uid, $lehreinheit_id) + { + $this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz'); + $this->addJoin('public.tbl_benutzergruppe', 'gruppe_kurzbz'); + return $this->loadWhere(array( + 'tbl_gruppe.direktinskription' => true, + 'lehreinheit_id' => $lehreinheit_id, + 'tbl_benutzergruppe.uid' => $uid + ) + ); + } + + /** + * Directly assigns a user to a Lehreinheit (Lehreinheitgruppe, Benutzergruppe). + * Creates own "hidden" group if necessary. + * @param $uid of the student to assign + * @param $lehreinheit_id + * @return array error or success + */ + public function direktUserAdd($uid, $lehreinheit_id) + { + $result = success('User added successfully to group'); + $directgroup = $this->getDirectGroup($lehreinheit_id); + $lehreinheit = $this->LehreinheitModel->load($lehreinheit_id); + $loggedInUser = getAuthUID(); + + if (hasData($lehreinheit)) + { + if (hasData($directgroup)) + { + $gruppe_kurzbz = $directgroup->retval[0]->gruppe_kurzbz; + } + else + { + // Es gibt keine direkte Gruppe zu dieser LE + // es wird eine erstellt und zugewiesen + $lva = $this->LehrveranstaltungModel->load($lehreinheit->retval[0]->lehrveranstaltung_id); + + if (hasData($lva)) + { + $lvadata = $lva->retval[0]; + $studiengang = $this->StudiengangModel->load($lvadata->studiengang_kz); + + if (hasData($studiengang)) + { + $gruppe_kurzbz = 'GRP_'.$lehreinheit_id; + $studiengangdata = $studiengang->retval[0]; + $kuerzel = mb_strtoupper($studiengangdata->typ.$studiengangdata->kurzbz); + $bezeichnung = $kuerzel.' '.$lvadata->semester.' '.$lvadata->kurzbz; + + $gruppe = $this->GruppeModel->load($gruppe_kurzbz); + + if (!hasData($gruppe)) + { + $groupdata = array( + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'studiengang_kz' => $lvadata->studiengang_kz, + 'semester' => $lvadata->semester, + 'bezeichnung' => $bezeichnung, + 'aktiv' => true, + 'mailgrp' => false, + 'sichtbar' => true, + 'generiert' => false, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $loggedInUser, + 'orgform_kurzbz' => $lvadata->orgform_kurzbz, + 'direktinskription' => true + + ); + + $groupadd = $this->GruppeModel->insert($groupdata); + + if (isError($groupadd)) + return error('Error when inserting Gruppe'); + } + + $lehreinheitgruppedata = array( + 'lehreinheit_id' => $lehreinheit->retval[0]->lehreinheit_id, + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'studiengang_kz' => $lvadata->studiengang_kz, + 'semester' => $lvadata->semester, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $loggedInUser + ); + + $lehreinheitgruppeadd = $this->insert($lehreinheitgruppedata); + + if (isError($lehreinheitgruppeadd)) + $result = error('Error when inserting Lehreinheit'); + } + } + } + + if (isset($gruppe_kurzbz) && !isEmptyString($gruppe_kurzbz)) + { + $benutzergruppe = $this->BenutzergruppeModel->load(array( + 'uid' => $uid, + 'gruppe_kurzbz' => $gruppe_kurzbz + )); + + if (!hasData($benutzergruppe)) + { + $benutzergruppedata = array( + 'uid' => $uid, + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'studiensemester_kurzbz' => $lehreinheit->retval[0]->studiensemester_kurzbz, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $loggedInUser + ); + + $benutzergruppeadd = $this->BenutzergruppeModel->insert($benutzergruppedata); + + if (isError($benutzergruppeadd)) + $result = error('Error when inserting Benutzergruppe'); + } + } + } + else + { + return error('No Lehreinheit found'); + } + + return $result; + } + + /** + * Deletes direct assignment of a student to a Lehreinheit + * @param $uid of the assigned student + * @param $lehreinheit_id + * @return array error or success + */ + public function direktUserDelete($uid, $lehreinheit_id) + { + $result = success('User deleted successfully'); + $lehreinheit = $this->LehreinheitModel->load($lehreinheit_id); + + if (hasData($lehreinheit)) + { + $directgroup = $this->getDirectGroup($lehreinheit_id); + if (hasData($directgroup)) + { + $gruppe_kurzbz = $directgroup->retval[0]->gruppe_kurzbz; + // delete benutzer assignment + $deleteresp = $this->BenutzergruppeModel->delete(array('uid' => $uid, 'gruppe_kurzbz' => $gruppe_kurzbz)); + + if (hasData($deleteresp)) + { + $uids = $this->BenutzergruppeModel->loadWhere( + array( + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'studiensemester_kurzbz' => $lehreinheit->retval[0]->studiensemester_kurzbz) + ); + + if (isSuccess($uids) && !hasData($uids)) + { + // group is empty and can be deleted + + // delete from Lehreinheit + $this->delete($directgroup->retval[0]->lehreinheitgruppe_id); + + $studplandevqry = " + SELECT + * + FROM + lehre.tbl_stundenplandev + WHERE + gruppe_kurzbz=? + LIMIT 1"; + + $studplandevres = $this->execQuery($studplandevqry, array('gruppe_kurzbz' => $gruppe_kurzbz)); + if (isSuccess($studplandevres)) + { + if (hasData($studplandevres)) + { + $studplandevdelqry = " + DELETE FROM lehre.tbl_stundenplandev + WHERE gruppe_kurzbz=?"; + + $studplandevdelres = $this->execQuery($studplandevdelqry, array('gruppe_kurzbz' => $gruppe_kurzbz)); + + if (!hasData($studplandevdelres)) + $result = error('Studienplan entry could not be deleted'); + } + else + { + $lehreinheitgrupperes = $this->load(array('gruppe_kurzbz' => $gruppe_kurzbz)); + + if (isSuccess($lehreinheitgrupperes) && !hasData($lehreinheitgrupperes)) + { + $benutzergruppegrupperes = $this->BenutzergruppeModel->load(array('gruppe_kurzbz' => $gruppe_kurzbz)); + + if (isSuccess($benutzergruppegrupperes) && !hasData($benutzergruppegrupperes)) + { + // delete group if not in Studienplandev. If in Studienplan, deleted next day after cronjob. + $gruppedelres = $this->GruppeModel->delete($gruppe_kurzbz); + + if (!hasData($gruppedelres)) + { + $result = error('Gruppe could not be deleted'); + } + } + } + } + } + else + { + $result = error('Error when querying Studienplan'); + } + } + } + else + { + $result = error('Benutzergruppe could not be deleted'); + } + } + else + { + $result = error('No direct group found for Lehreinheit'); + } + } + else + { + $result = error('No Lehreinheit found'); + } + return $result; + } } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 0a76df4b9..3c4bae1e3 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -132,8 +132,10 @@ class Lehrveranstaltung_model extends DB_Model UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung FROM - campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_student ON(uid=student_uid) + campus.vw_student_lehrveranstaltung + JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) + LEFT JOIN public.tbl_student ON(uid=student_uid) LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) @@ -171,4 +173,34 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz)); } + + /** + * Gets Lehrveranstaltungen of a student + * @param $student_uid + * @param null $studiensemester_kurzbz + * @return array|null + */ + public function getLvsByStudent($student_uid, $studiensemester_kurzbz = null) + { + $params = array($student_uid); + + $qry = "SELECT * FROM lehre.tbl_lehrveranstaltung + WHERE lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM campus.vw_student_lehrveranstaltung + WHERE uid=?"; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND studiensemester_kurzbz=?"; + $params[] = $studiensemester_kurzbz; + } + $qry .= ") OR lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM lehre.tbl_zeugnisnote WHERE student_uid=?"; + $params[] = $student_uid; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND studiensemester_kurzbz=?"; + $params[] = $studiensemester_kurzbz; + } + $qry .= ") ORDER BY semester, bezeichnung"; + + return $this->execQuery($qry, $params); + } } diff --git a/application/models/person/Benutzergruppe_model.php b/application/models/person/Benutzergruppe_model.php index ab50de9b0..e569094c4 100644 --- a/application/models/person/Benutzergruppe_model.php +++ b/application/models/person/Benutzergruppe_model.php @@ -10,5 +10,6 @@ class Benutzergruppe_model extends DB_Model parent::__construct(); $this->dbTable = 'public.tbl_benutzergruppe'; $this->pk = array('gruppe_kurzbz', 'uid'); + $this->hasSequence = false; } } diff --git a/cis/private/lvplan/stpl_week.php b/cis/private/lvplan/stpl_week.php index fec76259f..c0ac5f152 100644 --- a/cis/private/lvplan/stpl_week.php +++ b/cis/private/lvplan/stpl_week.php @@ -40,6 +40,9 @@ if (!$db = new basis_db()) $uid=get_uid(); +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); + // Variablen uebernehmen if (isset($_GET['type'])) $type=$_GET['type']; @@ -331,12 +334,12 @@ if (isset($reserve) && $raumres) $stpl = new stundenplan('stundenplan'); $stpldev = new stundenplan('stundenplandev'); - if(!$stpl->isBelegt($ort_kurzbz, $datum_res, $stunde) - && !$stpldev->isBelegt($ort_kurzbz, $datum_res, $stunde)) + if((!$stpl->isBelegt($ort_kurzbz, $datum_res, $stunde) + && !$stpldev->isBelegt($ort_kurzbz, $datum_res, $stunde)) || $rechte->isBerechtigt('lehre/reservierungAdvanced')) { $reservierung = new reservierung(); - if(!$reservierung->isReserviert($ort_kurzbz, $datum_res, $stunde)) + if(!$reservierung->isReserviert($ort_kurzbz, $datum_res, $stunde) || $rechte->isBerechtigt('lehre/reservierungAdvanced')) { if (empty($_REQUEST['titel']) && empty($_REQUEST['beschreibung'])) echo "
".$p->t('lvplan/titelUndBeschreibungFehlt')."!
"; diff --git a/cis/private/profile/dokumente.php b/cis/private/profile/dokumente.php index 9279257ea..ee31824af 100644 --- a/cis/private/profile/dokumente.php +++ b/cis/private/profile/dokumente.php @@ -302,60 +302,63 @@ if (in_array($stsem, $stsem_arr)) else echo '

'.$p->t('tools/keinStatusImStudiensemester',array($stsem)).'

'; -$akte = new akte(); -echo '

' . $p->t('tools/abschlussdokumente') . '

'; -echo ''; -echo ''; -echo '
'.$p->t('tools/warnungDruckDigitaleSignatur').'
'; - -if($akte->getArchiv($student_studiengang->person_id, null, true) && count($akte->result)>0) +if (!defined('CIS_DOKUMENTE_SELFSERVICE') || CIS_DOKUMENTE_SELFSERVICE) { - echo ' - - - - - - - - - - '; + $akte = new akte(); + echo '

' . $p->t('tools/abschlussdokumente') . '

'; + echo '
'.$p->t('tools/erstelldatum').''.$p->t('tools/dokument').'
'; + echo ''; + echo '
'.$p->t('tools/warnungDruckDigitaleSignatur').'
'; - $datum_obj = new datum(); - - foreach($akte->result as $row) + if($akte->getArchiv($student_studiengang->person_id, null, true) && count($akte->result)>0) { - $pfad = 'dokumente.php?action=download&id='.$row->akte_id.'&uid='.$uid; - echo ''; - echo ''; - echo ''.$datum_obj->formatDatum($row->erstelltam,'d.m.Y').''; - echo ''.$row->bezeichnung.''; - echo ''; - } + echo ' + + + + + + + + + + '; - echo '
'.$p->t('tools/erstelldatum').''.$p->t('tools/dokument').'
'; -} -else -{ - echo ' - - - - - - - - - - '; - echo ''; - echo '
'.$p->t('tools/erstelldatum').''.$p->t('tools/dokument').'
'.$p->t('tools/nochKeineAbschlussdokumenteVorhanden').'
'; + $datum_obj = new datum(); + + foreach($akte->result as $row) + { + $pfad = 'dokumente.php?action=download&id='.$row->akte_id.'&uid='.$uid; + echo ''; + echo ''; + echo ''.$datum_obj->formatDatum($row->erstelltam,'d.m.Y').''; + echo ''.$row->bezeichnung.''; + echo ''; + } + + echo ''; + } + else + { + echo ' + + + + + + + + + + '; + echo ''; + echo '
'.$p->t('tools/erstelldatum').''.$p->t('tools/dokument').'
'.$p->t('tools/nochKeineAbschlussdokumenteVorhanden').'
'; + } } echo ' diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index f044c1472..d763c0f73 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -91,12 +91,12 @@ $fieldheadings = array( if ($rechte->isBerechtigt('basis/servicezeitaufzeichnung')) { $za_simple = 0; - $activities = array('Design', 'Operativ', 'Betrieb', 'Pause', 'LehreIntern', 'LehreExtern', 'Arztbesuch', 'DienstreiseMT', 'Behoerde', 'Ersatzruhe'); + $activities = array('Design', 'Operativ', 'Betrieb', 'Pause', 'LehreIntern', 'Arztbesuch', 'DienstreiseMT', 'Behoerde', 'Ersatzruhe'); } else { $za_simple = 1; - $activities = array('Arbeit', 'Pause', 'LehreIntern', 'LehreExtern', 'Arztbesuch', 'DienstreiseMT', 'Behoerde', 'Ersatzruhe'); + $activities = array('Arbeit', 'Pause', 'LehreIntern', 'Arztbesuch', 'DienstreiseMT', 'Behoerde', 'Ersatzruhe'); } $activities_str = "'".implode("','", $activities)."'"; diff --git a/cis/testtool/login.php b/cis/testtool/login.php index 4b422f26a..cb7f3fa12 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -27,6 +27,8 @@ require_once('../../include/person.class.php'); require_once('../../include/prestudent.class.php'); require_once('../../include/pruefling.class.php'); require_once('../../include/studiengang.class.php'); +require_once('../../include/studienplan.class.php'); +require_once('../../include/ablauf.class.php'); require_once('../../include/reihungstest.class.php'); require_once('../../include/sprache.class.php'); require_once '../../include/phrasen.class.php'; @@ -174,10 +176,51 @@ if (isset($_POST['prestudent']) && isset($gebdatum)) $_SESSION['sprache']=$stg_obj->sprache; $_SESSION['semester']=$semester; + + // STG und Studienplan mit der höchsten Prio ermitteln + $ps->getActualInteressenten($_POST['prestudent'], true); + $firstPrio_studienplan_id = array_column($ps->result, 'studienplan_id'); + $firstPrio_studienplan_id = array_shift($firstPrio_studienplan_id); + $firstPrio_studiengang_kz = array_column($ps->result, 'studiengang_kz'); + $firstPrio_studiengang_kz = array_shift($firstPrio_studiengang_kz); + + + // Sprachvorgaben zu STG mit höchster Prio ermitteln + + // * 1. Sprache über Ablauf Vorgaben ermitteln + $ablauf = new Ablauf(); + $ablauf->getAblaufVorgabeStudiengang($firstPrio_studiengang_kz); + $rt_sprache = $ablauf->result[0]->sprache; + + // * 2. falls keine Sprache vorhanden -> Sprache über Studienplan ermitteln + if (empty($rt_sprache)) + { + $stpl = new Studienplan(); + $stpl->loadStudienplan($firstPrio_studienplan_id); + $rt_sprache = $stpl->sprache; + + } + + // * 3. falls keine Sprache vorhanden -> Sprache über Studiengang ermitteln + if (empty($rt_sprache)) + { + $stg = new Studiengang($firstPrio_studiengang_kz); + $rt_sprache = $stg->sprache; + } + + // * 4. Sprache setzen. Falls keine Sprache vorhanden -> DEFAULT language verwenden + if (empty($rt_sprache)) + { + $_SESSION['sprache'] = DEFAULT_LANGUAGE; + } + else + { + $_SESSION['sprache'] = $rt_sprache; + } } else - { - echo ''.$p->t('testtool/reihungstestNichtFreigeschalten').''; + { + echo ''.$p->t('testtool/reihungstestNichtFreigeschalten').''; } } else @@ -311,12 +354,17 @@ if(isset($_POST['save']) && isset($_SESSION['prestudent_id'])) $typ = new studiengang($prestudent->studiengang_kz); $typ->getStudiengangTyp($stg_obj->typ); - //Sprachwahl des Studiengangs - $qry = "SELECT sprachwahl FROM testtool.tbl_ablauf_vorgaben WHERE studiengang_kz=".$db->db_add_param($prestudent->studiengang_kz)." LIMIT 1"; - $result = $db->db_query($qry); - $sprachwahl = $db->db_fetch_object($result); - $sprachwahl = $db->db_parse_bool($sprachwahl->sprachwahl); - + // STG mit der höchsten Prio ermitteln + $ps = new Prestudent(); + $ps->getActualInteressenten($prestudent_id, true); + $firstPrio_studiengang_kz = array_column($ps->result, 'studiengang_kz'); + $firstPrio_studiengang_kz = array_shift($firstPrio_studiengang_kz); + + // Sprachwahl zu STG mit höchster Prio ermitteln + $ablauf = new Ablauf(); + $ablauf->getAblaufVorgabeStudiengang($firstPrio_studiengang_kz); + $sprachwahl = $ablauf->result[0]->sprachwahl; + //Prestudent Informationen und Logout echo '
'; echo '
'.$p->t('testtool/begruessungstext').'

'; @@ -339,7 +387,7 @@ if(isset($_POST['save']) && isset($_SESSION['prestudent_id'])) echo ''; echo '
'; - //Wenn die Sprachwahl fuer diesen Studiengang aktiviert ist, dann die Sprachen anzeigen + //Wenn die Sprachwahl fuer den priorisierten Studiengang aktiviert ist, dann die Sprachen anzeigen if($sprachwahl==true) { //Liste der Sprachen, die in den Gebieten vorkommen koennen diff --git a/cis/testtool/menu.php b/cis/testtool/menu.php index a9538ea8e..1399ad019 100644 --- a/cis/testtool/menu.php +++ b/cis/testtool/menu.php @@ -70,7 +70,7 @@ if(isset($_GET['sprache_user'])) setSpracheUser(DEFAULT_LANGUAGE); } -$sprache_user = getSpracheUser(); +$sprache_user = getSpracheUser(); $p = new phrasen($sprache_user); $sprache = getSprache(); @@ -103,7 +103,130 @@ if (isset($_SESSION['pruefling_id'])) $sprache_mehrsprachig = new sprache(); $bezeichnung_mehrsprachig = $sprache_mehrsprachig->getSprachQuery('bezeichnung_mehrsprachig'); - $qry = "SELECT vw_ablauf.*, ".$bezeichnung_mehrsprachig." FROM testtool.vw_ablauf JOIN testtool.tbl_gebiet USING (gebiet_id) WHERE studiengang_kz=".$db->db_add_param($_SESSION['studiengang_kz'])." ORDER BY semester,reihung"; + + /** + * Spaltennamen-Aliase extrahieren um sie im Outer-Select verwenden zu können + * $bezeichnung_mehrsprachig liefert: bezeichnung_mehrsprachig[1] as bezeichnung_mehrsprachig_1,... + * $bezeichnung_mehrsprachig_sel liefert: bezeichnung_mehrsprachig_1, bezeichnung_mehrsprachig_2,... + */ + $bezeichnung_mehrsprachig_sel = explode(",", $bezeichnung_mehrsprachig); + foreach ($bezeichnung_mehrsprachig_sel as &$bm) + { + $bm = strrchr($bm, ' as '); + } + $bezeichnung_mehrsprachig_sel = implode(', ', $bezeichnung_mehrsprachig_sel); + + /** + * Reihungstestgebiete der Person ermitteln; Zusammenfassen, falls RT für mehrere Studien + * 1. Aktuelle Prestudenten zur Person über den Prüfling ermitteln, + * 2. Einstiegssemester (Erstsemester/Quereinsteiger) und Studienplan pro Prestudent ermitteln, + * 3. RT-Gebiete falls vorhanden über Studienplan, sonst über STG ermitteln + * 4. Für Quereinsteiger zusätzlich auch Erstsemestrigen-Gebiete + */ + $qry = " + WITH prestudent_data AS + ( + SELECT DISTINCT ON (prestudent_id) + prestudent_id, + studienplan_id, + studiengang_kz, + ausbildungssemester AS semester + FROM + public.tbl_prestudentstatus + JOIN + public.tbl_prestudent USING (prestudent_id) + WHERE + tbl_prestudent.person_id = ( + SELECT + person_id + FROM + public.tbl_prestudent + WHERE + prestudent_id = ".$db->db_add_param($_SESSION['prestudent_id'])." + ) + + -- Filter only future studiensemester (incl. actual one) + AND + studiensemester_kurzbz IN ( + SELECT + studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + ende > now() + ) + + AND + status_kurzbz = 'Interessent' + + -- Order to get last semester when using distinct on + ORDER BY + prestudent_id, + datum DESC, + tbl_prestudentstatus.insertamum DESC, + tbl_prestudentstatus.ext_id DESC + ) + + + SELECT DISTINCT + semester, + gebiet_id, + bezeichnung, + ". $bezeichnung_mehrsprachig_sel. " + FROM + ( + (SELECT + prestudent_data.semester AS ps_sem, + gebiet_id, + bezeichnung, + tbl_ablauf.studienplan_id, + tbl_ablauf.studiengang_kz, + tbl_ablauf.semester, + tbl_ablauf.reihung, + ".$bezeichnung_mehrsprachig. " + FROM + prestudent_data + JOIN + testtool.tbl_ablauf USING (studiengang_kz) + JOIN + testtool.tbl_gebiet USING (gebiet_id) + WHERE + (prestudent_data.semester= 1 AND tbl_ablauf.semester = 1) + OR + (prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3)) + ) + + UNION + + ( + SELECT + prestudent_data.semester AS ps_sem, + gebiet_id, + bezeichnung, + tbl_ablauf.studienplan_id, + tbl_ablauf.studiengang_kz, + tbl_ablauf.semester, + tbl_ablauf.reihung, + ". $bezeichnung_mehrsprachig. " + FROM + prestudent_data + JOIN + testtool.tbl_ablauf USING (studienplan_id) + JOIN + testtool.tbl_gebiet USING (gebiet_id) + WHERE + (prestudent_data.semester= 1 AND tbl_ablauf.semester = 1) + OR + (prestudent_data.semester= 3 AND tbl_ablauf.semester IN (1,3)) + ) + + ORDER BY + reihung + ) temp + + ORDER BY + semester + "; $result = $db->db_query($qry); $lastsemester = ''; diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index 210193e5d..3f75b0af3 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -210,6 +210,9 @@ define('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN',true); //Gibt an, ob die Studienerfolgsbestätigung im CIS gedruckt werden kann define('CIS_DOKUMENTE_STUDIENERFOLGSBESTAETIGUNG_DRUCKEN',true); +//Gibt an, ob die archivierten Self-Service Dokumente im CIS heruntergeladen werden koennen +define('CIS_DOKUMENTE_SELFSERVICE', true); + //**** INFOSCREEN **** //Gibt an, ob der Lageplan im Infoterminal angezeigt werden soll. define('CIS_INFOSCREEN_LAGEPLAN_ANZEIGEN',true); diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 45c3657cd..06fec388f 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -104,6 +104,10 @@ define('FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN',false); //oder Prozentpunkte uebernommen werden true=Punkte, false=Prozentpunkte define('FAS_REIHUNGSTEST_PUNKTE', false); +// Legt fest, welche Reihungstestgebiete bei der Berechnung der Gesamtpunkte NICHT einbezogen werden. +// array(gebiet_id1, gebiet_id2,...) +define('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE', array()); + // Legt fest ob Messages im FAS angezeigt werden true|false define('FAS_MESSAGES',false); diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index eedefc2df..9c0c21c22 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -45,6 +45,9 @@ define('CIS_ROOT', 'http://www.fhcomlete.org/build/'); // Externe Funktionen - Unterordner im Include-Verzeichnis define('EXT_FKT_PATH', 'tw'); +// Bezeichnung des Campus +define('CAMPUS_NAME',''); + // Fuer Mails etc define('DOMAIN', 'example.com'); diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 73b6137e9..899dc0e23 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -1698,7 +1698,7 @@ if(!$error) } else { - $errormsg = $benutergruppe->errormsg; + $errormsg = $benutzergruppe->errormsg; $return = false; } } diff --git a/content/lvplanung/lehrveranstaltungdetailoverlay.xul.php b/content/lvplanung/lehrveranstaltungdetailoverlay.xul.php index 2292c4a4d..de6c7cf17 100644 --- a/content/lvplanung/lehrveranstaltungdetailoverlay.xul.php +++ b/content/lvplanung/lehrveranstaltungdetailoverlay.xul.php @@ -228,7 +228,7 @@ echo '';