dbTable = 'lehre.tbl_projektarbeit'; $this->pk = 'projektarbeit_id'; } /** * Gets Projektarbeit(en) of a student for a Studiengang, Semester, Projekttyp, final. * @param $student_uid * @param $studiengang_kz * @param $studiensemester_kurzbz * @param $projekttyp * @param $final * @return object */ public function getProjektarbeit($student_uid, $studiengang_kz = null, $studiensemester_kurzbz = null, $projekttyp = null, $final = null) { $qry = "SELECT pa.*, tbl_projekttyp.bezeichnung, tbl_lehreinheit.studiensemester_kurzbz, tbl_lehrveranstaltung.lehrveranstaltung_id, tbl_firma.name AS firma_name, ( SELECT STRING_AGG(trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')), ', ') FROM lehre.tbl_projektbetreuer JOIN public.tbl_person USING (person_id) WHERE projektarbeit_id = pa.projektarbeit_id AND student_uid = pa.student_uid GROUP BY projektarbeit_id ) AS projektbetreuer FROM lehre.tbl_projektarbeit pa JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) LEFT JOIN public.tbl_firma USING (firma_id) WHERE pa.student_uid = ?"; $params = array($student_uid); if (isset($studiengang_kz)) { $qry .= ' AND tbl_lehrveranstaltung.studiengang_kz=?'; $params[] = $studiengang_kz; } if (isset($studiensemester_kurzbz)) { $qry .= ' AND tbl_lehreinheit.studiensemester_kurzbz=?'; $params[] = $studiensemester_kurzbz; } if (isset($projekttyp)) { if (is_array($projekttyp)) $qry .= ' AND pa.projekttyp_kurzbz IN ?'; else $qry .= ' AND pa.projekttyp_kurzbz=?'; $params[] = $projekttyp; } if (isset($final)) { $qry .= ' AND pa.final=?'; $params[] = $final; } $qry .= ' ORDER BY beginn DESC, projektarbeit_id DESC'; 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 * FROM (SELECT DISTINCT ON(projektarbeit_id) vorname as bvorname, nachname as bnachname, titelpre as btitelpre, 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_projekttyp.projekttyp_kurzbz as projekttypkurzbz, lehre.tbl_lehreinheit.studiensemester_kurzbz, lehre.tbl_lehrveranstaltung.studiengang_kz, public.tbl_studiengang.kurzbzlang, lehre.tbl_projektarbeit.note as note, lehre.tbl_note.bezeichnung as note_bezeichnung, 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, lehre.tbl_projektarbeit.insertamum as insertamum, (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) LEFT JOIN lehre.tbl_note ON(lehre.tbl_projektarbeit.note = lehre.tbl_note.note) WHERE tbl_projektarbeit.student_uid = ? AND mitarbeiter_uid IS NOT NULL AND (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz')) as base ORDER BY insertamum DESC"; 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_paabgabe.note, campus.tbl_paabgabe.upload_allowed, campus.tbl_paabgabe.beurteilungsnotiz, campus.tbl_paabgabetyp.paabgabetyp_kurzbz, campus.tbl_paabgabetyp.bezeichnung, campus.tbl_paabgabetyp.benotbar, campus.tbl_paabgabe.abgabedatum, campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.updateamum 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 getProjektarbeitenAbgabetermine($projektarbeiten_ids) { $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_paabgabe.note, campus.tbl_paabgabe.upload_allowed, campus.tbl_paabgabe.beurteilungsnotiz, campus.tbl_paabgabetyp.paabgabetyp_kurzbz, campus.tbl_paabgabetyp.bezeichnung, campus.tbl_paabgabe.abgabedatum, campus.tbl_paabgabe.insertvon, campus.tbl_paabgabe.updatevon, campus.tbl_paabgabe.insertamum, campus.tbl_paabgabe.updateamum, (SELECT p.vorname || ' ' || p.nachname FROM public.tbl_benutzer b JOIN public.tbl_person p USING(person_id) WHERE b.uid = campus.tbl_paabgabe.insertvon) AS insertvon_fullname, (SELECT p.vorname || ' ' || p.nachname FROM public.tbl_benutzer b JOIN public.tbl_person p USING(person_id) WHERE b.uid = campus.tbl_paabgabe.updatevon) AS updatevon_fullname FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz) WHERE campus.tbl_paabgabe.projektarbeit_id IN ? ORDER BY campus.tbl_paabgabe.datum"; return $this->execReadOnlyQuery($qry, array($projektarbeiten_ids)); } public function getProjektbetreuerAnrede($bperson_id) { $qry_betr="SELECT DISTINCT ON(public.tbl_person.person_id) trim(COALESCE(titelpre,'')||' '||COALESCE(vorname,'')||' '||COALESCE(nachname,'')||' '||COALESCE(titelpost,'')) as first, anrede FROM public.tbl_person JOIN lehre.tbl_projektbetreuer ON(lehre.tbl_projektbetreuer.person_id=public.tbl_person.person_id) WHERE public.tbl_person.person_id= ?"; return $this->execReadOnlyQuery($qry_betr, [$bperson_id]); } public function getProjektbetreuerEmail($projektarbeit_id) { $qry = "SELECT ( SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp = 'email' AND person_id = pers.person_id ORDER BY CASE WHEN zustellung THEN 0 ELSE 1 END, insertamum DESC NULLS LAST LIMIT 1 ) AS private_email, mitarbeiter_uid as uid FROM lehre.tbl_projektarbeit pa JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) JOIN public.tbl_person pers USING (person_id) LEFT JOIN public.tbl_benutzer ben USING (person_id) LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid WHERE (ben.aktiv OR ben.aktiv IS NULL) AND projektarbeit_id = ? AND lehre.tbl_projektbetreuer.betreuerart_kurzbz = ANY('{Begutachter, Betreuer, Erstbetreuer,Erstbegutachter,Senatsvorsitz}')"; return $this->execReadOnlyQuery($qry, [$projektarbeit_id]); } public function getProjektbetreuerEmailByPersonID($person_id) { $qry = "SELECT ( SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp = 'email' AND person_id = pers.person_id ORDER BY CASE WHEN zustellung THEN 0 ELSE 1 END, insertamum DESC NULLS LAST LIMIT 1 ) AS private_email, mitarbeiter_uid as uid FROM lehre.tbl_projektarbeit pa JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) JOIN public.tbl_person pers USING (person_id) LEFT JOIN public.tbl_benutzer ben USING (person_id) LEFT JOIN public.tbl_mitarbeiter ma ON ben.uid = ma.mitarbeiter_uid WHERE (ben.aktiv OR ben.aktiv IS NULL) AND person_id = ?"; return $this->execReadOnlyQuery($qry, [$person_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($person_id, $showAll){ $qry = "WITH secondary_betreuer AS ( SELECT DISTINCT ON (pb.projektarbeit_id) pb.projektarbeit_id, pb.person_id AS zweitbetreuer_person_id, b.uid AS zweitbetreuer_benutzer_uid, pb.betreuerart_kurzbz AS zweitbetreuer_betreuerart_kurzbz, ba.beschreibung AS zweitbetreuer_betreuerart_beschreibung, p.titelpre AS zweitbetreuer_titelpre, p.vorname AS zweitbetreuer_vorname, p.nachname AS zweitbetreuer_nachname, p.titelpost AS zweitbetreuer_titelpost, trim( COALESCE(p.titelpre, '') || ' ' || COALESCE(p.vorname, '') || ' ' || COALESCE(p.nachname, '') || ' ' || COALESCE(p.titelpost, '') ) AS zweitbetreuer_full_name FROM lehre.tbl_projektbetreuer pb JOIN public.tbl_person p ON p.person_id = pb.person_id LEFT JOIN public.tbl_benutzer b ON b.person_id = p.person_id LEFT JOIN lehre.tbl_betreuerart ba ON ba.betreuerart_kurzbz = pb.betreuerart_kurzbz WHERE pb.betreuerart_kurzbz = ANY('{Zweitbetreuer,Zweitbegutachter,Senatsmitglied}') ORDER BY pb.projektarbeit_id ), primary_betreuer AS ( SELECT DISTINCT ON (pb.projektarbeit_id) pb.projektarbeit_id, pb.person_id AS betreuer_person_id, pb.betreuerart_kurzbz AS betreuer_betreuerart_kurzbz, ba.beschreibung AS betreuer_betreuerart_beschreibung, p.titelpre AS betreuer_titelpre, p.vorname AS betreuer_vorname, p.nachname AS betreuer_nachname, p.titelpost AS betreuer_titelpost, trim( COALESCE(p.titelpre, '') || ' ' || COALESCE(p.vorname, '') || ' ' || COALESCE(p.nachname, '') || ' ' || COALESCE(p.titelpost, '') ) AS betreuer_full_name FROM lehre.tbl_projektbetreuer pb JOIN public.tbl_person p ON p.person_id = pb.person_id LEFT JOIN public.tbl_benutzer b ON b.person_id = p.person_id LEFT JOIN lehre.tbl_betreuerart ba ON ba.betreuerart_kurzbz = pb.betreuerart_kurzbz WHERE pb.betreuerart_kurzbz = ANY('{Begutachter, Betreuer, Erstbetreuer,Erstbegutachter,Senatsvorsitz}') ORDER BY pb.projektarbeit_id ) SELECT * FROM (SELECT DISTINCT ON (tbl_projektarbeit.projektarbeit_id) student_person.vorname, student_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz, tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, tbl_projektarbeit.note, student_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz, public.tbl_student.student_uid, lehre.tbl_projektarbeit.sprache, lehre.tbl_projektarbeit.seitenanzahl, lehre.tbl_projektarbeit.kontrollschlagwoerter, lehre.tbl_projektarbeit.schlagwoerter, lehre.tbl_projektarbeit.schlagwoerter_en, lehre.tbl_projektarbeit.abstract, lehre.tbl_projektarbeit.abstract_en, lehre.tbl_projektarbeit.insertamum, ( SELECT orgform_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id = ( SELECT prestudent_id FROM public.tbl_student WHERE student_uid = student_benutzer.uid LIMIT 1 ) ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1 ) AS organisationsform, ( SELECT COALESCE(tbl_studienplan.orgform_kurzbz, tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING (prestudent_id) JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) JOIN public.tbl_studiengang USING (studiengang_kz) LEFT JOIN lehre.tbl_studienplan USING (studienplan_id) WHERE prestudent_id = public.tbl_student.prestudent_id ORDER BY tbl_prestudentstatus.datum DESC LIMIT 1 ) AS orgform, ( SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id = public.tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1 ) AS studienstatus, pb.betreuer_person_id, pb.betreuer_betreuerart_kurzbz, pb.betreuer_betreuerart_beschreibung, pb.betreuer_titelpre, pb.betreuer_vorname, pb.betreuer_nachname, pb.betreuer_titelpost, pb.betreuer_full_name, sb.zweitbetreuer_person_id, sb.zweitbetreuer_benutzer_uid, sb.zweitbetreuer_betreuerart_kurzbz, sb.zweitbetreuer_betreuerart_beschreibung, sb.zweitbetreuer_titelpre, sb.zweitbetreuer_vorname, sb.zweitbetreuer_nachname, sb.zweitbetreuer_titelpost, sb.zweitbetreuer_full_name FROM lehre.tbl_projektarbeit LEFT JOIN public.tbl_benutzer student_benutzer ON student_benutzer.uid = lehre.tbl_projektarbeit.student_uid LEFT JOIN public.tbl_person student_person ON student_benutzer.person_id = student_person.person_id LEFT JOIN public.tbl_student ON student_benutzer.uid = public.tbl_student.student_uid LEFT JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) LEFT JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) LEFT JOIN public.tbl_studiengang ON public.tbl_student.studiengang_kz = public.tbl_studiengang.studiengang_kz LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) LEFT JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) LEFT JOIN primary_betreuer pb ON pb.projektarbeit_id = tbl_projektarbeit.projektarbeit_id LEFT JOIN secondary_betreuer sb ON sb.projektarbeit_id = tbl_projektarbeit.projektarbeit_id WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') AND (pb.betreuer_person_id = ? OR sb.zweitbetreuer_person_id = ?) ".($showAll?'':' AND student_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($person_id, $person_id)); } /** * 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)); } public function getProjektarbeitenForStudiengang($studiengang_kz, $benotet) { $new_qry = "WITH secondary_betreuer AS ( SELECT DISTINCT ON (pb.projektarbeit_id) pb.projektarbeit_id, pb.person_id AS zweitbetreuer_person_id, pb.betreuerart_kurzbz AS zweitbetreuer_betreuerart_kurzbz, ba.beschreibung AS zweitbetreuer_betreuerart_beschreibung, p.titelpre AS zweitbetreuer_titelpre, p.vorname AS zweitbetreuer_vorname, p.nachname AS zweitbetreuer_nachname, p.titelpost AS zweitbetreuer_titelpost, trim( COALESCE(p.titelpre, '') || ' ' || COALESCE(p.vorname, '') || ' ' || COALESCE(p.nachname, '') || ' ' || COALESCE(p.titelpost, '') ) AS zweitbetreuer_full_name FROM lehre.tbl_projektbetreuer pb JOIN public.tbl_person p ON p.person_id = pb.person_id LEFT JOIN public.tbl_benutzer b ON b.person_id = p.person_id LEFT JOIN lehre.tbl_betreuerart ba ON ba.betreuerart_kurzbz = pb.betreuerart_kurzbz WHERE pb.betreuerart_kurzbz = ANY('{Zweitbetreuer,Zweitbegutachter,Senatsmitglied}') ORDER BY pb.projektarbeit_id -- DISTINCT ON needs this to be deterministic ) SELECT DISTINCT ON (tmp.projektarbeit_id) *, campus.get_betreuer_details(tmp.zweitbetreuer_person_id) AS zweitbetreuer_full_name, campus.get_betreuer_details(tmp.betreuer_person_id) AS erstbetreuer_full_name FROM ( SELECT DISTINCT ON (tbl_projektarbeit.projektarbeit_id) tbl_projektarbeit.projekttyp_kurzbz, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, tbl_studiengang.typ, tbl_studiengang.kurzbz, student_benutzer.uid AS student_uid, student_person.vorname AS student_vorname, student_person.nachname AS student_nachname, public.tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz, betreuer_benutzer.uid AS betreuer_benutzer_uid, betreuer_person.titelpre AS betreuer_titelpre, betreuer_person.vorname AS betreuer_vorname, betreuer_person.nachname AS betreuer_nachname, betreuer_person.titelpost AS betreuer_titelpost, lehre.tbl_projektbetreuer.betreuerart_kurzbz AS betreuerart, lehre.tbl_projektbetreuer.person_id AS betreuer_person_id, lehre.tbl_projektarbeit.sprache, lehre.tbl_projektarbeit.seitenanzahl, lehre.tbl_projektarbeit.kontrollschlagwoerter, lehre.tbl_projektarbeit.schlagwoerter, lehre.tbl_projektarbeit.schlagwoerter_en, lehre.tbl_projektarbeit.abstract, lehre.tbl_projektarbeit.abstract_en, lehre.tbl_projektarbeit.insertamum, lehre.tbl_projektarbeit.note, sb.zweitbetreuer_person_id, sb.zweitbetreuer_betreuerart_kurzbz, sb.zweitbetreuer_betreuerart_beschreibung, sb.zweitbetreuer_full_name, sb.zweitbetreuer_titelpre, sb.zweitbetreuer_vorname, sb.zweitbetreuer_nachname, sb.zweitbetreuer_titelpost, ( SELECT orgform_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id = ( SELECT prestudent_id FROM public.tbl_student WHERE student_uid = student_benutzer.uid LIMIT 1 ) ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1 ) AS organisationsform, ( SELECT COALESCE(tbl_studienplan.orgform_kurzbz, tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING (prestudent_id) JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) JOIN public.tbl_studiengang USING (studiengang_kz) LEFT JOIN lehre.tbl_studienplan USING (studienplan_id) WHERE prestudent_id = public.tbl_student.prestudent_id ORDER BY tbl_prestudentstatus.datum DESC LIMIT 1 ) AS orgform, ( SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id = public.tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1 ) AS studienstatus FROM lehre.tbl_projektarbeit LEFT JOIN public.tbl_benutzer student_benutzer ON student_benutzer.uid = lehre.tbl_projektarbeit.student_uid LEFT JOIN public.tbl_person student_person ON student_benutzer.person_id = student_person.person_id LEFT JOIN public.tbl_student ON student_benutzer.uid = public.tbl_student.student_uid LEFT JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) LEFT JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) LEFT JOIN public.tbl_studiengang ON public.tbl_student.studiengang_kz = public.tbl_studiengang.studiengang_kz LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) LEFT JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) LEFT JOIN public.tbl_person betreuer_person ON betreuer_person.person_id = lehre.tbl_projektbetreuer.person_id LEFT JOIN public.tbl_benutzer betreuer_benutzer ON betreuer_person.person_id = betreuer_benutzer.person_id LEFT JOIN secondary_betreuer sb ON sb.projektarbeit_id = tbl_projektarbeit.projektarbeit_id WHERE (projekttyp_kurzbz = 'Bachelor' OR projekttyp_kurzbz = 'Diplom') AND student_benutzer.aktiv AND lehre.tbl_projektbetreuer.betreuerart_kurzbz IN ( 'Erstbegutachter', 'Begutachter', 'Betreuer', 'Erstbetreuer', 'Senatsvorsitz' ) AND public.tbl_studiengang.studiengang_kz = ?"; if($benotet == 0) { $new_qry .= " AND lehre.tbl_projektarbeit.note IS NULL "; } else if ($benotet == 1) { $new_qry .= " AND lehre.tbl_projektarbeit.note IS NOT NULL "; } $new_qry .= " ORDER BY tbl_projektarbeit.projektarbeit_id DESC, student_person.nachname ASC ) as tmp"; return $this->execReadOnlyQuery($new_qry, array($studiengang_kz)); } public function getProjektarbeitenForStudent($student_uid) { $new_qry = "WITH secondary_betreuer AS ( SELECT DISTINCT ON (pb.projektarbeit_id) pb.projektarbeit_id, pb.person_id AS zweitbetreuer_person_id, pb.betreuerart_kurzbz AS zweitbetreuer_betreuerart_kurzbz, ba.beschreibung AS zweitbetreuer_betreuerart_beschreibung, p.titelpre AS zweitbetreuer_titelpre, p.vorname AS zweitbetreuer_vorname, p.nachname AS zweitbetreuer_nachname, p.titelpost AS zweitbetreuer_titelpost, trim( COALESCE(p.titelpre, '') || ' ' || COALESCE(p.vorname, '') || ' ' || COALESCE(p.nachname, '') || ' ' || COALESCE(p.titelpost, '') ) AS zweitbetreuer_full_name FROM lehre.tbl_projektbetreuer pb JOIN public.tbl_person p ON p.person_id = pb.person_id LEFT JOIN public.tbl_benutzer b ON b.person_id = p.person_id LEFT JOIN lehre.tbl_betreuerart ba ON ba.betreuerart_kurzbz = pb.betreuerart_kurzbz WHERE pb.betreuerart_kurzbz = ANY('{Zweitbetreuer,Zweitbegutachter,Senatsmitglied}') ORDER BY pb.projektarbeit_id -- DISTINCT ON needs this to be deterministic ) SELECT DISTINCT ON (tmp.projektarbeit_id) *, campus.get_betreuer_details(tmp.zweitbetreuer_person_id) AS zweitbetreuer_full_name, campus.get_betreuer_details(tmp.betreuer_person_id) AS erstbetreuer_full_name FROM ( SELECT DISTINCT ON (tbl_projektarbeit.projektarbeit_id) tbl_projektarbeit.projekttyp_kurzbz, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id, tbl_studiengang.typ, tbl_studiengang.kurzbz, student_benutzer.uid AS student_uid, student_person.vorname AS student_vorname, student_person.nachname AS student_nachname, public.tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz, betreuer_benutzer.uid AS betreuer_benutzer_uid, betreuer_person.titelpre AS betreuer_titelpre, betreuer_person.vorname AS betreuer_vorname, betreuer_person.nachname AS betreuer_nachname, betreuer_person.titelpost AS betreuer_titelpost, lehre.tbl_projektbetreuer.betreuerart_kurzbz AS betreuerart, lehre.tbl_projektbetreuer.person_id AS betreuer_person_id, lehre.tbl_projektarbeit.sprache, lehre.tbl_projektarbeit.seitenanzahl, lehre.tbl_projektarbeit.kontrollschlagwoerter, lehre.tbl_projektarbeit.schlagwoerter, lehre.tbl_projektarbeit.schlagwoerter_en, lehre.tbl_projektarbeit.abstract, lehre.tbl_projektarbeit.abstract_en, lehre.tbl_projektarbeit.insertamum, lehre.tbl_projektarbeit.note, sb.zweitbetreuer_person_id, sb.zweitbetreuer_betreuerart_kurzbz, sb.zweitbetreuer_betreuerart_beschreibung, sb.zweitbetreuer_full_name, sb.zweitbetreuer_titelpre, sb.zweitbetreuer_vorname, sb.zweitbetreuer_nachname, sb.zweitbetreuer_titelpost, ( SELECT orgform_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id = ( SELECT prestudent_id FROM public.tbl_student WHERE student_uid = student_benutzer.uid LIMIT 1 ) ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1 ) AS organisationsform, ( SELECT COALESCE(tbl_studienplan.orgform_kurzbz, tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.orgform_kurzbz) FROM public.tbl_prestudent JOIN public.tbl_prestudentstatus USING (prestudent_id) JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) JOIN public.tbl_studiengang USING (studiengang_kz) LEFT JOIN lehre.tbl_studienplan USING (studienplan_id) WHERE prestudent_id = public.tbl_student.prestudent_id ORDER BY tbl_prestudentstatus.datum DESC LIMIT 1 ) AS orgform, ( SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id = public.tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1 ) AS studienstatus FROM lehre.tbl_projektarbeit LEFT JOIN public.tbl_benutzer student_benutzer ON student_benutzer.uid = lehre.tbl_projektarbeit.student_uid LEFT JOIN public.tbl_person student_person ON student_benutzer.person_id = student_person.person_id LEFT JOIN public.tbl_student ON student_benutzer.uid = public.tbl_student.student_uid LEFT JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) LEFT JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) LEFT JOIN public.tbl_studiengang ON public.tbl_student.studiengang_kz = public.tbl_studiengang.studiengang_kz LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) LEFT JOIN lehre.tbl_projektbetreuer USING (projektarbeit_id) LEFT JOIN public.tbl_person betreuer_person ON betreuer_person.person_id = lehre.tbl_projektbetreuer.person_id LEFT JOIN public.tbl_benutzer betreuer_benutzer ON betreuer_person.person_id = betreuer_benutzer.person_id LEFT JOIN secondary_betreuer sb ON sb.projektarbeit_id = tbl_projektarbeit.projektarbeit_id WHERE (projekttyp_kurzbz = 'Bachelor' OR projekttyp_kurzbz = 'Diplom') AND student_benutzer.aktiv AND lehre.tbl_projektbetreuer.betreuerart_kurzbz IN ( 'Erstbegutachter', 'Begutachter', 'Betreuer', 'Erstbetreuer', 'Senatsvorsitz' ) AND public.tbl_student.student_uid = ? ORDER BY tbl_projektarbeit.projektarbeit_id DESC, student_person.nachname ASC ) as tmp"; return $this->execReadOnlyQuery($new_qry, array($student_uid)); } /** * * @param * @return object success or error */ public function hasBerechtigungForProjektarbeit($projektarbeit_id) { if (!$projektarbeit_id || !is_numeric($projektarbeit_id)) return false; $this->ProjektarbeitModel->addSelect('studiengang_kz'); $this->ProjektarbeitModel->addJoin('public.tbl_student', 'student_uid'); $result = $this->ProjektarbeitModel->load($projektarbeit_id); if (isError($result) || !hasData($result)) return false; $studiengang_kz = getData($result)[0]->studiengang_kz; if ($this->permissionlib->isBerechtigt('admin', 'suid', $studiengang_kz)) return true; if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $studiengang_kz)) return true; return false; } public function getProjektarbeitByPaabgabeID($paabgabe_id) { $qry = "SELECT projektarbeit_id FROM campus.tbl_paabgabe JOIN lehre.tbl_projektarbeit USING(projektarbeit_id) WHERE campus.tbl_paabgabe.paabgabe_id = ?; "; return $this->execReadOnlyQuery($qry, [$paabgabe_id]); } }