mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
204 lines
6.1 KiB
PHP
204 lines
6.1 KiB
PHP
<?php
|
|
class Anwesenheit_model extends DB_Model
|
|
{
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$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;
|
|
}
|
|
}
|