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; } }