mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-26 00:54:27 +00:00
merge master into feature-55992/FHC4_Studierendenverwaltung_Messaging
This commit is contained in:
@@ -44,4 +44,27 @@ class Bisio_model extends DB_Model
|
||||
else
|
||||
return success("Bisio not found");
|
||||
}
|
||||
|
||||
/**
|
||||
* checks, if an (extension) table exists to avoid later errors
|
||||
* @param String $schema like 'extension'
|
||||
* @param String $table like 'tbl_mo_bisiozuordnung'
|
||||
* @return boolean
|
||||
*/
|
||||
public function tableExists($schema, $table)
|
||||
{
|
||||
$params = array($schema, $table);
|
||||
|
||||
$qry = "SELECT
|
||||
1
|
||||
FROM
|
||||
information_schema.role_table_grants
|
||||
WHERE
|
||||
table_schema = ?
|
||||
AND table_name = ?";
|
||||
|
||||
$result = $this->execQuery($qry, $params);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ class News_model extends DB_Model
|
||||
{
|
||||
$this->addJoin("campus.tbl_content","content_id");
|
||||
return $this->execReadOnlyQuery('
|
||||
SELECT *
|
||||
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
|
||||
@@ -29,7 +29,7 @@ class News_model extends DB_Model
|
||||
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){
|
||||
|
||||
@@ -501,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');
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class Lehreinheit_model extends DB_Model
|
||||
$this->addOrder('lehreinheit_id');
|
||||
$les = $this->loadWhere(
|
||||
array('lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'studiensemester_kurzbz' => $studiensemester)
|
||||
'studiensemester_kurzbz' => $studiensemester)
|
||||
);
|
||||
|
||||
if (hasData($les))
|
||||
@@ -244,4 +244,63 @@ EOSQL;
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,28 +412,29 @@ 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);
|
||||
@@ -608,7 +504,11 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
$this->addSelect($lvbezeichnung . ' AS bezeichnung');
|
||||
$this->addSelect($sgbezeichnung . ' AS sg_bezeichnung');
|
||||
$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('COALESCE(gnn.' . $bezeichnung . ', gnn.bezeichnung, gn.note::text) AS lvnote');
|
||||
$this->addSelect('COALESCE(znn.' . $bezeichnung . ', znn.bezeichnung, zn.note::text) AS znote');
|
||||
|
||||
@@ -730,6 +630,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
|
||||
@@ -775,6 +706,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.
|
||||
@@ -1012,4 +965,27 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -647,4 +647,135 @@ 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) ?: [];
|
||||
$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) ?: [];
|
||||
$addEmailProperty($gf_ltg);
|
||||
|
||||
$stv_ltg = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stvLtg', $stg_obj->oe_kurzbz);
|
||||
if (isError($stv_ltg))
|
||||
return $stv_ltg;
|
||||
$stv_ltg = getData($stv_ltg) ?: [];
|
||||
$addEmailProperty($stv_ltg);
|
||||
|
||||
$ass = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('ass', $stg_obj->oe_kurzbz);
|
||||
if (isError($ass))
|
||||
return $ass;
|
||||
$ass = getData($ass) ?: [];
|
||||
$addEmailProperty($ass);
|
||||
$addFotoProperty($ass);
|
||||
|
||||
$hochschulvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('hsv');
|
||||
if (isError($hochschulvertr))
|
||||
return $hochschulvertr;
|
||||
$hochschulvertr = getData($hochschulvertr) ?: [];
|
||||
$addEmailProperty($hochschulvertr);
|
||||
|
||||
|
||||
$stdv = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('stdv', $stg_obj->oe_kurzbz);
|
||||
if (isError($stdv))
|
||||
return $stdv;
|
||||
$stdv = getData($stdv) ?: [];
|
||||
$addEmailProperty($stdv);
|
||||
|
||||
|
||||
$jahrgangsvertr = $this->BenutzerfunktionModel->getBenutzerFunktionenDetailed('jgv', $stg_obj->oe_kurzbz, $semester);
|
||||
if (isError($jahrgangsvertr))
|
||||
return $jahrgangsvertr;
|
||||
$jahrgangsvertr = getData($jahrgangsvertr) ?: [];
|
||||
$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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
@@ -207,7 +225,7 @@ class Studiensemester_model extends DB_Model
|
||||
|
||||
/**
|
||||
* @param string $student_uid
|
||||
*
|
||||
*
|
||||
* @return StdClass
|
||||
*/
|
||||
public function getWhereStudentHasLvs($student_uid)
|
||||
@@ -220,7 +238,7 @@ class Studiensemester_model extends DB_Model
|
||||
$this->db->where("v.lehreverzeichnis<>''");
|
||||
|
||||
$this->addOrder($this->dbTable . '.start');
|
||||
|
||||
|
||||
return $this->loadWhere(['uid' => $student_uid, 'v.lehre' => true]);
|
||||
}
|
||||
|
||||
@@ -273,6 +291,42 @@ class Studiensemester_model extends DB_Model
|
||||
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
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -156,10 +156,10 @@ class Notiz_model extends DB_Model
|
||||
$qry = "
|
||||
SELECT
|
||||
n.*, count(dms_id) as countDoc, z.notizzuordnung_id,
|
||||
TO_CHAR (CASE
|
||||
(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,
|
||||
|
||||
@@ -115,13 +115,18 @@ class Betriebsmittelperson_model extends DB_Model
|
||||
|
||||
$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));
|
||||
}
|
||||
|
||||
@@ -217,12 +217,28 @@ class Mitarbeiter_model extends DB_Model
|
||||
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
|
||||
JOIN
|
||||
@@ -238,4 +254,28 @@ 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){
|
||||
//TODO(manu) maybe filter that in pruefungslist.js ?
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,6 +71,51 @@ class Reservierung_model extends DB_Model
|
||||
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)? $stundenplan_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
|
||||
*
|
||||
|
||||
@@ -186,9 +186,119 @@ class Stundenplan_model extends DB_Model
|
||||
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, ort_kurzbz, 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, ort_kurzbz, 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 string $uid the user id that is used to fetch the stundenplan rows from the lehre.vw_stundenplan table
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user