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'); ?>
+
+
+
+
+ | Student |
+ Kennzeichen |
+ Gruppe |
+ Covid-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;
+ }
+ }
+}