mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 16:32:20 +00:00
Merge branch 'master' into feature-40314/Electronic_Onboarding_Anbindung_IDA
This commit is contained in:
@@ -299,6 +299,91 @@ class Vertrag_model extends DB_Model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob ein Mitarbeiter einen erteilten Vertrag zu einer Lehrveranstaltung besitzt.
|
||||
* @param $lehrveranstaltung_id ID der Lehrveranstaltung
|
||||
* @param $studiensemester_kurzbz Studiensemester das geprueft wird
|
||||
* @param $mitarbeiter_uid UID des Mitarbeiters
|
||||
*/
|
||||
public function isVertragErteiltLV($lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid)
|
||||
{
|
||||
if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON')
|
||||
&& CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
|
||||
{
|
||||
// Liegt das Studiensemester vor dem Pruefdatum, wird die LV immer als Erteilt angezeigt
|
||||
$stsemquery = "
|
||||
SELECT
|
||||
tbl_studiensemester.start
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz)."
|
||||
AND tbl_studiensemester.start < (
|
||||
SELECT
|
||||
start
|
||||
FROM
|
||||
public.tbl_studiensemester stsem
|
||||
WHERE
|
||||
stsem.studiensemester_kurzbz = " . $this->escape(CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON)."
|
||||
)";
|
||||
|
||||
if ($stsemresult = $this->execReadOnlyQuery($stsemquery))
|
||||
{
|
||||
$stsemdata = getData($stsemresult);
|
||||
if ($stsemdata && count($stsemdata) > 0)
|
||||
{
|
||||
// Wenn das Studiensemester vor dem Pruefdatum liegt, gilt der Vertrag immer als erteilt.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_lehreinheitmitarbeiter
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
JOIN lehre.tbl_vertrag USING(vertrag_id)
|
||||
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertrag_id)
|
||||
WHERE
|
||||
tbl_lehreinheitmitarbeiter.mitarbeiter_uid = " . $this->escape($mitarbeiter_uid) . "
|
||||
AND tbl_lehreinheit.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
AND tbl_lehreinheit.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . "
|
||||
AND tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz='erteilt'
|
||||
AND NOT EXISTS(
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_vertrag_vertragsstatus vstatus
|
||||
WHERE
|
||||
vstatus.vertrag_id = tbl_vertrag.vertrag_id
|
||||
AND vstatus.vertragsstatus_kurzbz = 'storno'
|
||||
)
|
||||
";
|
||||
|
||||
if ($result = $this->execReadOnlyQuery($query))
|
||||
{
|
||||
$data = getData($result);
|
||||
if ($data && count($data) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Bisstandort_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'bis.tbl_bisstandort';
|
||||
$this->pk = 'standort_code';
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,31 @@ class Gemeinde_model extends DB_Model
|
||||
return $this->loadWhere(array("plz" => $plz));
|
||||
}
|
||||
|
||||
public function getGemeindeByNation($nation, $zip)
|
||||
{
|
||||
$this->addSelect(["name"]);
|
||||
|
||||
if ($nation == "A")
|
||||
{
|
||||
if (isset($zip) && $zip > 999 && $zip < 32000)
|
||||
{
|
||||
$gemeinde_res = $this->GemeindeModel->loadWhere(['plz' => $zip]);
|
||||
if (isError($gemeinde_res))
|
||||
{
|
||||
show_error("error while trying to query bis.tbl_gemeinde");
|
||||
}
|
||||
$gemeinde_res = hasData($gemeinde_res) ? getData($gemeinde_res) : null;
|
||||
$gemeinde_res = array_map(function ($obj) {
|
||||
return $obj->name;
|
||||
}, $gemeinde_res);
|
||||
echo json_encode($gemeinde_res);
|
||||
|
||||
} else {
|
||||
echo json_encode(error("ortschaftskennziffer code was not valid"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function checkLocation($plz, $gemeinde, $ort)
|
||||
{
|
||||
$this->db->where('ortschaftsname', $ort);
|
||||
@@ -28,4 +53,4 @@ class Gemeinde_model extends DB_Model
|
||||
|
||||
return (boolean)$this->db->count_all_results($this->dbTable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Mobilitaetstyp_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'bis.tbl_mobilitaetstyp';
|
||||
$this->pk = 'mobilitaetstyp_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,44 @@ class Uhstat1daten_model extends DB_Model
|
||||
$this->dbTable = 'bis.tbl_uhstat1daten';
|
||||
$this->pk = 'uhstat1daten_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets person data needed for sending as UHSTAT1 data.
|
||||
* @param array $person_id_arr
|
||||
* @param string $studiensemester
|
||||
* @param array $status_kurzbz
|
||||
* @return object success with prestudents or error
|
||||
*/
|
||||
public function getUHSTAT1PersonData($person_id_arr)
|
||||
{
|
||||
if (!isset($person_id_arr) || isEmptyArray($person_id_arr)) return success([]);
|
||||
|
||||
$params = array($person_id_arr);
|
||||
|
||||
$prstQry = "SELECT
|
||||
DISTINCT ON (pers.person_id)
|
||||
pers.person_id, uhstat_daten.uhstat1daten_id, pers.svnr, pers.ersatzkennzeichen, pers.geburtsnation,
|
||||
uhstat_daten.mutter_geburtsstaat, uhstat_daten.mutter_bildungsstaat, uhstat_daten.mutter_geburtsjahr,
|
||||
uhstat_daten.mutter_bildungmax, uhstat_daten.vater_geburtsstaat, uhstat_daten.vater_bildungsstaat,
|
||||
uhstat_daten.vater_geburtsjahr, uhstat_daten.vater_bildungmax,
|
||||
kzVbpkAs.inhalt AS \"vbpkAs\", kzVbpkBf.inhalt AS \"vbpkBf\"
|
||||
FROM
|
||||
public.tbl_person pers
|
||||
JOIN public.tbl_prestudent ps USING (person_id)
|
||||
JOIN public.tbl_studiengang stg USING (studiengang_kz)
|
||||
JOIN bis.tbl_uhstat1daten uhstat_daten USING (person_id)
|
||||
LEFT JOIN public.tbl_kennzeichen kzVbpkAs ON kzVbpkAs.kennzeichentyp_kurzbz = 'vbpkAs'AND kzVbpkAs.person_id = pers.person_id AND kzVbpkAs.aktiv
|
||||
LEFT JOIN public.tbl_kennzeichen kzVbpkBf ON kzVbpkBf.kennzeichentyp_kurzbz = 'vbpkBf'AND kzVbpkBf.person_id = pers.person_id AND kzVbpkBf.aktiv
|
||||
WHERE
|
||||
ps.bismelden
|
||||
AND stg.melderelevant
|
||||
AND pers.person_id IN ?
|
||||
ORDER BY
|
||||
pers.person_id";
|
||||
|
||||
return $this->execReadOnlyQuery(
|
||||
$prstQry,
|
||||
$params
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Ampel_Benutzer_Bestaetigt_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_ampel_benutzer_bestaetigt';
|
||||
$this->pk = 'ampel_benutzer_bestaetigt_id';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,37 +16,95 @@ class Ampel_model extends DB_Model
|
||||
* 1. not after the deadline date
|
||||
* 2. not before the vorlaufszeit
|
||||
* @param bool $email If true, then only ampeln are retrieved that are marked to be sent by mail.
|
||||
* @return array Returns array of objects.
|
||||
* @return stdClass Returns array of objects.
|
||||
*/
|
||||
public function active($email = false)
|
||||
public function active($email = false, $uid = null)
|
||||
{
|
||||
$parametersArray = null;
|
||||
$query = '
|
||||
SELECT *
|
||||
FROM public.tbl_ampel
|
||||
WHERE';
|
||||
|
||||
if ($email === true)
|
||||
{
|
||||
$parametersArray['email'] = $email;
|
||||
$query .= ' email = ? AND';
|
||||
$userLanguage = getUserLanguage();
|
||||
$selectStatement='*,beschreibung[('.$this->getLanguageIndex($this->escape($userLanguage)).')] as beschreibung_trans, buttontext[('.$this->getLanguageIndex($this->escape($userLanguage)).')] as buttontext_trans';
|
||||
|
||||
if($uid != null ){
|
||||
$selectStatement .= ',
|
||||
COALESCE((
|
||||
SELECT true
|
||||
FROM public.tbl_ampel_benutzer_bestaetigt a
|
||||
WHERE a.ampel_id = ' . $this->dbTable . '.ampel_id
|
||||
AND uid = ' . $this->escape($uid) . ' LIMIT 1), false) as bestaetigt';
|
||||
}
|
||||
|
||||
$query .= '(
|
||||
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
|
||||
OR (verfallszeit IS NULL)
|
||||
AND (NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
|
||||
OR (vorlaufzeit IS NULL AND NOW() < deadline))';
|
||||
$this->addSelect($selectStatement);
|
||||
$whereStatement='';
|
||||
|
||||
$query .= ' ORDER BY deadline DESC';
|
||||
if ($email === true) {
|
||||
$whereStatement .= ' email = '.$this->escape($email).' AND';
|
||||
}
|
||||
|
||||
$whereStatement .=
|
||||
'(
|
||||
(
|
||||
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
|
||||
OR (verfallszeit IS NULL)
|
||||
)
|
||||
AND
|
||||
(
|
||||
(NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
|
||||
OR (vorlaufzeit IS NULL AND NOW() < deadline)
|
||||
)
|
||||
)';
|
||||
|
||||
$this->addOrder('deadline', 'DESC');
|
||||
return $this->loadWhere($whereStatement);
|
||||
|
||||
}
|
||||
|
||||
public function openActive($uid, $email = false)
|
||||
{
|
||||
$userLanguage = getUserLanguage();
|
||||
$selectStatement = '*,beschreibung[(' . $this->getLanguageIndex($this->escape($userLanguage)) . ')] as beschreibung_trans, buttontext[(' . $this->getLanguageIndex($this->escape($userLanguage)) . ')] as buttontext_trans';
|
||||
|
||||
|
||||
$selectStatement .= ',
|
||||
COALESCE((
|
||||
SELECT true
|
||||
FROM public.tbl_ampel_benutzer_bestaetigt a
|
||||
WHERE a.ampel_id = ' . $this->dbTable . '.ampel_id
|
||||
AND uid = ' . $this->escape($uid) . ' LIMIT 1), false) as bestaetigt';
|
||||
|
||||
$this->addSelect($selectStatement);
|
||||
$whereStatement = '';
|
||||
|
||||
if ($email === true) {
|
||||
$whereStatement .= ' email = ' . $this->escape($email) . ' AND';
|
||||
}
|
||||
|
||||
$whereStatement .=
|
||||
'
|
||||
(COALESCE((
|
||||
SELECT true
|
||||
FROM public.tbl_ampel_benutzer_bestaetigt a
|
||||
WHERE a.ampel_id = ' . $this->dbTable . '.ampel_id
|
||||
AND uid = ' . $this->escape($uid) . ' LIMIT 1), false) = FALSE) AND
|
||||
(
|
||||
(
|
||||
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
|
||||
OR (verfallszeit IS NULL)
|
||||
)
|
||||
AND
|
||||
(
|
||||
(NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
|
||||
OR (vorlaufzeit IS NULL AND NOW() < deadline)
|
||||
)
|
||||
)';
|
||||
|
||||
$this->addOrder('deadline', 'DESC');
|
||||
return $this->loadWhere($whereStatement);
|
||||
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all Ampel-receiver of a specific Ampel.
|
||||
* @param string $benutzer_select SQL Statement which defines the Ampel-receiver.
|
||||
* @return array Returns array of objects with property 'uid'.
|
||||
* @return stdClass Returns array of objects with property 'uid'.
|
||||
*/
|
||||
public function execBenutzerSelect($benutzer_select)
|
||||
{
|
||||
@@ -90,4 +148,101 @@ class Ampel_model extends DB_Model
|
||||
else
|
||||
return $result; //will contain the error-msg from execQuery
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a user is assigned to an ampel
|
||||
* @param string $uid userID
|
||||
* @param string $benutzer_select the select query which gets all the user that are assigned to an ampel
|
||||
* @return stdClass
|
||||
*/
|
||||
public function isZugeteilt($uid, $benutzer_select){
|
||||
$zugeteilt = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
CASE WHEN ? IN (".$benutzer_select.")
|
||||
THEN true
|
||||
ELSE false
|
||||
END as zugeteilt
|
||||
", [$uid]);
|
||||
|
||||
if(isError($zugeteilt)){
|
||||
return $zugeteilt;
|
||||
}
|
||||
|
||||
$zugeteilt = getData($zugeteilt);
|
||||
|
||||
return success(current($zugeteilt)->zugeteilt);
|
||||
}
|
||||
|
||||
// THIS FUNCTION IS NOT IN USE
|
||||
// fetches all ampeln that were assigned to the user after the working start_date
|
||||
function alleAmpeln($uid){
|
||||
$userLanguage = getUserLanguage();
|
||||
|
||||
$zugeteile_ampeln = [];
|
||||
|
||||
$datum = new datum();
|
||||
$now = $datum->mktime_fromdate(date('Y-m-d'));
|
||||
|
||||
// start date of user
|
||||
$benutzerStartDate = $this->execReadOnlyQuery("
|
||||
SELECT insertamum FROM public.tbl_benutzer WHERE uid = ?", [$uid]);
|
||||
$benutzerStartDate = $datum->mktime_fromdate(date(current(getData($benutzerStartDate))->insertamum));
|
||||
|
||||
$allAmpeln = $this->execReadOnlyQuery("
|
||||
SELECT *, beschreibung[(".$this->getLanguageIndex($this->escape($userLanguage)).")] as beschreibung_trans, buttontext[(".$this->getLanguageIndex($this->escape($userLanguage)).")] as buttontext_trans FROM
|
||||
public.tbl_ampel");
|
||||
|
||||
if(isError($allAmpeln)) return error(getError($allAmpeln));
|
||||
|
||||
$allAmpeln = getData($allAmpeln);
|
||||
foreach($allAmpeln as $ampel){
|
||||
|
||||
// check if the ampel is assigned to the user
|
||||
$zugeteilt = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
CASE WHEN ? IN (".$ampel->benutzer_select.")
|
||||
THEN true
|
||||
ELSE false
|
||||
END as zugeteilt
|
||||
", [$uid]);
|
||||
|
||||
if(isError($zugeteilt)) return error(getError($zugeteilt));
|
||||
|
||||
$zugeteilt = current(getData($zugeteilt))->zugeteilt;
|
||||
|
||||
|
||||
// abgelaufen check
|
||||
// $now > strtotime('+' . $ampel->verfallszeit . ' day', $ampel->deadline)
|
||||
|
||||
if(
|
||||
// aktuelles datum liegt vor der Vorlaufzeit der Ampel
|
||||
(isset($ampel->vorlaufzeit) && $now < strtotime('-' . $ampel->vorlaufzeit . ' day', $datum->mktime_fromdate($ampel->deadline)))
|
||||
||
|
||||
// ampel ist vor Arbeitsstart abgelaufen
|
||||
(isset($ampel->verfallszeit) && $benutzerStartDate > strtotime('+' . $ampel->verfallszeit . ' day', $datum->mktime_fromdate($ampel->deadline)))
|
||||
||
|
||||
// ampel ist vor Arbeitsstart abgelaufen (verfallszeit nicht vorhanden)
|
||||
($benutzerStartDate > strtotime('+' . $ampel->verfallszeit . ' day', $datum->mktime_fromdate($ampel->deadline)))
|
||||
){
|
||||
// continue iteration if ampel is expired before work start or shouldn't be visible yet
|
||||
continue;
|
||||
}
|
||||
|
||||
$ampel->zugeteilt = $zugeteilt;
|
||||
|
||||
if($zugeteilt) $zugeteile_ampeln[] = $ampel;
|
||||
|
||||
}
|
||||
|
||||
return success($zugeteile_ampeln);
|
||||
}
|
||||
|
||||
private function getLanguageIndex($userLanguage)
|
||||
{
|
||||
return "
|
||||
SELECT index
|
||||
FROM public.tbl_sprache
|
||||
WHERE sprache = " . $userLanguage;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,316 @@ class Content_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_content';
|
||||
$this->pk = 'content_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt den Content in der angegebenen Sprache
|
||||
* Sollte der Content in dieser Sprache nicht vorhanden sein, wird der Content in der Default Sprache geladen
|
||||
*
|
||||
* @param integer $content_id
|
||||
* @param string $sprache optional
|
||||
* @param integer $version optional
|
||||
* @param boolean | null $sichtbar optional
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getContent($content_id, $sprache = DEFAULT_LANGUAGE, $version = null, $sichtbar = null, $load_default_language = false)
|
||||
{
|
||||
$this->load->model('content/Contentsprache_model', 'ContentspracheModel');
|
||||
$spracheExists = $this->ContentspracheModel->exists($content_id, $sprache, $version, $sichtbar);
|
||||
if (isError($spracheExists))
|
||||
return $spracheExists;
|
||||
|
||||
if(!getData($spracheExists))
|
||||
{
|
||||
if($load_default_language)
|
||||
$sprache = DEFAULT_LANGUAGE;
|
||||
else
|
||||
return error('Der Content existiert in dieser Sprache nicht ');
|
||||
}
|
||||
|
||||
$condition = ['content_id' => $content_id, 'sprache' => $sprache];
|
||||
|
||||
if ($sichtbar === true || $sichtbar === false)
|
||||
$condition['sichtbar'] = $sichtbar;
|
||||
if ($version)
|
||||
$condition['version'] = $version;
|
||||
|
||||
$this->addSelect([
|
||||
'*',
|
||||
'tbl_contentsprache.insertamum',
|
||||
'tbl_contentsprache.insertvon',
|
||||
'tbl_contentsprache.updateamum',
|
||||
'tbl_contentsprache.updatevon'
|
||||
]);
|
||||
$this->addJoin('campus.tbl_contentsprache', 'content_id');
|
||||
$this->addOrder('version', 'DESC');
|
||||
$this->addLimit(1);
|
||||
|
||||
$result = $this->loadWhere($condition);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!getData($result))
|
||||
return error('Dieser Eintrag wurde nicht gefunden');
|
||||
|
||||
return success(current(getData($result)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sucht die content_id fuer den CIS4_Root Menu content
|
||||
*
|
||||
* @return integer|null content_id of the Cis4_Root Menu
|
||||
*/
|
||||
public function getMenuContentID(){
|
||||
// early return if the CIS4_MENU_ENTRY constant is defined
|
||||
if(defined('CIS4_MENU_ENTRY'))
|
||||
{
|
||||
return CIS4_MENU_ENTRY;
|
||||
}
|
||||
|
||||
// load the CIS4 Menu content_id from the database using the column 'beschreibugn' of the campus.tbl_content table
|
||||
$CIS4_ROOT_CONTENT = $this->loadWhere(["beschreibung"=>"CIS4_ROOT"]);
|
||||
|
||||
if(isError($CIS4_ROOT_CONTENT))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$CIS4_ROOT_CONTENT = getData($CIS4_ROOT_CONTENT);
|
||||
|
||||
if(count($CIS4_ROOT_CONTENT) > 0)
|
||||
{
|
||||
return current($CIS4_ROOT_CONTENT)->content_id ?? null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt alle Content Eintraege unterhalb eines Contents
|
||||
* (Ohne Newseintraege)
|
||||
*
|
||||
* @param integer $root_content_id
|
||||
* @param string $uid
|
||||
* @param string $sprache optional
|
||||
*
|
||||
* @return stdClass on success an array with menu objects
|
||||
*/
|
||||
public function getMenu($root_content_id, $uid, $sprache = DEFAULT_LANGUAGE)
|
||||
{
|
||||
|
||||
/*,
|
||||
{
|
||||
"content_id": 1000007,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Anrechnung",
|
||||
"content": "<content><url><![CDATA[' . site_url('/lehre/anrechnung/RequestAnrechnung') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
{
|
||||
"content_id": 1000003,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "COVID-19",
|
||||
"content": "<content><url><![CDATA[' . site_url('/CisVue/Cms/content/10012') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
*/
|
||||
|
||||
if ($root_content_id === null) {
|
||||
$res = json_decode('{
|
||||
"content_id": 1000000,
|
||||
"template_kurzbz": "contentmittitel",
|
||||
"titel": "CIS4",
|
||||
"content": "<content></content>",
|
||||
"menu_open": true,
|
||||
"aktiv": true,
|
||||
"childs": [
|
||||
{
|
||||
"content_id": 1000001,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "News",
|
||||
"content": "<content><url><![CDATA[' . site_url('/CisVue/Cms/news') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000002,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Profil",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/Profil') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000004,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Meine LV",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/MyLv') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000005,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Stundenplan",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/Stundenplan') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000006,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Dokumente",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/Documents') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000007,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Studierendenstatus",
|
||||
"content": "<content><url><![CDATA[' . site_url('/lehre/Studierendenantrag') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
}
|
||||
|
||||
]
|
||||
}');
|
||||
return success($res);
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
c.content_id,
|
||||
c.template_kurzbz,
|
||||
s.titel,
|
||||
s.content,
|
||||
c.menu_open,
|
||||
c.aktiv,
|
||||
k.child_content_id,
|
||||
k.sort FROM (
|
||||
SELECT
|
||||
c.content_id,
|
||||
s.contentsprache_id
|
||||
FROM
|
||||
campus.tbl_content c
|
||||
JOIN (
|
||||
SELECT
|
||||
s5.content_id,
|
||||
s5.contentsprache_id
|
||||
FROM (
|
||||
SELECT
|
||||
content_id,
|
||||
sprache,
|
||||
MAX(version) AS version
|
||||
FROM (
|
||||
SELECT
|
||||
c1.content_id,
|
||||
COALESCE(s1.sprache, ?) AS sprache
|
||||
FROM
|
||||
campus.tbl_content c1
|
||||
LEFT JOIN
|
||||
campus.tbl_contentsprache s1 ON c1.content_id=s1.content_id AND s1.sprache=?
|
||||
WHERE
|
||||
sichtbar=true
|
||||
) s2
|
||||
LEFT JOIN
|
||||
campus.tbl_contentsprache s3 USING(content_id, sprache)
|
||||
WHERE
|
||||
sichtbar=true
|
||||
GROUP BY
|
||||
content_id,
|
||||
sprache
|
||||
) s4
|
||||
LEFT JOIN
|
||||
campus.tbl_contentsprache s5 USING(content_id, sprache, version)
|
||||
WHERE
|
||||
version IS NOT NULL
|
||||
) t USING (content_id)
|
||||
JOIN
|
||||
campus.tbl_contentsprache s USING (contentsprache_id)
|
||||
WHERE
|
||||
c.template_kurzbz<>'news'
|
||||
AND
|
||||
c.content_id IN (
|
||||
WITH RECURSIVE childs(content_id, child_content_id) as
|
||||
(
|
||||
SELECT content_id, child_content_id FROM campus.tbl_contentchild
|
||||
WHERE content_id=?
|
||||
UNION ALL
|
||||
SELECT cc.child_content_id, null FROM campus.tbl_contentchild cc, childs
|
||||
WHERE cc.content_id=childs.content_id
|
||||
)
|
||||
SELECT content_id
|
||||
FROM childs
|
||||
GROUP BY content_id
|
||||
)
|
||||
GROUP BY c.content_id,
|
||||
s.contentsprache_id
|
||||
) m
|
||||
JOIN
|
||||
campus.tbl_content c USING(content_id)
|
||||
JOIN
|
||||
campus.tbl_contentsprache s USING(contentsprache_id)
|
||||
LEFT JOIN
|
||||
campus.tbl_contentchild k ON(m.content_id=k.content_id)
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM campus.tbl_contentgruppe
|
||||
JOIN public.vw_gruppen USING(gruppe_kurzbz)
|
||||
WHERE (
|
||||
tbl_contentgruppe.content_id=c.content_id
|
||||
OR NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM campus.tbl_contentgruppe
|
||||
WHERE content_id=c.content_id
|
||||
)
|
||||
)
|
||||
AND vw_gruppen.uid=?
|
||||
)
|
||||
ORDER BY content_id, sort";
|
||||
|
||||
$result = $this->execQuery($sql, [DEFAULT_LANGUAGE, $sprache, $root_content_id, $uid]);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
$contents = getData($result) ?? [];
|
||||
$result = [];
|
||||
foreach ($contents as $content) {
|
||||
if (!isset($result[$content->content_id])) {
|
||||
$result[$content->content_id] = clone($content);
|
||||
unset($result[$content->content_id]->child_content_id);
|
||||
unset($result[$content->content_id]->sort);
|
||||
$result[$content->content_id]->childs = [];
|
||||
}
|
||||
if ($content->child_content_id !== null)
|
||||
$result[$content->content_id]->childs[] = $content->child_content_id;
|
||||
}
|
||||
foreach ($result as $content) {
|
||||
foreach ($content->childs as $k => $v) {
|
||||
if (isset($result[$v])) {
|
||||
$content->childs[$k] = $result[$v];
|
||||
} else {
|
||||
unset($content->childs[$k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success(isset($result[$root_content_id]) ? $result[$root_content_id] : null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,50 @@ class Contentgruppe_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_contentgruppe';
|
||||
$this->pk = array('gruppe_kurzbz', 'content_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob der Zugriff auf den Content eingeschraenkt ist auf
|
||||
* eine bestimmte Benutzergruppe
|
||||
*
|
||||
* @param int $content_id
|
||||
*
|
||||
* @return stdClass success(true) wenn eingeschraenkt sonst success(false)
|
||||
*/
|
||||
public function islocked($content_id)
|
||||
{
|
||||
$islocked = $this->loadWhere(['content_id' => $content_id]);
|
||||
|
||||
if (isError($islocked))
|
||||
return $islocked;
|
||||
return success(!!getData($islocked));
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob ein User die Berechtigung fuer das Anzeigen des
|
||||
* Contents besitzt
|
||||
*
|
||||
* @param int $content_id ID des Contents
|
||||
* @param string $uid User der versucht auf den Content zuzugreifen
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function berechtigt($content_id, $uid)
|
||||
{
|
||||
$islocked = $this->islocked($content_id);
|
||||
if (isError($islocked))
|
||||
return $islocked;
|
||||
|
||||
$condition = ['uid' => $uid];
|
||||
if (getData($islocked)) {
|
||||
$condition['content_id'] = $content_id;
|
||||
}
|
||||
$this->addJoin('public.vw_gruppen', 'gruppe_kurzbz');
|
||||
|
||||
$result = $this->loadWhere($condition);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
return success(!!getData($result));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,32 @@ class Contentsprache_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_contentsprache';
|
||||
$this->pk = 'contentsprache_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob der Content in der angegeben Sprache vorhanden ist
|
||||
*
|
||||
* @param int $content_id
|
||||
* @param string $sprache
|
||||
* @param int | null $version (optional)
|
||||
* @param boolean | null $sichtbar (optional)
|
||||
* @return stdClass
|
||||
*/
|
||||
public function exists($content_id, $sprache, $version=null, $sichtbar=null)
|
||||
{
|
||||
$condition = ['content_id' => $content_id, 'sprache' => $sprache];
|
||||
|
||||
if ($version)
|
||||
$condition['version'] = $version;
|
||||
|
||||
if ($sichtbar !== null)
|
||||
$condition['sichtbar'] = $sichtbar;
|
||||
|
||||
$result = $this->loadWhere($condition);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
return success(!!getData($result));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,124 @@ class News_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_news';
|
||||
$this->pk = 'news_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all News ordered by date. (most actual on top)
|
||||
* @param null $limit Amount of news.
|
||||
* @return array
|
||||
*/
|
||||
public function getAll($limit = null)
|
||||
{
|
||||
$this->addJoin("campus.tbl_content","content_id");
|
||||
return $this->execReadOnlyQuery('
|
||||
SELECT *, TO_CHAR(campus.tbl_news.datum, ?) as datumformatted
|
||||
FROM campus.tbl_news
|
||||
JOIN campus.tbl_content content ON content.content_id = campus.tbl_news.content_id
|
||||
WHERE
|
||||
--text IS NOT NULL AND
|
||||
datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date)
|
||||
ORDER BY datum DESC
|
||||
LIMIT ' . $this->escape($limit)
|
||||
, ['DD/MM/YYYY']);
|
||||
}
|
||||
|
||||
public function getNewsContentIDs($limit=10){
|
||||
$this->addSelect(['content_id']);
|
||||
return $this->loadWhere("datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date)
|
||||
ORDER BY datum DESC
|
||||
LIMIT " . $this->escape($limit));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param string $sprache
|
||||
* @param string $studiengang_kz
|
||||
* @param integer | null $semester
|
||||
* @param string $fachbereich_kurzbz
|
||||
* @param boolean $sichtbar
|
||||
* @param integer $maxalter
|
||||
* @param integer $page
|
||||
* @param integer $page_size
|
||||
* @param boolean $all
|
||||
* @param boolean $mischen
|
||||
*
|
||||
* TODO(chris): this is not a good function -> the params are all over the place
|
||||
*
|
||||
*/
|
||||
protected function prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true)
|
||||
{
|
||||
|
||||
$this->addOrder('datum', 'DESC');
|
||||
|
||||
$studiengang_kz = trim($studiengang_kz);
|
||||
$fachbereich_kurzbz = trim($fachbereich_kurzbz);
|
||||
|
||||
$where = [];
|
||||
if (trim($maxalter) != '0') {
|
||||
$where[] = "(now()-datum) < interval " . $this->db->escape($maxalter) . " days";
|
||||
|
||||
}
|
||||
if (!$all) {
|
||||
$where[] = "datum <= now()";
|
||||
$where[] = "(datum_bis >= now()::date OR datum_bis IS NULL)";
|
||||
}
|
||||
if ($fachbereich_kurzbz != '*') {
|
||||
if ($fachbereich_kurzbz == '') {
|
||||
$where[] = "fachbereich_kurzbz IS NULL";
|
||||
} else {
|
||||
$where[] = "fachbereich_kurzbz = " . $this->db->escape($fachbereich_kurzbz);
|
||||
|
||||
}
|
||||
}
|
||||
if ($studiengang_kz == '0') {
|
||||
$where[] = "studiengang_kz = " . $this->db->escape($studiengang_kz);
|
||||
|
||||
if ($semester === NULL)
|
||||
$where[] = "semester IS NULL";
|
||||
elseif ($semester === 0)
|
||||
$where[] = "semester = 0";
|
||||
} elseif ($studiengang_kz != '') {
|
||||
$add = $mischen === true ? " OR (studiengang_kz = 0 AND semester IS NULL)" : "";
|
||||
$where[] = "((studiengang_kz = " . $this->db->escape($studiengang_kz) . " AND semester = " . $this->db->escape($semester) . ") OR (studiengang_kz = " . $this->db->escape($studiengang_kz) . " AND semester = 0) OR (studiengang_kz = 0 AND semester = " . $this->db->escape($semester) . ")" . $add . ")";
|
||||
|
||||
}
|
||||
$this->addJoin('campus.tbl_contentsprache cs', 'content_id');
|
||||
|
||||
$where[] = "cs.sichtbar = " . ($sichtbar ? "true" : "false");
|
||||
|
||||
$where[] = "cs.sprache = (CASE WHEN EXISTS(SELECT 1 FROM campus.tbl_contentsprache cs2 WHERE cs2.content_id=" . $this->dbTable . ".content_id AND sprache=" . $this->db->escape($sprache) . ") THEN " . $this->db->escape($sprache) . " ELSE " . $this->db->escape(DEFAULT_LANGUAGE) . " END)";
|
||||
|
||||
|
||||
$where[] = "cs.version = (SELECT MAX(version) FROM campus.tbl_contentsprache cs3 WHERE cs3.content_id=" . $this->dbTable . ".content_id AND cs3.sprache = (CASE WHEN EXISTS(SELECT 1 FROM campus.tbl_contentsprache cs2 WHERE cs2.content_id=" . $this->dbTable . ".content_id AND sprache=" . $this->db->escape($sprache) . ") THEN " . $this->db->escape($sprache) . " ELSE " . $this->db->escape(DEFAULT_LANGUAGE) . " END))";
|
||||
|
||||
|
||||
$where = implode(" AND ", $where);
|
||||
|
||||
$this->db->where($where, NULL, FALSE);
|
||||
|
||||
}
|
||||
|
||||
public function getNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true)
|
||||
{
|
||||
$this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen);
|
||||
|
||||
// getting the number of rows of the query and adding pagination to the query result
|
||||
$num_rows = $this->getNumRows(true);
|
||||
$this->addPagination($page, $page_size, $num_rows);
|
||||
|
||||
// preparing the query again because every call to get_compiled_select or cour_all_results will add the from clause to the query
|
||||
$this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen);
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
public function countNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true)
|
||||
{
|
||||
$this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen);
|
||||
return $this->getNumRows();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ class Akte_model extends DB_Model
|
||||
a.anmerkung,
|
||||
a.nachgereicht,
|
||||
a.nachgereicht_am,
|
||||
CASE WHEN MAX(dp.dokument_kurzbz) IS NOT NULL THEN TRUE ELSE FALSE END AS accepted
|
||||
CASE WHEN MAX(dp.dokument_kurzbz) IS NOT NULL THEN TRUE ELSE FALSE END AS accepted,
|
||||
FROM public.tbl_akte a
|
||||
INNER JOIN public.tbl_prestudent p USING(person_id)
|
||||
LEFT JOIN public.tbl_dokumentprestudent dp USING(prestudent_id, dokument_kurzbz)
|
||||
@@ -111,6 +111,61 @@ class Akte_model extends DB_Model
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* getAktenAccepted FAS
|
||||
*/
|
||||
public function getAktenFAS($person_id, $dokument_kurzbz = null, $stg_kz = null, $prestudent_id = null, $returnInhalt = false)
|
||||
{
|
||||
$query = 'SELECT
|
||||
a.akte_id,
|
||||
a.bezeichnung,
|
||||
a.dokument_kurzbz,
|
||||
a.titel_intern,
|
||||
a.anmerkung_intern,
|
||||
a.insertamum as hochgeladenamum,
|
||||
a.updatevon, a.insertvon, a.uid,
|
||||
a.dms_id, a.anmerkung as infotext,
|
||||
a.nachgereicht,
|
||||
CASE
|
||||
WHEN inhalt IS NOT NULL OR a.dms_id IS NOT NULL
|
||||
THEN true
|
||||
ELSE false
|
||||
END AS vorhanden,
|
||||
a.nachgereicht_am,
|
||||
ausstellungsnation, formal_geprueft_amum, archiv,
|
||||
signiert, stud_selfservice, akzeptiertamum, inhalt
|
||||
FROM public.tbl_akte a
|
||||
WHERE a.person_id = ?';
|
||||
|
||||
$parametersArray = array($person_id);
|
||||
|
||||
if (!isEmptyString($dokument_kurzbz))
|
||||
{
|
||||
$query .= " AND dokument_kurzbz = ?
|
||||
AND dokument_kurzbz NOT IN ('Zeugnis','DiplSupp','Bescheid')";
|
||||
array_push($parametersArray, $dokument_kurzbz);
|
||||
}
|
||||
|
||||
if($stg_kz != null && $prestudent_id != null)
|
||||
{
|
||||
$query.= " AND dokument_kurzbz not in (
|
||||
SELECT dokument_kurzbz
|
||||
FROM public.tbl_dokument
|
||||
JOIN public.tbl_dokumentstudiengang USING(dokument_kurzbz)
|
||||
WHERE studiengang_kz= ?
|
||||
AND dokument_kurzbz NOT IN(
|
||||
SELECT dokument_kurzbz FROM public.tbl_dokumentprestudent
|
||||
JOIN public.tbl_dokument USING(dokument_kurzbz)
|
||||
WHERE prestudent_id=?))";
|
||||
array_push($parametersArray, $stg_kz);
|
||||
array_push($parametersArray, $prestudent_id);
|
||||
}
|
||||
|
||||
$query .= ' ORDER BY erstelltam';
|
||||
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* getAktenAcceptedDms
|
||||
*/
|
||||
@@ -193,4 +248,60 @@ class Akte_model extends DB_Model
|
||||
|
||||
return success($dokumente->retval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert die Archivdokumente einer Person/mehrerer Personen
|
||||
*
|
||||
* @param integer/array $person_id
|
||||
* @param boolean|null $signiert Wenn true werden nur Dokumente geliefert die digital signiert wurden.
|
||||
* @param boolean|null $stud_selfservice Wenn true werden nur Dokumente geliefert die Studierende selbst herunterladen duerfen.
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getArchiv($person_id, $signiert = null, $stud_selfservice = null)
|
||||
{
|
||||
$this->addSelect('akte_id');
|
||||
$this->addSelect('person_id');
|
||||
$this->addSelect('dokument_kurzbz');
|
||||
$this->addSelect('mimetype');
|
||||
$this->addSelect('erstelltam');
|
||||
$this->addSelect('gedruckt');
|
||||
$this->addSelect('titel_intern');
|
||||
$this->addSelect('anmerkung_intern');
|
||||
$this->addSelect('titel');
|
||||
$this->addSelect('bezeichnung');
|
||||
$this->addSelect('updateamum');
|
||||
$this->addSelect('insertamum');
|
||||
$this->addSelect('updatevon');
|
||||
$this->addSelect('insertvon');
|
||||
$this->addSelect('uid');
|
||||
$this->addSelect('dms_id');
|
||||
$this->addSelect('anmerkung');
|
||||
$this->addSelect('nachgereicht');
|
||||
$this->addSelect('CASE WHEN inhalt is not null THEN true ELSE false END as inhalt_vorhanden', false);
|
||||
$this->addSelect('nachgereicht_am');
|
||||
$this->addSelect('ausstellungsnation');
|
||||
$this->addSelect('formal_geprueft_amum');
|
||||
$this->addSelect('archiv');
|
||||
$this->addSelect('signiert');
|
||||
$this->addSelect('stud_selfservice');
|
||||
$this->addSelect('akzeptiertamum');
|
||||
|
||||
if ($signiert !== null)
|
||||
$this->db->where('signiert', (boolean)$signiert);
|
||||
if ($stud_selfservice !== null)
|
||||
$this->db->where('stud_selfservice', (boolean)$stud_selfservice);
|
||||
|
||||
if (is_array($person_id))
|
||||
$this->db->where_in('person_id', $person_id);
|
||||
else
|
||||
$this->db->where('person_id', $person_id);
|
||||
|
||||
$this->addOrder('erstelltam', 'DESC');
|
||||
$this->addOrder('akte_id', 'DESC');
|
||||
|
||||
return $this->loadWhere([
|
||||
'archiv' => true
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,91 @@ class Dokument_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_dokument';
|
||||
$this->pk = 'dokument_kurzbz';
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all missing Documents of a Studiengang
|
||||
* a Prestudent has not submitted
|
||||
* @param integer studiengang_kz
|
||||
* @param integer prestudent_id
|
||||
* @param boolean archivdokumente
|
||||
* Default: true.
|
||||
* If false, documents that are archivable (tbl_vorlage.archivierbar e.g. certificate, notice, ...) not retrieved
|
||||
* @return Array of Documents || error
|
||||
*/
|
||||
public function getMissingDocuments($studiengang_kz, $prestudent_id = null, $archivdokumente = false, $person_id = null)
|
||||
{
|
||||
$parametersArray = array($studiengang_kz);
|
||||
|
||||
$qry = "SELECT
|
||||
tbl_dokument.* ,
|
||||
tbl_dokumentstudiengang.*
|
||||
FROM public.tbl_dokument
|
||||
JOIN public.tbl_dokumentstudiengang USING(dokument_kurzbz)
|
||||
LEFT JOIN public.tbl_vorlage ON (tbl_dokument.dokument_kurzbz = tbl_vorlage.vorlage_kurzbz)
|
||||
WHERE studiengang_kz = ? ";
|
||||
|
||||
if($prestudent_id)
|
||||
{
|
||||
array_push($parametersArray, $prestudent_id);
|
||||
$qry.=" AND tbl_dokument.dokument_kurzbz NOT IN (
|
||||
SELECT dokument_kurzbz FROM public.tbl_dokumentprestudent WHERE prestudent_id= ?)";
|
||||
}
|
||||
|
||||
if(!$archivdokumente)
|
||||
{
|
||||
$qry.=" AND (tbl_vorlage.archivierbar = FALSE OR tbl_vorlage.archivierbar IS NULL)";
|
||||
}
|
||||
|
||||
$qry.=" ORDER BY tbl_dokument.dokument_kurzbz;";
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
|
||||
public function getUnacceptedDocuments($prestudent_id, $person_id)
|
||||
{
|
||||
$parametersArray = array($person_id, $prestudent_id);
|
||||
|
||||
$qry = " SELECT
|
||||
a.akte_id,
|
||||
a.bezeichnung,
|
||||
a.dokument_kurzbz,
|
||||
a.titel_intern,
|
||||
a.anmerkung_intern,
|
||||
a.insertamum as hochgeladenamum,
|
||||
a.updatevon,
|
||||
a.insertvon,
|
||||
a.uid,
|
||||
a.dms_id,
|
||||
a.anmerkung as infotext,
|
||||
a.nachgereicht,
|
||||
CASE
|
||||
WHEN inhalt IS NOT NULL
|
||||
OR a.dms_id IS NOT NULL THEN true
|
||||
ELSE false
|
||||
END AS vorhanden,
|
||||
a.nachgereicht_am,
|
||||
ausstellungsnation,
|
||||
formal_geprueft_amum,
|
||||
archiv,
|
||||
signiert,
|
||||
stud_selfservice,
|
||||
akzeptiertamum,
|
||||
inhalt
|
||||
FROM
|
||||
public.tbl_akte a
|
||||
WHERE
|
||||
a.person_id = ?
|
||||
AND a.dokument_kurzbz NOT IN (
|
||||
SELECT
|
||||
dokument_kurzbz
|
||||
FROM
|
||||
public.tbl_dokumentprestudent
|
||||
WHERE
|
||||
prestudent_id = ?
|
||||
)
|
||||
AND a.dokument_kurzbz NOT IN ('Zeugnis','DiplSupp','Bescheid')
|
||||
ORDER BY a.dokument_kurzbz;";
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,4 +69,41 @@ class Dokumentprestudent_model extends DB_Model
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all Documents of Prestudent, already submitted
|
||||
* @param integer prestudent_id
|
||||
* @param boolean archivdokumente Default true. if false, archivable Documents (tbl_vorlage.archivierbar zB Zeugnis, Bescheid, ...) not retrieved
|
||||
* @return Array of Documents || error
|
||||
*/
|
||||
public function getPrestudentDokumente($prestudent_id, $archivdokumente = true)
|
||||
{
|
||||
$parametersArray = array($prestudent_id);
|
||||
|
||||
$qry = "SELECT
|
||||
d.bezeichnung,
|
||||
d.dokument_kurzbz,
|
||||
dp.datum as Docdatum,
|
||||
dp.mitarbeiter_uid as DocMitarbeiter_uid,
|
||||
dp.insertamum as Docinsertamum,
|
||||
dp.prestudent_id,
|
||||
CONCAT(p.vorname, ' ', p.nachname) as insertvonma
|
||||
FROM
|
||||
public.tbl_dokumentprestudent dp
|
||||
JOIN public.tbl_dokument d USING(dokument_kurzbz)
|
||||
LEFT JOIN public.tbl_vorlage v ON (d.dokument_kurzbz = v.vorlage_kurzbz)
|
||||
LEFT JOIN public.tbl_benutzer bn ON (bn.uid = dp.mitarbeiter_uid)
|
||||
LEFT JOIN public.tbl_person p ON (p.person_id = bn.person_id)
|
||||
WHERE
|
||||
prestudent_id = ?";
|
||||
|
||||
if(!$archivdokumente)
|
||||
{
|
||||
$qry.=" AND (v.archivierbar = FALSE OR v.archivierbar IS NULL)";
|
||||
}
|
||||
|
||||
$qry.=" ORDER BY d.bezeichnung ASC";
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,6 +340,34 @@ class Konto_model extends DB_Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $prestudent_id
|
||||
* @param string $stsem
|
||||
* @param array $buchungstypen
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function checkStudienbeitragFromPrestudent($prestudent_id, $stsem, $buchungstypen)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.buchungsnr');
|
||||
$this->addSelect($this->dbTable . '.buchungsdatum');
|
||||
|
||||
$this->addJoin('public.tbl_prestudent s', $this->dbTable . '.person_id=s.person_id AND ' . $this->dbTable . '.studiengang_kz=s.studiengang_kz');
|
||||
|
||||
$this->db->where_in('buchungstyp_kurzbz', $buchungstypen);
|
||||
$this->db->where('0 >= (
|
||||
SELECT sum(betrag)
|
||||
FROM ' . $this->dbTable . ' skonto
|
||||
WHERE skonto.buchungsnr = ' . $this->dbTable . '.buchungsnr_verweis
|
||||
OR skonto.buchungsnr_verweis = ' . $this->dbTable . '.buchungsnr_verweis
|
||||
)', null, false);
|
||||
|
||||
return $this->loadWhere([
|
||||
'prestudent_id' => $prestudent_id,
|
||||
'studiensemester_kurzbz' => $stsem
|
||||
]);
|
||||
}
|
||||
|
||||
/*
|
||||
* check if student has paid studienbeitrag for certain semester
|
||||
*
|
||||
* @param $person_id person_id
|
||||
|
||||
@@ -677,7 +677,7 @@ class Prestudent_model extends DB_Model
|
||||
));
|
||||
}
|
||||
|
||||
public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt)
|
||||
public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $ignoreAbgeschickt = false)
|
||||
{
|
||||
$query = "SELECT ps.prestudent_id
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
@@ -687,22 +687,42 @@ class Prestudent_model extends DB_Model
|
||||
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
|
||||
WHERE ps.person_id = ?
|
||||
AND UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz) = ?
|
||||
AND pss.studiensemester_kurzbz = ?
|
||||
AND";
|
||||
AND pss.studiensemester_kurzbz = ?";
|
||||
|
||||
if ($abgeschickt === 'true')
|
||||
$query .= " EXISTS";
|
||||
else
|
||||
$query .= " NOT EXISTS";
|
||||
if (!$ignoreAbgeschickt)
|
||||
{
|
||||
$query .= "AND";
|
||||
|
||||
$query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss
|
||||
if ($abgeschickt === 'true')
|
||||
$query .= " EXISTS";
|
||||
else
|
||||
$query .= " NOT EXISTS";
|
||||
|
||||
$query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss
|
||||
JOIN public.tbl_prestudent sps USING(prestudent_id)
|
||||
WHERE sps.prestudent_id = ps.prestudent_id
|
||||
AND spss.bewerbung_abgeschicktamum IS NOT NULL)";
|
||||
}
|
||||
|
||||
return $this->execQuery($query, array($person, $studiengang, $studienSemester));
|
||||
}
|
||||
|
||||
public function getByPersonWithoutLehrgang($person, $studienSemester)
|
||||
{
|
||||
$query = "SELECT DISTINCT(ps.prestudent_id)
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
JOIN public.tbl_prestudent ps USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang sg USING(studiengang_kz)
|
||||
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
|
||||
WHERE ps.person_id = ?
|
||||
AND (sg.typ = 'b' OR sg.typ = 'm')
|
||||
AND pss.studiensemester_kurzbz = ?";
|
||||
|
||||
return $this->execQuery($query, array($person, $studienSemester));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets förderrelevant flag for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang
|
||||
* @param int $prestudent_id
|
||||
|
||||
@@ -26,6 +26,77 @@ class Prestudentstatus_model extends DB_Model
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* loadWhereUid
|
||||
*
|
||||
* loads all rows for a student_uid
|
||||
*
|
||||
* @param string $uid
|
||||
* @param array $where Optional. Default empty array
|
||||
* @param boolean $withPrestudent Optional. Default true
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadWhereUid($uid, $where = null, $withPrestudent = false)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addJoin('public.tbl_student', 'prestudent_id');
|
||||
|
||||
if ($withPrestudent) {
|
||||
$this->addJoin('public.tbl_prestudent s', 'prestudent_id');
|
||||
$this->addSelect('s.aufmerksamdurch_kurzbz');
|
||||
$this->addSelect('s.person_id');
|
||||
$this->addSelect('s.studiengang_kz');
|
||||
$this->addSelect('s.berufstaetigkeit_code');
|
||||
$this->addSelect('s.ausbildungcode');
|
||||
$this->addSelect('s.zgv_code');
|
||||
$this->addSelect('s.zgvort');
|
||||
$this->addSelect('s.zgvdatum');
|
||||
$this->addSelect('s.zgvmas_code');
|
||||
$this->addSelect('s.zgvmaort');
|
||||
$this->addSelect('s.zgvmadatum');
|
||||
$this->addSelect('s.aufnahmeschluessel');
|
||||
$this->addSelect('s.facheinschlberuf');
|
||||
$this->addSelect('s.reihungstest_id');
|
||||
$this->addSelect('s.anmeldungreihungstest');
|
||||
$this->addSelect('s.reihungstestangetreten');
|
||||
$this->addSelect('s.rt_gesamtpunkte');
|
||||
$this->addSelect('s.bismelden');
|
||||
$this->addSelect('s.dual');
|
||||
$this->addSelect('s.rt_punkte1');
|
||||
$this->addSelect('s.rt_punkte2');
|
||||
$this->addSelect('s.ausstellungsstaat');
|
||||
$this->addSelect('s.rt_punkte3');
|
||||
$this->addSelect('s.zgvdoktor_code');
|
||||
$this->addSelect('s.zgvdoktorort');
|
||||
$this->addSelect('s.zgvdoktordatum');
|
||||
$this->addSelect('s.mentor');
|
||||
$this->addSelect('s.zgvnation');
|
||||
$this->addSelect('s.zgvmanation');
|
||||
$this->addSelect('s.zgvdoktornation');
|
||||
$this->addSelect('s.gsstudientyp_kurzbz');
|
||||
$this->addSelect('s.aufnahmegruppe_kurzbz');
|
||||
$this->addSelect('s.udf_values');
|
||||
$this->addSelect('s.priorisierung');
|
||||
$this->addSelect('s.foerderrelevant');
|
||||
$this->addSelect('s.standort_code');
|
||||
$this->addSelect('s.zgv_erfuellt');
|
||||
$this->addSelect('s.zgvmas_erfuellt');
|
||||
$this->addSelect('s.zgvdoktor_erfuellt');
|
||||
}
|
||||
|
||||
|
||||
$this->addOrder('datum');
|
||||
$this->addOrder('insertamum');
|
||||
|
||||
if (!$where)
|
||||
$where = [];
|
||||
|
||||
$where['student_uid'] = $uid;
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
|
||||
/**
|
||||
* getLastStatus
|
||||
*/
|
||||
@@ -430,17 +501,14 @@ class Prestudentstatus_model extends DB_Model
|
||||
$this->addSelect('tbl_prestudentstatus.studiensemester_kurzbz');
|
||||
$this->addSelect('tbl_prestudentstatus.ausbildungssemester');
|
||||
$this->addSelect('tbl_prestudentstatus.datum');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.datum::timestamp, 'DD.MM.YYYY') AS format_datum");
|
||||
$this->addSelect('tbl_prestudentstatus.insertamum');
|
||||
$this->addSelect('tbl_prestudentstatus.insertvon');
|
||||
$this->addSelect('tbl_prestudentstatus.updateamum');
|
||||
$this->addSelect('tbl_prestudentstatus.updatevon');
|
||||
$this->addSelect('tbl_prestudentstatus.orgform_kurzbz');
|
||||
$this->addSelect('tbl_prestudentstatus.bestaetigtam');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bestaetigtam::timestamp, 'DD.MM.YYYY') AS format_bestaetigtam");
|
||||
$this->addSelect('tbl_prestudentstatus.bestaetigtvon');
|
||||
$this->addSelect('tbl_prestudentstatus.bewerbung_abgeschicktamum');
|
||||
$this->addSelect("TO_CHAR(tbl_prestudentstatus.bewerbung_abgeschicktamum::timestamp, 'DD.MM.YYYY') AS format_bewerbung_abgeschicktamum");
|
||||
$this->addSelect('tbl_prestudentstatus.anmerkung');
|
||||
$this->addSelect('plan.studienplan_id');
|
||||
$this->addSelect('plan.bezeichnung');
|
||||
|
||||
@@ -511,4 +511,250 @@ class Reihungstest_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($date, $studiengang_kz));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all placement tests of a given person
|
||||
* @param integer $person_id
|
||||
* @return array Returns object array with data of placement tests
|
||||
*/
|
||||
public function getReihungstestPerson($person_id)
|
||||
{
|
||||
$query = '
|
||||
SELECT
|
||||
tbl_rt_person.*,
|
||||
tbl_reihungstest.studiengang_kz,
|
||||
tbl_reihungstest.anmerkung,
|
||||
tbl_reihungstest.datum,
|
||||
tbl_reihungstest.uhrzeit,
|
||||
tbl_reihungstest.ext_id,
|
||||
tbl_reihungstest.max_teilnehmer,
|
||||
tbl_reihungstest.oeffentlich,
|
||||
tbl_reihungstest.freigeschaltet,
|
||||
tbl_reihungstest.studiensemester_kurzbz as studiensemester,
|
||||
tbl_reihungstest.stufe,
|
||||
tbl_reihungstest.anmeldefrist,
|
||||
tbl_reihungstest.aufnahmegruppe_kurzbz,
|
||||
tbl_studiengang.typ,
|
||||
UPPER(typ::varchar(1) || kurzbz) AS stg_kuerzel,
|
||||
so.studiengangbezeichnung,
|
||||
so.studiengangbezeichnung_englisch,
|
||||
so.studiengangkurzbzlang
|
||||
FROM
|
||||
public.tbl_rt_person
|
||||
JOIN public.tbl_reihungstest ON (rt_id=reihungstest_id)
|
||||
JOIN public.tbl_studiengang ON tbl_reihungstest.studiengang_kz = tbl_studiengang.studiengang_kz
|
||||
JOIN lehre.tbl_studienplan sp USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung so USING(studienordnung_id)
|
||||
WHERE
|
||||
tbl_rt_person.person_id = ?
|
||||
ORDER BY datum, uhrzeit ASC';
|
||||
|
||||
return $this->execQuery($query, array($person_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates Result of Placement Test for a given Person and given placementtest
|
||||
* and with taking account of weighting per area
|
||||
*
|
||||
* @param $person_id ID of Person
|
||||
* @param $punkte if true result is points else result is percentage of sum
|
||||
* @param $reihungstest_id ID of Placementtest
|
||||
* @param $weightedArray array of weighting per area (gewicht per gebiet_id)
|
||||
* @return float result
|
||||
*/
|
||||
public function getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray = null)
|
||||
{
|
||||
$parametersArray = array($reihungstest_id);
|
||||
|
||||
$qry = "
|
||||
SELECT DISTINCT ON (vw_auswertung_ablauf.gebiet_id) gebiet_id,
|
||||
vw_auswertung_ablauf.*,
|
||||
tbl_studiengang.typ
|
||||
FROM
|
||||
testtool.vw_auswertung_ablauf
|
||||
JOIN
|
||||
public.tbl_studiengang USING (studiengang_kz)
|
||||
WHERE
|
||||
reihungstest_id = ? ";
|
||||
|
||||
//using prestudent Status to avoid to get the sum of more than 1 placement tests
|
||||
$qry .= "
|
||||
AND prestudent_id = (
|
||||
SELECT
|
||||
prestudent_id
|
||||
FROM
|
||||
public.tbl_rt_person
|
||||
JOIN
|
||||
public.tbl_prestudent USING(person_id)
|
||||
JOIN
|
||||
public.tbl_prestudentstatus USING (prestudent_id, studienplan_id)
|
||||
JOIN
|
||||
tbl_reihungstest ON (
|
||||
tbl_rt_person.rt_id = tbl_reihungstest.reihungstest_id
|
||||
)
|
||||
WHERE
|
||||
tbl_rt_person.person_id = ?
|
||||
AND
|
||||
tbl_rt_person.rt_id = ?
|
||||
AND
|
||||
tbl_prestudentstatus.status_kurzbz = 'Interessent'
|
||||
AND
|
||||
tbl_prestudentstatus.studiensemester_kurzbz = tbl_reihungstest.studiensemester_kurzbz
|
||||
ORDER BY tbl_reihungstest.datum DESC, tbl_prestudent.priorisierung ASC LIMIT 1
|
||||
)
|
||||
";
|
||||
array_push($parametersArray, $person_id);
|
||||
array_push($parametersArray, $reihungstest_id);
|
||||
|
||||
$resultRtPerson = $this->execQuery($qry, $parametersArray);
|
||||
|
||||
$ergebnis = 0;
|
||||
$summeGewicht = 0;
|
||||
|
||||
foreach ($resultRtPerson->retval as $row)
|
||||
{
|
||||
$prozent = 0;
|
||||
if($row->punkte>=$row->maxpunkte)
|
||||
{
|
||||
$prozent = 100;
|
||||
$row->punkte = $row->maxpunkte;
|
||||
}
|
||||
else
|
||||
$prozent = (($row->punkte + $row->offsetpunkte)/($row->maxpunkte + $row->offsetpunkte))*100;
|
||||
|
||||
if($punkte == 'true')
|
||||
{
|
||||
if($row->punkte)
|
||||
{
|
||||
$ergebnis += $row->punkte;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($row->punkte)
|
||||
{
|
||||
$gew = isset($weightedArray[$row->gebiet_id]) ? $weightedArray[$row->gebiet_id] : 1;
|
||||
$ergebnis += $prozent * $gew;
|
||||
$summeGewicht += $gew;
|
||||
}
|
||||
}
|
||||
}
|
||||
$return = $summeGewicht > 0
|
||||
? number_format($ergebnis/$summeGewicht, 4, '.', '')
|
||||
: number_format($ergebnis, 4, '.', '');
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns Reihungstests for given studyplans and include_ids
|
||||
*
|
||||
* @param Array $studienplan_arr array of studienplaene
|
||||
* @param Array $include_ids array of include_ids
|
||||
* @return Array List of Reihungstests
|
||||
*/
|
||||
public function getReihungstestByStudyPlanAndIds($studienplan_arr, $include_ids = null)
|
||||
{
|
||||
$studienplan_ids_string = implode(',', $studienplan_arr);
|
||||
$studienplan_arr = explode(',', $studienplan_ids_string);
|
||||
|
||||
$parametersArray = array($studienplan_arr);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
distinct a.*,
|
||||
CASE EXTRACT(DOW FROM a.datum)
|
||||
WHEN 0 THEN 'So'
|
||||
WHEN 1 THEN 'Mo'
|
||||
WHEN 2 THEN 'Di'
|
||||
WHEN 3 THEN 'Mi'
|
||||
WHEN 4 THEN 'Do'
|
||||
WHEN 5 THEN 'Fr'
|
||||
WHEN 6 THEN 'Sa'
|
||||
END AS wochentag,
|
||||
sg.kurzbzlang as stg,
|
||||
(
|
||||
SELECT count(*) FROM public.tbl_rt_person
|
||||
WHERE rt_id = a.reihungstest_id
|
||||
) as angemeldete_teilnehmer
|
||||
FROM
|
||||
public.tbl_reihungstest a
|
||||
JOIN public.tbl_rt_studienplan USING(reihungstest_id)
|
||||
JOIN public.tbl_studiengang sg USING(studiengang_kz)
|
||||
WHERE studienplan_id IN ?";
|
||||
|
||||
if($include_ids && is_array($include_ids) && count($include_ids) > 0)
|
||||
{
|
||||
$include_ids_string = implode(',', $include_ids);
|
||||
$include_ids = explode(',', $include_ids_string);
|
||||
|
||||
array_push($parametersArray, $include_ids);
|
||||
|
||||
$qry .= "OR reihungstest_id in ?";
|
||||
}
|
||||
$qry .= "ORDER BY a.datum DESC";
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
/**
|
||||
* returns Reihungstests for given studyplans and include_ids
|
||||
*
|
||||
* @param Integer $studiengang_kz
|
||||
* @param $include_id optional (here null)
|
||||
* @return Array List of Reihungstests
|
||||
*/
|
||||
public function getZukuenftigeReihungstestStg($studiengang_kz, $include_id = null)
|
||||
{
|
||||
$parametersArray = array($studiengang_kz, $studiengang_kz, $include_id);
|
||||
|
||||
$qry = "
|
||||
SELECT *,
|
||||
CASE EXTRACT(DOW FROM a.datum)
|
||||
WHEN 0 THEN 'So'
|
||||
WHEN 1 THEN 'Mo'
|
||||
WHEN 2 THEN 'Di'
|
||||
WHEN 3 THEN 'Mi'
|
||||
WHEN 4 THEN 'Do'
|
||||
WHEN 5 THEN 'Fr'
|
||||
WHEN 6 THEN 'Sa'
|
||||
END AS wochentag,
|
||||
(
|
||||
SELECT count(*) FROM public.tbl_prestudent
|
||||
WHERE reihungstest_id=a.reihungstest_id
|
||||
) as angemeldete_teilnehmer
|
||||
FROM
|
||||
(
|
||||
SELECT *, '1' as sortierung,
|
||||
(
|
||||
SELECT upper(typ || kurzbz) FROM public.tbl_studiengang
|
||||
WHERE studiengang_kz=tbl_reihungstest.studiengang_kz
|
||||
) as stg
|
||||
FROM
|
||||
public.tbl_reihungstest
|
||||
WHERE
|
||||
datum>=now()-'1 days'::interval AND studiengang_kz=?
|
||||
UNION
|
||||
SELECT *, '2' as sortierung,
|
||||
(
|
||||
SELECT upper(typ || kurzbz) FROM public.tbl_studiengang
|
||||
WHERE studiengang_kz=tbl_reihungstest.studiengang_kz
|
||||
) as stg
|
||||
FROM
|
||||
public.tbl_reihungstest
|
||||
WHERE datum>=now()-'1 days'::interval AND studiengang_kz!=?
|
||||
UNION
|
||||
SELECT *, '0' as sortierung,
|
||||
(
|
||||
SELECT upper(typ || kurzbz) FROM public.tbl_studiengang
|
||||
WHERE studiengang_kz=tbl_reihungstest.studiengang_kz
|
||||
) as stg
|
||||
FROM
|
||||
public.tbl_reihungstest
|
||||
WHERE reihungstest_id=?
|
||||
ORDER BY sortierung, stg, datum
|
||||
) a
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,28 @@ class Student_model extends DB_Model
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the user is a Student.
|
||||
* @param string $uid
|
||||
* @return array
|
||||
*/
|
||||
public function isStudent($uid)
|
||||
{
|
||||
$this->addSelect('1');
|
||||
|
||||
$result = $this->loadWhere(array('student_uid' => $uid));
|
||||
|
||||
|
||||
if(hasData($result))
|
||||
{
|
||||
return success(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return success(false);
|
||||
}
|
||||
}
|
||||
|
||||
// ****
|
||||
// * Generiert die Matrikelnummer
|
||||
// * FORMAT: 0710254001
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
class Bookmark_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_bookmark';
|
||||
$this->pk = 'bookmark_id';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
class Dashboard_Override_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard_benutzer_override';
|
||||
$this->pk = 'override_id';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Overrides of given uid.
|
||||
* @param integer dashboard_id
|
||||
* @param string $uid
|
||||
* @return array
|
||||
*/
|
||||
public function getOverride($dashboard_id, $uid)
|
||||
{
|
||||
return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'uid'=> $uid));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
class Dashboard_Preset_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard_preset';
|
||||
$this->pk = 'preset_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Presets of given uid.
|
||||
* @param integer dashboard_id
|
||||
* @param string $uid
|
||||
* @return array
|
||||
*/
|
||||
public function getPresets($dashboard_id, $uid)
|
||||
{
|
||||
// TODO: get Funktionen for uid and load all preset for all funktionen for uid
|
||||
//return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz'=> null));
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
dashboard.tbl_dashboard_preset
|
||||
WHERE
|
||||
dashboard_id = ?
|
||||
AND (
|
||||
funktion_kurzbz IN (
|
||||
SELECT
|
||||
DISTINCT funktion_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzerfunktion
|
||||
WHERE
|
||||
uid = ?
|
||||
AND
|
||||
NOW()::date
|
||||
BETWEEN
|
||||
COALESCE(datum_von, '1970-01-01')
|
||||
AND
|
||||
COALESCE(datum_bis, '2170-12-31')
|
||||
)
|
||||
OR
|
||||
funktion_kurzbz IS NULL
|
||||
)
|
||||
ORDER BY
|
||||
funktion_kurzbz DESC
|
||||
EOSQL;
|
||||
|
||||
return $this->execQuery($sql, array($dashboard_id, $uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Preset by Dashboard and Funktion
|
||||
* @param integer dashboard_id
|
||||
* @param string funktion_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function getPresetByDashboardAndFunktion($dashboard_id, $funktion_kurzbz)
|
||||
{
|
||||
return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz' => $funktion_kurzbz));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
class Dashboard_Widget_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard_widget';
|
||||
$this->pk = ['dashboard_id', 'widget_id'];
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
class Dashboard_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard';
|
||||
$this->pk = 'dashboard_id';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Dashboard by kurzbz.
|
||||
* @param string dashboard_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function getDashboardByKurzbz($dashboard_kurzbz)
|
||||
{
|
||||
return $this->loadWhere(array('dashboard_kurzbz' => $dashboard_kurzbz));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
class Widget_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_widget';
|
||||
$this->pk = 'widget_id';
|
||||
}
|
||||
|
||||
public function getWithAllowedForDashboard($dashboard_id)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addSelect('CASE WHEN dashboard_id IS NULL THEN 0 ELSE 1 END AS allowed', false);
|
||||
$this->db->join('dashboard.tbl_dashboard_widget dw', $this->dbTable . '.widget_id=dw.widget_id AND dashboard_id = ?', 'LEFT', false);
|
||||
|
||||
return $this->execQuery($this->db->get_compiled_select($this->dbTable), [$dashboard_id]);
|
||||
}
|
||||
|
||||
public function getForDashboard($db)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addJoin('dashboard.tbl_dashboard_widget', 'widget_id');
|
||||
$this->addJoin('dashboard.tbl_dashboard', 'dashboard_id');
|
||||
|
||||
return $this->loadWhere(['dashboard_kurzbz' => $db]);
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,5 @@ class Abgabe_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_abgabe';
|
||||
$this->pk = 'abgabe_id';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -113,4 +113,61 @@ class Abschlusspruefung_model extends DB_Model
|
||||
|
||||
return success($abschlusspruefungdata);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets data of an Abschlusspruefung
|
||||
* @param $student_uid
|
||||
* @return object
|
||||
*/
|
||||
public function getAbschlusspruefungForPrestudent($student_uid)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
exam.*,
|
||||
CONCAT(
|
||||
person_pruefer1.nachname || ' ',
|
||||
person_pruefer1.vorname,
|
||||
COALESCE(' ' || person_pruefer1.titelpre)
|
||||
) AS person_pruefer1,
|
||||
CONCAT(
|
||||
person_pruefer2.nachname || ' ',
|
||||
person_pruefer2.vorname,
|
||||
COALESCE(' ' || person_pruefer2.titelpre)
|
||||
) AS person_pruefer2,
|
||||
CONCAT(
|
||||
person_pruefer3.nachname || ' ',
|
||||
person_pruefer3.vorname,
|
||||
COALESCE(' ' || person_pruefer3.titelpre)
|
||||
) AS person_pruefer3,
|
||||
CONCAT(
|
||||
person_vorsitzender.nachname || ' ',
|
||||
person_vorsitzender.vorname,
|
||||
COALESCE(' ' || person_vorsitzender.titelpre)
|
||||
) AS person_vorsitzender,
|
||||
datum,
|
||||
freigabedatum,
|
||||
sponsion,
|
||||
uhrzeit,
|
||||
person_pruefer1.nachname as p1_nachname,
|
||||
person_pruefer2.nachname as p2_nachname,
|
||||
person_pruefer3.nachname as p3_nachname,
|
||||
person_vorsitzender.nachname as vorsitz_nachname,
|
||||
beurteilung.bezeichnung as beurteilung_bezeichnung,
|
||||
antritt.bezeichnung as antritt_bezeichnung
|
||||
FROM
|
||||
lehre.tbl_abschlusspruefung exam
|
||||
JOIN lehre.tbl_pruefungstyp USING (pruefungstyp_kurzbz)
|
||||
LEFT JOIN public.tbl_benutzer ben_vorsitzender ON (ben_vorsitzender.uid = vorsitz)
|
||||
LEFT JOIN public.tbl_person person_vorsitzender ON (ben_vorsitzender.person_id = person_vorsitzender.person_id)
|
||||
LEFT JOIN public.tbl_person person_pruefer1 ON (person_pruefer1.person_id = pruefer1)
|
||||
LEFT JOIN public.tbl_person person_pruefer2 ON (person_pruefer2.person_id = pruefer2)
|
||||
LEFT JOIN public.tbl_person person_pruefer3 ON (person_pruefer3.person_id = pruefer3)
|
||||
LEFT JOIN lehre.tbl_abschlussbeurteilung beurteilung USING (abschlussbeurteilung_kurzbz)
|
||||
LEFT JOIN lehre.tbl_abschlusspruefung_antritt antritt USING (pruefungsantritt_kurzbz)
|
||||
WHERE student_uid = ?
|
||||
ORDER BY exam.datum DESC
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, array('student_uid' => $student_uid));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Akadgrad_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_akadgrad';
|
||||
$this->pk = 'akadgrad_id';
|
||||
}
|
||||
}
|
||||
@@ -202,4 +202,66 @@ class Anrechnung_model extends DB_Model
|
||||
return success();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Anrechnungsdata for Table Anrechnungen
|
||||
*
|
||||
* @param $prestudent_id
|
||||
* @return array
|
||||
*/
|
||||
public function getAnrechnungsData($prestudent_id)
|
||||
{
|
||||
$qry = '
|
||||
SELECT
|
||||
lehre.tbl_anrechnung.anrechnung_id,
|
||||
lehre.tbl_anrechnung.prestudent_id,
|
||||
lehre.tbl_anrechnung.lehrveranstaltung_id,
|
||||
lehre.tbl_lehrveranstaltung.bezeichnung AS bez_lehrveranstaltung,
|
||||
lehre.tbl_anrechnung_begruendung.bezeichnung AS begruendung,
|
||||
lehre.tbl_anrechnung_anrechnungstatus.status_kurzbz AS status,
|
||||
genehmigt_von,
|
||||
lehre.tbl_anrechnung.insertamum,
|
||||
lehre.tbl_anrechnung.insertvon,
|
||||
lehre.tbl_anrechnung.updateamum,
|
||||
lehre.tbl_anrechnung.updatevon,
|
||||
lehrveranstaltung_id_kompatibel,
|
||||
lv_comp.bezeichnung as lehrveranstaltung_bez_kompatibel,
|
||||
count(nz.notizzuordnung_id) AS notizen_anzahl
|
||||
FROM
|
||||
lehre.tbl_anrechnung
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung lv_comp ON (lehre.tbl_anrechnung.lehrveranstaltung_id_kompatibel = lv_comp.lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_anrechnung_begruendung USING (begruendung_id)
|
||||
LEFT JOIN lehre.tbl_anrechnung_anrechnungstatus ON (lehre.tbl_anrechnung_anrechnungstatus.anrechnung_id = lehre.tbl_anrechnung.anrechnung_id)
|
||||
AND lehre.tbl_anrechnung_anrechnungstatus.insertamum = (
|
||||
SELECT MAX(insertamum)
|
||||
FROM lehre.tbl_anrechnung_anrechnungstatus
|
||||
WHERE anrechnung_id = lehre.tbl_anrechnung.anrechnung_id
|
||||
)
|
||||
LEFT JOIN lehre.tbl_anrechnungstatus USING (status_kurzbz)
|
||||
LEFT JOIN public.tbl_notizzuordnung nz ON (nz.anrechnung_id = lehre.tbl_anrechnung.anrechnung_id)
|
||||
WHERE
|
||||
lehre.tbl_anrechnung.prestudent_id = ?
|
||||
GROUP BY
|
||||
nz.anrechnung_id,
|
||||
lehre.tbl_anrechnung.anrechnung_id,
|
||||
lehre.tbl_anrechnung.prestudent_id,
|
||||
lehre.tbl_anrechnung.lehrveranstaltung_id,
|
||||
bez_lehrveranstaltung,
|
||||
begruendung,
|
||||
status,
|
||||
genehmigt_von,
|
||||
lehre.tbl_anrechnung.insertamum,
|
||||
lehre.tbl_anrechnung.insertvon,
|
||||
lehre.tbl_anrechnung.updateamum,
|
||||
lehre.tbl_anrechnung.updatevon,
|
||||
lehrveranstaltung_id_kompatibel,
|
||||
lehrveranstaltung_bez_kompatibel
|
||||
ORDER BY
|
||||
lehre.tbl_anrechnung.updateamum ASC
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, array($prestudent_id));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
class Anrechnunganrechnungstatus_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_anrechnung_anrechnungstatus';
|
||||
$this->pk = 'anrechnungstatus_id';
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,193 @@ class Anwesenheit_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_anwesenheit';
|
||||
$this->pk = 'anwesenheit_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die Anwesenheiten in Prozent von Studierenden bei Lehrveranstaltungen
|
||||
* Wenn die StudentUID uebergeben wird, werden alle Lehrveranstaltungen zu denen der Studierenden zugeteilt ist inkl Prozent der Anwesenheit
|
||||
* Wenn die LehrveranstaltungID uebergeben wird, werden alle Studierenden geholt die zugeteilt sind inkl Prozent der Anwesenheit
|
||||
* Es werden pro Student die Anwesenheiten berechnet aufgrund der Lehreinheit zu der sie zugeordnet sind
|
||||
*
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param string|null (optional) $student_uid
|
||||
* @param integer|null (optional) $lehrveranstaltung_id
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadAnwesenheitStudiensemester($studiensemester_kurzbz, $student_uid = null, $lehrveranstaltung_id = null)
|
||||
{
|
||||
$this->addSelect("vorname");
|
||||
$this->addSelect("nachname");
|
||||
$this->addSelect("wahlname");
|
||||
$this->addSelect("lehrveranstaltung_id");
|
||||
$this->addSelect("bezeichnung");
|
||||
$this->addSelect("gruppe");
|
||||
$this->addSelect("student_uid AS uid");
|
||||
$this->addSelect("COUNT(stundenplan_id) AS gesamtstunden");
|
||||
$this->addSelect("COALESCE(anwesend.summe, 0) AS anwesend");
|
||||
$this->addSelect("COALESCE(nichtanwesend.summe, 0) AS nichtanwesend");
|
||||
$this->addSelect("COALESCE(anwesend.summe, 0) + COALESCE(nichtanwesend.summe, 0) AS erfassteanwesenheit");
|
||||
$this->addSelect("CASE
|
||||
WHEN COUNT(stundenplan_id) = 0 OR COALESCE(anwesend.summe, 0) + COALESCE(nichtanwesend.summe, 0) = 0
|
||||
THEN 100
|
||||
ELSE TRUNC(100-(100/COUNT(stundenplan_id)*COALESCE(nichtanwesend.summe, 0)), 2)
|
||||
END AS prozent");
|
||||
|
||||
|
||||
$this->db->join("(
|
||||
SELECT
|
||||
semester::text AS gruppe,
|
||||
public.tbl_studentlehrverband.studiensemester_kurzbz,
|
||||
student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_studentlehrverband
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
semester || verband AS gruppe,
|
||||
public.tbl_studentlehrverband.studiensemester_kurzbz,
|
||||
student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_studentlehrverband
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
semester || verband || gruppe AS gruppe,
|
||||
public.tbl_studentlehrverband.studiensemester_kurzbz,
|
||||
student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_studentlehrverband
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
gruppe_kurzbz AS gruppe,
|
||||
public.tbl_benutzergruppe.studiensemester_kurzbz,
|
||||
uid AS student_uid,
|
||||
studiengang_kz
|
||||
FROM public.tbl_benutzergruppe
|
||||
JOIN public.tbl_gruppe USING (gruppe_kurzbz)
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
) a", "gruppe,studiensemester_kurzbz,studiengang_kz", "", false);
|
||||
$this->addJoin("public.tbl_benutzer b", "b.uid = student_uid");
|
||||
$this->addJoin("public.tbl_person p", "person_id");
|
||||
$this->db->join("(
|
||||
SELECT
|
||||
lehrveranstaltung_id,
|
||||
studiensemester_kurzbz, uid AS student_uid,
|
||||
SUM(einheiten) AS summe
|
||||
FROM campus.tbl_anwesenheit a
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
WHERE anwesend = TRUE
|
||||
AND studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
GROUP BY
|
||||
lehrveranstaltung_id,
|
||||
bezeichnung,
|
||||
uid,
|
||||
studiensemester_kurzbz
|
||||
) anwesend", "lehrveranstaltung_id,student_uid,studiensemester_kurzbz", "LEFT", false);
|
||||
$this->db->join("(
|
||||
SELECT
|
||||
lehrveranstaltung_id,
|
||||
studiensemester_kurzbz,
|
||||
uid AS student_uid,
|
||||
SUM(einheiten) AS summe
|
||||
FROM campus.tbl_anwesenheit a
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
WHERE anwesend = FALSE
|
||||
AND studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
GROUP BY
|
||||
lehrveranstaltung_id, bezeichnung, uid, studiensemester_kurzbz
|
||||
) nichtanwesend", "lehrveranstaltung_id,student_uid,studiensemester_kurzbz", "LEFT", false);
|
||||
|
||||
$this->addGroupBy("vorname");
|
||||
$this->addGroupBy("nachname");
|
||||
$this->addGroupBy("wahlname");
|
||||
$this->addGroupBy("lehrveranstaltung_id");
|
||||
$this->addGroupBy("bezeichnung");
|
||||
$this->addGroupBy("gruppe");
|
||||
$this->addGroupBy("student_uid");
|
||||
$this->addGroupBy("anwesend.summe");
|
||||
$this->addGroupBy("nichtanwesend.summe");
|
||||
|
||||
|
||||
$where = [
|
||||
"lehrveranstaltung_id >" => 0
|
||||
];
|
||||
|
||||
if ($student_uid)
|
||||
$where["student_uid"] = $student_uid;
|
||||
|
||||
if ($lehrveranstaltung_id)
|
||||
$where["lehrveranstaltung_id"] = $lehrveranstaltung_id;
|
||||
|
||||
if ($lehrveranstaltung_id) {
|
||||
$this->addOrder("nachname");
|
||||
$this->addOrder("vorname");
|
||||
} elseif ($student_uid) {
|
||||
$this->addOrder("bezeichnung");
|
||||
}
|
||||
|
||||
|
||||
$tmp = $this->dbTable;
|
||||
|
||||
$this->dbTable = "(
|
||||
SELECT
|
||||
SUM(stundenplan_id) AS stundenplan_id,
|
||||
datum,
|
||||
stunde,
|
||||
lehrveranstaltung_id,
|
||||
bezeichnung,
|
||||
studiensemester_kurzbz,
|
||||
studiengang_kz,
|
||||
TRIM(
|
||||
CASE
|
||||
WHEN stp.gruppe_kurzbz IS NOT NULL
|
||||
THEN stp.gruppe_kurzbz
|
||||
ELSE stp.semester || (
|
||||
CASE
|
||||
WHEN verband IS NULL
|
||||
THEN ''
|
||||
ELSE stp.verband
|
||||
END
|
||||
) || (
|
||||
CASE
|
||||
WHEN stp.gruppe IS NULL
|
||||
THEN ''
|
||||
ELSE stp.gruppe
|
||||
END
|
||||
)
|
||||
END
|
||||
) AS gruppe
|
||||
FROM lehre.tbl_lehrveranstaltung lv
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_stundenplan stp USING (lehreinheit_id,studiengang_kz)
|
||||
WHERE studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
AND (titel NOT LIKE '%Nebenprüfung%' OR titel IS NULL)
|
||||
GROUP BY
|
||||
datum,
|
||||
stunde,
|
||||
lehrveranstaltung_id,
|
||||
bezeichnung,
|
||||
studiensemester_kurzbz,
|
||||
studiengang_kz,
|
||||
stp.gruppe_kurzbz,
|
||||
stp.semester,
|
||||
stp.verband,
|
||||
stp.gruppe
|
||||
) x";
|
||||
|
||||
$result = $this->loadWhere($where);
|
||||
|
||||
$this->dbTable = $tmp;
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,45 @@ class LePruefung_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_pruefung';
|
||||
$this->pk = 'pruefung_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* gets all Pruefungen for a student_uid
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getPruefungenByStudentuid($student_uid, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$this->addSelect('tbl_pruefung.datum');
|
||||
$this->addSelect("TO_CHAR(tbl_pruefung.datum::timestamp, 'DD.MM.YYYY') AS format_datum");
|
||||
$this->addSelect('tbl_pruefung.anmerkung');
|
||||
$this->addSelect('tbl_pruefung.pruefungstyp_kurzbz');
|
||||
$this->addSelect('tbl_pruefung.pruefung_id');
|
||||
$this->addSelect('tbl_pruefung.lehreinheit_id');
|
||||
$this->addSelect('tbl_pruefung.student_uid');
|
||||
$this->addSelect('tbl_pruefung.mitarbeiter_uid');
|
||||
$this->addSelect('tbl_pruefung.punkte');
|
||||
|
||||
$this->addSelect('tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung');
|
||||
$this->addSelect('tbl_lehrveranstaltung.lehrveranstaltung_id');
|
||||
$this->addSelect('tbl_note.bezeichnung as note_bezeichnung');
|
||||
$this->addSelect('tbl_pruefungstyp.beschreibung as typ_beschreibung');
|
||||
$this->addSelect('tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz');
|
||||
|
||||
$this->addJoin('lehre.tbl_lehreinheit', 'lehre.tbl_pruefung.lehreinheit_id=lehre.tbl_lehreinheit.lehreinheit_id');
|
||||
$this->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id');
|
||||
$this->addJoin('lehre.tbl_note', 'note');
|
||||
$this->addJoin('lehre.tbl_pruefungstyp', 'pruefungstyp_kurzbz');
|
||||
|
||||
if ($studiensemester_kurzbz)
|
||||
$this->db->where("tbl_lehreinheit.studiensemester_kurzbz = ", $studiensemester_kurzbz);
|
||||
|
||||
$this->addOrder('tbl_pruefung.datum', 'DESC');
|
||||
$this->addOrder('tbl_pruefung.pruefung_id', 'DESC');
|
||||
|
||||
return $this->loadWhere([
|
||||
'student_uid' => $student_uid
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,10 +28,15 @@ class Lehreinheit_model extends DB_Model
|
||||
{
|
||||
$lehreinheiten = array();
|
||||
|
||||
$this->addSelect(
|
||||
'lehreinheit_id, lehrveranstaltung_id, studiensemester_kurzbz, lehrform_kurzbz,
|
||||
stundenblockung, wochenrythmus, start_kw, raumtyp, raumtypalternativ,
|
||||
sprache, lehre, unr, lvnr, lehrfach_id, gewicht'
|
||||
);
|
||||
$this->addOrder('lehreinheit_id');
|
||||
$les = $this->loadWhere(
|
||||
array('lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'studiensemester_kurzbz' => $studiensemester)
|
||||
'studiensemester_kurzbz' => $studiensemester)
|
||||
);
|
||||
|
||||
if (hasData($les))
|
||||
@@ -113,4 +118,194 @@ class Lehreinheit_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($lehreinheit_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets emails of all Studierende in a lehrveranstaltung
|
||||
* @param int $lehreinheit_id
|
||||
* @return array
|
||||
*/
|
||||
public function getStudentenMail($lehreinheit_id)
|
||||
{
|
||||
|
||||
// logic used from cis_menu_lv.inc.php line 335
|
||||
return $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
gruppe_kurzbz,
|
||||
CASE
|
||||
WHEN nomail = TRUE THEN 'nomail'
|
||||
WHEN gruppe_kurzbz !='' THEN LOWER(gruppe_kurzbz || '@' || ?)
|
||||
ELSE LOWER(stg_typ || stg_kurzbz || semester || TRIM(verband) || TRIM(gruppe) || '@' || ?)
|
||||
END AS mail
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
distinct vw_lehreinheit.studiensemester_kurzbz, vw_lehreinheit.stg_kurzbz, vw_lehreinheit.stg_typ, vw_lehreinheit.semester,
|
||||
COALESCE(vw_lehreinheit.verband,'') as verband, COALESCE(vw_lehreinheit.gruppe,'') as gruppe, vw_lehreinheit.gruppe_kurzbz, tbl_gruppe.mailgrp,
|
||||
CASE
|
||||
WHEN mailgrp = TRUE OR mailgrp IS NULL THEN FALSE
|
||||
ELSE TRUE
|
||||
END as nomail
|
||||
FROM campus.vw_lehreinheit
|
||||
LEFT JOIN public.tbl_gruppe USING(gruppe_kurzbz)
|
||||
WHERE
|
||||
vw_lehreinheit.lehrveranstaltung_id=
|
||||
(select distinct lehrveranstaltung_id from campus.vw_lehreinheit where lehreinheit_id=?)
|
||||
AND
|
||||
vw_lehreinheit.studiensemester_kurzbz =
|
||||
(select distinct studiensemester_kurzbz from campus.vw_lehreinheit where lehreinheit_id=?)
|
||||
AND (vw_lehreinheit.gruppe_kurzbz IS NULL OR
|
||||
(vw_lehreinheit.gruppe_kurzbz IS NOT NULL AND (SELECT COUNT(*) FROM public.tbl_benutzergruppe where gruppe_kurzbz = vw_lehreinheit.gruppe_kurzbz AND studiensemester_kurzbz = vw_lehreinheit.studiensemester_kurzbz) > 0))
|
||||
|
||||
|
||||
) AS subquery
|
||||
",[DOMAIN,DOMAIN,$lehreinheit_id,$lehreinheit_id ]);
|
||||
}
|
||||
|
||||
public function getLehreinheitenForStudentAndStudienSemester($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz)
|
||||
{
|
||||
$query = <<<EOSQL
|
||||
SELECT
|
||||
le.*
|
||||
FROM
|
||||
lehre.tbl_lehreinheit le
|
||||
JOIN
|
||||
campus.vw_student_lehrveranstaltung vslv USING(lehreinheit_id)
|
||||
WHERE
|
||||
vslv.lehrveranstaltung_id = {$this->escape($lehrveranstaltung_id)} AND
|
||||
vslv.uid = {$this->escape($student_uid)} AND
|
||||
vslv.studiensemester_kurzbz = {$this->escape($studiensemester_kurzbz)}
|
||||
EOSQL;
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function getLehrfachIdMitarbeiter($angezeigtes_stsem,$user,$lvid)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
distinct lehrfach_id
|
||||
FROM
|
||||
lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
||||
WHERE
|
||||
studiensemester_kurzbz=" . $this->escape($angezeigtes_stsem) . "
|
||||
AND mitarbeiter_uid=" . $this->escape($user)."
|
||||
AND lehrveranstaltung_id=" . $this->escape(intval($lvid));
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function getLehrfachIdStudierender($angezeigtes_stsem,$user,$lvid)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
distinct lehrfach_id
|
||||
FROM
|
||||
campus.vw_student_lehrveranstaltung
|
||||
WHERE
|
||||
lehrveranstaltung_id=" . $this->escape(intval($lvid))."
|
||||
AND studiensemester_kurzbz=" . $this->escape($angezeigtes_stsem)."
|
||||
AND uid=" . $this->escape($user);
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function getLehreinheitInfo($lvid, $angezeigtes_stsem, $lehrfach_id)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
*
|
||||
FROM (
|
||||
SELECT
|
||||
distinct on(uid) vorname, nachname, tbl_benutzer.uid as uid,
|
||||
CASE
|
||||
WHEN lehrfunktion_kurzbz='LV-Leitung' THEN true
|
||||
ELSE false
|
||||
END as lvleiter
|
||||
FROM
|
||||
lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter,
|
||||
public.tbl_benutzer, public.tbl_person
|
||||
WHERE
|
||||
tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitmitarbeiter.lehreinheit_id
|
||||
AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid = tbl_benutzer.uid
|
||||
AND tbl_person.person_id = tbl_benutzer.person_id
|
||||
AND lehrveranstaltung_id = " . $this->escape(intval($lvid)) . "
|
||||
AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%'
|
||||
AND tbl_benutzer.aktiv = true
|
||||
AND tbl_person.aktiv = true
|
||||
AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem);
|
||||
|
||||
if($lehrfach_id != '')
|
||||
{
|
||||
$query .= " AND tbl_lehreinheit.lehrfach_id = " . $this->escape(intval($lehrfach_id));
|
||||
}
|
||||
|
||||
$query .= " ORDER BY uid, lvleiter desc) as a ORDER BY lvleiter desc, nachname, vorname";
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Lehreinheiten for Lehrveranstaltungen in a Studiensemester.
|
||||
* Without using tbl_lehrfach: bezeichnung and kurzbz ALWAYS from lehrveranstaltung
|
||||
* @param $lehrveranstaltung_id
|
||||
* @param $studiensemester
|
||||
* @return array with Lehreinheiten and their Lehreinheitgruppen
|
||||
*/
|
||||
public function getLesFromLvIds($lehrveranstaltung_id, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$params = array($lehrveranstaltung_id);
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
lv.lehrveranstaltung_id,
|
||||
le.lehreinheit_id,
|
||||
le.lehrform_kurzbz,
|
||||
lv.kurzbz,
|
||||
lv.bezeichnung,
|
||||
lv.semester,
|
||||
(
|
||||
SELECT
|
||||
STRING_AGG(CONCAT(leg.semester, leg.verband, leg.gruppe), ' ')
|
||||
FROM lehre.tbl_lehreinheitgruppe leg
|
||||
WHERE leg.lehreinheit_id = le.lehreinheit_id
|
||||
) AS gruppe,
|
||||
STRING_AGG(tma.kurzbz, ' ') as kuerzel
|
||||
FROM
|
||||
lehre.tbl_lehreinheit le
|
||||
JOIN
|
||||
lehre.tbl_lehrveranstaltung lv ON lv.lehrveranstaltung_id = le.lehrveranstaltung_id
|
||||
JOIN
|
||||
lehre.tbl_lehreinheitmitarbeiter ma USING (lehreinheit_id)
|
||||
JOIN
|
||||
public.tbl_mitarbeiter tma USING (mitarbeiter_uid)
|
||||
WHERE
|
||||
lv.lehrveranstaltung_id = ?
|
||||
";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$query .= " AND le.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$query .="
|
||||
GROUP BY
|
||||
lv.lehrveranstaltung_id,
|
||||
le.lehreinheit_id,
|
||||
le.lehrform_kurzbz,
|
||||
lv.kurzbz,
|
||||
lv.bezeichnung,
|
||||
lv.semester
|
||||
ORDER BY
|
||||
le.lehreinheit_id;
|
||||
";
|
||||
|
||||
return $this->execQuery($query, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,4 +41,38 @@ class Lehreinheitmitarbeiter_model extends DB_Model
|
||||
return error ('Incorrect parameter type');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getForLv($lehrveranstaltung_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect('ma.uid, ma.vorname, ma.nachname, ma.titelpre, ma.titelpost, lehrfunktion_kurzbz');
|
||||
$this->addGroupBy('ma.uid, ma.vorname, ma.nachname, ma.titelpre, ma.titelpost, lehrfunktion_kurzbz');
|
||||
|
||||
$this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
||||
$this->addJoin('campus.vw_mitarbeiter ma', $this->dbTable . '.mitarbeiter_uid=ma.uid');
|
||||
|
||||
$this->addOrder('nachname');
|
||||
$this->addOrder('vorname');
|
||||
|
||||
if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
|
||||
{
|
||||
$this->addJoin('(SELECT vertrag_id, CASE WHEN vertragsstatus_kurzbz=\'storno\' THEN 0 WHEN vertragsstatus_kurzbz=\'erteilt\' THEN 1 ELSE 2 END AS vertragsstatus_kurzbz FROM lehre.tbl_vertrag_vertragsstatus) v', 'vertrag_id', 'LEFT');
|
||||
$having = $this->db->compile_binds('(EXISTS (SELECT 1 FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=? AND tbl_studiensemester.start < (SELECT start FROM public.tbl_studiensemester stsem WHERE stsem.studiensemester_kurzbz=?)) OR MIN(vertragsstatus_kurzbz)=1)', [
|
||||
$studiensemester_kurzbz,
|
||||
CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON
|
||||
]);
|
||||
$this->db->having($having);
|
||||
}
|
||||
|
||||
return $this->loadWhere([
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class LehrveranstaltungFaktor_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_lehrveranstaltung_faktor';
|
||||
$this->pk = 'lehrveranstaltung_faktor_id';
|
||||
}
|
||||
}
|
||||
@@ -16,145 +16,21 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lehrveranstaltungen by eventQuery string. Use with autocomplete event queries.
|
||||
* @param $eventQuery String
|
||||
* @param string $studiensemester_kurzbz Filter by Studiensemester
|
||||
* @param array $oes Filter by Organisationseinheiten
|
||||
* @return array
|
||||
*/
|
||||
public function getAutocompleteSuggestions($eventQuery, $studiensemester_kurzbz = null, $oes = null)
|
||||
{
|
||||
$subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes);
|
||||
$params = [];
|
||||
|
||||
/* filter by input string */
|
||||
if (is_string($eventQuery)) {
|
||||
$subQry.= ' AND lv.bezeichnung ILIKE ?';
|
||||
$params[] = '%' . $eventQuery . '%';
|
||||
}
|
||||
|
||||
$qry = 'SELECT DISTINCT ON (lehrveranstaltung_id) * FROM ('. $subQry. ') AS tmp';
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lehrveranstaltungen with its Stg, OE and OE-type.
|
||||
* Filter by Studiensemester and Organisationseinheiten if necessary.
|
||||
* @param $eventQuery String
|
||||
* @param string $studiensemester_kurzbz Filter by Studiensemester
|
||||
* @param array $oes Filter by Organisationseinheiten
|
||||
* @param array $lv_ids Filter by Lehrveranstaltung-Ids
|
||||
* @return array
|
||||
*/
|
||||
public function getLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lv_ids = null)
|
||||
{
|
||||
$subQry = $this->_getQryLvsByStudienplan($studiensemester_kurzbz, $oes);
|
||||
$qry = 'SELECT * FROM ('. $subQry. ') AS tmp';
|
||||
|
||||
if (isset($lv_ids) && is_array($lv_ids))
|
||||
{
|
||||
/* filter by lv_ids */
|
||||
$implodedLvIds = "'". implode("', '", $lv_ids). "'";
|
||||
$qry.= ' WHERE lehrveranstaltung_id IN ('. $implodedLvIds. ')';
|
||||
}
|
||||
|
||||
$qry.= ' ORDER BY stg_typ_kurzbz, orgform_kurzbz DESC';
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get basic query to retrieve Lehrveranstaltungen according to the Orgforms and Ausbildungssemesters actual Studienplan.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function _getQryLvsByStudienplan($studiensemester_kurzbz = null, $oes = null, $lehrtyp_kurzbz = 'lv')
|
||||
{
|
||||
$qry = '
|
||||
SELECT
|
||||
lv.oe_kurzbz AS lv_oe_kurzbz,
|
||||
CASE
|
||||
WHEN oe.organisationseinheittyp_kurzbz = \'Kompetenzfeld\' THEN (\'KF \' || oe.bezeichnung)
|
||||
WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung)
|
||||
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
|
||||
END AS lv_oe_bezeichnung,
|
||||
stplsem.studiensemester_kurzbz,
|
||||
studienordnung_id,
|
||||
sto.studiengang_kz,
|
||||
stpl.studienplan_id,
|
||||
stplsem.semester,
|
||||
stpl.orgform_kurzbz,
|
||||
upper(stg.typ || stg.kurzbz) AS stg_typ_kurzbz,
|
||||
stg.bezeichnung AS stg_bezeichnung,
|
||||
stgtyp.bezeichnung AS stg_typ_bezeichnung,
|
||||
lv.lehrveranstaltung_id,
|
||||
lv.semester,
|
||||
lv.bezeichnung AS lv_bezeichnung,
|
||||
(
|
||||
-- comma seperated string of all lehreinheitgruppen
|
||||
SELECT string_agg(bezeichnung, \', \') AS lehreinheitgruppe_bezeichnung
|
||||
FROM(
|
||||
-- distinct bezeichnung, as may come multiple times from different lehreinheiten
|
||||
SELECT DISTINCT ON (studiengang_kz, bezeichnung) studiengang_kz, bezeichnung FROM
|
||||
(
|
||||
-- distinct lehreinheitgruppe, as may come multiple times from different lehrform
|
||||
SELECT DISTINCT ON (legr.lehreinheitgruppe_id) legr.studiengang_kz,
|
||||
-- get Spezialgruppe or Lehrverbandgruppe
|
||||
COALESCE(
|
||||
legr.gruppe_kurzbz,
|
||||
CONCAT( UPPER(stg1.typ), UPPER(stg1.kurzbz), \'-\', legr.semester, legr.verband, legr.gruppe )
|
||||
) as bezeichnung
|
||||
FROM lehre.tbl_lehreinheitgruppe legr
|
||||
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv1 USING (lehrveranstaltung_id)
|
||||
JOIN public.tbl_studiengang stg1 ON stg1.studiengang_kz = legr.studiengang_kz
|
||||
WHERE lv1.lehrveranstaltung_id = lv.lehrveranstaltung_id
|
||||
AND le.studiensemester_kurzbz = stplsem.studiensemester_kurzbz
|
||||
) AS lehreinheitgruppen
|
||||
GROUP BY studiengang_kz, bezeichnung
|
||||
ORDER BY studiengang_kz DESC
|
||||
) AS uniqueLehreinheitgruppen_bezeichnung
|
||||
) AS lehreinheitgruppen_bezeichnung
|
||||
FROM
|
||||
lehre.tbl_studienplan stpl
|
||||
JOIN lehre.tbl_studienordnung sto USING (studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester stplsem USING (studienplan_id)
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung stpllv ON (stpllv.studienplan_id = stpl.studienplan_id AND stpllv.semester = stplsem.semester)
|
||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
|
||||
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz
|
||||
JOIN public.tbl_studiengangstyp stgtyp ON stgtyp.typ = stg.typ
|
||||
/* filter by lehrtyp_kurzbz, default is lvs only */
|
||||
WHERE
|
||||
lehrtyp_kurzbz = '. $this->db->escape($lehrtyp_kurzbz);
|
||||
|
||||
if (isset($studiensemester_kurzbz) && is_string($studiensemester_kurzbz))
|
||||
{
|
||||
/* filter by studiensemester */
|
||||
$qry.= ' AND stplsem.studiensemester_kurzbz = '. $this->db->escape($studiensemester_kurzbz);
|
||||
|
||||
}
|
||||
|
||||
if (isset($oes) && is_array($oes))
|
||||
{
|
||||
/* filter by organisationseinheit */
|
||||
$implodedOes = "'". implode("', '", $oes). "'";
|
||||
$qry.= ' AND lv.oe_kurzbz IN ('. $implodedOes. ')';
|
||||
}
|
||||
|
||||
return $qry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Templates and union with all Lehrveranstaltungen of given Studiensemester and Oes, that are assigned to
|
||||
* a template. This data structure can be used for nested tabulator data tree.
|
||||
* Get all Templates and its assigned Lehrveranstaltungen of given Studiensemester and Oes.
|
||||
* Lvs are queried via actual Studienordnung and Studienplan.
|
||||
*
|
||||
* @param null|string $studiensemester_kurzbz
|
||||
* @param null|array $oes
|
||||
* @param null $lehrveranstaltung_id Queries certain LV only
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
public function getTemplateLvTree($studiensemester_kurzbz = null, $oes = null){
|
||||
public function getTemplateLvTree($studiensemester_kurzbz = null, $oes = null, $studienjahr_kurzbz = null){
|
||||
|
||||
if (is_string($studiensemester_kurzbz) && is_string($studienjahr_kurzbz))
|
||||
{
|
||||
return error('Query not possible for both studiensemester and studienjahr');
|
||||
}
|
||||
|
||||
$params = [];
|
||||
$qry = '
|
||||
WITH
|
||||
@@ -189,6 +65,17 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
|
||||
}
|
||||
|
||||
if (is_string($studienjahr_kurzbz)) {
|
||||
/* filter by studiensemester */
|
||||
$params[] = $studienjahr_kurzbz;
|
||||
$qry .= '
|
||||
AND stplsem.studiensemester_kurzbz IN (
|
||||
SELECT studiensemester_kurzbz
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studienjahr_kurzbz = ?
|
||||
)';
|
||||
}
|
||||
|
||||
if (is_array($oes))
|
||||
{
|
||||
/* filter by organisationseinheit */
|
||||
@@ -300,7 +187,15 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
JOIN public.tbl_studiengangstyp stgtyp ON stgtyp.typ = stg.typ
|
||||
JOIN public.tbl_organisationseinheit oe ON oe.oe_kurzbz = lv.oe_kurzbz
|
||||
ORDER BY
|
||||
oe.bezeichnung, lv.semester, lv.bezeichnung
|
||||
-- Sort by lv.bezeichnung
|
||||
lv.bezeichnung,
|
||||
-- Within each group, ensure templates appear first
|
||||
CASE
|
||||
WHEN lv.lehrtyp_kurzbz = \'tpl\' THEN 0
|
||||
ELSE 1
|
||||
END,
|
||||
-- Ensure assigend lvs follow their template, grouped by lehrveranstaltung_template_id
|
||||
COALESCE(lv.lehrveranstaltung_template_id, lv.lehrveranstaltung_id)
|
||||
';
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
@@ -517,33 +412,139 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
/**
|
||||
* Gets Lehrveranstaltungen of a student
|
||||
* @param $student_uid
|
||||
* @param null $studiensemester_kurzbz
|
||||
* @param $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=?";
|
||||
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 .= " AND studiensemester_kurzbz=?";
|
||||
}
|
||||
$qry .= ") OR lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM lehre.tbl_zeugnisnote WHERE student_uid=?";
|
||||
$qry .= ")";
|
||||
|
||||
$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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Lehrveranstaltungen of a student with grades if available
|
||||
*
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param string|null $sprache
|
||||
* @param number|null $lvid - returns only information about that single lv if the parameter is set
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLvsByStudentWithGrades($student_uid, $studiensemester_kurzbz, $sprache = null, $lvid=null)
|
||||
{
|
||||
|
||||
$this->addDistinct();
|
||||
// TODO(chris): selects
|
||||
/*
|
||||
semester (?)
|
||||
module
|
||||
bezeichnung
|
||||
sg_bezeichnung
|
||||
studiengang_kuerzel
|
||||
lvnote
|
||||
znote
|
||||
studiengang_kz
|
||||
lehrveranstaltung_id
|
||||
benotung
|
||||
lvinfo
|
||||
farbe
|
||||
|
||||
sprache (?)
|
||||
ects (?)
|
||||
incoming (?)
|
||||
orgform_kurzbz (?)
|
||||
*/
|
||||
// TODO(chris): module or kf
|
||||
#$this->addSelect($this->dbTable . '.*');
|
||||
#$this->addSelect('v.*');
|
||||
$this->addSelect($this->dbTable . '.benotung');
|
||||
$this->addSelect($this->dbTable . '.lvinfo');
|
||||
$this->addSelect($this->dbTable . '.farbe');
|
||||
$this->addSelect($this->dbTable . '.incoming');
|
||||
$this->addSelect($this->dbTable . '.orgform_kurzbz');
|
||||
$this->addSelect('v.studiengang_kz');
|
||||
$this->addSelect('v.lehrveranstaltung_id');
|
||||
$this->addSelect('v.semester');
|
||||
|
||||
$this->addSelect('v.sprache');
|
||||
$this->addSelect('v.ects');
|
||||
$this->addSelect('znn.positiv');
|
||||
|
||||
#$this->addSelect('splv.module');
|
||||
$this->addSelect('v.bezeichnung AS bezeichnung');
|
||||
$this->addSelect('v.bezeichnung_english AS bezeichnung_eng');
|
||||
$this->addSelect('sg.bezeichnung AS sg_bezeichnung');
|
||||
$this->addSelect('sg.english AS sg_bezeichnung_eng');
|
||||
$this->addSelect('UPPER(sg.typ::VARCHAR(1) || sg.kurzbz) AS studiengang_kuerzel');
|
||||
|
||||
//also adds returns the index of the grade
|
||||
//TODO: ist zeugnissnote immer gleich wie die lvgesamtnote
|
||||
$this->addSelect('COALESCE(zn.note::numeric,gn.note::numeric) as note_index');
|
||||
$this->addSelect('COALESCE(znn.positiv,gnn.positiv) as positiv');
|
||||
$this->addSelect('gnn.bezeichnung_mehrsprachig AS lvnotebez');
|
||||
$this->addSelect('gnn.note AS lvnote');
|
||||
$this->addSelect('znn.bezeichnung_mehrsprachig AS znotebez');
|
||||
$this->addSelect('znn.note AS znote');
|
||||
|
||||
// TODO(chris): Potentielle Anpassung "Eine UID"
|
||||
$this->addJoin('campus.vw_student_lehrveranstaltung v', 'lehrveranstaltung_id');
|
||||
$this->addJoin('public.tbl_studiengang sg', $this->dbTable . '.studiengang_kz = sg.studiengang_kz');
|
||||
$this->db->where("v.lehreverzeichnis<>''");
|
||||
if(isset($lvid))
|
||||
{
|
||||
$this->db->where("v.lehrveranstaltung_id", $lvid);
|
||||
}
|
||||
|
||||
$this->addJoin('campus.tbl_lvgesamtnote gn', 'gn.lehrveranstaltung_id=v.lehrveranstaltung_id AND gn.student_uid=v.uid AND gn.studiensemester_kurzbz=v.studiensemester_kurzbz', 'LEFT');
|
||||
$this->addJoin('lehre.tbl_note gnn', 'gn.note=gnn.note', 'LEFT');
|
||||
|
||||
$this->addJoin('lehre.tbl_zeugnisnote zn', 'zn.lehrveranstaltung_id=v.lehrveranstaltung_id AND zn.student_uid=v.uid AND zn.studiensemester_kurzbz=v.studiensemester_kurzbz', 'LEFT');
|
||||
$this->addJoin('lehre.tbl_note znn', 'zn.note=znn.note', 'LEFT');
|
||||
|
||||
$this->addOrder('bezeichnung');
|
||||
|
||||
/*if (!defined("CIS_PROFIL_STUDIENPLAN_MODULE_AUSBLENDEN") || !CIS_PROFIL_STUDIENPLAN_MODULE_AUSBLENDEN) {
|
||||
$modulebezeichnung = str_replace('v.', 'm.', $lvbezeichnung);
|
||||
$modulesql = '
|
||||
LEFT JOIN lehre.tbl_studienplan_lehrveranstaltung p ON(lv.studienplan_lehrveranstaltung_id_parent=p.studienplan_lehrveranstaltung_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung m ON(m.lehrveranstaltung_id = p.lehrveranstaltung_id)';
|
||||
} else {
|
||||
$modulebezeichnung = 'NULL';
|
||||
$modulesql = '';
|
||||
}
|
||||
|
||||
$this->addJoin('(
|
||||
SELECT lv.lehrveranstaltung_id, sps.studiensemester_kurzbz, so.studiengang_kz, lv.semester, ' . $modulebezeichnung . ' AS module
|
||||
FROM lehre.tbl_studienplan_lehrveranstaltung lv
|
||||
LEFT JOIN lehre.tbl_studienplan sp ON(sp.studienplan_id=lv.studienplan_id)
|
||||
JOIN lehre.tbl_studienplan_semester sps ON(sp.studienplan_id=sps.studienplan_id AND sps.semester=lv.semester)
|
||||
JOIN lehre.tbl_studienordnung so ON(so.studienordnung_id=sp.studienordnung_id)
|
||||
' . $modulesql . '
|
||||
) splv', 'splv.lehrveranstaltung_id=v.lehrveranstaltung_id AND splv.studiensemester_kurzbz=v.studiensemester_kurzbz AND splv.studiengang_kz=v.studiengang_kz', 'LEFT');*/
|
||||
|
||||
return $this->loadWhere(['v.uid' => $student_uid, 'v.lehre' => true, 'v.studiensemester_kurzbz' => $studiensemester_kurzbz]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets valid Lehrveranstaltungen with incoming places for a Studiensemester.
|
||||
* Only
|
||||
@@ -623,6 +624,37 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($query, array($uid, $studiensemester_kurzbz, $lehrveranstaltung_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lehreinheit.
|
||||
*
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param integer $lehrveranstaltung_id
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLeByStudent($student_uid, $studiensemester_kurzbz, $lehrveranstaltung_id)
|
||||
{
|
||||
$this->addSelect("lehreinheit_id");
|
||||
|
||||
$this->addOrder("lehreinheit_id", "ASC");
|
||||
|
||||
$this->addLimit(1);
|
||||
|
||||
$tmp = $this->dbTable;
|
||||
$this->dbTable = "campus.vw_student_lehrveranstaltung";
|
||||
|
||||
$result = $this->loadWhere([
|
||||
"uid" => $student_uid,
|
||||
"lehrveranstaltung_id" => $lehrveranstaltung_id,
|
||||
"studiensemester_kurzbz" => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
$this->dbTable = $tmp;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sucht nach LV Templates und gibt Id und Label ("bezeichnung [kurzbz]") aus
|
||||
* Diese funktion ist für autocomplete gedacht
|
||||
@@ -668,6 +700,28 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if given LV is a template (Quellkurs)
|
||||
*
|
||||
* @param $lehrveranstaltung_id
|
||||
* @return array|stdClass|void
|
||||
*/
|
||||
public function checkIsTemplate($lehrveranstaltung_id)
|
||||
{
|
||||
$this->addSelect('lehrtyp_kurzbz, lehrveranstaltung_template_id');
|
||||
$result = $this->load($lehrveranstaltung_id);
|
||||
|
||||
if (isError($result))
|
||||
return error(getError($result));
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
return success(
|
||||
getData($result)[0]->lehrtyp_kurzbz === 'tpl' &&
|
||||
getData($result)[0]->lehrveranstaltung_template_id === null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ECTS Summe pro angerechnetes Quereinstiegssemester.
|
||||
@@ -785,10 +839,184 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($qry, array($student_uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getKoordinator($lehrveranstaltung_id, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$binds = [
|
||||
$lehrveranstaltung_id,
|
||||
$lehrveranstaltung_id,
|
||||
$lehrveranstaltung_id,
|
||||
$lehrveranstaltung_id
|
||||
];
|
||||
$qry = "
|
||||
SELECT
|
||||
a.uid, vorname, nachname, titelpre, titelpost
|
||||
FROM (
|
||||
SELECT
|
||||
koordinator as uid
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
lehrveranstaltung_id = ?
|
||||
UNION
|
||||
SELECT
|
||||
uid
|
||||
FROM
|
||||
lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehrveranstaltung AS lehrfach ON(tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id)
|
||||
JOIN public.tbl_fachbereich ON(lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz)
|
||||
JOIN public.tbl_benutzerfunktion ON(tbl_fachbereich.fachbereich_kurzbz=tbl_benutzerfunktion.fachbereich_kurzbz)
|
||||
WHERE
|
||||
tbl_benutzerfunktion.funktion_kurzbz='fbk'
|
||||
AND (tbl_benutzerfunktion.datum_von IS null OR tbl_benutzerfunktion.datum_von <= now())
|
||||
AND (tbl_benutzerfunktion.datum_bis IS null OR tbl_benutzerfunktion.datum_bis >= now())
|
||||
AND tbl_lehreinheit.lehrveranstaltung_id = ?
|
||||
AND tbl_benutzerfunktion.oe_kurzbz = (
|
||||
SELECT
|
||||
tbl_studiengang.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
WHERE lehrveranstaltung_id = ?
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
lehrveranstaltung_id
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
lehrveranstaltung_id = ?
|
||||
AND koordinator IS null
|
||||
)
|
||||
";
|
||||
|
||||
if ($studiensemester_kurzbz !== null)
|
||||
{
|
||||
$qry .= " AND tbl_lehreinheit.studiensemester_kurzbz = ?";
|
||||
$binds[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
) AS a
|
||||
JOIN campus.vw_mitarbeiter ON(a.uid=vw_mitarbeiter.uid)
|
||||
WHERE vw_mitarbeiter.aktiv
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, $binds);
|
||||
}
|
||||
|
||||
public function getStg($lehrveranstaltung_id)
|
||||
{
|
||||
$this->addSelect('stg.*');
|
||||
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz');
|
||||
return $this->load($lehrveranstaltung_id);
|
||||
}
|
||||
|
||||
//Berechtigungen auf Fachbereichsebene
|
||||
public function getBerechtigungenAufFachberechsebene($lvid, $angezeigtes_stsem)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
DISTINCT lehrfach.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN
|
||||
lehre.tbl_lehreinheit USING(lehrveranstaltung_id)
|
||||
JOIN
|
||||
lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id)
|
||||
WHERE
|
||||
tbl_lehrveranstaltung.lehrveranstaltung_id = " . $this->escape(intval($lvid));
|
||||
|
||||
if(isset($angezeigtes_stsem) && $angezeigtes_stsem != ''){
|
||||
$query .= " AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem);
|
||||
}
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function getStudentEMail($lvid, $angezeigtes_stsem)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
DISTINCT vw_lehreinheit.stg_kurzbz, vw_lehreinheit.stg_typ,
|
||||
vw_lehreinheit.semester, COALESCE(vw_lehreinheit.verband,'') as verband,
|
||||
COALESCE(vw_lehreinheit.gruppe,'') as gruppe,
|
||||
vw_lehreinheit.gruppe_kurzbz, tbl_gruppe.mailgrp
|
||||
FROM
|
||||
campus.vw_lehreinheit
|
||||
LEFT JOIN
|
||||
public.tbl_gruppe USING(gruppe_kurzbz)
|
||||
WHERE
|
||||
lehrveranstaltung_id = " . $this->escape(intval($lvid)) . "
|
||||
AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem);
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets lehrveranstaltungen of a studiengang
|
||||
* @param integer $studiengang_kz
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLvsByStudiengangkz($studiengang_kz)
|
||||
{
|
||||
$params = array($studiengang_kz);
|
||||
|
||||
$qry = "SELECT
|
||||
*
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id IN
|
||||
(SELECT lehrveranstaltung_id
|
||||
FROM campus.vw_student_lehrveranstaltung
|
||||
WHERE studiengang_kz = ?";
|
||||
|
||||
$qry .= ") ORDER BY semester, bezeichnung";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets lehrveranstaltungen of Studienplan
|
||||
* @param $studienplan_id ID des Studienplans
|
||||
* @param $semester Semester optional
|
||||
* @return array|null
|
||||
*/
|
||||
public function getLvsByStudienplanId($studienplan_id, $semester = null)
|
||||
{
|
||||
$params = array($studienplan_id);
|
||||
|
||||
$qry = "SELECT tbl_lehrveranstaltung.*,
|
||||
tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id,
|
||||
tbl_studienplan_lehrveranstaltung.semester as stpllv_semester,
|
||||
tbl_studienplan_lehrveranstaltung.pflicht as stpllv_pflicht,
|
||||
tbl_studienplan_lehrveranstaltung.koordinator as stpllv_koordinator,
|
||||
tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent,
|
||||
tbl_studienplan_lehrveranstaltung.sort stpllv_sort,
|
||||
tbl_studienplan_lehrveranstaltung.curriculum,
|
||||
tbl_studienplan_lehrveranstaltung.export,
|
||||
tbl_studienplan_lehrveranstaltung.genehmigung
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung
|
||||
USING(lehrveranstaltung_id)
|
||||
WHERE tbl_studienplan_lehrveranstaltung.studienplan_id = ?
|
||||
";
|
||||
|
||||
if ($semester !== null)
|
||||
{
|
||||
$qry.= " AND tbl_studienplan_lehrveranstaltung.semester = ?";
|
||||
$params[] = $semester;
|
||||
}
|
||||
|
||||
$qry .= " ORDER BY stpllv_sort, semester, sort";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,39 @@ class Lvangebot_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_lvangebot';
|
||||
$this->pk = 'lvangebot_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob eine Abmeldung von einer Lehrveranstaltung moeglich ist
|
||||
* und liefert die Gruppen von denen sich abgemeldet werden kann
|
||||
* @param $lehrveranstaltung_id
|
||||
* @param $studiensemester_kurzbz
|
||||
* @param $uid
|
||||
* @return $gruppen Array mit den Gruppen
|
||||
*/
|
||||
public function AbmeldungMoeglich($lehrveranstaltung_id, $studiensemester_kurzbz, $uid)
|
||||
{
|
||||
$query = "SELECT
|
||||
gruppe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lvangebot
|
||||
JOIN public.tbl_benutzergruppe USING(studiensemester_kurzbz, gruppe_kurzbz)
|
||||
WHERE
|
||||
tbl_lvangebot.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz)."
|
||||
AND tbl_benutzergruppe.uid = " . $this->escape($uid)."
|
||||
AND (tbl_lvangebot.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id))."
|
||||
OR tbl_lvangebot.lehrveranstaltung_id IN(SELECT lehrveranstaltung_id_kompatibel
|
||||
FROM lehre.tbl_lehrveranstaltung_kompatibel
|
||||
WHERE lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id))."
|
||||
)
|
||||
)";
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
$rows = (hasData($res)) ? getData($res) : array();
|
||||
|
||||
$gruppen=array();
|
||||
foreach($rows as $row)
|
||||
{
|
||||
$gruppen[] = $row->gruppe_kurzbz;
|
||||
}
|
||||
return $gruppen;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,4 +12,38 @@ class Lvgesamtnote_model extends DB_Model
|
||||
$this->pk = array('student_uid', 'studiensemester_kurzbz', 'lehrveranstaltung_id');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die Noten
|
||||
*
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLvGesamtNoten($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect($this->dbTable . ".*");
|
||||
$this->addSelect("n.bezeichnung AS note_bezeichnung");
|
||||
$this->addSelect("lv.bezeichnung AS lehrveranstaltung_bezeichnung");
|
||||
$this->addSelect("lv.studiengang_kz");
|
||||
$this->addSelect("UPPER(stg.typ || stg.kurzbz) AS studiengang");
|
||||
|
||||
$this->addJoin("lehre.tbl_note n", "note");
|
||||
$this->addJoin("lehre.tbl_lehrveranstaltung lv", "lehrveranstaltung_id");
|
||||
$this->addJoin("public.tbl_studiengang stg", "studiengang_kz");
|
||||
|
||||
$this->db->where($this->dbTable . ".freigabedatum <", "NOW()", false);
|
||||
|
||||
$where = [];
|
||||
if ($studiensemester_kurzbz)
|
||||
$where[$this->dbTable . ".studiensemester_kurzbz"] = $studiensemester_kurzbz;
|
||||
if ($lehrveranstaltung_id)
|
||||
$where[$this->dbTable . ".lehrveranstaltung_id"] = $lehrveranstaltung_id;
|
||||
if ($student_uid)
|
||||
$where[$this->dbTable . ".student_uid"] = $student_uid;
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Note_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_note';
|
||||
$this->pk = 'note';
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,34 @@ class Notenschluesselaufteilung_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_notenschluesselaufteilung';
|
||||
$this->pk = 'notenschluesselaufteilung_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert die Note zu Punkten einer Lehrveranstaltung
|
||||
*
|
||||
* @param number $points
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass returns success(null) if no entry is found
|
||||
*/
|
||||
public function getNote($points, $lehrveranstaltung_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('education/Notenschluesselzuordnung_model', 'NotenschluesselzuordnungModel');
|
||||
$notenschluessel_kurzbz = $this->NotenschluesselzuordnungModel->getKurzbzForLv($lehrveranstaltung_id, $studiensemester_kurzbz);
|
||||
|
||||
$this->addSelect("note");
|
||||
$this->addOrder("punkte", "DESC");
|
||||
$this->addLimit(1);
|
||||
|
||||
$result = $this->loadWhere([
|
||||
"notenschluessel_kurzbz" => $notenschluessel_kurzbz,
|
||||
"punkte <=" => $points
|
||||
]);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!hasData($result))
|
||||
return success(null);
|
||||
return success(current(getData($result))->note);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,71 @@ class Notenschluesselzuordnung_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_notenschluesselzuordnung';
|
||||
$this->pk = 'notenschluesselzuordnung_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert den passenden Notenschluessel zu einer Lehrveranstaltung
|
||||
*
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return integer|null
|
||||
*/
|
||||
public function getKurzbzForLv($lehrveranstaltung_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect("notenschluessel_kurzbz");
|
||||
|
||||
$this->db->where("lehrveranstaltung_id", $lehrveranstaltung_id);
|
||||
if ($studiensemester_kurzbz) {
|
||||
$this->db->where("studiensemester_kurzbz", $studiensemester_kurzbz);
|
||||
$this->db->or_where("studiensemester_kurzbz", null);
|
||||
} else {
|
||||
$this->db->where("studiensemester_kurzbz", null);
|
||||
}
|
||||
|
||||
$result = $this->load();
|
||||
|
||||
if (!isError($result) && hasData($result))
|
||||
return current(getData($result))->notenschluessel_kurzbz;
|
||||
|
||||
|
||||
$this->addSelect("notenschluessel_kurzbz");
|
||||
|
||||
$this->addJoin("(
|
||||
WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz, depth) AS (
|
||||
SELECT oe_kurzbz, oe_parent_kurzbz, 1
|
||||
FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz = (
|
||||
SELECT
|
||||
oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
lehrveranstaltung_id = " . $this->escape($lehrveranstaltung_id) . "
|
||||
)
|
||||
UNION ALL
|
||||
SELECT o.oe_kurzbz, o.oe_parent_kurzbz, oes.depth+1 AS depth
|
||||
FROM public.tbl_organisationseinheit o, oes
|
||||
WHERE o.oe_kurzbz = oes.oe_parent_kurzbz
|
||||
AND aktiv = true
|
||||
)
|
||||
SELECT * FROM oes
|
||||
) oes", "oe_kurzbz");
|
||||
|
||||
$this->addOrder("depth", "ASC");
|
||||
$this->addLimit(1);
|
||||
|
||||
if ($studiensemester_kurzbz) {
|
||||
$this->db->where_in("studiensemester_kurzbz", [$studiensemester_kurzbz, null]);
|
||||
$result = $this->load();
|
||||
} else {
|
||||
$result = $this->loadWhere([
|
||||
"studiensemester_kurzbz" => null
|
||||
]);
|
||||
}
|
||||
|
||||
if (isError($result) || !hasData($result))
|
||||
return null;
|
||||
|
||||
return current(getData($result))->notenschluessel_kurzbz;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,4 +30,35 @@ class Paabgabe_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, array($projektarbeit_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Paabgabe Termin Deadlines of zugewiesene Projektarbeiten as a Mitarbeiter for Terminübersicht Abgabetool.
|
||||
* @param int $person_id
|
||||
* @return object
|
||||
*/
|
||||
public function getDeadlines($person_id)
|
||||
{
|
||||
$qry = "SELECT
|
||||
DISTINCT TO_CHAR(tbl_paabgabe.datum, 'DD.MM.YYYY') as datum, tbl_paabgabe.fixtermin, tbl_paabgabe.kurzbz,
|
||||
person_student.vorname as stud_vorname, person_student.nachname as stud_nachname,
|
||||
person_student.titelpre as stud_titelpre, person_student.titelpost as stud_titelpost,
|
||||
tbl_lehrveranstaltung.semester, UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) as stg,
|
||||
tbl_paabgabetyp.bezeichnung as typ_bezeichnung
|
||||
FROM
|
||||
campus.tbl_paabgabe
|
||||
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||
JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
|
||||
JOIN public.tbl_benutzer bn_student ON(tbl_projektarbeit.student_uid=bn_student.uid)
|
||||
JOIN public.tbl_person person_student ON(bn_student.person_id=person_student.person_id)
|
||||
JOIN lehre.tbl_lehreinheit ON(tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id)
|
||||
JOIN lehre.tbl_lehrveranstaltung ON(tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id)
|
||||
JOIN public.tbl_studiengang ON(tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz)
|
||||
JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz)
|
||||
WHERE
|
||||
tbl_projektbetreuer.person_id= ? AND tbl_paabgabe.datum>=now() AND bn_student.aktiv
|
||||
ORDER BY datum";
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($person_id));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -69,4 +69,196 @@ class Projektarbeit_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a Projektarbeit of a student by projektarbeit_id with
|
||||
* the paramenters used by the student endupload page in cis4 abgabetool.
|
||||
*/
|
||||
public function updateProjektarbeit($projektarbeit_id,$sprache,$abstract,$abstract_en,
|
||||
$schlagwoerter, $schlagwoerter_en,$seitenanzahl)
|
||||
{
|
||||
$qry = "UPDATE lehre.tbl_projektarbeit SET
|
||||
seitenanzahl = ?,
|
||||
abgabedatum = now(),
|
||||
sprache = ?,
|
||||
schlagwoerter_en = ?,
|
||||
schlagwoerter = ?,
|
||||
abstract = ?,
|
||||
abstract_en = ?
|
||||
WHERE projektarbeit_id = ?";
|
||||
|
||||
return $this->execQuery($qry, array($seitenanzahl, $sprache, $schlagwoerter_en,
|
||||
$schlagwoerter, $abstract, $abstract_en, $projektarbeit_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a List of Projektarbeiten of a student with betreuer
|
||||
* used by the student cis4 abgabetool.
|
||||
*/
|
||||
public function getStudentProjektarbeitenWithBetreuer($studentUID)
|
||||
{
|
||||
$betreuerQuery = "
|
||||
SELECT
|
||||
vorname as bvorname,
|
||||
nachname as bnachname,
|
||||
titelpre as btitelpre,
|
||||
titelpost AS btitelpost,
|
||||
titelpost AS btitelpost,
|
||||
tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
|
||||
|
||||
(SELECT person_id
|
||||
FROM lehre.tbl_projektbetreuer
|
||||
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
||||
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id,
|
||||
(SELECT betreuerart_kurzbz
|
||||
FROM lehre.tbl_projektbetreuer
|
||||
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
||||
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
|
||||
(SELECT tbl_betreuerart.beschreibung
|
||||
FROM lehre.tbl_projektbetreuer JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
|
||||
WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
|
||||
AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied') LIMIT 1) AS zweitbetreuer_betreuerart_beschreibung,
|
||||
|
||||
tbl_betreuerart.betreuerart_kurzbz,
|
||||
person_id as bperson_id,
|
||||
projektarbeit_id,
|
||||
lehre.tbl_projekttyp.bezeichnung as projekttypbezeichnung,
|
||||
lehre.tbl_lehreinheit.studiensemester_kurzbz,
|
||||
lehre.tbl_lehrveranstaltung.studiengang_kz,
|
||||
public.tbl_studiengang.kurzbzlang,
|
||||
lehre.tbl_projektbetreuer.note as note,
|
||||
public.tbl_mitarbeiter.mitarbeiter_uid,
|
||||
lehre.tbl_projektarbeit.titel as titel,
|
||||
lehre.tbl_projektarbeit.sprache as sprache,
|
||||
lehre.tbl_projektarbeit.seitenanzahl as seitenanzahl,
|
||||
lehre.tbl_projektarbeit.kontrollschlagwoerter as kontrollschlagwoerter,
|
||||
lehre.tbl_projektarbeit.schlagwoerter as schlagwoerter,
|
||||
lehre.tbl_projektarbeit.schlagwoerter_en as schlagwoerter_en,
|
||||
lehre.tbl_projektarbeit.abstract as abstract,
|
||||
lehre.tbl_projektarbeit.abstract_en as abstract_en,
|
||||
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
|
||||
(SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt,
|
||||
(SELECT datum FROM campus.tbl_paabgabe WHERE paabgabetyp_kurzbz = 'end' AND abgabedatum IS NOT NULL AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben
|
||||
|
||||
FROM lehre.tbl_projektarbeit
|
||||
LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
|
||||
LEFT JOIN public.tbl_person USING(person_id)
|
||||
LEFT JOIN public.tbl_benutzer USING(person_id)
|
||||
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
|
||||
LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_mitarbeiter ON(public.tbl_mitarbeiter.mitarbeiter_uid = public.tbl_benutzer.uid)
|
||||
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
WHERE
|
||||
tbl_projektarbeit.student_uid = ? AND
|
||||
(projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
|
||||
AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz')";
|
||||
|
||||
return $this->execReadOnlyQuery($betreuerQuery, array($studentUID));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a List of Projektarbeit Abgabetermin used by the student cis4 abgabetool.
|
||||
*/
|
||||
public function getProjektarbeitAbgabetermine($projektarbeit_id) {
|
||||
$qry ="SELECT campus.tbl_paabgabe.paabgabe_id,
|
||||
campus.tbl_paabgabe.projektarbeit_id,
|
||||
campus.tbl_paabgabe.fixtermin,
|
||||
campus.tbl_paabgabe.kurzbz,
|
||||
campus.tbl_paabgabe.datum,
|
||||
campus.tbl_paabgabetyp.paabgabetyp_kurzbz,
|
||||
campus.tbl_paabgabetyp.bezeichnung,
|
||||
campus.tbl_paabgabe.abgabedatum,
|
||||
campus.tbl_paabgabe.insertvon
|
||||
FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz)
|
||||
WHERE campus.tbl_paabgabe.projektarbeit_id = ?
|
||||
ORDER BY campus.tbl_paabgabe.datum";
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($projektarbeit_id));
|
||||
}
|
||||
|
||||
public function getProjektbetreuerAnrede($bperson_id) {
|
||||
$qry_betr="SELECT distinct trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first,
|
||||
public.tbl_mitarbeiter.mitarbeiter_uid, anrede
|
||||
FROM public.tbl_person JOIN lehre.tbl_projektbetreuer ON(lehre.tbl_projektbetreuer.person_id=public.tbl_person.person_id)
|
||||
JOIN public.tbl_benutzer ON(public.tbl_benutzer.person_id=public.tbl_person.person_id)
|
||||
JOIN public.tbl_mitarbeiter ON(public.tbl_benutzer.uid=public.tbl_mitarbeiter.mitarbeiter_uid)
|
||||
WHERE public.tbl_person.person_id= ?";
|
||||
|
||||
return $this->execReadOnlyQuery($qry_betr, [$bperson_id]);
|
||||
|
||||
}
|
||||
|
||||
public function getProjektarbeitBenutzer($uid) {
|
||||
$qry="SELECT * FROM campus.vw_benutzer where uid=?";
|
||||
return $this->execReadOnlyQuery($qry, [$uid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if mitarbeiter has a projektbetreuer zuordnung to student.
|
||||
*/
|
||||
public function checkZuordnung($studentUID, $maUID) {
|
||||
//oder Lektor mit Betreuung dieses Studenten
|
||||
$qry = "
|
||||
SELECT 1
|
||||
FROM
|
||||
lehre.tbl_projektarbeit
|
||||
JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
|
||||
JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id)
|
||||
WHERE
|
||||
tbl_projektarbeit.student_uid = ? AND
|
||||
vw_benutzer.uid = ?";
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($studentUID, $maUID));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a List of Projektarbeiten of a mitarbeiter with zuordnung
|
||||
* used by the mitarbeiter cis4 abgabetool.
|
||||
*/
|
||||
public function getMitarbeiterProjektarbeiten($uid, $showAll){
|
||||
$qry = "SELECT
|
||||
*
|
||||
FROM
|
||||
(SELECT tbl_person.vorname, tbl_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz,
|
||||
tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id,
|
||||
tbl_projektbetreuer.betreuerart_kurzbz, tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
|
||||
tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz
|
||||
FROM lehre.tbl_projektarbeit
|
||||
LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id)
|
||||
LEFT JOIN lehre.tbl_betreuerart using(betreuerart_kurzbz)
|
||||
LEFT JOIN public.tbl_benutzer on(uid=student_uid)
|
||||
LEFT JOIN public.tbl_student on(public.tbl_benutzer.uid=public.tbl_student.student_uid)
|
||||
LEFT JOIN public.tbl_person on(tbl_benutzer.person_id=tbl_person.person_id)
|
||||
LEFT JOIN lehre.tbl_lehreinheit using(lehreinheit_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz=public.tbl_studiengang.studiengang_kz)
|
||||
LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
|
||||
WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
|
||||
AND tbl_projektbetreuer.person_id IN (SELECT person_id FROM public.tbl_benutzer
|
||||
WHERE public.tbl_benutzer.person_id=lehre.tbl_projektbetreuer.person_id
|
||||
AND public.tbl_benutzer.uid= ? )
|
||||
".($showAll?'':' AND public.tbl_benutzer.aktiv AND lehre.tbl_projektarbeit.note IS NULL ')."
|
||||
AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatsmitglied')
|
||||
ORDER BY tbl_projektarbeit.projektarbeit_id, betreuerart_kurzbz desc) as xy
|
||||
ORDER BY nachname;";
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch Student info relevant to a projektarbeit_id
|
||||
*/
|
||||
public function getStudentInfoForProjektarbeitId($projektarbeit_id) {
|
||||
|
||||
$qry = "SELECT *
|
||||
FROM campus.vw_student
|
||||
WHERE uid IN(
|
||||
SELECT student_uid
|
||||
FROM lehre.tbl_projektarbeit
|
||||
WHERE projektarbeit_id = ? )";
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($projektarbeit_id));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,35 @@ class Pruefung_model extends DB_Model
|
||||
return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Pruefungen of a student for a Lehrveranstaltung.
|
||||
*
|
||||
* @param string $uid
|
||||
* @param string $lehrveranstaltung_id
|
||||
* @param string|null $sprache
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
public function getByStudentAndLv($uid, $lehrveranstaltung_id, $sprache = null)
|
||||
{
|
||||
// TODO(chris): Potentielle Anpassung "Eine UID"
|
||||
$this->dbTable = 'lehre.tbl_pruefung';
|
||||
|
||||
if ($sprache) {
|
||||
$sprache_qry = $this->db->compile_binds('SELECT index FROM public.tbl_sprache WHERE sprache = ?', [$sprache]);
|
||||
$bezeichnung = 'bezeichnung_mehrsprachig[(' . $sprache_qry . ')]';
|
||||
} else {
|
||||
$bezeichnung = 'bezeichnung';
|
||||
}
|
||||
|
||||
$this->addSelect($this->dbTable . '.pruefung_id, ' . $this->dbTable . '.pruefungstyp_kurzbz, ' . $this->dbTable . '.datum, COALESCE(n.' . $bezeichnung . ', n.note::text) AS note');
|
||||
|
||||
$this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
||||
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
|
||||
$this->addJoin('lehre.tbl_note n', 'note');
|
||||
|
||||
return $this->loadWhere(['lehrveranstaltung_id' => $lehrveranstaltung_id, 'student_uid' => $uid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* NOTE(chris): not used
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Pruefungsantritt_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_abschlusspruefung_antritt';
|
||||
$this->pk = 'pruefungsantritt_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,15 @@ class Studierendenantraglehrveranstaltung_model extends DB_Model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all LVs for a repeating prestudent that are either not allowed or
|
||||
* already done.
|
||||
*
|
||||
* @param string $prestudent_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLvsForPrestudent($prestudent_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
@@ -66,39 +75,53 @@ class Studierendenantraglehrveranstaltung_model extends DB_Model
|
||||
);
|
||||
$this->addJoin('public.tbl_student s', 'prestudent_id');
|
||||
|
||||
// NOTE(chris): last offizell note
|
||||
$this->addJoin('(
|
||||
SELECT z.*
|
||||
FROM lehre.tbl_zeugnisnote z
|
||||
LEFT JOIN public.tbl_studiensemester zs
|
||||
USING(studiensemester_kurzbz)
|
||||
JOIN (
|
||||
SELECT zi.lehrveranstaltung_id, zi.student_uid, MAX(zis.start) AS start
|
||||
FROM lehre.tbl_zeugnisnote zi
|
||||
LEFT JOIN lehre.tbl_note zin
|
||||
USING(note)
|
||||
LEFT JOIN public.tbl_studiensemester zis
|
||||
USING(studiensemester_kurzbz)
|
||||
WHERE zin.aktiv AND zin.offiziell
|
||||
GROUP BY zi.lehrveranstaltung_id, zi.student_uid
|
||||
) zx
|
||||
ON (
|
||||
z.lehrveranstaltung_id=zx.lehrveranstaltung_id
|
||||
AND z.student_uid=zx.student_uid
|
||||
AND zs.start = zx.start
|
||||
)) z', 'z.lehrveranstaltung_id=lv.lehrveranstaltung_id AND z.student_uid=s.student_uid', 'LEFT');
|
||||
$this->addJoin('lehre.tbl_note zn', 'z.note = zn.note', 'LEFT');
|
||||
|
||||
|
||||
$this->load->config('studierendenantrag');
|
||||
$note_intern_angerechntet = $this->config->item('wiederholung_note_angerechnet');
|
||||
|
||||
return $this->loadWhere([
|
||||
$where = [
|
||||
'ps.prestudent_id' => $prestudent_id,
|
||||
'a.typ' => Studierendenantrag_model::TYP_WIEDERHOLUNG,
|
||||
'stat.studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED,
|
||||
'n.note <> ' => 0,
|
||||
$this->dbTable . '.studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'(n.note<>' . $this->db->escape($note_intern_angerechntet) . ' OR (z.note IS NOT NULL AND zn.positiv))' => null
|
||||
]);
|
||||
// NOTE(chris): grade "intern angerechnet" needs an official grade beforehand (the subquery gets the last positive offical grade)
|
||||
"(n.note<>" . $this->db->escape($note_intern_angerechntet) . " OR EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote z
|
||||
LEFT JOIN public.tbl_studiensemester zs USING(studiensemester_kurzbz)
|
||||
JOIN (
|
||||
SELECT
|
||||
zi.lehrveranstaltung_id,
|
||||
zi.student_uid,
|
||||
MAX(zis.start) AS start
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote zi
|
||||
LEFT JOIN lehre.tbl_note zin USING(note)
|
||||
LEFT JOIN public.tbl_studiensemester zis USING(studiensemester_kurzbz)
|
||||
WHERE
|
||||
zin.aktiv
|
||||
AND zin.offiziell
|
||||
GROUP BY
|
||||
zi.lehrveranstaltung_id,
|
||||
zi.student_uid
|
||||
) zx ON (
|
||||
z.lehrveranstaltung_id = zx.lehrveranstaltung_id
|
||||
AND z.student_uid = zx.student_uid
|
||||
AND zs.start = zx.start
|
||||
)
|
||||
JOIN lehre.tbl_note zn USING (note)
|
||||
WHERE
|
||||
z.lehrveranstaltung_id = lv.lehrveranstaltung_id
|
||||
AND z.student_uid = s.student_uid
|
||||
AND zn.positiv
|
||||
))" => null
|
||||
];
|
||||
|
||||
if ($studiensemester_kurzbz !== false)
|
||||
$where[$this->dbTable . '.studiensemester_kurzbz'] = $studiensemester_kurzbz;
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,45 +177,63 @@ class Zeugnisnote_model extends DB_Model
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry = "SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
|
||||
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
|
||||
vw_student_lehrveranstaltung.ects, vw_student_lehrveranstaltung.semesterstunden,
|
||||
tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id,
|
||||
vw_student_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung,
|
||||
vw_student_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung,
|
||||
tbl_note.positiv as note_positiv,
|
||||
tbl_zeugnisnote.bemerkung as bemerkung,
|
||||
vw_student_lehrveranstaltung.sort,
|
||||
vw_student_lehrveranstaltung.zeugnis,
|
||||
vw_student_lehrveranstaltung.studiengang_kz,
|
||||
vw_student_lehrveranstaltung.lv_lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
(
|
||||
campus.vw_student_lehrveranstaltung LEFT JOIN lehre.tbl_zeugnisnote
|
||||
ON(uid=student_uid
|
||||
AND vw_student_lehrveranstaltung.studiensemester_kurzbz=tbl_zeugnisnote.studiensemester_kurzbz
|
||||
AND vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
|
||||
)
|
||||
) LEFT JOIN lehre.tbl_note USING(note)
|
||||
JOIN lehre.tbl_lehrveranstaltung ON(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id)
|
||||
WHERE true $where
|
||||
$qry = "SELECT
|
||||
a.*,
|
||||
lv.lehrform_kurzbz AS lehrveranstaltung_lehrform,
|
||||
lv.kurzbz AS lehrveranstaltung_kurzbz,
|
||||
UPPER(stg1.typ || stg1.kurzbz) AS studiengang,
|
||||
s.studiengang_kz AS studiengang_kz,
|
||||
UPPER(stg2.typ || stg2.kurzbz) AS studiengang_lv,
|
||||
lv.studiengang_kz AS studiengang_kz_lv,
|
||||
lv.semester AS semester_lv,
|
||||
lv.ects AS ects_lv,
|
||||
lv.zeugnis,
|
||||
lv.bezeichnung_english AS lehrveranstaltung_bezeichnung_english
|
||||
FROM (
|
||||
SELECT vw_student_lehrveranstaltung.lehrveranstaltung_id, uid,
|
||||
vw_student_lehrveranstaltung.studiensemester_kurzbz, note, punkte, uebernahmedatum, benotungsdatum,
|
||||
vw_student_lehrveranstaltung.ects, vw_student_lehrveranstaltung.semesterstunden,
|
||||
tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id,
|
||||
vw_student_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung,
|
||||
vw_student_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung,
|
||||
tbl_note.positiv as note_positiv,
|
||||
tbl_zeugnisnote.bemerkung as bemerkung,
|
||||
vw_student_lehrveranstaltung.sort,
|
||||
vw_student_lehrveranstaltung.zeugnis,
|
||||
vw_student_lehrveranstaltung.studiengang_kz,
|
||||
vw_student_lehrveranstaltung.lv_lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
(
|
||||
campus.vw_student_lehrveranstaltung LEFT JOIN lehre.tbl_zeugnisnote
|
||||
ON(uid=student_uid
|
||||
AND vw_student_lehrveranstaltung.studiensemester_kurzbz=tbl_zeugnisnote.studiensemester_kurzbz
|
||||
AND vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
|
||||
)
|
||||
) LEFT JOIN lehre.tbl_note USING(note)
|
||||
JOIN lehre.tbl_lehrveranstaltung ON(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id)
|
||||
WHERE true $where
|
||||
|
||||
UNION
|
||||
SELECT lehre.tbl_lehrveranstaltung.lehrveranstaltung_id,student_uid AS uid,studiensemester_kurzbz, note, punkte,
|
||||
uebernahmedatum, benotungsdatum,lehre.tbl_lehrveranstaltung.ects,lehre.tbl_lehrveranstaltung.semesterstunden, tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id, lehre.tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, lehre.tbl_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung, tbl_note.positiv as note_positiv, tbl_zeugnisnote.bemerkung as bemerkung, tbl_lehrveranstaltung.sort, tbl_lehrveranstaltung.zeugnis, tbl_lehrveranstaltung.studiengang_kz,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz, tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_note USING(note)
|
||||
WHERE true $where2
|
||||
UNION
|
||||
SELECT lehre.tbl_lehrveranstaltung.lehrveranstaltung_id,student_uid AS uid,studiensemester_kurzbz, note, punkte,
|
||||
uebernahmedatum, benotungsdatum,lehre.tbl_lehrveranstaltung.ects,lehre.tbl_lehrveranstaltung.semesterstunden, tbl_zeugnisnote.updateamum, tbl_zeugnisnote.updatevon, tbl_zeugnisnote.insertamum,
|
||||
tbl_zeugnisnote.insertvon, tbl_zeugnisnote.ext_id, lehre.tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, lehre.tbl_lehrveranstaltung.bezeichnung_english as lehrveranstaltung_bezeichnung_english,
|
||||
tbl_note.bezeichnung as note_bezeichnung, tbl_note.positiv as note_positiv, tbl_zeugnisnote.bemerkung as bemerkung, tbl_lehrveranstaltung.sort, tbl_lehrveranstaltung.zeugnis, tbl_lehrveranstaltung.studiengang_kz,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz, tbl_lehrveranstaltung.sws
|
||||
FROM
|
||||
lehre.tbl_zeugnisnote
|
||||
JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_note USING(note)
|
||||
WHERE true $where2
|
||||
|
||||
ORDER BY sort";
|
||||
ORDER BY sort
|
||||
) a
|
||||
LEFT JOIN public.tbl_student s ON (a.uid = s.student_uid)
|
||||
LEFT JOIN public.tbl_studiengang stg1 ON (s.studiengang_kz = stg1.studiengang_kz)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_studiengang stg2 ON (lv.studiengang_kz = stg2.studiengang_kz)";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
@@ -189,19 +189,28 @@ class Organisationseinheit_model extends DB_Model
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get OEs by eventQuery string. Use with autocomplete event queries.
|
||||
* @param $eventQuery String
|
||||
* @return array
|
||||
*/
|
||||
public function getAutocompleteSuggestions($eventQuery)
|
||||
{
|
||||
$this->addSelect('oe_kurzbz');
|
||||
$this->addSelect('organisationseinheittyp_kurzbz, oe_kurzbz, bezeichnung, aktiv, lehre');
|
||||
$this->addOrder('organisationseinheittyp_kurzbz, bezeichnung');
|
||||
/**
|
||||
* @param string $oe_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getWithType($oe_kurzbz)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*, t.bezeichnung AS organisationseinheittyp');
|
||||
$this->addJoin('public.tbl_organisationseinheittyp t', 'organisationseinheittyp_kurzbz');
|
||||
|
||||
return $this->loadWhere("
|
||||
oe_kurzbz ILIKE '%". $this->escapeLike($eventQuery). "%'
|
||||
");
|
||||
return $this->load($oe_kurzbz);
|
||||
}
|
||||
|
||||
/**
|
||||
* get highest organisation units
|
||||
*/
|
||||
public function getHeads()
|
||||
{
|
||||
$this->addSelect('*');
|
||||
$this->addSelect('oe_kurzbz as head');
|
||||
$result = $this->loadWhere(array('oe_parent_kurzbz' => null, 'aktiv' => true));
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -457,7 +457,7 @@ class Studiengang_model extends DB_Model
|
||||
*/
|
||||
public function getLeitung($studiengang_kz = null)
|
||||
{
|
||||
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email');
|
||||
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email, titelpre, titelpost, alias');
|
||||
$this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer', 'uid');
|
||||
$this->addJoin('public.tbl_person', 'person_id');
|
||||
@@ -493,6 +493,53 @@ class Studiengang_model extends DB_Model
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Studiengangsleitung/en of Studiengang/Studiengaenge. With Details
|
||||
*
|
||||
* @param null $studiengang_kz Numeric or Array
|
||||
* @return array
|
||||
*/
|
||||
public function getLeitungDetailed($studiengang_kz = null)
|
||||
{
|
||||
$this->addSelect('studiengang_kz, email, f.oe_kurzbz, b.uid, b.alias, b.aktiv, p.vorname, p.nachname, p.titelpre, p.titelpost, m.telefonklappe, k.kontakt, o.planbezeichnung');
|
||||
$this->addJoin('public.tbl_benutzerfunktion f', 'oe_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer b', 'uid');
|
||||
$this->addJoin('public.tbl_person p', 'person_id');
|
||||
$this->addJoin('public.tbl_mitarbeiter m', 'mitarbeiter_uid=uid', 'LEFT');
|
||||
$this->addJoin('public.tbl_kontakt k', 'k.standort_id=m.standort_id AND kontakttyp=\'telefon\'', 'LEFT');
|
||||
$this->addJoin('public.tbl_ort o', 'ort_kurzbz', 'LEFT');
|
||||
|
||||
if (!is_numeric($studiengang_kz) && !is_array($studiengang_kz))
|
||||
{
|
||||
return error('Studiengangskennzahl ungültig');
|
||||
}
|
||||
|
||||
if (is_null($studiengang_kz))
|
||||
{
|
||||
$condition = '
|
||||
funktion_kurzbz = \'Leitung\'
|
||||
AND ( datum_von <= NOW() OR datum_von IS NULL )
|
||||
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
|
||||
';
|
||||
}
|
||||
elseif (is_numeric($studiengang_kz) || is_array($studiengang_kz))
|
||||
{
|
||||
if (is_array($studiengang_kz))
|
||||
{
|
||||
$studiengang_kz = array_map(array($this,'escape'), $studiengang_kz);
|
||||
$studiengang_kz = implode(', ', $studiengang_kz);
|
||||
}
|
||||
$condition = '
|
||||
funktion_kurzbz = \'Leitung\'
|
||||
AND ( datum_von <= NOW() OR datum_von IS NULL )
|
||||
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
|
||||
AND studiengang_kz IN (' . $studiengang_kz. ')';
|
||||
;
|
||||
}
|
||||
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
public function getStudiengaengeWithOrgForm($typ, $semester)
|
||||
{
|
||||
$query = "SELECT DISTINCT (UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz)) AS Studiengang
|
||||
@@ -600,4 +647,158 @@ class Studiengang_model extends DB_Model
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getStudiengangInfoForNews()
|
||||
{
|
||||
|
||||
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
|
||||
$addEmailProperty= function(&$benutzerfunktionen){
|
||||
if(count($benutzerfunktionen) && defined('DOMAIN'))
|
||||
{
|
||||
$benutzerfunktionen = array_map(function($benutzer)
|
||||
{
|
||||
$benutzer->email = $benutzer->alias."@".DOMAIN;
|
||||
return $benutzer;
|
||||
},$benutzerfunktionen) ;
|
||||
}
|
||||
|
||||
};
|
||||
$addFotoProperty= function(&$collection){
|
||||
$collection = array_map(function($item){
|
||||
$person_id = $this->PersonModel->getByUid($item->uid);
|
||||
if(isError($person_id))
|
||||
return error($person_id);
|
||||
$person_id = current(getData($person_id))->person_id;
|
||||
$this->PersonModel->addSelect('foto');
|
||||
$foto = $this->PersonModel->loadWhere(array('person_id'=>$person_id));
|
||||
if(isError($foto))
|
||||
return error($foto);
|
||||
$foto = current(getData($foto))->foto;
|
||||
$item->foto = $foto;
|
||||
return $item;
|
||||
},$collection);
|
||||
};
|
||||
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
|
||||
$student = $this->StudentModel->loadWhere(['student_uid' => getAuthUID()]);
|
||||
if (isError($student))
|
||||
return error($student);
|
||||
if (getData($student)) {
|
||||
$student = current(getData($student));
|
||||
$studiengang_kz = $student->studiengang_kz;
|
||||
$semester = $student->semester;
|
||||
}
|
||||
|
||||
$stg_obj = $this->load($studiengang_kz);
|
||||
if(isError($stg_obj))
|
||||
return error($stg_obj);
|
||||
if(getData($stg_obj))
|
||||
{
|
||||
$stg_obj = current(getData($stg_obj));
|
||||
}
|
||||
|
||||
$stg_ltg = $this->getLeitungDetailed($stg_obj->studiengang_kz);
|
||||
if (isError($stg_ltg))
|
||||
return $stg_ltg;
|
||||
$stg_ltg = getData($stg_ltg) ?: [];
|
||||
$stg_ltg = array_values(array_filter($stg_ltg, function($stg_leitung){
|
||||
return $stg_leitung->aktiv;
|
||||
}));
|
||||
$addFotoProperty($stg_ltg);
|
||||
|
||||
$gf_ltg = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('gLtg', $stg_obj->oe_kurzbz);
|
||||
if (isError($gf_ltg))
|
||||
return $gf_ltg;
|
||||
$gf_ltg = getData($gf_ltg) ?: [];
|
||||
$gf_ltg = array_values(array_filter($gf_ltg, function($gf_leitung){
|
||||
return $gf_leitung->aktiv;
|
||||
}));
|
||||
$addEmailProperty($gf_ltg);
|
||||
$addFotoProperty($gf_ltg);
|
||||
|
||||
$stv_ltg = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stvLtg', $stg_obj->oe_kurzbz);
|
||||
if (isError($stv_ltg))
|
||||
return $stv_ltg;
|
||||
$stv_ltg = getData($stv_ltg) ?: [];
|
||||
$stv_ltg = array_values(array_filter($stv_ltg, function($stv_leitung){
|
||||
return $stv_leitung->aktiv;
|
||||
}));
|
||||
$addEmailProperty($stv_ltg);
|
||||
$addFotoProperty($stv_ltg);
|
||||
|
||||
$ass = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('ass', $stg_obj->oe_kurzbz);
|
||||
if (isError($ass))
|
||||
return $ass;
|
||||
$ass = getData($ass) ?: [];
|
||||
$ass = array_values(array_filter($ass, function($assistenz){
|
||||
return $assistenz->aktiv;
|
||||
}));
|
||||
$addEmailProperty($ass);
|
||||
$addFotoProperty($ass);
|
||||
|
||||
$hochschulvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('hsv');
|
||||
if (isError($hochschulvertr))
|
||||
return $hochschulvertr;
|
||||
$hochschulvertr = getData($hochschulvertr) ?: [];
|
||||
$hochschulvertr = array_values(array_filter($hochschulvertr, function($hochschul_vertreter){
|
||||
return $hochschul_vertreter->aktiv;
|
||||
}));
|
||||
$addEmailProperty($hochschulvertr);
|
||||
|
||||
|
||||
$stdv = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stdv', $stg_obj->oe_kurzbz);
|
||||
if (isError($stdv))
|
||||
return $stdv;
|
||||
$stdv = getData($stdv) ?: [];
|
||||
$stdv = array_values(array_filter($stdv, function($std_vertreter){
|
||||
return $std_vertreter->aktiv;
|
||||
}));
|
||||
$addEmailProperty($stdv);
|
||||
|
||||
|
||||
$jahrgangsvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('jgv', $stg_obj->oe_kurzbz, $semester);
|
||||
if (isError($jahrgangsvertr))
|
||||
return $jahrgangsvertr;
|
||||
$jahrgangsvertr = getData($jahrgangsvertr) ?: [];
|
||||
$jahrgangsvertr = array_values(array_filter($jahrgangsvertr, function($jahrgang_vertreter){
|
||||
return $jahrgang_vertreter->aktiv;
|
||||
}));
|
||||
$addEmailProperty($jahrgangsvertr);
|
||||
|
||||
|
||||
$result_object = new stdClass();
|
||||
$result_object->studiengang = $stg_obj;
|
||||
$result_object->semester = $semester;
|
||||
$result_object->stg_ltg = $stg_ltg;
|
||||
$result_object->gf_ltg = $gf_ltg;
|
||||
$result_object->stv_ltg = $stv_ltg;
|
||||
$result_object->ass = $ass;
|
||||
$result_object->hochschulvertr = $hochschulvertr;
|
||||
$result_object->stdv = $stdv;
|
||||
$result_object->jahrgangsvertr = $jahrgangsvertr;
|
||||
|
||||
return success($result_object);
|
||||
}
|
||||
|
||||
public function getLvaForStudiengangInStudiensemester($studiengang_kz, $orgform_kurzbz, $studiensemester_kurzbz) {
|
||||
$qry = '
|
||||
SELECT DISTINCT ON (lehre.tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||
kurzbz, bezeichnung, semester,
|
||||
lehre.tbl_lehrveranstaltung.sprache, orgform_kurzbz,
|
||||
lehre.tbl_lehrveranstaltung.lehrform_kurzbz)
|
||||
lehre.tbl_lehrveranstaltung.lehrveranstaltung_id, kurzbz, bezeichnung,
|
||||
semester, lehre.tbl_lehrveranstaltung.sprache, orgform_kurzbz, lehre.tbl_lehrveranstaltung.lehrform_kurzbz
|
||||
FROM lehre.tbl_lehrveranstaltung JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id) JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
||||
WHERE aktiv = TRUE AND studiengang_kz = ? AND orgform_kurzbz = ? AND tbl_lehreinheit.studiensemester_kurzbz IN ?';
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($studiengang_kz, $orgform_kurzbz, $studiensemester_kurzbz));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
class Studienjahr_model extends DB_Model
|
||||
{
|
||||
|
||||
@@ -29,6 +30,22 @@ class Studienjahr_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
public function getNextStudienjahr()
|
||||
{
|
||||
$this->addJoin('public.tbl_studiensemester', 'studienjahr_kurzbz');
|
||||
$this->addOrder('start');
|
||||
$this->addLimit(1);
|
||||
|
||||
return $this->loadWhere(['start >' => 'NOW()']);
|
||||
}
|
||||
public function getNextFrom($studienjahr_kurzbz)
|
||||
{
|
||||
$this->addLimit(1);
|
||||
|
||||
return $this->loadWhere([
|
||||
'studienjahr_kurzbz >' => $studienjahr_kurzbz
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current Studienjahr. During the summer term, continue using the previous Studienjahr.
|
||||
@@ -38,8 +55,7 @@ class Studienjahr_model extends DB_Model
|
||||
*/
|
||||
public function getLastOrAktStudienjahr($days = 60)
|
||||
{
|
||||
if (!is_numeric($days))
|
||||
{
|
||||
if (!is_numeric($days)) {
|
||||
$days = 60;
|
||||
}
|
||||
|
||||
@@ -63,8 +79,7 @@ class Studienjahr_model extends DB_Model
|
||||
*/
|
||||
public function getAktOrNextStudienjahr($days = 62)
|
||||
{
|
||||
if (!is_numeric($days))
|
||||
{
|
||||
if (!is_numeric($days)) {
|
||||
$days = 62;
|
||||
}
|
||||
|
||||
|
||||
@@ -134,4 +134,17 @@ class Studienplan_model extends DB_Model
|
||||
'prestudent_id' => $prestudent_id
|
||||
]);
|
||||
}
|
||||
|
||||
public function getStudienplaeneForPerson($person_id)
|
||||
{
|
||||
$this->addDistinct();
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addSelect('ps.*');
|
||||
$this->addJoin('public.tbl_prestudentstatus pss', 'studienplan_id');
|
||||
$this->addJoin('public.tbl_prestudent ps', 'prestudent_id');
|
||||
|
||||
return $this->loadWhere([
|
||||
'person_id' => $person_id
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,13 +170,31 @@ class Studiensemester_model extends DB_Model
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz, $studiengang_kz));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a Studiensemester for a date
|
||||
* @param $date
|
||||
* @return string
|
||||
*/
|
||||
public function getByDate($date)
|
||||
{
|
||||
// gets the studiensemster of a date or the next closest previous studiensemester if a date is not within a studiensemester
|
||||
$query = "
|
||||
SELECT studiensemester_kurzbz, start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE ( ende >= ?::date AND start <= ?::date ) OR ( ende >= ?::date + '-45 days'::interval AND start <= ?::date + '-45 days'::interval )
|
||||
ORDER BY start DESC
|
||||
LIMIT 1";
|
||||
|
||||
return $this->execQuery($query, array($date,$date,$date,$date));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Studiensemester between two dates
|
||||
* @param $from
|
||||
* @param $to
|
||||
* @return array|null
|
||||
*/
|
||||
public function getByDate($from, $to)
|
||||
public function getByDateRange($from, $to)
|
||||
{
|
||||
if (date_format(date_create($from), 'Y-m-d') > (date_format(date_create($to), 'Y-m-d')))
|
||||
return success(array());
|
||||
@@ -205,6 +223,25 @@ class Studiensemester_model extends DB_Model
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $student_uid
|
||||
*
|
||||
* @return StdClass
|
||||
*/
|
||||
public function getWhereStudentHasLvs($student_uid)
|
||||
{
|
||||
$this->addDistinct();
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
|
||||
// TODO(chris): Potentielle Anpassung "Eine UID"
|
||||
$this->addJoin('campus.vw_student_lehrveranstaltung v', 'studiensemester_kurzbz');
|
||||
$this->db->where("v.lehreverzeichnis<>''");
|
||||
|
||||
$this->addOrder($this->dbTable . '.start');
|
||||
|
||||
return $this->loadWhere(['uid' => $student_uid, 'v.lehre' => true]);
|
||||
}
|
||||
|
||||
public function getAktAndFutureSemester()
|
||||
{
|
||||
$query = 'SELECT studiensemester_kurzbz
|
||||
@@ -253,4 +290,61 @@ class Studiensemester_model extends DB_Model
|
||||
if (is_numeric($studienjahrNumber) && mb_substr($studiensemester_kurzbz, 0, 2) == 'SS') (int)$studienjahrNumber -= 1;
|
||||
return $studienjahrNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Studienjahr by Studiensemester.
|
||||
*
|
||||
* @param $studiensemester_kurzbz
|
||||
* @return array|stdClass
|
||||
*/
|
||||
public function getStudienjahrByStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
$studienjahrObj = null;
|
||||
|
||||
if (!is_numeric($studiensemester_kurzbz))
|
||||
{
|
||||
$this->StudiensemesterModel->addSelect('studienjahr_kurzbz');
|
||||
$result = $this->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz =' => $studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$studienjahr = getData($result)[0]->studienjahr_kurzbz;
|
||||
$startstudienjahr = substr($studienjahr, 0, 4);
|
||||
$endstudienjahr = substr($studienjahr, 0, 2) . substr($studienjahr, -2);
|
||||
|
||||
$studienjahrObj = new StdClass();
|
||||
|
||||
$studienjahrObj->studienjahr_kurzbz = $studienjahr;
|
||||
$studienjahrObj->startstudienjahr = $startstudienjahr;
|
||||
$studienjahrObj->endstudienjahr= $endstudienjahr;
|
||||
}
|
||||
|
||||
if (isError($result)) {
|
||||
return error(getError($result));
|
||||
}
|
||||
|
||||
return success($studienjahrObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Holt Start und Ende des Studiensemester_kurzbz
|
||||
* @param studiensemester_kurzbz
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getStartEndeFromStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
return $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = ?",[$studiensemester_kurzbz]);
|
||||
|
||||
}
|
||||
|
||||
public function isValidStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
$result = $this->load($studiensemester_kurzbz);
|
||||
return hasData($result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,53 @@ class Benutzerfunktion_model extends DB_Model
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Lädt alle Benutzerfunktionen zu einer UID im Zeitraum eines Studiensemesters
|
||||
*
|
||||
* @param string $uid
|
||||
* @param string $stdsem
|
||||
* @param string $funktion_kurzbz (optional)
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getBenutzerFunktionByUidInStdsem($uid, $stdsem, $funktion_kurzbz = null)
|
||||
{
|
||||
$stdsemEscaped = $this->escape($stdsem);
|
||||
$this->addSelect($this->dbTable . ".*");
|
||||
$this->addSelect("oe.bezeichnung AS organisationseinheit_bezeichnung");
|
||||
$this->addSelect("oe.organisationseinheittyp_kurzbz");
|
||||
|
||||
$this->addJoin("public.tbl_organisationseinheit oe", "oe_kurzbz");
|
||||
|
||||
$this->db->where("uid", $uid);
|
||||
|
||||
if ($funktion_kurzbz !== null)
|
||||
$this->db->where("funktion_kurzbz", $funktion_kurzbz);
|
||||
|
||||
$this->db->group_start();
|
||||
$this->db->where("datum_bis IS NULL");
|
||||
$this->db->or_where("datum_bis >=", "(
|
||||
SELECT start
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = " . $stdsemEscaped . "
|
||||
)", false);
|
||||
$this->db->group_end();
|
||||
|
||||
$this->db->group_start();
|
||||
$this->db->where("datum_von IS NULL");
|
||||
$this->db->or_where("datum_von <=", "(
|
||||
SELECT ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = " . $stdsemEscaped . "
|
||||
)", false);
|
||||
$this->db->group_end();
|
||||
|
||||
$this->addOrder("datum_bis", "NULLS LAST");
|
||||
$this->addOrder("datum_von", "NULLS LAST");
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Benutzerfunktion using the person_id
|
||||
*/
|
||||
@@ -147,6 +194,38 @@ class Benutzerfunktion_model extends DB_Model
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Benutzer with details for a given Benutzerfunktion and optionally specified Oe and semester
|
||||
*
|
||||
* @param string $funktion_kurzbz
|
||||
* @param string $oe_kurzbz
|
||||
* @param integer | null $semester
|
||||
* @return array|null
|
||||
*/
|
||||
public function getBenutzerFunktionenDetailed($funktion_kurzbz, $oe_kurzbz = null, $semester = null)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.funktion_kurzbz, ' . $this->dbTable . '.oe_kurzbz, ' . $this->dbTable . '.semester, ' . $this->dbTable . '.bezeichnung, f.beschreibung, b.uid, b.alias, b.aktiv, p.vorname, p.nachname, p.titelpre, p.titelpost, m.telefonklappe, k.kontakt, o.planbezeichnung');
|
||||
$this->addJoin('public.tbl_funktion f', 'funktion_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer b', 'uid');
|
||||
$this->addJoin('public.tbl_person p', 'person_id');
|
||||
$this->addJoin('public.tbl_mitarbeiter m', 'mitarbeiter_uid=uid', 'LEFT');
|
||||
$this->addJoin('public.tbl_kontakt k', 'k.standort_id=m.standort_id AND kontakttyp=\'telefon\'', 'LEFT');
|
||||
$this->addJoin('public.tbl_ort o', 'ort_kurzbz', 'LEFT');
|
||||
|
||||
$this->addOrder('LOWER(uid)');
|
||||
|
||||
$where = [$this->dbTable . '.funktion_kurzbz' => $funktion_kurzbz];
|
||||
if ($oe_kurzbz !== null)
|
||||
$where[$this->dbTable . '.oe_kurzbz'] = $oe_kurzbz;
|
||||
if ($semester !== null)
|
||||
$where[$this->dbTable . '.semester'] = $semester;
|
||||
|
||||
$this->db->where('(' . $this->dbTable . '.datum_bis >= NOW() OR ' . $this->dbTable . '.datum_bis IS NULL)', NULL, FALSE);
|
||||
$this->db->where('(' . $this->dbTable . '.datum_von <= NOW() OR ' . $this->dbTable . '.datum_von IS NULL)', NULL, FALSE);
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active Studiengangsleitung(en) of the user by UID.
|
||||
* @param $uid
|
||||
|
||||
@@ -12,4 +12,37 @@ class Benutzergruppe_model extends DB_Model
|
||||
$this->pk = array('gruppe_kurzbz', 'uid');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die User in einer Benutzergruppe
|
||||
* @param gruppe_kurzbz, stsem
|
||||
* @return array
|
||||
*/
|
||||
public function getUids($gruppe_kurzbz, $stsem)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
uid
|
||||
FROM
|
||||
public.tbl_benutzergruppe
|
||||
WHERE
|
||||
gruppe_kurzbz = " . $this->escape($gruppe_kurzbz) . "
|
||||
AND studiensemester_kurzbz = " . $this->escape($stsem);
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
$uids = (hasData($res)) ? getData($res) : array();
|
||||
return $uids;
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die Aufnahmegruppe(n) in Abhängigkeit von User und Studiensemester
|
||||
* @param uid, gruppe_kurzbz, studiensemester_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function loadAufnahmegruppen($uid, $stsem)
|
||||
{
|
||||
$query = "
|
||||
SELECT * FROM tbl_gruppe WHERE aufnahmegruppe=true;";
|
||||
return $this->execReadOnlyQuery($query);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Gruppe_manager_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_gruppe_manager';
|
||||
$this->pk = 'gruppe_manager_id';
|
||||
}
|
||||
}
|
||||
@@ -142,7 +142,7 @@ class Notiz_model extends DB_Model
|
||||
$this->addSelect('public.tbl_notiz.*');
|
||||
$this->addJoin('public.tbl_notizzuordnung', 'notiz_id');
|
||||
|
||||
return $this->loadWhere(array('person_id' => $person_id));
|
||||
return $this->loadWhere(array('person_id' => $person_id, 'tbl_notiz.typ' => NULL));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -154,12 +154,25 @@ class Notiz_model extends DB_Model
|
||||
public function getNotizWithDocEntries($id, $type)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
n.*, count(dms_id) as countDoc, z.notizzuordnung_id,
|
||||
TO_CHAR (CASE
|
||||
SELECT
|
||||
n.*,
|
||||
CASE
|
||||
WHEN person_verfasser.vorname IS NOT NULL AND person_verfasser.vorname != ''
|
||||
OR person_verfasser.nachname IS NOT NULL AND person_verfasser.nachname != ''
|
||||
THEN CONCAT(person_verfasser.vorname, ' ', person_verfasser.nachname)
|
||||
ELSE NULL
|
||||
END AS verfasser,
|
||||
CASE
|
||||
WHEN person_bearbeiter.vorname IS NOT NULL AND person_bearbeiter.vorname != ''
|
||||
OR person_bearbeiter.nachname IS NOT NULL AND person_bearbeiter.nachname != ''
|
||||
THEN CONCAT(person_bearbeiter.vorname, ' ', person_bearbeiter.nachname)
|
||||
ELSE NULL
|
||||
END AS bearbeiter,
|
||||
count(dms_id) as countDoc, z.notizzuordnung_id,
|
||||
(CASE
|
||||
WHEN n.updateamum >= n.insertamum THEN n.updateamum
|
||||
ELSE n.insertamum
|
||||
END::timestamp, 'DD.MM.YYYY HH24:MI:SS') AS lastUpdate,
|
||||
END) AS lastUpdate,
|
||||
regexp_replace(n.text, '<[^>]*>', '', 'g') as text_stripped,
|
||||
TO_CHAR(n.start::timestamp, 'DD.MM.YYYY') AS start_format,
|
||||
TO_CHAR(n.ende::timestamp, 'DD.MM.YYYY') AS ende_format,
|
||||
@@ -173,10 +186,20 @@ class Notiz_model extends DB_Model
|
||||
public.tbl_notiz_dokument dok USING (notiz_id)
|
||||
LEFT JOIN
|
||||
campus.tbl_dms_version USING (dms_id)
|
||||
LEFT JOIN
|
||||
public.tbl_benutzer p_verfasser ON (p_verfasser.uid = n.verfasser_uid)
|
||||
LEFT JOIN
|
||||
public.tbl_person person_verfasser ON (person_verfasser.person_id = p_verfasser.person_id)
|
||||
LEFT JOIN
|
||||
public.tbl_benutzer p_bearbeiter ON (p_bearbeiter.uid = n.bearbeiter_uid)
|
||||
LEFT JOIN
|
||||
public.tbl_person person_bearbeiter ON (person_bearbeiter.person_id = p_bearbeiter.person_id)
|
||||
WHERE
|
||||
z.$type = ?
|
||||
GROUP BY
|
||||
notiz_id, z.notizzuordnung_id
|
||||
notiz_id, z.notizzuordnung_id,
|
||||
person_verfasser.vorname, person_verfasser.nachname,
|
||||
person_bearbeiter.vorname, person_bearbeiter.nachname
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, array($type, $id));
|
||||
|
||||
@@ -290,6 +290,21 @@ class Person_model extends DB_Model
|
||||
return success($result->vorname. ' '. $result->nachname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get first name of given uid. (Vorname Nachname)
|
||||
* @param $uid
|
||||
* @return array
|
||||
*/
|
||||
public function getFirstName($uid)
|
||||
{
|
||||
$result = getData($this->getByUid($uid))[0];
|
||||
if (!$result) {
|
||||
show_error('Failed loading person');
|
||||
}
|
||||
|
||||
return success($result->vorname);
|
||||
}
|
||||
|
||||
public function checkDuplicate($person_id)
|
||||
{
|
||||
$qry = "SELECT person_id
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
class Profil_update_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_profil_update';
|
||||
$this->pk = ['profil_update_id'];
|
||||
$this->hasSequence = true;
|
||||
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$this->load->library('PermissionLib');
|
||||
}
|
||||
|
||||
/**
|
||||
* getTimestamp
|
||||
* returns insert or update timestamp of a certain profil update
|
||||
*
|
||||
* @param boolean $update: conditional whether to return insertamum or updateamum
|
||||
*/
|
||||
//TODO: function wird nicht verwendet
|
||||
public function getTimestamp($id, $update = false)
|
||||
{
|
||||
$selectStatement = $update ? 'updateamum' : 'insertamum';
|
||||
$this->addSelect([$selectStatement]);
|
||||
$res = $this->load([$id]);
|
||||
return hasData($res) ? getData($res)[0]->$selectStatement : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* getFilesFromChangeRequest
|
||||
*
|
||||
* returns all files associated to a profil update request in the following format:
|
||||
* {dms_id:123 , name:"test"}
|
||||
*
|
||||
* @param boolean $profil_update_id primary key of the profil update request
|
||||
* @return array
|
||||
*/
|
||||
//TODO: function wird nicht verwendet
|
||||
public function getFilesFromChangeRequest($profil_update_id)
|
||||
{
|
||||
$this->addSelect(["requested_change"]);
|
||||
$res = $this->load([$profil_update_id]);
|
||||
$res = hasData($res) ? getData($res)[0] : null;
|
||||
return json_decode($res->requested_change)->files ?: [];
|
||||
}
|
||||
|
||||
|
||||
//? queries the tbl_profil_updates without permissions of the user
|
||||
public function getProfilUpdatesWhere($whereClause)
|
||||
{
|
||||
if (array_key_exists("uid", $whereClause)) {
|
||||
$whereClause["public.tbl_profil_update.uid"] = $whereClause["uid"];
|
||||
unset($whereClause["uid"]);
|
||||
}
|
||||
$this->addSelect(["public.tbl_profil_update.*", "public.tbl_person.vorname"]);
|
||||
$this->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_profil_update.uid");
|
||||
$this->addJoin("public.tbl_person", "public.tbl_person.person_id = public.tbl_benutzer.person_id");
|
||||
$res = $this->loadWhere($whereClause);
|
||||
if (isError($res)) {
|
||||
return $res;
|
||||
}
|
||||
if (hasData($res)) {
|
||||
foreach (getData($res) as $request) {
|
||||
$this->formatProfilRequest($request);
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
|
||||
}
|
||||
|
||||
//? remove File from the Profil Update
|
||||
public function removeFileFromProfilUpdate($dms_id)
|
||||
{
|
||||
|
||||
if(!is_int($dms_id) || $dms_id < 0){
|
||||
return error("not valid dms_id");
|
||||
}
|
||||
|
||||
return $this->execReadOnlyQuery("
|
||||
UPDATE public.tbl_profil_update
|
||||
SET attachment_id = NULL
|
||||
WHERE attachment_id = ?", [$dms_id]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* getProfilUpdateWithPermission
|
||||
*
|
||||
* queries the profil updates and checks if the user trying to query the data has permissions to get the profil updates
|
||||
*
|
||||
* @param string $whereClause additional where clause that will be appended to the db query
|
||||
* @return array array with all the profil updates that the user is eligible to see
|
||||
*/
|
||||
public function getProfilUpdateWithPermission($whereClause = null)
|
||||
{
|
||||
|
||||
$studentBerechtigung = $this->permissionlib->isBerechtigt('student/stammdaten', 's');
|
||||
$mitarbeiterBerechtigung = $this->permissionlib->isBerechtigt('mitarbeiter/stammdaten', 's');
|
||||
$oe_berechtigung = $this->permissionlib->getOE_isEntitledFor('student/stammdaten');
|
||||
|
||||
$lang = "select index from public.tbl_sprache where sprache =" . $this->escape(getUserLanguage());
|
||||
$res = [];
|
||||
|
||||
if ($studentBerechtigung) {
|
||||
|
||||
|
||||
//? Nur wenn der/die AssistentIn auch die Berechtigung in der gleichen Organisationseinheit des Studenten hat
|
||||
$parameters = [];
|
||||
$query = "
|
||||
SELECT
|
||||
profil_update_id, tbl_profil_update.uid, (tbl_person.vorname || ' ' || tbl_person.nachname) AS name , topic, requested_change, tbl_profil_update.updateamum, tbl_profil_update.updatevon, tbl_profil_update.insertamum, tbl_profil_update.insertvon, status, public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated, status_timestamp, status_message, attachment_id
|
||||
FROM public.tbl_profil_update
|
||||
JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status
|
||||
JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid
|
||||
JOIN public.tbl_benutzer ON public.tbl_benutzer.uid = public.tbl_student.student_uid
|
||||
JOIN public.tbl_person ON public.tbl_benutzer.person_id=public.tbl_person.person_id
|
||||
JOIN public.tbl_studiengang ON public.tbl_studiengang.studiengang_kz=public.tbl_student.studiengang_kz
|
||||
Where public.tbl_studiengang.oe_kurzbz IN ? ";
|
||||
$parameters[] = $oe_berechtigung;
|
||||
if ($whereClause) {
|
||||
foreach ($whereClause as $key => $value) {
|
||||
$parameters[] = $value;
|
||||
$query .= " AND " . $key . " = ?";
|
||||
}
|
||||
}
|
||||
|
||||
$studentRequests = $this->execReadOnlyQuery($query, $parameters);
|
||||
|
||||
if (isError($studentRequests))
|
||||
return error("db error: " . getData($studentRequests));
|
||||
$studentRequests = getData($studentRequests) ?: [];
|
||||
foreach ($studentRequests as $request) {
|
||||
array_push($res, $request);
|
||||
}
|
||||
}
|
||||
if ($mitarbeiterBerechtigung) {
|
||||
$this->addSelect(["profil_update_id", "tbl_profil_update.uid", "(tbl_person.vorname || ' ' || tbl_person.nachname) AS name", "topic", "requested_change", "tbl_profil_update.updateamum", "tbl_profil_update.updatevon", "tbl_profil_update.insertamum", "tbl_profil_update.insertvon", "status", "public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] AS status_translated", "status_timestamp", "status_message", "attachment_id"]);
|
||||
$this->addJoin('tbl_profil_update_status', 'tbl_profil_update_status.status_kurzbz=tbl_profil_update.status');
|
||||
$this->addJoin('tbl_mitarbeiter', 'tbl_mitarbeiter.mitarbeiter_uid=tbl_profil_update.uid');
|
||||
$this->addJoin('tbl_benutzer', 'tbl_benutzer.uid=tbl_profil_update.uid');
|
||||
$this->addJoin('tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
|
||||
$mitarbeiterRequests = $this->loadWhere($whereClause);
|
||||
if (isError($mitarbeiterRequests))
|
||||
return error("db error: " . getData($mitarbeiterRequests));
|
||||
$mitarbeiterRequests = getData($mitarbeiterRequests) ?: [];
|
||||
foreach ($mitarbeiterRequests as $request) {
|
||||
array_push($res, $request);
|
||||
}
|
||||
}
|
||||
if ($res) {
|
||||
|
||||
foreach ($res as $request) {
|
||||
$this->formatProfilRequest($request);
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* formatProfilRequest
|
||||
*
|
||||
* formats the the properties of a profilUpdate request row result
|
||||
*
|
||||
* @param stdClass $request unflitered profilUpdate row result from the database
|
||||
* @return void
|
||||
*/
|
||||
private function formatProfilRequest($request)
|
||||
{
|
||||
$request->requested_change = json_decode($request->requested_change);
|
||||
$request->insertamum = !is_null($request->insertamum) ? date_create($request->insertamum)->format('d.m.Y') : null;
|
||||
$request->updateamum = !is_null($request->updateamum) ? date_create($request->updateamum)->format('d.m.Y') : null;
|
||||
$request->status_timestamp = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('d.m.Y') : null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
class Profil_update_status_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_profil_update_status';
|
||||
$this->pk = ['status_kurzbz'];
|
||||
$this->hasSequence = false;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class Profil_update_topic_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_profil_update_topic';
|
||||
$this->pk = ['topic_kurzbz'];
|
||||
$this->hasSequence = false;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
class Projects_Employees_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'sync.tbl_projects_employees';
|
||||
$this->pk = 'projects_employees_id';
|
||||
}
|
||||
|
||||
public function deleteByProjectTaskId($ids)
|
||||
{
|
||||
$qry = "DELETE FROM " . $this->dbTable . "
|
||||
WHERE project_task_id IN ?";
|
||||
|
||||
return $this->execQuery($qry, array($ids));
|
||||
}
|
||||
}
|
||||
@@ -97,7 +97,7 @@ class Betriebsmittelperson_model extends DB_Model
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
public function getBetriebsmittelData($id, $type_id)
|
||||
public function getBetriebsmittelData($id, $type_id, $betriesmitteltypes = null)
|
||||
{
|
||||
switch ($type_id) {
|
||||
case 'person_id':
|
||||
@@ -113,17 +113,31 @@ class Betriebsmittelperson_model extends DB_Model
|
||||
return error("ID nicht gültig");
|
||||
}
|
||||
|
||||
$cond .= " = ? ";
|
||||
$params[] = $id;
|
||||
|
||||
if ($betriesmitteltypes && !isEmptyArray($betriesmitteltypes))
|
||||
{
|
||||
$cond .= " AND bm.betriebsmitteltyp IN ?";
|
||||
$params[] = $betriesmitteltypes;
|
||||
}
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
bm.nummer, bmp.person_id, bm.betriebsmitteltyp, bmp.anmerkung as anmerkung, bmp.retouram, TO_CHAR(bmp.retouram::timestamp, 'DD.MM.YYYY') AS format_retour, bmp.ausgegebenam, TO_CHAR(bmp.ausgegebenam::timestamp, 'DD.MM.YYYY') AS format_ausgabe, bm.beschreibung, bmp.uid, bmp.kaution, bm.betriebsmittel_id, bmp.betriebsmittelperson_id, bm.inventarnummer, bm.nummer2
|
||||
bm.nummer, bmp.person_id, bm.betriebsmitteltyp, bmp.anmerkung as anmerkung,
|
||||
bmp.retouram,
|
||||
bmp.ausgegebenam,
|
||||
bm.beschreibung, bmp.uid, bmp.kaution,
|
||||
bm.betriebsmittel_id, bmp.betriebsmittelperson_id,
|
||||
bm.inventarnummer, bm.nummer2
|
||||
FROM
|
||||
wawi.tbl_betriebsmittelperson bmp
|
||||
wawi.tbl_betriebsmittelperson bmp
|
||||
JOIN
|
||||
wawi.tbl_betriebsmittel bm ON (bmp.betriebsmittel_id = bm.betriebsmittel_id)
|
||||
wawi.tbl_betriebsmittel bm ON (bmp.betriebsmittel_id = bm.betriebsmittel_id)
|
||||
WHERE
|
||||
" . $cond . " = ? ";
|
||||
" . $cond;
|
||||
|
||||
return $this->execQuery($query, array($id));
|
||||
return $this->execQuery($query, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
class Lehretools_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'campus.tbl_lehre_tools';
|
||||
$this->pk = 'lehre_tools_id';
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Laedt die Tools zu einer Lehrveranstaltung
|
||||
* @param $lehrveranstaltung_id
|
||||
* @param $studiensemester_kurzbz
|
||||
*/
|
||||
public function getTools($lehrveranstaltung_id, $studiensemester_kurzbz, $sprache)
|
||||
{
|
||||
$query = "SELECT
|
||||
lehre_tools_id,
|
||||
bezeichnung[(SELECT index FROM public.tbl_sprache WHERE sprache = " . $this->escape($sprache) . ")] AS bezeichnung,
|
||||
kurzbz,
|
||||
basis_url,
|
||||
logo_dms_id
|
||||
FROM
|
||||
campus.tbl_lehre_tools
|
||||
JOIN campus.tbl_lehre_tools_organisationseinheit USING(lehre_tools_id)
|
||||
WHERE
|
||||
campus.tbl_lehre_tools_organisationseinheit.aktiv AND
|
||||
(
|
||||
oe_kurzbz IN(
|
||||
SELECT
|
||||
tbl_studiengang.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
WHERE
|
||||
tbl_lehrveranstaltung.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . "
|
||||
)
|
||||
OR
|
||||
oe_kurzbz IN(
|
||||
SELECT
|
||||
lehrfach.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(lehrfach_id=lehrfach.lehrveranstaltung_id)
|
||||
WHERE
|
||||
tbl_lehreinheit.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
AND tbl_lehreinheit.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . "
|
||||
)
|
||||
)
|
||||
ORDER BY lehre_tools_id";
|
||||
|
||||
$toolsres = $this->execReadOnlyQuery($query);
|
||||
$tools = (hasData($toolsres)) ? getData($toolsres) : array();
|
||||
|
||||
return $tools;
|
||||
}
|
||||
}
|
||||
@@ -12,34 +12,34 @@ class Mitarbeiter_model extends DB_Model
|
||||
$this->pk = 'mitarbeiter_uid';
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the user is a Mitarbeiter.
|
||||
* @param string $uid
|
||||
* @param boolean null $fixangestellt
|
||||
* @return array
|
||||
*/
|
||||
public function isMitarbeiter($uid, $fixangestellt = null)
|
||||
{
|
||||
$this->addSelect('1');
|
||||
/**
|
||||
* Checks if the user is a Mitarbeiter.
|
||||
* @param string $uid
|
||||
* @param boolean null $fixangestellt
|
||||
* @return array
|
||||
*/
|
||||
public function isMitarbeiter($uid, $fixangestellt = null)
|
||||
{
|
||||
$this->addSelect('1');
|
||||
|
||||
if (is_bool($fixangestellt))
|
||||
{
|
||||
$result = $this->loadWhere(array('mitarbeiter_uid' => $uid, 'fixangestellt' => $fixangestellt));
|
||||
}
|
||||
else // default
|
||||
{
|
||||
$result = $this->loadWhere(array('mitarbeiter_uid' => $uid));
|
||||
}
|
||||
if (is_bool($fixangestellt))
|
||||
{
|
||||
$result = $this->loadWhere(array('mitarbeiter_uid' => $uid, 'fixangestellt' => $fixangestellt));
|
||||
}
|
||||
else // default
|
||||
{
|
||||
$result = $this->loadWhere(array('mitarbeiter_uid' => $uid));
|
||||
}
|
||||
|
||||
if(hasData($result))
|
||||
{
|
||||
return success(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return success(false);
|
||||
}
|
||||
}
|
||||
if(hasData($result))
|
||||
{
|
||||
return success(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return success(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt das Personal
|
||||
@@ -98,6 +98,129 @@ class Mitarbeiter_model extends DB_Model
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* gibt Personen mit Übersicht von Vertragsdaten aus
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getPersonenWithContractDetails($person_id = null)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
b.uid , p.person_id,
|
||||
p.vorname, p.nachname,
|
||||
gebdatum,
|
||||
COALESCE(b.alias, b.uid) AS email,
|
||||
STRING_AGG(DISTINCT va.bezeichnung, ', ') AS Vertragsarten,
|
||||
STRING_AGG(DISTINCT u.bezeichnung, ', ') AS Unternehmen,
|
||||
STRING_AGG(d.dienstverhaeltnis_id::TEXT, ', ') AS ids,
|
||||
b.aktiv
|
||||
FROM
|
||||
hr.tbl_dienstverhaeltnis d
|
||||
JOIN
|
||||
public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid
|
||||
JOIN
|
||||
public.tbl_person p ON p.person_id = b.person_id
|
||||
JOIN
|
||||
public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz
|
||||
JOIN
|
||||
hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz
|
||||
";
|
||||
|
||||
if($person_id)
|
||||
{
|
||||
$qry .= " WHERE p.person_id = ?";
|
||||
}
|
||||
|
||||
$qry.= "
|
||||
GROUP BY
|
||||
b.uid, p.person_id, p.vorname, p.nachname, b.alias
|
||||
ORDER BY
|
||||
p.nachname, p.vorname;
|
||||
";
|
||||
|
||||
$params = array($person_id);
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* get current disciplinary Abteilung of person
|
||||
*
|
||||
* @param $person_id
|
||||
*
|
||||
* @return Array benutzerfunktionsdata
|
||||
*/
|
||||
public function getPersonAbteilung($uid)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
bf.benutzerfunktion_id, bf.fachbereich_kurzbz, bf.uid, bf.funktion_kurzbz, bf.updateamum,
|
||||
bf.updatevon, bf.insertamum, bf.insertvon, bf.ext_id, bf.semester, bf.oe_kurzbz,
|
||||
bf.datum_von, bf.datum_bis, bf.bezeichnung, bf.wochenstunden,
|
||||
oe.oe_kurzbz, oe.oe_parent_kurzbz, oe.bezeichnung,
|
||||
oe.organisationseinheittyp_kurzbz, oe.aktiv, oe.mailverteiler,
|
||||
oe.freigabegrenze, oe.kurzzeichen, oe.lehre, oe.standort,
|
||||
oe.warn_semesterstunden_frei, oe.warn_semesterstunden_fix, oe.standort_id
|
||||
FROM tbl_benutzerfunktion bf
|
||||
JOIN public.tbl_organisationseinheit oe USING(oe_kurzbz)
|
||||
WHERE uid = ?
|
||||
AND funktion_kurzbz = 'oezuordnung'
|
||||
AND datum_von <= NOW()
|
||||
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
||||
";
|
||||
$result = $this->execQuery($qry, [$uid]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* get Leitung / Vorgesetzten of current OE
|
||||
*
|
||||
* @param $oe_kurzbz
|
||||
*
|
||||
* @return Array persondata / benutzerfunktionsdata
|
||||
*/
|
||||
public function getLeitungOrg($oe_kurzbz)
|
||||
{
|
||||
$qry = "
|
||||
SELECT bf.benutzerfunktion_id,bf.fachbereich_kurzbz,bf.uid,bf.funktion_kurzbz,
|
||||
bf.updateamum,bf.updatevon,bf.insertamum,bf.insertvon,bf.ext_id,bf.semester,
|
||||
bf.oe_kurzbz,bf.datum_von,bf.datum_bis,bf.bezeichnung,bf.wochenstunden,
|
||||
p.person_id, p.vorname,p.nachname,p.titelpre,p.titelpost
|
||||
FROM public.tbl_benutzerfunktion bf JOIN public.tbl_organisationseinheit oe USING(oe_kurzbz)
|
||||
JOIN public.tbl_benutzer b USING (uid) JOIN public.tbl_mitarbeiter ma ON(b.uid=ma.mitarbeiter_uid)
|
||||
JOIN public.tbl_person p USING(person_id)
|
||||
WHERE funktion_kurzbz='Leitung' AND oe.oe_kurzbz = ?
|
||||
AND datum_von<=now() AND (datum_bis is null OR datum_bis>=now());
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, array($oe_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* get persondata for person_id
|
||||
*
|
||||
* @param $oe_kurzbz
|
||||
*
|
||||
* @return Array persondata
|
||||
*/
|
||||
public function getHeader($person_id)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe
|
||||
FROM
|
||||
public.tbl_person
|
||||
JOIN public.tbl_benutzer b USING(person_id)
|
||||
JOIN public.tbl_mitarbeiter ma ON (ma.mitarbeiter_uid = b.uid)
|
||||
WHERE
|
||||
person_id = ?
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, array($person_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt ein Array mit den UIDs der Vorgesetzten zurück
|
||||
* @return object
|
||||
@@ -213,24 +336,40 @@ class Mitarbeiter_model extends DB_Model
|
||||
|
||||
if (hasData($kurzbzexists) && getData($kurzbzexists)[0])
|
||||
return error('No Kurzbezeichnung could be generated');
|
||||
|
||||
|
||||
return success($kurzbz);
|
||||
}
|
||||
|
||||
public function searchMitarbeiter($filter)
|
||||
/**
|
||||
* Search function for mitarbeiter
|
||||
* @param $filter searchstring: searches for nachname, vorname, mitarbeiter_uid
|
||||
* $param $mode gives the resultobject in different version:
|
||||
* null : "[mitarbeiter_uid], Nachname, Vorname, (mitarbeiter_uid)"
|
||||
* 'mitAkadGrad': "[mitarbeiter_uid], Nachname, Vorname, Titelpre, Titelpost (mitarbeiter_uid)"
|
||||
* 'ohneMaUid' : "[mitarbeiter_uid], Nachname, Vorname, Titelpre, Titelpost"
|
||||
* @return object in 3 versions
|
||||
*/
|
||||
public function searchMitarbeiter($filter, $mode=null)
|
||||
{
|
||||
$filter = strtoLower($filter);
|
||||
|
||||
if ($mode == "mitAkadGrad")
|
||||
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
elseif ($mode == "ohneMaUid")
|
||||
$returnwert = "p.person_id, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre) as mitarbeiter";
|
||||
else
|
||||
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter
|
||||
SELECT " . $returnwert . "
|
||||
FROM
|
||||
public.tbl_mitarbeiter ma
|
||||
public.tbl_mitarbeiter ma
|
||||
JOIN
|
||||
public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid)
|
||||
public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid)
|
||||
JOIN
|
||||
public.tbl_person p on (p.person_id = b.person_id)
|
||||
public.tbl_person p on (p.person_id = b.person_id)
|
||||
WHERE
|
||||
lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
OR
|
||||
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
OR
|
||||
@@ -238,4 +377,57 @@ class Mitarbeiter_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Mitarbeiter for a certain Lehrveranstaltung.
|
||||
*
|
||||
* @param $lehrveranstaltung_id
|
||||
* @return array with Mitarbeiter and their Lehreinheiten
|
||||
*/
|
||||
public function getMitarbeiterFromLV($lehrveranstaltung_id)
|
||||
{
|
||||
$qry = "SELECT DISTINCT
|
||||
lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid
|
||||
FROM
|
||||
lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit
|
||||
WHERE
|
||||
lehrveranstaltung_id= ?
|
||||
AND
|
||||
mitarbeiter_uid=uid
|
||||
AND
|
||||
tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id;";
|
||||
|
||||
$parametersArray = array($lehrveranstaltung_id);
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Lektoren by studiengang_kz
|
||||
*
|
||||
* @param $studiengang_kz
|
||||
* @return array with Mitarbeiter
|
||||
*/
|
||||
public function getLektoren($studiengang_kz)
|
||||
{
|
||||
$qry = "
|
||||
SELECT DISTINCT
|
||||
campus.vw_mitarbeiter.uid,
|
||||
campus.vw_mitarbeiter.vorname,
|
||||
campus.vw_mitarbeiter.nachname,
|
||||
studiengang_kz,
|
||||
tbl_studiengang.typ,
|
||||
tbl_studiengang.kurzbz AS stg_kurzbz
|
||||
FROM
|
||||
campus.vw_mitarbeiter
|
||||
JOIN public.tbl_benutzerfunktion USING (uid)
|
||||
JOIN public.tbl_studiengang USING(oe_kurzbz)
|
||||
WHERE studiengang_kz = ?
|
||||
AND lektor is true
|
||||
ORDER BY campus.vw_mitarbeiter.nachname";
|
||||
|
||||
$parametersArray = array($studiengang_kz);
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,4 +20,16 @@ class Ort_model extends DB_Model
|
||||
|
||||
return $this->OrtModel->loadWhere(array("raumtyp_kurzbz" => $raumtyp_kurzbz));
|
||||
}
|
||||
|
||||
public function getContentID($ort_kurzbz)
|
||||
{
|
||||
|
||||
return $this->execReadOnlyQuery("
|
||||
SELECT content_id
|
||||
FROM public.tbl_ort
|
||||
WHERE ort_kurzbz = ?;
|
||||
",[$ort_kurzbz]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,4 +11,129 @@ class Reservierung_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_reservierung';
|
||||
$this->pk = 'reservierung_id';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $uid
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getReservierungen($start_date, $end_date, $ort_kurzbz = null)
|
||||
{
|
||||
|
||||
$lvplan_reservierungen_query="SELECT r.* , stund.beginn, stund.ende,
|
||||
CASE
|
||||
WHEN r.gruppe_kurzbz IS NOT NULL THEN r.gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',COALESCE(CAST(r.semester AS varchar),'/'),COALESCE(CAST(r.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel
|
||||
FROM campus.vw_reservierung r
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=r.studiengang_kz
|
||||
JOIN lehre.tbl_stunde stund ON stund.stunde = r.stunde
|
||||
LEFT JOIN public.tbl_benutzergruppe bg ON r.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid=?
|
||||
LEFT JOIN public.tbl_studiensemester ss1 ON bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start <= r.datum AND ss1.ende >= r.datum
|
||||
LEFT JOIN public.tbl_studentlehrverband slv ON r.studiengang_kz=slv.studiengang_kz AND slv.student_uid=? AND (slv.semester=r.semester OR r.semester IS NULL) AND (slv.verband=r.verband OR r.verband IS NULL OR r.verband='' OR r.verband='0') AND (slv.gruppe=r.gruppe OR r.gruppe IS NULL OR r.gruppe ='' OR r.gruppe ='0') AND r.gruppe_kurzbz IS NULL
|
||||
LEFT JOIN public.tbl_studiensemester ss2 ON slv.studiensemester_kurzbz = ss2.studiensemester_kurzbz AND ss2.start <=r.datum AND ss2.ende >= r.datum
|
||||
WHERE datum >= ? AND datum <= ? AND (ss1.studiensemester_kurzbz IS NOT NULL
|
||||
OR ss2.studiensemester_kurzbz IS NOT NULL)";
|
||||
|
||||
$raum_reservierungen_query = "SELECT res.*, beginn, ende,
|
||||
CASE
|
||||
WHEN res.gruppe_kurzbz IS NOT NULL THEN res.gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel
|
||||
FROM campus.vw_reservierung res
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = res.stunde
|
||||
WHERE res.ort_kurzbz = ? AND datum >= ? AND datum <= ?";
|
||||
|
||||
$subquery = is_null($ort_kurzbz)? $lvplan_reservierungen_query:$raum_reservierungen_query;
|
||||
|
||||
$query_result= $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
'reservierung' as type, beginn, ende, datum,
|
||||
COALESCE(titel, beschreibung) as topic,
|
||||
array_agg(DISTINCT mitarbeiter_kurzbz) as lektor,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
|
||||
ort_kurzbz, 'FFFFFF' as farbe
|
||||
|
||||
FROM
|
||||
(
|
||||
". $subquery ."
|
||||
) AS subquery
|
||||
|
||||
GROUP BY datum, beginn, ende, ort_kurzbz, titel, beschreibung
|
||||
|
||||
ORDER BY datum, beginn
|
||||
", is_null($ort_kurzbz) ?[getAuthUID(), getAuthUID(),$start_date,$end_date]: [$ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
|
||||
return $query_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $uid
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getReservierungenMitarbeiter($start_date, $end_date, $ort_kurzbz = null)
|
||||
{
|
||||
|
||||
$raum_reservierungen_query = "SELECT res.*, beginn, ende,
|
||||
CASE
|
||||
WHEN res.gruppe_kurzbz IS NOT NULL THEN res.gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel
|
||||
FROM campus.vw_reservierung res
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = res.stunde
|
||||
WHERE res.uid = ? AND datum >= ? AND datum <= ?";
|
||||
|
||||
// $subquery = is_null($ort_kurzbz)? $lvplan_reservierungen_query:$raum_reservierungen_query;
|
||||
$subquery = $raum_reservierungen_query;
|
||||
|
||||
|
||||
$query_result= $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
'reservierung' as type, beginn, ende, datum,
|
||||
COALESCE(titel, beschreibung) as topic,
|
||||
array_agg(DISTINCT mitarbeiter_kurzbz) as lektor,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
|
||||
ort_kurzbz, 'FFFFFF' as farbe
|
||||
|
||||
FROM
|
||||
(
|
||||
". $subquery ."
|
||||
) AS subquery
|
||||
|
||||
GROUP BY datum, beginn, ende, ort_kurzbz, titel, beschreibung
|
||||
|
||||
ORDER BY datum, beginn
|
||||
", [getAuthUID(), $start_date, $end_date]);
|
||||
|
||||
|
||||
return $query_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $uid
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadForUid($uid)
|
||||
{
|
||||
$this->addSelect('r.*');
|
||||
$this->db->join('public.tbl_benutzergruppe bg', 'r.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid=?', 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss1', 'bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start<=r.datum AND ss1.ende>=r.datum', 'LEFT');
|
||||
$this->db->join('public.tbl_studentlehrverband slv', "r.studiengang_kz=slv.studiengang_kz AND slv.student_uid=? AND (slv.semester=r.semester OR r.semester IS NULL) AND (slv.verband=r.verband OR r.verband IS NULL OR r.verband='' OR r.verband='0') AND (slv.gruppe=r.gruppe OR r.gruppe IS NULL OR r.gruppe='' OR r.gruppe='0') AND r.gruppe_kurzbz IS NULL", 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss2', 'slv.studiensemester_kurzbz=ss2.studiensemester_kurzbz AND ss2.start<=r.datum AND ss2.ende>=r.datum', 'LEFT');
|
||||
$this->db->or_where('ss1.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
$this->db->or_where('ss2.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
|
||||
$query = $this->db->get_compiled_select('campus.vw_reservierung r');
|
||||
|
||||
return $this->execQuery($query, [$uid, $uid]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,19 @@ class Stunde_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_stunde';
|
||||
$this->pk = 'stunde';
|
||||
}
|
||||
|
||||
/**
|
||||
* $time needs to be of PGSQL TIME format
|
||||
*/
|
||||
public function getStundeForTime($time) {
|
||||
$query = "
|
||||
SELECT min(stunde) as stunde FROM (
|
||||
SELECT stunde, extract(epoch from (beginn-?)) AS delta FROM lehre.tbl_stunde
|
||||
UNION
|
||||
SELECT stunde, extract(epoch from (ende-?)) AS delta FROM lehre.tbl_stunde
|
||||
) foo WHERE delta>=0
|
||||
";
|
||||
|
||||
return $this->execReadOnlyQuery($query, [$time, $time]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,528 @@ class Stundenplan_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_stundenplan';
|
||||
$this->pk = 'stundenplan_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $ort_kurzbz
|
||||
* @param string $date
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getRoomDataOnInterval($ort_kurzbz,$start_date,$end_date){
|
||||
|
||||
|
||||
|
||||
/*$raum_stundenplan= $this->execReadOnlyQuery("
|
||||
-- merging all reservierungs information with the stundenplan information but with different types
|
||||
SELECT 'stundenplan_eintrag' as eintrags_type, CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) AS stg, CONCAT(lehrfach,'-',lehrform) AS lv_info, ort_kurzbz, studiengang_kz, uid, stunde, datum, titel, semester, verband, gruppe, gruppe_kurzbz, stg_kurzbz, * FROM lehre.vw_stundenplan sp
|
||||
WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
UNION ALL
|
||||
SELECT 'reservierungs_eintrag' as eintrags_type, NULL, NULL, ort_kurzbz, studiengang_kz, uid, stunde, datum, titel, semester, verband, gruppe, gruppe_kurzbz, stg_kurzbz, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM lehre.vw_reservierung res
|
||||
WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
", [$ort_kurzbz, $start_date, $end_date,$ort_kurzbz, $start_date, $end_date]);
|
||||
*/
|
||||
|
||||
|
||||
$raum_stundenplan= $this->execReadOnlyQuery("
|
||||
SELECT CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) AS stg, CONCAT(lehrfach,'-',lehrform) AS lv_info, * FROM lehre.vw_stundenplan sp
|
||||
WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
", [$ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
return $raum_stundenplan;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $ort_kurzbz The room to query the planning for
|
||||
* @param string $start_date The start date of the query interval
|
||||
* @param string $end_date The end date of the query interval
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function groupedCalendarEvents($ort_kurzbz,$start_date,$end_date){
|
||||
|
||||
$gruppierteEvents= $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
|
||||
'reservierung' as type,
|
||||
NULL as unr,datum, stunde,
|
||||
titel AS topic,
|
||||
beschreibung as beschreibung,
|
||||
string_agg(DISTINCT gruppe, '/') as gruppe,
|
||||
string_agg(DISTINCT lektor, '/') as lektor,
|
||||
res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit
|
||||
|
||||
FROM
|
||||
|
||||
(
|
||||
SELECT
|
||||
NULL as unr,datum, stunde,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(res.stg_kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/'))
|
||||
END as gruppe,
|
||||
CASE
|
||||
WHEN mit.kurzbz IS NOT NULL THEN mit.kurzbz
|
||||
ELSE uid
|
||||
END as lektor,
|
||||
res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit
|
||||
FROM lehre.vw_reservierung res
|
||||
|
||||
LEFT JOIN public.tbl_mitarbeiter mit ON mit.mitarbeiter_uid=uid
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
|
||||
WHERE
|
||||
res.ort_kurzbz = ?
|
||||
AND res.datum >= ?
|
||||
AND res.datum <= ?
|
||||
) as res
|
||||
|
||||
GROUP BY res.ort_kurzbz,res.studiengang_kz, res.datum, res.stunde, res.titel, res.beschreibung
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
|
||||
'stundenplan' as type,
|
||||
unr,datum, stunde,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
'' as beschreibung,
|
||||
string_agg(DISTINCT gruppe, '/') as gruppe,
|
||||
string_agg(DISTINCT lektor, '/') as lektor,
|
||||
ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
unr,datum, stunde,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/'))
|
||||
END as gruppe,
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
ELSE lektor
|
||||
END as lektor,
|
||||
ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit
|
||||
|
||||
FROM lehre.vw_stundenplan sp
|
||||
|
||||
WHERE ort_kurzbz = ?
|
||||
AND datum >= ?
|
||||
AND datum <= ?
|
||||
|
||||
) as sp
|
||||
|
||||
GROUP BY
|
||||
|
||||
ort_kurzbz,unr, datum, stunde, lehreinheit_id, lehrfach_id,studiengang_kz,titel,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit
|
||||
|
||||
ORDER BY datum, stunde
|
||||
", [$ort_kurzbz, $start_date, $end_date, $ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
return $gruppierteEvents;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* groups rows of a subquery that fetches data from the lehre.vw_stundenplan table
|
||||
* @param string $stundenplanViewQuery the subquery used to group the result
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function stundenplanGruppierung($stundenplanViewQuery)
|
||||
{
|
||||
$query_result = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
'lehreinheit' as type, beginn, ende, datum,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
array_agg(DISTINCT lektor) as lektor,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
string_agg(DISTINCT ort_kurzbz, '/') as ort_kurzbz,
|
||||
array_agg(DISTINCT lehreinheit_id) as lehreinheit_id,
|
||||
|
||||
titel, lehrfach, lehrform, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT unr,datum,beginn, ende,
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
ELSE lektor
|
||||
END as lektor,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel,
|
||||
(SELECT bezeichnung
|
||||
FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz IN(
|
||||
SELECT oe_kurzbz
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id = sp.lehrveranstaltung_id
|
||||
)) as organisationseinheit,
|
||||
ort_kurzbz, studiengang_kz, titel,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit,gruppe, verband, semester,stg_kurzbz
|
||||
|
||||
FROM (".$stundenplanViewQuery.") sp
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde
|
||||
|
||||
) as subquery
|
||||
|
||||
GROUP BY unr, datum, beginn, ende, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
ORDER BY datum, beginn
|
||||
");
|
||||
|
||||
return $query_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* groups rows of a subquery that fetches data from the lehre.vw_stundenplan table or lehre.vw_stundenplandev
|
||||
* @param string $stundenplanViewQuery the subquery used to group the result regarding consecutive hours (Tab LV Termine)
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function stundenplanGruppierungConsecutive($stundenplanViewQuery)
|
||||
{
|
||||
$query_result = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
distinct lehrveranstaltung_id,
|
||||
datum,
|
||||
MIN(beginn) as beginn,
|
||||
MAX(ende) as ende,
|
||||
type,
|
||||
topic,
|
||||
gruppe,
|
||||
ort_kurzbz,
|
||||
lehreinheit_id,
|
||||
lehrfach_bez,
|
||||
lektor,
|
||||
lektorname,
|
||||
gruppen_kuerzel,
|
||||
farbe
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
'lehreinheit' as type, beginn, ende, datum,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
array_agg(DISTINCT lektor) as lektor,
|
||||
array_agg(DISTINCT lektorname) as lektorname,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
array_agg(DISTINCT (gruppen_kuerzel)) as gruppen_kuerzel,
|
||||
string_agg(DISTINCT ort_kurzbz, '/') as ort_kurzbz,
|
||||
array_agg(DISTINCT lehreinheit_id) as lehreinheit_id,
|
||||
titel, lehrfach, lehrform, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT unr,datum,beginn, ende,
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
ELSE lektor
|
||||
END as lektor,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE (SELECT UPPER(typ || kurzbz)
|
||||
FROM public.tbl_studiengang
|
||||
WHERE studiengang_kz=sp.studiengang_kz) || COALESCE(sp.semester,'0') || COALESCE(sp.verband,'') || COALESCE(sp.gruppe,'')
|
||||
END as gruppen_kuerzel,
|
||||
(SELECT bezeichnung
|
||||
FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz IN(
|
||||
SELECT oe_kurzbz
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id = sp.lehrveranstaltung_id
|
||||
)) as organisationseinheit,
|
||||
ort_kurzbz, studiengang_kz, titel,lehreinheit_id,lehrfach_id,sp.anmerkung,fix,lehrveranstaltung_id,
|
||||
stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,
|
||||
anmerkung_lehreinheit,gruppe, verband, semester,stg_kurzbz,
|
||||
CONCAT(p.nachname, ' ', p.vorname) as lektorname
|
||||
|
||||
FROM (".$stundenplanViewQuery.") sp
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde
|
||||
LEFT JOIN public.tbl_benutzer bn ON bn.uid = sp.uid
|
||||
LEFT JOIN public.tbl_person p ON p.person_id = bn.person_id
|
||||
) as subquery
|
||||
|
||||
GROUP BY unr, datum, beginn, ende, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit,
|
||||
farbe, lehrveranstaltung_id
|
||||
|
||||
ORDER BY datum, beginn) t
|
||||
|
||||
GROUP BY
|
||||
lehrveranstaltung_id,
|
||||
type,
|
||||
datum,
|
||||
topic,
|
||||
lektor,
|
||||
lehrfach_bez,
|
||||
gruppe,
|
||||
ort_kurzbz,
|
||||
lehreinheit_id,
|
||||
lektorname,
|
||||
gruppen_kuerzel,
|
||||
farbe
|
||||
ORDER BY
|
||||
datum, beginn
|
||||
"
|
||||
);
|
||||
return $query_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* queries Stundenplan but for a whole lva, irrespective of who is requesting it
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getStundenplanLVA($start_date, $end_date, $lv_id) {
|
||||
return $this->execReadOnlyQuery("
|
||||
|
||||
SELECT
|
||||
'lehreinheit' as type, beginn, ende, datum,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
array_agg(DISTINCT lektor) as lektor,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
string_agg(DISTINCT ort_kurzbz, '/') as ort_kurzbz,
|
||||
array_agg(DISTINCT lehreinheit_id) as lehreinheit_id,
|
||||
|
||||
titel, lehrfach, lehrform, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT unr,datum,beginn, ende,
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
ELSE lektor
|
||||
END as lektor,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel,
|
||||
(SELECT bezeichnung
|
||||
FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz IN(
|
||||
SELECT oe_kurzbz
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id = sp.lehrveranstaltung_id
|
||||
)) as organisationseinheit,
|
||||
ort_kurzbz, studiengang_kz, titel,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit,gruppe, verband, semester,stg_kurzbz
|
||||
|
||||
FROM (
|
||||
SELECT sp.*
|
||||
FROM lehre.vw_stundenplan sp
|
||||
WHERE
|
||||
sp.datum >= ?
|
||||
AND sp.datum <= ? AND sp.lehrveranstaltung_id = ?
|
||||
) sp
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde
|
||||
|
||||
) as subquery
|
||||
|
||||
GROUP BY unr, datum, beginn, ende, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
ORDER BY datum, beginn
|
||||
", [$start_date, $end_date, $lv_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* queries Stundenplan and filters by assigned ma_kurzbz, very similar to get by LVA
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getStundenplanMitarbeiter($start_date, $end_date, $ma_uid) {
|
||||
return $this->execReadOnlyQuery("
|
||||
|
||||
SELECT
|
||||
'lehreinheit' as type, beginn, ende, datum,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
array_agg(DISTINCT lektor) as lektor,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
string_agg(DISTINCT ort_kurzbz, '/') as ort_kurzbz,
|
||||
array_agg(DISTINCT lehreinheit_id) as lehreinheit_id,
|
||||
|
||||
titel, lehrfach, lehrform, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT unr,datum,beginn, ende,
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
ELSE sp.lektor
|
||||
END as lektor,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel,
|
||||
(SELECT bezeichnung
|
||||
FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz IN(
|
||||
SELECT oe_kurzbz
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id = sp.lehrveranstaltung_id
|
||||
)) as organisationseinheit,
|
||||
sp.ort_kurzbz, sp.studiengang_kz, sp.titel,sp.lehreinheit_id,sp.lehrfach_id,sp.anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit,gruppe, verband, semester,stg_kurzbz
|
||||
|
||||
FROM (
|
||||
SELECT sp.*
|
||||
FROM lehre.vw_stundenplan sp
|
||||
WHERE
|
||||
sp.datum >= ?
|
||||
AND sp.datum <= ?
|
||||
) sp
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde
|
||||
JOIN public.tbl_mitarbeiter ON public.tbl_mitarbeiter.kurzbz = sp.mitarbeiter_kurzbz
|
||||
WHERE mitarbeiter_uid = ?
|
||||
|
||||
) as subquery
|
||||
|
||||
GROUP BY unr, datum, beginn, ende, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
ORDER BY datum, beginn", [$start_date, $end_date, $ma_uid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific student within the current semester.
|
||||
*
|
||||
* @param isLvList if condition needed for Tab LV Termine is given
|
||||
* @param db_stpl_table enables switch to db 'stundenplandev'
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getStundenplanQuery($start_date, $end_date, $semester, $gruppen, $studentlehrverbaende, $isLvList=false, $db_stpl_table='stundenplan'){
|
||||
|
||||
// helper function to check if either $gruppen or $studentlehrverbaende are empty for each semester
|
||||
$emptyCheck = function($toBeCheckedArray) use ($semester){
|
||||
$result = true;
|
||||
$sem = array_keys($semester);
|
||||
foreach($sem as $s){
|
||||
if(count($toBeCheckedArray[$s]) > 0){
|
||||
$result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
};
|
||||
|
||||
// if both the gruppen and the studentlehrverbaende are empty we early return
|
||||
if($emptyCheck($gruppen) && $emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$query =
|
||||
"select sp.*
|
||||
from lehre.vw_".$db_stpl_table." sp
|
||||
WHERE
|
||||
sp.datum >= ".$this->escape($start_date)."
|
||||
AND sp.datum <= ".$this->escape($end_date);
|
||||
|
||||
// adds the AND sql chain only if both $gruppen and $studentlehrverbaende are not empty
|
||||
if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query .= " AND ( ";
|
||||
}
|
||||
|
||||
foreach($semester as $sem => $semester_date_range)
|
||||
{
|
||||
|
||||
foreach($semester_date_range as $sem_date => $sem_date_range)
|
||||
{
|
||||
// if there are not groups for the semester skip the iteration step
|
||||
if(!array_key_exists($sem_date,$gruppen) || count($gruppen[$sem_date]) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// converts the array of gruppen strings into a sql IN (_,_,_) chain
|
||||
$query .="(sp.gruppe_kurzbz IN (" .implode(',',$gruppen[$sem_date]).") AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende)." )";
|
||||
|
||||
$query .="OR";
|
||||
}
|
||||
}
|
||||
|
||||
// if there are no studentlehrverbaende and the gruppen are not empty, we can remove the last OR added after the groups
|
||||
if($emptyCheck($studentlehrverbaende) && !$emptyCheck($gruppen))
|
||||
{
|
||||
$query = substr($query, 0, -2);
|
||||
}
|
||||
|
||||
//Condition for showLVList FHC4
|
||||
if(!$isLvList)
|
||||
$stringGroupLv = "AND gruppe_kurzbz is null";
|
||||
else
|
||||
$stringGroupLv ="";
|
||||
|
||||
foreach($semester as $sem=>$semester_date_range)
|
||||
{
|
||||
foreach($semester_date_range as $sem_date => $sem_date_range)
|
||||
{
|
||||
if(!array_key_exists($sem_date,$studentlehrverbaende) || count($studentlehrverbaende[$sem_date]) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband)
|
||||
{
|
||||
$query .= "((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||
// Eintraege fuer den ganzen Verband
|
||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||
// Eintraege fuer das ganze Semester
|
||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)
|
||||
." AND ".$this->escape($sem_date_range->ende).")". $stringGroupLv. ")";
|
||||
|
||||
$query .="OR";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if the studentlehrverbaende is not empty we can remove the last OR that was added to the query
|
||||
if(!$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query = substr($query, 0, -2);
|
||||
}
|
||||
|
||||
// closes the AND sql chain only if it was opened previously
|
||||
if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query .= ")";
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific room within a date range.
|
||||
* @param string $ort_kurzbz the ort from which we want to query the stundenplan events
|
||||
* @param string $start_date (inclusive) the minimum date that an event should have to be fetched
|
||||
* @param string $end_date (inclusive) the maximum date that an event should not extend to be fetched
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRoomQuery($ort_kurzbz, $start_date, $end_date)
|
||||
{
|
||||
return
|
||||
"select sp.*
|
||||
FROM lehre.vw_stundenplan sp
|
||||
WHERE ort_kurzbz = ".$this->escape($ort_kurzbz)."
|
||||
AND datum >= ".$this->escape($start_date)."
|
||||
AND datum <= ".$this->escape($end_date);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $uid
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadForUid($uid)
|
||||
{
|
||||
$this->addSelect(['sp.*','le.studiensemester_kurzbz']);
|
||||
$this->db->join('public.tbl_benutzergruppe bg', 'sp.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid=?', 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss1', 'bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start<=sp.datum AND ss1.ende>=sp.datum', 'LEFT');
|
||||
$this->db->join('public.tbl_studentlehrverband slv', "sp.studiengang_kz=slv.studiengang_kz AND slv.student_uid=? AND (slv.semester=sp.semester OR sp.semester IS NULL) AND (slv.verband=sp.verband OR sp.verband IS NULL OR sp.verband='' OR sp.verband='0') AND (slv.gruppe=sp.gruppe OR sp.gruppe IS NULL OR sp.gruppe='' OR sp.gruppe='0') AND sp.gruppe_kurzbz IS NULL", 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss2', 'slv.studiensemester_kurzbz=ss2.studiensemester_kurzbz AND ss2.start<=sp.datum AND ss2.ende>=sp.datum', 'LEFT');
|
||||
$this->db->join('lehre.tbl_lehreinheit le', 'le.lehreinheit_id=sp.lehreinheit_id', 'LEFT');
|
||||
$this->db->or_where('ss1.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
$this->db->or_where('ss2.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
|
||||
$query = $this->db->get_compiled_select('lehre.vw_stundenplan sp');
|
||||
|
||||
return $this->execQuery($query, [$uid, $uid]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ class Stundenplandev_model extends DB_Model
|
||||
$this->pk = 'stundenplandev_id';
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getMissingDirectGroups($studiensemester_kurzbz = null)
|
||||
{
|
||||
$qry = "
|
||||
|
||||
@@ -13,5 +13,33 @@ class Stundensatz_model extends DB_Model
|
||||
$this->pk = 'stundensatz_id';
|
||||
$this->hasSequence = true;
|
||||
}
|
||||
|
||||
|
||||
public function getStundensatzByDatum($uid, $beginn, $ende = null, $typ = null)
|
||||
{
|
||||
$qry = "SELECT
|
||||
*
|
||||
FROM
|
||||
hr.tbl_stundensatz
|
||||
WHERE
|
||||
uid = ?
|
||||
AND (gueltig_bis >= ? OR gueltig_bis is null)";
|
||||
|
||||
$params = array($uid, $beginn);
|
||||
|
||||
if (!is_null($ende))
|
||||
{
|
||||
$qry .= " AND (gueltig_von <= ?)";
|
||||
$params[] = $ende;
|
||||
}
|
||||
|
||||
if (!is_null($typ))
|
||||
{
|
||||
$qry .= " AND stundensatztyp = ?";
|
||||
$params[] = $typ;
|
||||
}
|
||||
|
||||
$qry .= " ORDER BY gueltig_bis DESC NULLS FIRST, gueltig_von DESC NULLS LAST LIMIT 1;";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -85,7 +85,7 @@ class Message_model extends DB_Model
|
||||
*/
|
||||
public function getMessagesOfPerson($person_id, $status = null)
|
||||
{
|
||||
$sql = 'SELECT m.message_id,
|
||||
$sql = "SELECT m.message_id,
|
||||
m.person_id,
|
||||
m.subject,
|
||||
m.body,
|
||||
@@ -122,7 +122,7 @@ class Message_model extends DB_Model
|
||||
) s ON (m.message_id = s.message_id AND re.person_id = s.person_id)
|
||||
WHERE se.person_id = ?
|
||||
OR re.person_id = ?
|
||||
';
|
||||
";
|
||||
|
||||
if (is_numeric($status))
|
||||
{
|
||||
@@ -230,4 +230,135 @@ class Message_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets messages for a person for tableMessages.
|
||||
* @param $person_id
|
||||
* paginationInitialPage: 1,
|
||||
* @param $offset number to skip, calculated by tabulatorParam paginationInitialPage and paginationSize, refers to specified numer of skipped items
|
||||
* and page
|
||||
* @param $limit refers to tabulatorParam paginationSize
|
||||
* @return array|null
|
||||
*/
|
||||
public function getMessagesForTable($person_id, $offset, $limit)
|
||||
{
|
||||
$sql_base = "
|
||||
SELECT
|
||||
m.message_id AS message_id,
|
||||
m.subject AS subject,
|
||||
m.body AS body,
|
||||
m.insertamum AS insertamum,
|
||||
m.relationmessage_id AS relationmessage_id,
|
||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
|
||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
|
||||
m.person_id as sender_id,
|
||||
r.person_id as recipient_id,
|
||||
MAX(ss.status) as status,
|
||||
MAX(ss.insertamum) as statusdatum
|
||||
FROM public.tbl_msg_message m
|
||||
JOIN public.tbl_msg_recipient r USING(message_id)
|
||||
JOIN public.tbl_msg_status ss ON(r.message_id = ss.message_id AND ss.person_id = r.person_id)
|
||||
WHERE m.person_id = ?
|
||||
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
|
||||
UNION ALL
|
||||
SELECT
|
||||
m.message_id AS message_id,
|
||||
m.subject AS subject,
|
||||
m.body AS body,
|
||||
m.insertamum AS insertamum,
|
||||
m.relationmessage_id AS relationmessage_id,
|
||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = m.person_id) as sender,
|
||||
(SELECT COALESCE(titelpre,'') || ' ' || COALESCE(vorname,'') || ' ' || COALESCE(nachname,'') || ' ' || COALESCE(titelpost,'') FROM public.tbl_person WHERE person_id = r.person_id) as recipient,
|
||||
m.person_id as sender_id,
|
||||
r.person_id as recipient_id,
|
||||
MAX(ss.status) as status,
|
||||
MAX(ss.insertamum) as statusdatum
|
||||
FROM public.tbl_msg_recipient r
|
||||
JOIN public.tbl_msg_status ss USING(message_id, person_id)
|
||||
JOIN public.tbl_msg_message m USING(message_id)
|
||||
WHERE r.person_id = ?
|
||||
GROUP BY m.message_id, m.subject, m.body, m.insertamum, m.relationmessage_id, sender, recipient, sender_id, recipient_id
|
||||
";
|
||||
$sql = "
|
||||
SELECT COUNT(*) AS count FROM (
|
||||
" . $sql_base . "
|
||||
) a
|
||||
";
|
||||
|
||||
$parametersArray = array($person_id, $person_id);
|
||||
|
||||
$count = $this->execQuery($sql, $parametersArray);
|
||||
|
||||
if (isError($count))
|
||||
return $count;
|
||||
|
||||
$count = ceil(current(getData($count))->count/$limit);
|
||||
$sql = "
|
||||
SELECT * FROM (
|
||||
" . $sql_base . "
|
||||
) a
|
||||
ORDER BY insertamum DESC
|
||||
LIMIT ?
|
||||
OFFSET ?
|
||||
";
|
||||
|
||||
$parametersArray = array($person_id, $person_id, $limit, $offset);
|
||||
|
||||
$data = $this->execQuery($sql, $parametersArray);
|
||||
|
||||
if (isError($data))
|
||||
return $data;
|
||||
|
||||
$data = getData($data);
|
||||
|
||||
return success(['data' => $data, 'count' => $count]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes entry in dependency table tbl_msg_recipient
|
||||
*
|
||||
* @param $message_id
|
||||
* @return boolean success
|
||||
*/
|
||||
public function deleteMessageRecipient($message_id)
|
||||
{
|
||||
$sql = "
|
||||
DELETE FROM public.tbl_msg_recipient
|
||||
WHERE message_id = ?;
|
||||
";
|
||||
|
||||
return $this->execQuery($sql, array($message_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes entry in dependency table tbl_msg_status
|
||||
*
|
||||
* @param $message_id
|
||||
* @return boolean success
|
||||
*/
|
||||
public function deleteMessageStatus($message_id)
|
||||
{
|
||||
$sql = "
|
||||
DELETE FROM public.tbl_msg_status
|
||||
WHERE message_id = ?;
|
||||
";
|
||||
|
||||
return $this->execQuery($sql, array($message_id));
|
||||
}
|
||||
/**
|
||||
* Deletes entry in dependency table tbl_msg_message
|
||||
*
|
||||
* @param $message_id
|
||||
* @return boolean success
|
||||
*/
|
||||
public function deleteMessage($message_id)
|
||||
{
|
||||
$sql = "
|
||||
DELETE FROM public.tbl_msg_message
|
||||
WHERE message_id = ?;
|
||||
";
|
||||
|
||||
return $this->execQuery($sql, array($message_id));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Notiztyp_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_notiz_typ';
|
||||
$this->pk = 'typ_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,19 @@ class Sprache_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_sprache';
|
||||
$this->pk = 'sprache';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $sprachen
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadMultiple($sprachen)
|
||||
{
|
||||
$this->db->where_in('sprache', $sprachen);
|
||||
|
||||
$this->addOrder('index');
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,6 +66,15 @@ class Variable_model extends DB_Model
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($vardata['emailadressentrennzeichen']))
|
||||
{
|
||||
$vardata['emailadressentrennzeichen'] =
|
||||
(defined('DEFAULT_EMAILADRESSENTRENNZEICHEN'))
|
||||
? DEFAULT_EMAILADRESSENTRENNZEICHEN
|
||||
: ',';
|
||||
}
|
||||
|
||||
$result = success($vardata);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ class Vorlage_model extends DB_Model
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns mume types
|
||||
* Returns mime types
|
||||
*/
|
||||
public function getMimeTypes()
|
||||
{
|
||||
@@ -21,4 +21,130 @@ class Vorlage_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all Vorlagen for archive
|
||||
*/
|
||||
public function getArchivVorlagen()
|
||||
{
|
||||
$query ="SELECT * FROM public.tbl_vorlage WHERE archivierbar=true ORDER BY bezeichnung";
|
||||
|
||||
return $this->execQuery($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all Vorlagen
|
||||
* that belongs to the organisation units of the user
|
||||
* and the parents of those organisation units until the root of the
|
||||
* @param Array Array of $oe_kurzbz
|
||||
* @return object Array of Vorlagen
|
||||
*/
|
||||
public function getAllVorlagenByOe($oe_kurzbz)
|
||||
{
|
||||
// Loads library OrganisationseinheitLib
|
||||
$this->load->library('OrganisationseinheitLib');
|
||||
|
||||
$vorlage = success(array()); // Default value
|
||||
|
||||
$table = '(
|
||||
SELECT v.vorlage_kurzbz,
|
||||
v.bezeichnung,
|
||||
vs.version,
|
||||
vs.oe_kurzbz,
|
||||
vs.aktiv,
|
||||
vs.subject,
|
||||
vs.text,
|
||||
v.mimetype
|
||||
FROM tbl_vorlagestudiengang vs
|
||||
JOIN tbl_vorlage v USING(vorlage_kurzbz)
|
||||
) templates';
|
||||
|
||||
$alias = 'templates';
|
||||
|
||||
$fields = array(
|
||||
'templates.vorlage_kurzbz AS id',
|
||||
'templates.bezeichnung || \' (\' || UPPER(templates.oe_kurzbz) || \')\' AS description'
|
||||
);
|
||||
|
||||
$where = 'templates.aktiv = TRUE
|
||||
AND templates.subject IS NOT NULL
|
||||
AND templates.text IS NOT NULL
|
||||
AND templates.mimetype = \'text/html\'
|
||||
GROUP BY 1, 2, 3';
|
||||
|
||||
$order_by = 'description ASC';
|
||||
|
||||
if (!is_array($oe_kurzbz))
|
||||
{
|
||||
$vorlage = $this->organisationseinheitlib->treeSearchEntire(
|
||||
$table,
|
||||
$alias,
|
||||
$fields,
|
||||
$where,
|
||||
$order_by,
|
||||
$oe_kurzbz
|
||||
);
|
||||
}
|
||||
else // is an array
|
||||
{
|
||||
// Get the vorlage for each organisation unit
|
||||
foreach($oe_kurzbz as $val)
|
||||
{
|
||||
$tmpVorlage = $this->organisationseinheitlib->treeSearchEntire(
|
||||
$table,
|
||||
$alias,
|
||||
$fields,
|
||||
$where,
|
||||
$order_by,
|
||||
$val
|
||||
);
|
||||
|
||||
// Everything is ok and data are inside
|
||||
if (hasData($tmpVorlage))
|
||||
{
|
||||
// If it's the first vorlage copy it
|
||||
if (!hasData($vorlage))
|
||||
{
|
||||
for ($j = 0; $j < count(getData($tmpVorlage)); $j++)
|
||||
{
|
||||
if (getData($tmpVorlage)[$j]->id != '')
|
||||
{
|
||||
array_push($vorlage->retval, getData($tmpVorlage)[$j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // checks for duplicates, if it's not already present push it into the array getData($vorlage)
|
||||
{
|
||||
for ($j = 0; $j < count(getData($tmpVorlage)); $j++)
|
||||
{
|
||||
$found = false;
|
||||
$currentTmpVorlageData = null;
|
||||
|
||||
for ($i = 0; $i < count(getData($vorlage)); $i++)
|
||||
{
|
||||
$currentTmpVorlageData = getData($tmpVorlage)[$j];
|
||||
|
||||
if (getData($vorlage)[$i]->id == getData($tmpVorlage)[$j]->id
|
||||
&& getData($vorlage)[$i]->_pk == getData($tmpVorlage)[$j]->_pk
|
||||
&& getData($vorlage)[$i]->_ppk == getData($tmpVorlage)[$j]->_ppk
|
||||
&& getData($vorlage)[$i]->_jtpk == getData($tmpVorlage)[$j]->_jtpk)
|
||||
{
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found && $currentTmpVorlageData->id != '')
|
||||
{
|
||||
array_push($vorlage->retval, $currentTmpVorlageData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $vorlage;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,49 @@ class Vorlagestudiengang_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_vorlagestudiengang';
|
||||
$this->pk = 'vorlagestudiengang_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Current Vorlagestudiengang
|
||||
*
|
||||
* @param string $vorlage_kurzbz
|
||||
* @param string $oe_kurzbz Or studiengang_kz
|
||||
* @param integer $version (optional)
|
||||
* @param boolean|null $active (optional)
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getCurrent($vorlage_kurzbz, $oe_kurzbz, $version = null, $active = true)
|
||||
{
|
||||
if (is_numeric($oe_kurzbz)) {
|
||||
$initselect = "SELECT oe_kurzbz, 1 AS l FROM public.tbl_studiengang WHERE studiengang_kz = " . $this->escape($oe_kurzbz);
|
||||
} else {
|
||||
$initselect = "SELECT oe_kurzbz, 1 AS l FROM public.tbl_organisationseinheit WHERE oe_kurzbz = " . $this->escape($oe_kurzbz);
|
||||
}
|
||||
|
||||
$this->addJoin("(
|
||||
WITH RECURSIVE tmp (oe_kurzbz, l) AS (
|
||||
" . $initselect . "
|
||||
UNION ALL
|
||||
SELECT o.oe_parent_kurzbz AS oe_kurzbz, l+1 AS l
|
||||
FROM tmp
|
||||
JOIN public.tbl_organisationseinheit o USING (oe_kurzbz)
|
||||
WHERE o.oe_parent_kurzbz IS NOT NULL
|
||||
) SELECT * FROM tmp
|
||||
) oe", "oe_kurzbz");
|
||||
|
||||
if (!is_null($version))
|
||||
$this->db->where('version', $version);
|
||||
if ($active)
|
||||
$this->db->where('aktiv', true);
|
||||
|
||||
$this->addOrder('l', 'ASC');
|
||||
$this->addOrder('version', 'DESC');
|
||||
$this->addLimit(1);
|
||||
|
||||
$result = $this->loadWhere([
|
||||
'vorlage_kurzbz' => $vorlage_kurzbz
|
||||
]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,31 @@ class Ablauf_model extends DB_Model
|
||||
$this->dbTable = 'testtool.tbl_ablauf';
|
||||
$this->pk = 'ablauf_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Weighting of the respective ranking test areas
|
||||
* @param $studiengang_kz Studiengang_kz
|
||||
* @param $semester Integer optional
|
||||
* @return array of weightings per ranking test areas of given studiengang
|
||||
*/
|
||||
public function getAblaufGebieteAndGewichte($studiengang_kz, $semester = null)
|
||||
{
|
||||
$parametersArray = array($studiengang_kz);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
tbl_ablauf.gebiet_id, tbl_ablauf.gewicht
|
||||
FROM
|
||||
testtool.tbl_ablauf
|
||||
WHERE
|
||||
tbl_ablauf.studiengang_kz= ?";
|
||||
|
||||
if($semester)
|
||||
{
|
||||
$qry .= " AND semester = ?";
|
||||
array_push($parametersArray, $semester);
|
||||
|
||||
}
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,14 @@ class Dienstverhaeltnis_model extends DB_Model
|
||||
}
|
||||
|
||||
$qry .="
|
||||
ORDER BY dv.von desc
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN (COALESCE(dv.bis, '2999-12-31'::date) - NOW()::date) < 0 THEN NULL
|
||||
ELSE
|
||||
(COALESCE(dv.bis, '2999-12-31'::date) - NOW()::date)
|
||||
END ASC NULLS LAST,
|
||||
COALESCE(dv.bis, '2999-12-31'::date) DESC,
|
||||
dv.von DESC
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, $data);
|
||||
|
||||
@@ -33,41 +33,84 @@ class Gehaltsbestandteil_model extends DB_Model implements IEncryption
|
||||
$datestring = $date->format("Y-m-d");
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
gehaltsbestandteil_id,
|
||||
gbt.von,
|
||||
gbt.bis,
|
||||
gbt.anmerkung,
|
||||
gbt.dienstverhaeltnis_id,
|
||||
gehaltstyp_kurzbz,
|
||||
valorisierungssperre,
|
||||
gbt.valorisierung,
|
||||
grundbetrag as grund_betrag_decrypted,
|
||||
betrag_valorisiert as betrag_val_decrypted,
|
||||
gt.bezeichnung as gehaltstyp_bezeichnung,
|
||||
vb.vertragsbestandteiltyp_kurzbz,
|
||||
bf.funktion_kurzbz,
|
||||
bf.oe_kurzbz,
|
||||
fkt.beschreibung as fkt_beschreibung,
|
||||
fb.bezeichnung as fb_bezeichnung,
|
||||
org.bezeichnung as org_bezeichnung,
|
||||
freitext.freitexttyp_kurzbz,
|
||||
freitext.titel as freitext_titel
|
||||
FROM hr.tbl_gehaltsbestandteil gbt LEFT JOIN hr.tbl_gehaltstyp gt using(gehaltstyp_kurzbz)
|
||||
LEFT JOIN hr.tbl_vertragsbestandteil vb using(vertragsbestandteil_id)
|
||||
LEFT JOIN hr.tbl_vertragsbestandteil_funktion vbf using(vertragsbestandteil_id)
|
||||
LEFT JOIN public.tbl_benutzerfunktion bf using(benutzerfunktion_id)
|
||||
LEFT JOIN public.tbl_funktion fkt using(funktion_kurzbz)
|
||||
LEFT JOIN public.tbl_fachbereich fb using(fachbereich_kurzbz)
|
||||
LEFT JOIN public.tbl_organisationseinheit org on (bf.oe_kurzbz=org.oe_kurzbz)
|
||||
LEFT JOIN hr.tbl_vertragsbestandteil_freitext freitext on(vb.vertragsbestandteil_id=freitext.vertragsbestandteil_id)
|
||||
WHERE gbt.dienstverhaeltnis_id=? AND
|
||||
(gbt.von<=? and (gbt.bis is null OR gbt.bis>=?))
|
||||
ORDER BY gt.sort
|
||||
with gbt as (
|
||||
select
|
||||
gb.gehaltsbestandteil_id,
|
||||
gb.von,
|
||||
gb.bis,
|
||||
gb.anmerkung,
|
||||
gb.dienstverhaeltnis_id,
|
||||
gb.gehaltstyp_kurzbz,
|
||||
gb.valorisierungssperre,
|
||||
gb.valorisierung,
|
||||
gb.grundbetrag as grund_betrag_decrypted,
|
||||
coalesce(vh.betrag_valorisiert, gb.grundbetrag) as betrag_val_decrypted,
|
||||
gb.vertragsbestandteil_id
|
||||
from
|
||||
hr.tbl_gehaltsbestandteil gb
|
||||
LEFT JOIN
|
||||
hr.tbl_valorisierung_historie vh ON vh.gehaltsbestandteil_id = gb.gehaltsbestandteil_id AND vh.valorisierungsdatum = (
|
||||
SELECT
|
||||
vi.valorisierungsdatum
|
||||
FROM
|
||||
hr.tbl_valorisierung_instanz vi
|
||||
JOIN
|
||||
hr.tbl_dienstverhaeltnis d ON d.dienstverhaeltnis_id = ?
|
||||
AND d.oe_kurzbz = vi.oe_kurzbz
|
||||
WHERE
|
||||
? >= valorisierungsdatum
|
||||
ORDER BY
|
||||
valorisierungsdatum DESC
|
||||
LIMIT 1
|
||||
)
|
||||
where
|
||||
dienstverhaeltnis_id = ?
|
||||
and (
|
||||
? BETWEEN COALESCE(von, '1970-01-01'::date) AND COALESCE(bis, '2170-01-01'::date)
|
||||
)
|
||||
)
|
||||
select
|
||||
gbt.gehaltsbestandteil_id,
|
||||
gbt.von,
|
||||
gbt.bis,
|
||||
gbt.anmerkung,
|
||||
gbt.dienstverhaeltnis_id,
|
||||
gbt.gehaltstyp_kurzbz,
|
||||
gbt.valorisierungssperre,
|
||||
gbt.valorisierung,
|
||||
gbt.grund_betrag_decrypted,
|
||||
gbt.betrag_val_decrypted,
|
||||
gt.bezeichnung as gehaltstyp_bezeichnung,
|
||||
vb.vertragsbestandteiltyp_kurzbz,
|
||||
bf.funktion_kurzbz,
|
||||
bf.oe_kurzbz,
|
||||
fkt.beschreibung as fkt_beschreibung,
|
||||
fb.bezeichnung as fb_bezeichnung,
|
||||
org.bezeichnung as org_bezeichnung,
|
||||
freitext.freitexttyp_kurzbz,
|
||||
freitext.titel as freitext_titel
|
||||
from
|
||||
gbt
|
||||
LEFT JOIN
|
||||
hr.tbl_gehaltstyp gt using(gehaltstyp_kurzbz)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil vb using(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_funktion vbf using(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
public.tbl_benutzerfunktion bf using(benutzerfunktion_id)
|
||||
LEFT JOIN
|
||||
public.tbl_funktion fkt using(funktion_kurzbz)
|
||||
LEFT JOIN
|
||||
public.tbl_fachbereich fb using(fachbereich_kurzbz)
|
||||
LEFT JOIN
|
||||
public.tbl_organisationseinheit org on (bf.oe_kurzbz=org.oe_kurzbz)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_freitext freitext on(vb.vertragsbestandteil_id=freitext.vertragsbestandteil_id)
|
||||
";
|
||||
|
||||
return $this->execQuery($qry,
|
||||
array($dienstverhaeltnis_id, $datestring, $datestring),
|
||||
array($dienstverhaeltnis_id, $datestring, $dienstverhaeltnis_id, $datestring),
|
||||
$this->getEncryptedColumns());
|
||||
}
|
||||
|
||||
@@ -86,9 +129,38 @@ class Gehaltsbestandteil_model extends DB_Model implements IEncryption
|
||||
array($dienstverhaeltnis_id),
|
||||
$this->getEncryptedColumns());
|
||||
}
|
||||
|
||||
|
||||
public function getGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
public function getGehaltsbestandteile($dienstverhaeltnis_id, $stichtag=null,
|
||||
$includefuture=false, $withvalorisationhistory=true)
|
||||
{
|
||||
if( !is_null($stichtag) && (time() > strtotime($stichtag))
|
||||
&& $withvalorisationhistory !== false )
|
||||
{
|
||||
$query = $this->getGehaltsbestandteileMitValorisierungsHistorie(
|
||||
$dienstverhaeltnis_id, $stichtag, $includefuture
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query = $this->getGehaltsbestandteileOhneValorisierungsHistorie(
|
||||
$dienstverhaeltnis_id, $stichtag, $includefuture
|
||||
);
|
||||
}
|
||||
|
||||
$gehaltsbestandteile = array();
|
||||
if( null !== ($rows = getData($query)) )
|
||||
{
|
||||
foreach( $rows as $row ) {
|
||||
$tmpgb = new Gehaltsbestandteil();
|
||||
$tmpgb->hydrateByStdClass($row, true);
|
||||
$gehaltsbestandteile[] = $tmpgb;
|
||||
}
|
||||
}
|
||||
|
||||
return $gehaltsbestandteile;
|
||||
}
|
||||
|
||||
protected function getGehaltsbestandteileOhneValorisierungsHistorie($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
{
|
||||
$stichtagclause = '';
|
||||
if( !is_null($stichtag) )
|
||||
@@ -111,25 +183,145 @@ class Gehaltsbestandteil_model extends DB_Model implements IEncryption
|
||||
{$stichtagclause}
|
||||
EOSQL;
|
||||
|
||||
$query = $this->loadWhere(
|
||||
$result = $this->loadWhere(
|
||||
$where,
|
||||
$this->getEncryptedColumns()
|
||||
);
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function getGehaltsbestandteileMitValorisierungsHistorie($dienstverhaeltnis_id, $stichtag, $includefuture=false)
|
||||
{
|
||||
$date = strftime('%Y-%m-%d', strtotime($stichtag));
|
||||
$includefuture_clause = ($includefuture)
|
||||
? ' OR COALESCE(von, \'1970-01-01\'::date) > ' . $this->escape($date)
|
||||
: '';
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
g.gehaltsbestandteil_id,
|
||||
g.dienstverhaeltnis_id,
|
||||
g.vertragsbestandteil_id,
|
||||
g.gehaltstyp_kurzbz,
|
||||
g.von,
|
||||
g.bis,
|
||||
g.anmerkung,
|
||||
g.grundbetrag AS grundbetrag,
|
||||
COALESCE(vh.betrag_valorisiert, g.grundbetrag) AS betrag_valorisiert,
|
||||
g.valorisierungssperre,
|
||||
g.insertamum,
|
||||
g.insertvon,
|
||||
g.updateamum,
|
||||
g.updatevon,
|
||||
g.valorisierung,
|
||||
g.auszahlungen
|
||||
FROM
|
||||
hr.tbl_gehaltsbestandteil g
|
||||
LEFT JOIN
|
||||
hr.tbl_valorisierung_historie vh ON vh.gehaltsbestandteil_id = g.gehaltsbestandteil_id AND vh.valorisierungsdatum = (
|
||||
SELECT
|
||||
vi.valorisierungsdatum
|
||||
FROM
|
||||
hr.tbl_valorisierung_instanz vi
|
||||
JOIN
|
||||
hr.tbl_dienstverhaeltnis d ON d.dienstverhaeltnis_id = {$this->escape($dienstverhaeltnis_id)}
|
||||
AND d.oe_kurzbz = vi.oe_kurzbz
|
||||
WHERE
|
||||
{$this->escape($date)} >= valorisierungsdatum
|
||||
ORDER BY
|
||||
valorisierungsdatum DESC
|
||||
LIMIT 1
|
||||
)
|
||||
WHERE
|
||||
g.dienstverhaeltnis_id = {$this->escape($dienstverhaeltnis_id)}
|
||||
AND (
|
||||
{$this->escape($date)} BETWEEN COALESCE(von, '1970-01-01'::date) AND COALESCE(bis, '2170-01-01'::date)
|
||||
{$includefuture_clause}
|
||||
)
|
||||
EOSQL;
|
||||
|
||||
$result = $this->execReadOnlyQuery($sql, array(), $this->getEncryptedColumns());
|
||||
return $result;
|
||||
}
|
||||
|
||||
$gehaltsbestandteile = array();
|
||||
public function getGehaltsbestandteileValorisiertForChart($dienstverhaeltnis_id, $stichtag=null, $includefuture=false)
|
||||
{
|
||||
$stichtagclause = '';
|
||||
if( !is_null($stichtag) )
|
||||
{
|
||||
$date = strftime('%Y-%m-%d', strtotime($stichtag));
|
||||
$stichtagclause = 'AND (' . $this->escape($date)
|
||||
. ' BETWEEN COALESCE(von, \'1970-01-01\'::date)'
|
||||
. ' AND COALESCE(bis, \'2170-01-01\'::date)';
|
||||
if( $includefuture )
|
||||
{
|
||||
$stichtagclause .= ' OR COALESCE(von, \'1970-01-01\'::date) > '
|
||||
. $this->escape($date);
|
||||
}
|
||||
$stichtagclause .= ')';
|
||||
}
|
||||
|
||||
// Note: replaced gb.betrag_valorisiert with vh.betrag_valorisiert!
|
||||
$qry = "
|
||||
SELECT
|
||||
gb.gehaltsbestandteil_id,gb.dienstverhaeltnis_id,gb.vertragsbestandteil_id,gb.gehaltstyp_kurzbz,
|
||||
gb.von,gb.bis,gb.anmerkung,gb.grundbetrag as grundbetrag,gb.valorisierungssperre,gb.insertamum,
|
||||
gb.insertvon,gb.updateamum,gb.updatevon,gb.valorisierung,gb.auszahlungen,
|
||||
vh.valorisierungsdatum, vh.betrag_valorisiert as betrag_valorisiert
|
||||
FROM hr.tbl_gehaltsbestandteil gb LEFT JOIN hr.tbl_valorisierung_historie vh using (gehaltsbestandteil_id)
|
||||
WHERE dienstverhaeltnis_id=?
|
||||
$stichtagclause
|
||||
ORDER BY gb.von,vh.valorisierungsdatum, gb.gehaltsbestandteil_id;
|
||||
";
|
||||
|
||||
$query = $this->execQuery($qry,
|
||||
array($dienstverhaeltnis_id),
|
||||
$this->getEncryptedColumns());
|
||||
|
||||
$gehaltsbestandteile = array();
|
||||
if( null !== ($rows = getData($query)) )
|
||||
{
|
||||
// store for preserving the last records of every gehaltsbestandteil_id
|
||||
$lastRecords = array();
|
||||
|
||||
foreach( $rows as $row ) {
|
||||
$tmpgb = new Gehaltsbestandteil();
|
||||
$tmpgb->hydrateByStdClass($row, true);
|
||||
$gehaltsbestandteile[] = $tmpgb;
|
||||
|
||||
// prevent duplication (caused by the join with historic values)
|
||||
if (!isset($lastRecords[(string)$row->gehaltsbestandteil_id])) {
|
||||
$gehaltsbestandteile[] = $tmpgb;
|
||||
$lastRecords[(string)$row->gehaltsbestandteil_id] = $tmpgb;
|
||||
}
|
||||
|
||||
if ($row->betrag_valorisiert != null && $row->valorisierungsdatum != null
|
||||
&& $row->valorisierungsdatum != $row->von && $row->valorisierungsdatum != $row->bis) {
|
||||
|
||||
// create additional row
|
||||
$tmpgbv = new Gehaltsbestandteil();
|
||||
$tmpgbv->hydrateByStdClass($row, true);
|
||||
$tmpgbv->setVon($row->valorisierungsdatum);
|
||||
$tmpgbv->setBis($lastRecords[(string)$row->gehaltsbestandteil_id]->getBis());
|
||||
// overwrite Grundbetrag with the current valorized loan
|
||||
// (otherwise the chart would show the wrong value)
|
||||
$tmpgbv->setGrundbetrag($row->betrag_valorisiert);
|
||||
$gehaltsbestandteile[] = $tmpgbv;
|
||||
|
||||
// finish previous
|
||||
$daybefore = new DateTimeImmutable($row->valorisierungsdatum);
|
||||
$daybefore = $daybefore->sub(new \DateInterval('P1D'));
|
||||
$lastRecords[(string)$row->gehaltsbestandteil_id]->setBis($daybefore->format('Y-m-d'));
|
||||
|
||||
// preserve as last row, because there might be another valorization
|
||||
$lastRecords[(string)$row->gehaltsbestandteil_id] = $tmpgbv;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $gehaltsbestandteile;
|
||||
}
|
||||
|
||||
|
||||
public function getGehaltsbestandteil($id)
|
||||
{
|
||||
$this->addSelect('*');
|
||||
|
||||
@@ -19,12 +19,17 @@ class Vertragsbestandteil_model extends DB_Model
|
||||
|
||||
protected function getVertragsbestandteilSQL()
|
||||
{
|
||||
$sapInstalled = $this->_checkIfSAPSyncTableExists();
|
||||
|
||||
$oe_kurzbz_sap = $sapInstalled ? 'sap.oe_kurzbz_sap' : 'NULL AS oe_kurzbz_sap';
|
||||
$sap_join = $sapInstalled ? 'LEFT JOIN sync.tbl_sap_organisationsstruktur sap USING(oe_kurzbz)' : '';
|
||||
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
v.*,
|
||||
bf.funktion_kurzbz, bf.uid AS mitarbeiter_uid,
|
||||
funktion.beschreibung AS funktion_bezeichnung,
|
||||
oe.oe_kurzbz, oe.bezeichnung AS oe_bezeichnung, sap.oe_kurzbz_sap,
|
||||
bf.funktion_kurzbz, bf.uid AS mitarbeiter_uid,
|
||||
funktion.beschreibung AS funktion_bezeichnung,
|
||||
oe.oe_kurzbz, oe.bezeichnung AS oe_bezeichnung, {$oe_kurzbz_sap},
|
||||
oet.organisationseinheittyp_kurzbz AS oe_typ_kurzbz, oet.bezeichnung AS oe_typ_bezeichnung,
|
||||
ft.freitexttyp_kurzbz, ft.titel, ft.anmerkung,
|
||||
f.benutzerfunktion_id,
|
||||
@@ -39,7 +44,7 @@ class Vertragsbestandteil_model extends DB_Model
|
||||
hr.tbl_vertragsbestandteil_freitext ft USING(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_funktion f USING(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
LEFT JOIN
|
||||
public.tbl_benutzerfunktion bf USING(benutzerfunktion_id)
|
||||
LEFT JOIN
|
||||
public.tbl_funktion funktion USING(funktion_kurzbz)
|
||||
@@ -47,8 +52,7 @@ class Vertragsbestandteil_model extends DB_Model
|
||||
public.tbl_organisationseinheit oe USING(oe_kurzbz)
|
||||
LEFT JOIN
|
||||
public.tbl_organisationseinheittyp oet USING(organisationseinheittyp_kurzbz)
|
||||
LEFT JOIN
|
||||
sync.tbl_sap_organisationsstruktur sap USING(oe_kurzbz)
|
||||
{$sap_join}
|
||||
LEFT JOIN
|
||||
hr.tbl_vertragsbestandteil_karenz k USING(vertragsbestandteil_id)
|
||||
LEFT JOIN
|
||||
@@ -178,4 +182,70 @@ EOSQL;
|
||||
|
||||
return $vbcount[0]->overlappingvbs;
|
||||
}
|
||||
|
||||
public function getLastVertragsbestanteilStundenBeforeAltersteilzeit($dienstverhaeltnis_id)
|
||||
{
|
||||
$sql = <<<EOATZSQL
|
||||
select
|
||||
*
|
||||
from
|
||||
hr.tbl_vertragsbestandteil vb
|
||||
join
|
||||
hr.tbl_vertragsbestandteil_stunden vbs USING(vertragsbestandteil_id)
|
||||
where
|
||||
vb.dienstverhaeltnis_id = ?
|
||||
and (
|
||||
vbs.teilzeittyp_kurzbz != 'altersteilzeit'
|
||||
or
|
||||
vbs.teilzeittyp_kurzbz is NULL
|
||||
)
|
||||
order by
|
||||
vb.bis desc
|
||||
limit 1
|
||||
EOATZSQL;
|
||||
$query = $this->execReadOnlyQuery($sql, array($dienstverhaeltnis_id));
|
||||
$data = getData($query);
|
||||
|
||||
if ($data == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$vertragsbestandteil = null;
|
||||
try
|
||||
{
|
||||
$vertragsbestandteil = VertragsbestandteilFactory::getVertragsbestandteil($data[0], true);
|
||||
}
|
||||
catch (Exception $ex)
|
||||
{
|
||||
echo $ex->getMessage() . "\n";
|
||||
}
|
||||
return $vertragsbestandteil;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if sap sync table exists.
|
||||
* @return bool
|
||||
*/
|
||||
private function _checkIfSAPSyncTableExists()
|
||||
{
|
||||
$params = array(
|
||||
DB_NAME,
|
||||
'sync',
|
||||
'tbl_sap_organisationsstruktur'
|
||||
);
|
||||
|
||||
$sql = "SELECT
|
||||
1 AS exists
|
||||
FROM
|
||||
information_schema.tables
|
||||
WHERE
|
||||
table_catalog = ? AND
|
||||
table_schema = ? AND
|
||||
table_name = ?";
|
||||
|
||||
$res = $this->execReadOnlyQuery($sql, $params);
|
||||
|
||||
return hasData($res);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user