diff --git a/cis/private/lehre/anwesenheitsliste.php b/cis/private/lehre/anwesenheitsliste.php index bc7d96083..6859c1a2e 100644 --- a/cis/private/lehre/anwesenheitsliste.php +++ b/cis/private/lehre/anwesenheitsliste.php @@ -34,6 +34,7 @@ require_once('../../../include/lehrveranstaltung.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/vertrag.class.php'); + require_once '../../../include/covid/covidhelper.class.php'; $sprache = getSprache(); $p=new phrasen($sprache); @@ -61,7 +62,8 @@ $stsem = $_GET['stsem']; else die($p->t('anwesenheitsliste/studiensemesterIstUngueltig')); - + +$covidhelper = new CovidHelper(); ?> @@ -69,6 +71,16 @@ + + @@ -98,7 +110,8 @@ $lv = new lehrveranstaltung($lvid); - $aw_content .= "".$p->t('anwesenheitsliste/gesamtliste')." $lv->bezeichnung"; + $covid_content = ($covidhelper->isUdfDefined()) ? 'Covid-Status' : ''; + $aw_content .= "".$p->t('anwesenheitsliste/gesamtliste')." $lv->bezeichnung" . $covid_content . ""; $awbild_content .= "".$p->t('anwesenheitsliste/gesamtliste')." $lv->bezeichnung"; $nt_content .= "".$p->t('anwesenheitsliste/gesamtliste')." $lv->bezeichnung"; @@ -151,7 +164,8 @@ } } - $aw_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; + $covid_content = ($covidhelper->isUdfDefined()) ? 'Covid-Status' : ''; + $aw_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)" . $covid_content . ""; $awbild_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; $nt_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; @@ -186,7 +200,8 @@ } } - $aw_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; + $covid_content = ($covidhelper->isUdfDefined()) ? 'Covid-Status' : ''; + $aw_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)" . $covid_content . ""; $awbild_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; $nt_content .= "   $kurzbz - $lehrform - $gruppen ($lektoren)"; } diff --git a/cis/private/lehre/covidstatusliste.php b/cis/private/lehre/covidstatusliste.php new file mode 100644 index 000000000..a29ab570d --- /dev/null +++ b/cis/private/lehre/covidstatusliste.php @@ -0,0 +1,337 @@ + + */ +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/dokument_export.class.php'); +require_once('../../../include/lehrveranstaltung.class.php'); +require_once('../../../include/lehreinheitgruppe.class.php'); +require_once('../../../include/lehreinheit.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/lehreinheitmitarbeiter.class.php'); +require_once('../../../include/studiensemester.class.php'); +require_once('../../../include/functions.inc.php'); +require_once('../../../include/erhalter.class.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/covid/covidhelper.class.php'); + +$debug = false; + +if (!$db = new basis_db()) + die('Es konnte keine Verbindung zum Server aufgebaut werden.'); + +$user=get_uid(); + +$berechtigung = new benutzerberechtigung(); +$berechtigung->getBerechtigungen($user); + +if(isset($_GET['lvid']) && is_numeric($_GET['lvid'])) + $lvid = $_GET['lvid']; +else + die('Eine gueltige LvID muss uebergeben werden'); + +$lv = new lehrveranstaltung(); +$lv->load($lvid); + +if(isset($_GET['stsem'])) + $studiensemester = $_GET['stsem']; +else + die('Eine Studiensemester muss uebergeben werden'); + +if( !$berechtigung->isBerechtigt('admin') + && !$berechtigung->isBerechtigt('assistenz') + && !$berechtigung->isBerechtigt('lehre', $lv->oe_kurzbz, 's') + && !check_lektor_lehrveranstaltung($user,$lvid,$studiensemester)) + die('Sie muessen LektorIn der LV sein oder das Recht "ADMIN", "ASSISTENZ" oder "LEHRE" haben, um diese Seite aufrufen zu koennen'); + +$output='pdf'; + +if(isset($_GET['output']) && ($output='odt' || $output='doc')) + $output=$_GET['output']; + +isset($_GET['stg_kz']) ? $studiengang = $_GET['stg_kz'] : $studiengang = NULL; +isset($_GET['lehreinheit_id']) ? $lehreinheit = $_GET['lehreinheit_id'] : $lehreinheit = NULL; + +// Teilnehmende Gruppen laden +$qry = "SELECT DISTINCT ON(kuerzel, semester, verband, gruppe, gruppe_kurzbz) + UPPER(stg_typ::varchar(1) || stg_kurzbz) as kuerzel, + semester, + verband, + gruppe, + gruppe_kurzbz + FROM campus.vw_lehreinheit + WHERE lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." + AND studiensemester_kurzbz=".$db->db_add_param($studiensemester); +if($lehreinheit!='') + $qry.=" AND lehreinheit_id=".$db->db_add_param($lehreinheit, FHC_INTEGER); + +$gruppen_string = ''; +if($result = $db->db_query($qry)) +{ + while($row = $db->db_fetch_object($result)) + { + if($gruppen_string!='') + $gruppen_string.=', '; + if($row->gruppe_kurzbz=='') + $gruppen_string.=trim($row->kuerzel.'-'.$row->semester.$row->verband.$row->gruppe); + else + $gruppen_string.=$row->gruppe_kurzbz; + } +} + + +// Verplante Räume laden +$qry = "SELECT distinct(ort_kurzbz) + FROM lehre.tbl_stundenplan + WHERE lehreinheit_id in + ( + SELECT lehreinheit_id + FROM campus.vw_lehreinheit + WHERE lehrveranstaltung_id = ".$db->db_add_param($lvid, FHC_INTEGER)." + AND studiensemester_kurzbz = ".$db->db_add_param($studiensemester)." + )"; +if($lehreinheit!='') + $qry.= " AND tbl_stundenplan.lehreinheit_id = ".$db->db_add_param($lehreinheit, FHC_INTEGER); + + +$raum_string = ''; +if($result = $db->db_query($qry)) +{ + while($row = $db->db_fetch_object($result)) + { + if($raum_string!='') + $raum_string.=', '; + if($row->ort_kurzbz!='') + $raum_string.=$row->ort_kurzbz; + } +} + + +$stg = new studiengang(); +$stg->load($lv->studiengang_kz); + +$studiengang_bezeichnung=$stg->bezeichnung; + +$stg->getAllTypes(); + +$data = array( + 'gruppen'=>$gruppen_string, + 'bezeichnung'=>$lv->bezeichnung, + 'lehrveranstaltung_id'=>$lv->lehrveranstaltung_id, + 'studiengang'=>$studiengang_bezeichnung, + 'studiengang_kz'=>$lv->studiengang_kz, + 'typ'=>$stg->studiengang_typ_arr[$stg->typ], + 'ects'=>$lv->ects, + 'sprache'=>$lv->sprache, + 'studiensemester'=>$studiensemester, + 'semester'=>$lv->semester, + 'orgform'=>$lv->orgform_kurzbz, + 'raum'=>$raum_string, +); + +//Lehrende der LV laden und in ein Array schreiben +$lehrende = new lehreinheitmitarbeiter(); +$lehrende->getMitarbeiterLV($lvid, $studiensemester, $lehreinheit); +$arr_lehrende = array(); +if (isset($lehrende->result)) +{ + foreach($lehrende->result AS $row) + { + $data[]=array('lehrende'=>array('uid'=>$row->uid,'name'=>$row->vorname.' '.$row->nachname)); + $arr_lehrende[]=mb_strtoupper($row->uid); + } +} + + +//Studierende der LV laden und in ein Array schreiben + +$qry = 'SELECT + distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, public.tbl_student.student_uid, + tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, + (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, + tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student, + tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_studiengang.kurzbzlang, tbl_mobilitaet.mobilitaetstyp_kurzbz + FROM + campus.vw_student_lehrveranstaltung + JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_student ON(uid=student_uid) + LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) + LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) + LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) + LEFT JOIN lehre.tbl_note USING (note) + LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) + LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz) + LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id) + WHERE + vw_student_lehrveranstaltung.lehrveranstaltung_id='.$db->db_add_param($lvid, FHC_INTEGER).' AND + vw_student_lehrveranstaltung.studiensemester_kurzbz='.$db->db_add_param($studiensemester);';'; + + +if($lehreinheit!='') + $qry.=' AND vw_student_lehrveranstaltung.lehreinheit_id='.$db->db_add_param($lehreinheit, FHC_INTEGER); + +$qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC'; + +$stsem_obj = new studiensemester(); +$stsem_obj->load($studiensemester); +$stsemdatumvon = $stsem_obj->start; +$stsemdatumbis = $stsem_obj->ende; + +$erhalter = new erhalter(); +$erhalter->getAll(); + +$a_o_kz = '9'.sprintf("%03s", $erhalter->result[0]->erhalter_kz); //Stg_Kz AO-Studierende auslesen (9005 fuer FHTW) +$anzahl_studierende = 0; +$datum = new datum(); +$zusatz = ''; + +$studentuids = array(); +if($result = $db->db_query($qry)) +{ + while($row = $db->db_fetch_object($result)) + { + if($row->status!='Abbrecher' && $row->status!='Unterbrecher') + { + $anzahl_studierende++; + + if($row->status=='Incoming') //Incoming + $zusatz='(i)'; + else + $zusatz=''; + + if($row->bisio_id!='' && $row->status!='Incoming' && ($row->bis > $stsemdatumvon || $row->bis=='') && $row->von < $stsemdatumbis) //Outgoing + $zusatz.='(o)(ab '.$datum->formatDatum($row->von,'d.m.Y').')'; + + if($row->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen + $zusatz.= '('. $row->anmerkung. ')'; + + if($row->mitarbeiter_uid!='') //mitarbeiter + $zusatz.='(ma)'; + + if($row->stg_kz_student==$a_o_kz) //Außerordentliche Studierende + $zusatz.='(a.o.)'; + + if($row->mobilitaetstyp_kurzbz !='') //Double Degree Student + $zusatz.='(d.d.)'; + + //$zusatz.='test'; + + $studentuids[] = $row->student_uid; + $data[]=array('student'=>array( + 'uid' => $row->student_uid, + 'vorname'=>$row->vorname, + 'nachname'=>$row->nachname, + 'personenkennzeichen'=>trim($row->matrikelnr), + 'matr_nr'=>$row->matr_nr, + 'semester'=>$row->semester, + 'verband'=>trim($row->verband), + 'gruppe'=>trim($row->gruppe), + 'zusatz'=>$zusatz, + 'studiengang_kurzbz'=>$row->kurzbzlang, + 'mobilitaetstyp_kurzbz'=>$row->mobilitaetstyp_kurzbz + )); + } + } + //Anzahl Studierende in Array $data (an erster Stelle) einfuegen + $data = array_reverse($data, true); + $data['anzahl_studierende'] = $anzahl_studierende; + $data = array_reverse($data, true); +} + +$covidhelper = new CovidHelper(); +$covidhelper->fetchCovidStatus($studentuids); +$covidstatus = $covidhelper->getCovidStatus(); + +$now = new DateTime('now', new DateTimeZone('Europe/Vienna')); +header('Content-Type: text/html; charset=utf-8'); +?> + + + + FHC - Covidliste + + + + + +
+
+
+ +

