Merge branch 'master' into ciauth

This commit is contained in:
Paolo
2019-03-13 18:15:41 +01:00
55 changed files with 2087 additions and 919 deletions
@@ -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;
@@ -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
));
}
}
}
}
}
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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);
}
}
@@ -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;
}
}