From 98d841346aa49753045d3b75e6d46514d229b902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 10 Oct 2014 12:20:10 +0000 Subject: [PATCH] Anwesenheitslistenerfassung --- include/anwesenheit.class.php | 235 +++++++++++++++++++++++++ vilesci/personen/anwesenheit.php | 284 +++++++++++++++++++++++++++++++ 2 files changed, 519 insertions(+) create mode 100644 include/anwesenheit.class.php create mode 100644 vilesci/personen/anwesenheit.php diff --git a/include/anwesenheit.class.php b/include/anwesenheit.class.php new file mode 100644 index 000000000..0092daece --- /dev/null +++ b/include/anwesenheit.class.php @@ -0,0 +1,235 @@ + + */ +/** + * Klasse zur Verwaltung der Anwesenheiten der Studierenden + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class anwesenheit extends basis_db +{ + public $new=true; // boolean + public $result = array(); // adresse Objekt + + public $anwesenheit_id; // serial + public $uid; // varchar(32) + public $einheiten; // numeric(3,1) + public $datum; // date + public $anwesend; // boolean + public $lehreinheit_id; // bigint + public $anmerkung; // varchar(256) + + /** + * Konstruktor + * @param $anwesenheit_id ID des Datensatzes der geladen werden soll (Default=null) + */ + public function __construct($anwesenheit_id=null) + { + parent::__construct(); + + if(!is_null($anwesenheit_id)) + $this->load($anwesenheit_id); + } + + /** + * Laedt den Datensatz mit der ID $anwesenheit_id + * @param $anwesenheit_id ID des Datensatzes + * @return true wenn ok, false im Fehlerfall + */ + public function load($anwesenheit_id) + { + //Pruefen ob anwesenheit_id eine gueltige Zahl ist + if(!is_numeric($anwesenheit_id) || $anwesenheit_id == '') + { + $this->errormsg = 'Anwesenheit_id muss eine Zahl sein'; + return false; + } + + //Daten aus der Datenbank lesen + $qry = "SELECT * FROM campus.tbl_anwesenheit WHERE anwesenheit_id=".$this->db_add_param($anwesenheit_id, FHC_INTEGER, false); + + if(!$this->db_query($qry)) + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + + if($row = $this->db_fetch_object()) + { + $this->anwesenheit_id = $row->anwesenheit_id; + $this->uid = $row->uid; + $this->einheiten = $row->einheiten; + $this->datum = $row->datum; + $this->anwesend = $this->db_parse_bool($row->anwesend); + $this->lehreinheit_id = $row->lehreinheit_id; + $this->anmerkung = $row->anmerkung; + $this->new=false; + } + else + { + $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; + return false; + } + + return true; + } + + /** + * Prueft die Variablen auf Gueltigkeit + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + //Zahlenfelder pruefen + if(!is_numeric($this->anwesenheit_id) && $this->anwesenheit_id!='') + { + $this->errormsg='anwesenheit_id enthaelt ungueltige Zeichen'; + return false; + } + + //Gesamtlaenge pruefen + if(mb_strlen($this->anmerkung)>255) + { + $this->errormsg = 'Anmerkung darf nicht länger als 255 Zeichen sein'; + return false; + } + + $this->errormsg = ''; + return true; + } + + /** + * Speichert den aktuellen Datensatz in die Datenbank + * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt + * andernfalls wird der Datensatz mit der ID in $adresse_id aktualisiert + * @return true wenn ok, false im Fehlerfall + */ + public function save() + { + //Variablen pruefen + if(!$this->validate()) + return false; + + if($this->new) + { + //Neuen Datensatz einfuegen + $qry='BEGIN;INSERT INTO campus.tbl_anwesenheit (uid, einheiten, anwesend, datum, lehreinheit_id, anmerkung) VALUES('. + $this->db_add_param($this->uid).', '. + $this->db_add_param($this->einheiten).', '. + $this->db_add_param($this->anwesend, FHC_BOOLEAN).', '. + $this->db_add_param($this->datum).', '. + $this->db_add_param($this->lehreinheit_id).', '. + $this->db_add_param($this->anmerkung).');'; + } + else + { + //Pruefen ob id eine gueltige Zahl ist + if(!is_numeric($this->anwesenheit_id)) + { + $this->errormsg = 'anwesenheit_id muss eine gueltige Zahl sein'; + return false; + } + $qry='UPDATE campus.tbl_anwesenheit SET'. + ' uid='.$this->db_add_param($this->uid).', '. + ' einheiten='.$this->db_add_param($this->einheiten).', '. + ' anwesend='.$this->db_add_param($this->anwesend,FHC_BOOLEAN).', '. + ' datum='.$this->db_add_param($this->datum).', '. + ' lehreinheit_id='.$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '. + ' anmerkung='.$this->db_add_param($this->anmerkung).' '. + 'WHERE anwesenheit_id='.$this->db_add_param($this->anwesenheit_id, FHC_INTEGER, false).';'; + } + + if($this->db_query($qry)) + { + if($this->new) + { + //naechste ID aus der Sequence holen + $qry="SELECT currval('campus.seq_anwesenheit_anwesenheit_id') as id;"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->anwesenheit_id = $row->id; + $this->db_query('COMMIT'); + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = "Fehler beim Auslesen der Sequence"; + return false; + } + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + + } + else + { + $this->errormsg = 'Fehler beim Speichern des Datensatzes'; + return false; + } + return $this->anwesenheit_id; + } + + /** + * Laedt die Anwesenheiten einer Lehreinheit/Datum + * @param $lehreinheit_id + * @param $datum + * @return boolean true wenn ok, false im Fehlerfall + */ + public function getAnwesenheitLehreinheit($lehreinheit_id, $datum=null) + { + $qry = "SELECT * FROM campus.tbl_anwesenheit + WHERE + lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); + + if(!is_null($datum)) + $qry.=" AND datum=".$this->db_add_param($datum); + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new anwesenheit(); + + $obj->anwesenheit_id = $row->anwesenheit_id; + $obj->uid = $row->uid; + $obj->einheiten = $row->einheiten; + $obj->datum = $row->datum; + $obj->anwesend = $this->db_parse_bool($row->anwesend); + $obj->lehreinheit_id = $row->lehreinheit_id; + $obj->anmerkung = $row->anmerkung; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } +} +?> diff --git a/vilesci/personen/anwesenheit.php b/vilesci/personen/anwesenheit.php new file mode 100644 index 000000000..174d61fcc --- /dev/null +++ b/vilesci/personen/anwesenheit.php @@ -0,0 +1,284 @@ + + */ +/** + * Anwesenheit + * + * Erfasst die Anwesenheiten der Studierenden + */ +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/functions.inc.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/benutzer.class.php'); +require_once('../../include/datum.class.php'); +require_once('../../include/lehreinheit.class.php'); +require_once('../../include/lehrveranstaltung.class.php'); +require_once('../../include/anwesenheit.class.php'); + +if (!$uid = get_uid()) + die('Keine UID gefunden!'); + +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); + +$db = new basis_db(); +$datum_obj = new datum(); + +if(!$rechte->isBerechtigt('basis/person', null, 'suid')) + die('Sie haben keine Berechtigung für diese Seite'); + + +if(isset($_REQUEST['work'])) + $work = $_REQUEST['work']; +else + $work=''; + +echo ' + + + Anwesenheit + + + + + + + + + + +'; + +if($work=='save') +{ + foreach($_POST as $key=>$value) + { + if(strstr($key, 'anwesenheit_')) + { + $user = mb_substr($key, mb_strlen('anwesenheit_')); + + $anwesenheit_id=$_POST['anwesenheitid_'.$user]; + + $anwesenheit = new anwesenheit(); + + if($anwesenheit_id!='') + { + $anwesenheit->load($anwesenheit_id); + } + + $anwesenheit->uid = $user; + $anwesenheit->einheiten = $_POST['einheiten']; + $anwesenheit->lehreinheit_id = $_POST['lehreinheit_id']; + $anwesenheit->datum = $_POST['datum']; + $anwesenheit->anwesend=($value=='true'?true:false); + $anwesenheit->anmerkung = $_POST['anmerkung_'.$user]; + $anwesenheit->save(); + } + } + echo 'Daten wurden gespeichert'; + $work=''; +} + +if($work=='loadAnwesenheit') +{ + if(!isset($_POST['lvcode'])) + die('Parameter ungueltig'); + + $lvcode = $_POST['lvcode']; + + //echo 'LVCode:'.$lvcode; + + + $datum = mb_substr($lvcode,0,6); + $lehreinheit_id = mb_substr($lvcode,6,6); + + $datum = '20'.substr($datum,0,2).'-'.substr($datum,2,2).'-'.substr($datum,4,2); + //echo '
LehreinheitID:'.ltrim($lehreinheit_id,0); + //echo '
Datum:'.$datum; + + // Bereits eingetragene Anwesenheiten fuer diese Lehreinheit/Datum + $anwesenheit = new anwesenheit(); + $anwesenheit->getAnwesenheitLehreinheit($lehreinheit_id, $datum); + + $aw_arr=array(); + foreach($anwesenheit->result as $row) + { + $aw_arr[$row->uid]=$row; + } + + $lehreinheit = new lehreinheit(); + if($lehreinheit->load($lehreinheit_id)) + { + $lehrveranstaltung = new lehrveranstaltung(); + if($lehrveranstaltung->load($lehreinheit->lehrveranstaltung_id)) + { + // Anzahl der Einheiten ermitteln + $qry = "SELECT distinct stunde + FROM + lehre.tbl_stundenplan + WHERE + lehreinheit_id=".$db->db_add_param($lehreinheit_id)." + AND datum=".$db->db_add_param($datum).";"; + if($result = $db->db_query($qry)) + { + $einheiten = $db->db_num_rows($result); + } + + echo '

Lehrveranstaltung: '.$lehrveranstaltung->bezeichnung.' ('.$datum_obj->formatDatum($datum,'d.m.Y').' - '.$einheiten.' Einheiten)

'; + + if(count($aw_arr)>0) + { + echo 'Achtung - diese Liste wurde bereits erfasst!'; + } + echo '
'; + echo 'Bitte scannen Sie alle Barcodes der Studierenden die NICHT anwesend waren und speichern sie danach die Daten
'; + echo ''; + echo ''; + echo ''; + echo ''; + + echo '

'; + + // Teilnehmer ermitteln + $qry = "SELECT distinct uid, vorname, nachname, person_id + FROM + campus.vw_student_lehrveranstaltung + JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) WHERE lehreinheit_id=".$db->db_add_param($lehreinheit_id); + + if($result = $db->db_query($qry)) + { + $anzahl = $db->db_num_rows($result); + echo '

'.$anzahl.' Teilnehmer:

'; + echo ' + + + + + + + + + + + '; + + while($row = $db->db_fetch_object($result)) + { + if(isset($aw_arr[$row->uid])) + { + $anwesenheit_id=$aw_arr[$row->uid]->anwesenheit_id; + $anwesend = $aw_arr[$row->uid]->anwesend; + $anmerkung = $aw_arr[$row->uid]->anmerkung; + } + else + { + $anwesenheit_id=''; + $anwesend=true; + $anmerkung=''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo '
AnwesendPersonIDUIDVornameNachnameAnmerkung
+ + + + + + + '.$row->person_id.''.$row->uid.''.$row->vorname.''.$row->nachname.'
'; + echo '
'; + } + else + echo 'Fehler beim Laden der Teilnehmer'; + } + else + echo 'Fehler beim Laden der Lehrveranstaltung'; + } + else + echo 'Fehler beim Laden der Lehreinheit'; +} + +if($work=='') +{ + echo '

Anwesenheit

'; + + echo '
+ Bitte scannen Sie den Lehreinheiten Barcode
+ (ID zum Testen: 140918056945 ) + +
'; +} +echo ' + +'; +?>