Covid-Status-Liste

+

Gruppen: Studiensemester:

+

Lehrende:

+

generiert: format('d.m.Y H:i'); ?>

+ + + + + + + + + + + + + + + + + + + + +
StudentKennzeichenGruppeCovid-Status
getIconHtml($tmpstudent['uid']); ?>
+ +
+
+ + +
+
+ +
+
+
+				
+
+ +
+
+ + +
+ + + \ No newline at end of file diff --git a/include/covid/covidhelper.class.php b/include/covid/covidhelper.class.php new file mode 100644 index 000000000..3c9ef12da --- /dev/null +++ b/include/covid/covidhelper.class.php @@ -0,0 +1,189 @@ + + */ +require_once(dirname(__DIR__) . '/basis_db.class.php'); +/** + * Description of covidhelper + * + * @author bambi + */ +class CovidHelper extends basis_db +{ + const STATUS_OK = 1; + const STATUS_NOTOK = 0; + const STATUS_UNKNOWN = -1; + const STATUS_NOTSET = -2; + + const TITLE_OK = 'Covid Status gültig'; + const TITLE_NOTOK = 'Covid Status ungültig'; + const TITLE_UNKNOWN = 'Covid Status unbekannt'; + + const DB_SCHEMA = 'public'; + const DB_TABLE = 'tbl_person'; + const DB_UDFNAME = 'udf_3gvalid'; + + protected $isUdfDefined; + + protected $uids; + protected $covidstatus; + + public function __construct() + { + parent::__construct(); + $this->uids = array(); + $this->covidstatus = array(); + $this->isUdfDefined = false; + $this->checkIfUdfValuesAreDefined(); + } + + public function isUdfDefined() { + return $this->isUdfDefined; + } + + public function fetchCovidStatus(array $uids) { + $this->uids = $uids; + $this->covidstatus = array(); + $this->fetchCovidValidStatus(); + } + + public function getIconHtml($uid) + { + $html = ''; + $status = isset($this->covidstatus[$uid]) ? $this->covidstatus[$uid] : self::STATUS_NOTSET; + switch ($status) + { + case self::STATUS_OK: + $html = ''; + break; + case self::STATUS_NOTOK: + $html = ''; + break; + case self::STATUS_UNKNOWN: + $html = ''; + break; + default: + $html = ''; + break; + } + return $html; + } + + public function getBootstrapClass($uid) + { + $class = ''; + $status = isset($this->covidstatus[$uid]) ? $this->covidstatus[$uid] : self::STATUS_NOTSET; + switch ($status) + { + case self::STATUS_OK: + $class = 'success'; + break; + case self::STATUS_NOTOK: + $class = 'danger'; + break; + case self::STATUS_UNKNOWN: + $class = 'warning'; + break; + default: + $class = ''; + break; + } + return $class; + } + + public function getTitle($uid) + { + $title = ''; + $status = isset($this->covidstatus[$uid]) ? $this->covidstatus[$uid] : self::STATUS_NOTSET; + switch ($status) + { + case self::STATUS_OK: + $title = self::TITLE_OK; + break; + case self::STATUS_NOTOK: + $title = self::TITLE_NOTOK; + break; + case self::STATUS_UNKNOWN: + $title = self::TITLE_UNKNOWN; + break; + default: + $title = ''; + break; + } + return $title; + } + + public function getCovidStatus() + { + return $this->covidstatus; + } + + protected function fetchCovidValidStatus() + { + if( !($this->isUdfDefined && is_array($this->uids)) ) + { + return; + } + $sql = << 'udf_3gvalid')::text::date >= CURRENT_DATE::text::date THEN 1 + WHEN (p."udf_values" -> 'udf_3gvalid')::text::date < CURRENT_DATE::text::date THEN 0 + ELSE -1 + END AS covidvalid + FROM tbl_person p + JOIN tbl_benutzer b ON b.person_id = p.person_id AND b.uid IN ({$this->implode4SQL($this->uids)}) +EOSQL; + + $this->covidstatus = array(); + if( $this->db_query($sql) ) + { + while( false !== ($row = $this->db_fetch_object()) ) + { + $this->covidstatus[$row->uid] = $row->covidvalid; + } + } else { + $this->errormsg = "Fehler in der Abfrage des Covidstatus."; + } + } + + public function checkIfUdfValuesAreDefined() + { + $sql = 'SELECT count(name) AS "udfdefined" ' + . 'FROM "system"."tbl_udf", jsonb_to_recordset("jsons") AS items(name text) ' + . 'WHERE "schema" = \'' . self::DB_SCHEMA . '\' ' + . 'AND "table" = \'' . self::DB_TABLE . '\' ' + . 'AND "name" = \'' . self::DB_UDFNAME . '\''; + if ( $this->db_query($sql) ) + { + if ($row = $this->db_fetch_object()) + { + $this->isUdfDefined = ($row->udfdefined > 0) ? true : false; + } + else + { + $this->errormsg = "Fehler in der Abfrage beim Pruefen der UDFs. Kein Datensatz gefunden."; + $this->isUdfDefined = false; + } + } + else + { + $this->errormsg = "Fehler in der Abfrage beim Pruefen der UDFs."; + $this->isUdfDefined = false; + } + } +}