diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index e4236697a..01925ac08 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -74,6 +74,10 @@ define('FAS_ANWESENHEIT_GELB', 90); // Legt einen Prüfungstermin an wenn eine neue Note erfasst wird define('FAS_PRUEFUNG_BEI_NOTENEINGABE_ANLEGEN',false); +// Legt fest ob bei der Uebernahme der Reihungstestpunkte die Punkte +//oder Prozentpunkte uebernommen werden true=Punkte, false=Prozentpunkte +define('FAS_REIHUNGSTEST_PUNKTE', false); + // Anzeigeoptionen für LV-Plan Menü define('CIS_LVPLAN_EXPORT_ANZEIGEN',true); define('CIS_LVPLAN_PERSONENAUSWAHL_ANZEIGEN',true); diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 0aa37bc86..57bde8ce6 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -1149,7 +1149,7 @@ if(!$error) $rolle->bestaetigtam = $_POST['bestaetigtam']; if($_POST['bestaetigtam']=='') $rolle->bestaetigtvon = null; - + $rolle->orgform_kurzbz = $_POST['orgform_kurzbz']; $rolle->studienplan_id = $_POST['studienplan_id']; $rolle->anmerkung_status = $_POST['anmerkung']; @@ -1370,7 +1370,7 @@ if(!$error) $stg_obj->load(ltrim($stg,'0')); $uid = generateUID($stg_obj->kurzbz,$jahr,$stg_obj->typ,$matrikelnr); $matrikelnummer = generateMatrikelnr($stg_obj->oe_kurzbz); - + if($matrikelnummer != null) { $qry = "UPDATE public.tbl_person SET matr_nr=".$db->db_add_param($matrikelnummer)." WHERE person_id=".$db->db_add_param($prestd->person_id, FHC_INTEGER).' AND matr_nr is null'; @@ -3745,7 +3745,10 @@ if(!$error) if(isset($_POST['prestudent_id'])) { $pruefling = new pruefling(); - $data = $pruefling->getReihungstestErgebnis($_POST['prestudent_id']); + if(defined('FAS_REIHUNGSTEST_PUNKTE') && FAS_REIHUNGSTEST_PUNKTE) + $data = $pruefling->getReihungstestErgebnis($_POST['prestudent_id'], true); + else + $data = $pruefling->getReihungstestErgebnis($_POST['prestudent_id']); $return = true; } } diff --git a/include/pruefling.class.php b/include/pruefling.class.php index 5b3b55f21..b8baaae96 100644 --- a/include/pruefling.class.php +++ b/include/pruefling.class.php @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * - * Authors: Christian Paminger , + * Authors: Christian Paminger , * Andreas Oesterreicher and * Rudolf Hangl . */ @@ -30,12 +30,12 @@ class pruefling extends basis_db public $registriert; public $prestudent_id; public $semester; - + // ErgebnisArray public $result=array(); public $num_rows=0; public $new; - + /** * Konstruktor - Laedt optional einen pruefling * @param $frage_id Frage die geladen werden soll (default=null) @@ -47,7 +47,7 @@ class pruefling extends basis_db if($pruefling_id != null) $this->load($pruefling_id); } - + /** * Laedt Pruefling mit der uebergebenen ID * @param $pruefling_id ID der Frage die geladen werden soll @@ -55,7 +55,7 @@ class pruefling extends basis_db public function load($pruefling_id) { $qry = "SELECT * FROM testtool.tbl_pruefling WHERE pruefling_id=".$this->db_add_param($pruefling_id, FHC_INTEGER); - + if($this->db_query($qry)) { if($row = $this->db_fetch_object()) @@ -68,21 +68,21 @@ class pruefling extends basis_db $this->semester = $row->semester; return true; } - else + else { $this->errormsg = "Kein Eintrag gefunden fuer $pruefling_id"; return false; - } + } } - else + else { $this->errormsg = "Fehler beim Laden"; return false; - } + } } - + /** - * Prueft die Variablen vor dem Speichern + * Prueft die Variablen vor dem Speichern * auf Gueltigkeit. * @return true wenn ok, false im Fehlerfall */ @@ -90,7 +90,7 @@ class pruefling extends basis_db { return true; } - + /** * Speichert die Benutzerdaten in die Datenbank * Wenn $new auf true gesetzt ist wird ein neuer Datensatz angelegt @@ -102,7 +102,7 @@ class pruefling extends basis_db //Variablen auf Gueltigkeit pruefen if(!$this->validate()) return false; - + if($this->new) //Wenn new true ist dann ein INSERT absetzen ansonsten ein UPDATE { $qry = 'BEGIN;INSERT INTO testtool.tbl_pruefling (studiengang_kz, idnachweis, registriert, prestudent_id, semester) VALUES('. @@ -113,7 +113,7 @@ class pruefling extends basis_db $this->db_add_param($this->semester).");"; } else - { + { $qry = 'UPDATE testtool.tbl_pruefling SET'. ' studiengang_kz='.$this->db_add_param($this->studiengang_kz, FHC_INTEGER).','. ' idnachweis='.$this->db_add_param($this->idnachweis).','. @@ -122,7 +122,7 @@ class pruefling extends basis_db ' prestudent_id='.$this->db_add_param($this->prestudent_id, FHC_INTEGER). " WHERE pruefling_id=".$this->db_add_param($this->pruefling_id, FHC_INTEGER, false).";"; } - + if($this->db_query($qry)) { if($this->new) @@ -136,7 +136,7 @@ class pruefling extends basis_db $this->db_query('COMMIT;'); return true; } - else + else { $this->db_query('ROLLBACK;'); $this->errormsg = 'Fehler beim Lesen der Sequence'; @@ -150,19 +150,19 @@ class pruefling extends basis_db return false; } } - else + else { return true; } } - else - { + else + { $this->db_query('ROLLBACK'); $this->errormsg = 'Fehler beim Speichern der Frage'; return false; } } - + /** * Laedt einen Puefling anhand der Prestudent_id * @@ -172,7 +172,7 @@ class pruefling extends basis_db public function getPruefling($prestudent_id) { $qry = "SELECT * FROM testtool.tbl_pruefling WHERE prestudent_id=".$this->db_add_param($prestudent_id, FHC_INTEGER); - + if($this->db_query($qry)) { if($row = $this->db_fetch_object()) @@ -185,21 +185,21 @@ class pruefling extends basis_db $this->semester = $row->semester; return true; } - else + else { $this->errormsg = "Kein Eintrag gefunden"; return false; - } + } } - else + else { $this->errormsg = "Fehler beim Laden"; return false; - } + } } - + /** - * Ermittelt den aktuellen Level (schwierigkeitsgrad der Frage) + * Ermittelt den aktuellen Level (schwierigkeitsgrad der Frage) * des Prueflings fuer das uebergebene Gebiet * * @param $pruefling_id @@ -208,17 +208,17 @@ class pruefling extends basis_db public function getPrueflingLevel($pruefling_id, $gebiet_id) { $gebiet = new gebiet($gebiet_id); - + //wenn Levelsystem fuer dieses Gebiet aktiviert ist if($gebiet->level_start!='') { //Maximal und Minimal Level fuer dieses Gebiet ermitteln $max_level = 0; $min_level = 0; - - $qry = "SELECT max(level) as max, min(level) as min FROM testtool.tbl_frage + + $qry = "SELECT max(level) as max, min(level) as min FROM testtool.tbl_frage WHERE gebiet_id=".$this->db_add_param($gebiet_id, FHC_INTEGER); - + if($this->db_query($qry)) { if($row = $this->db_fetch_object()) @@ -226,24 +226,24 @@ class pruefling extends basis_db $max_level = $row->max; $min_level = $row->min; } - else + else { $this->errormsg = 'unbekannter Fehler in getPrueflingLevel'; return false; } } - else + else { $this->errormsg = 'Fehler beim Ermitteln des Pruefling-Levels'; return false; } - + //alle bisherigen Antworten fuer dieses Gebiet holen $qry = "SELECT tbl_vorschlag.punkte - FROM - testtool.tbl_pruefling_frage - JOIN testtool.tbl_vorschlag USING(frage_id) + FROM + testtool.tbl_pruefling_frage + JOIN testtool.tbl_vorschlag USING(frage_id) JOIN testtool.tbl_antwort USING(vorschlag_id) JOIN testtool.tbl_frage USING(frage_id) WHERE @@ -251,7 +251,7 @@ class pruefling extends basis_db tbl_pruefling_frage.pruefling_id=".$this->db_add_param($pruefling_id, FHC_INTEGER)." AND tbl_antwort.pruefling_id = tbl_pruefling_frage.pruefling_id ORDER BY tbl_pruefling_frage.nummer ASC"; - + $aktueller_level=$gebiet->level_start; $anzahl_richtig=0; $anzahl_falsch=0; @@ -265,13 +265,13 @@ class pruefling extends basis_db $anzahl_richtig++; $anzahl_falsch=0; } - else + else { //wenn die Frage falsch beantwortet wurde dann falsch-zaehler erhoehen $anzahl_richtig=0; $anzahl_falsch++; } - + //wenn einer der Zaehler das Sprunglevel erreicht hat, dann //in ein anderes Level springen if($anzahl_richtig==$gebiet->level_sprung_auf) @@ -286,54 +286,60 @@ class pruefling extends basis_db $anzahl_richtig=0; $anzahl_falsch=0; } - + //aktueller level darf nicht kleiner/groesser als der minimal/maximal Level sein if($aktueller_level<$min_level) $aktueller_level=$min_level; if($aktueller_level>$max_level) $aktueller_level=$max_level; } - + return $aktueller_level; } - else + else { $this->errormsg = 'Fehler bei einer Abfrage'; return false; } } - else + else return -1; } - + /** * Berechnet das Reihungstestergebnis fuer einen Prestudenten * * @param $prestudent_id * @return Endpunkte des Reihungstests */ - public function getReihungstestErgebnis($prestudent_id) + public function getReihungstestErgebnis($prestudent_id, $punkte=false) { - $qry = "SELECT * FROM testtool.vw_auswertung + $qry = "SELECT * FROM testtool.vw_auswertung WHERE prestudent_id=".$this->db_add_param($prestudent_id, FHC_INTEGER); - + $ergebnis=0; - + if($this->db_query($qry)) { while($row = $this->db_fetch_object()) { //wenn maxpunkte ueberschritten wurde -> 100% if($row->punkte>=$row->maxpunkte) + { $prozent=100; + $row->punkte = $row->maxpunkte; + } else $prozent = ($row->punkte/$row->maxpunkte)*100; - - $ergebnis+=$prozent*$row->gewicht; + + if($punkte) + $ergebnis +=$row->punkte; + else + $ergebnis+=$prozent*$row->gewicht; } return $ergebnis; } - else + else { $this->errormsg = 'Fehler bei einer Abfrage'; return false; diff --git a/vilesci/stammdaten/reihungstestverwaltung.php b/vilesci/stammdaten/reihungstestverwaltung.php index d647bff8f..81baa7382 100644 --- a/vilesci/stammdaten/reihungstestverwaltung.php +++ b/vilesci/stammdaten/reihungstestverwaltung.php @@ -23,15 +23,16 @@ */ /** * Reihungstest - * + * * - Anlegen und Bearbeiten von Terminen * - Export von Anwesenheitslisten als Excel * - Uebertragung der Ergebniss-Punkte ins FAS - * + * * Parameter: * excel ... wenn gesetzt, dann wird die Anwesenheitsliste als Excel exportiert */ require_once('../../config/vilesci.config.inc.php'); +require_once('../../config/global.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/reihungstest.class.php'); @@ -42,6 +43,7 @@ require_once('../../include/pruefling.class.php'); require_once('../../include/person.class.php'); require_once('../../include/prestudent.class.php'); require_once('../../include/Excel/excel.php'); +require_once('../../include/adresse.class.php'); if (!$db = new basis_db()) { @@ -71,7 +73,7 @@ $studiengang->getAll('typ, kurzbz', false); //Studierende als Excel Exportieren if(isset($_GET['excel'])) -{ +{ $reihungstest = new reihungstest(); if($reihungstest->load($_GET['reihungstest_id'])) { @@ -112,7 +114,18 @@ if(isset($_GET['excel'])) $worksheet->write(2,++$i,"ORT", $format_bold); $maxlength[$i] = 3; - $qry = "SELECT *, (SELECT kontakt FROM tbl_kontakt WHERE kontakttyp='email' AND person_id=tbl_prestudent.person_id AND zustellung=true LIMIT 1) as email,(SELECT ausbildungssemester FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id AND datum=(SELECT MAX(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id AND status_kurzbz='Interessent') LIMIT 1) as ausbildungssemester FROM public.tbl_prestudent JOIN public.tbl_person USING(person_id) WHERE reihungstest_id='$reihungstest->reihungstest_id' ORDER BY nachname, vorname"; + $qry = "SELECT *, + (SELECT kontakt FROM tbl_kontakt + WHERE kontakttyp='email' AND person_id=tbl_prestudent.person_id AND zustellung=true LIMIT 1) as email, + (SELECT ausbildungssemester FROM public.tbl_prestudentstatus + WHERE prestudent_id=tbl_prestudent.prestudent_id + AND datum=(SELECT MAX(datum) FROM public.tbl_prestudentstatus + WHERE prestudent_id=tbl_prestudent.prestudent_id + AND status_kurzbz='Interessent') LIMIT 1) as ausbildungssemester + FROM + public.tbl_prestudent + JOIN public.tbl_person USING(person_id) + WHERE reihungstest_id=".$db->db_add_param($reihungstest->reihungstest_id, FHC_INTEGER)." ORDER BY nachname, vorname"; if($result = $db->db_query($qry)) { @@ -129,12 +142,14 @@ if(isset($_GET['excel'])) { if($item->prestudent_id!=$row->prestudent_id) { - $erg = $pruefling->getReihungstestErgebnis($item->prestudent_id); + if(defined('FAS_REIHUNGSTEST_PUNKTE') && FAS_REIHUNGSTEST_PUNKTE) + $erg = $pruefling->getReihungstestErgebnis($item->prestudent_id, true); + else + $erg = $pruefling->getReihungstestErgebnis($item->prestudent_id); if($erg!=0) { - $rt_in_anderen_stg.=number_format($erg,2).' Punkte im Studiengang '.$studiengang->kuerzel_arr[$item->studiengang_kz]."\n"; + $rt_in_anderen_stg.=number_format($erg,2).' Punkte im Studiengang '.$studiengang->kuerzel_arr[$item->studiengang_kz]."; "; } - } } @@ -166,24 +181,21 @@ if(isset($_GET['excel'])) if(strlen($row->ausbildungssemester)>$maxlength[$i]) $maxlength[$i] = mb_strlen($row->ausbildungssemester); - $qry = "SELECT * FROM public.tbl_adresse WHERE person_id='$row->person_id' AND zustelladresse=true LIMIT 1"; - if($result_adresse = $db->db_query($qry)) - { - if($row_adresse = $db->db_fetch_object($result_adresse)) - { - $worksheet->write($zeile,++$i,$row_adresse->strasse); - if(strlen($row_adresse->strasse)>$maxlength[$i]) - $maxlength[$i] = mb_strlen($row_adresse->strasse); + $adresse = new adresse(); + $adresse->loadZustellAdresse($row->person_id); - $worksheet->write($zeile,++$i,$row_adresse->plz); - if(strlen($row_adresse->plz)>$maxlength[$i]) - $maxlength[$i] = mb_strlen($row_adresse->plz); + $worksheet->write($zeile,++$i,$adresse->strasse); + if(strlen($adresse->strasse)>$maxlength[$i]) + $maxlength[$i] = mb_strlen($adresse->strasse); + + $worksheet->write($zeile,++$i,$adresse->plz); + if(strlen($adresse->plz)>$maxlength[$i]) + $maxlength[$i] = mb_strlen($adresse->plz); + + $worksheet->write($zeile,++$i,$adresse->ort); + if(strlen($adresse->ort)>$maxlength[$i]) + $maxlength[$i] = mb_strlen($adresse->ort); - $worksheet->write($zeile,++$i,$row_adresse->ort); - if(strlen($row_adresse->ort)>$maxlength[$i]) - $maxlength[$i] = mb_strlen($row_adresse->ort); - } - } $zeile++; } } @@ -199,7 +211,7 @@ if(isset($_GET['excel'])) } return; } ?> - + Reihungstest @@ -351,7 +363,10 @@ if(isset($_GET['type']) && $_GET['type']=='saveallrtpunkte') $prestudent->load($row->prestudent_id); $pruefling = new pruefling(); - $rtpunkte = $pruefling->getReihungstestErgebnis($row->prestudent_id); + if(defined('FAS_REIHUNGSTEST_PUNKTE') && FAS_REIHUNGSTEST_PUNKTE) + $rtpunkte = $pruefling->getReihungstestErgebnis($row->prestudent_id,true); + else + $rtpunkte = $pruefling->getReihungstestErgebnis($row->prestudent_id); $prestudent->rt_punkte1 = str_replace(',','.',$rtpunkte); $prestudent->punkte = str_replace(',','.',$prestudent->rt_punkte1 + $prestudent->rt_punkte2); @@ -377,11 +392,11 @@ echo '
"; while($row = $db->db_fetch_object($result)) { - $rtergebnis = $pruefling->getReihungstestErgebnis($row->prestudent_id); + if(defined('FAS_REIHUNGSTEST_PUNKTE') && FAS_REIHUNGSTEST_PUNKTE) + $rtergebnis = $pruefling->getReihungstestErgebnis($row->prestudent_id,true); + else + $rtergebnis = $pruefling->getReihungstestErgebnis($row->prestudent_id); $prestudent = new prestudent(); $prestudent->getPrestudenten($row->person_id); $rt_in_anderen_stg=''; @@ -573,7 +591,10 @@ if($reihungstest_id!='') { if($item->prestudent_id!=$row->prestudent_id) { - $erg = $pruefling->getReihungstestErgebnis($item->prestudent_id); + if(defined('FAS_REIHUNGSTEST_PUNKTE') && FAS_REIHUNGSTEST_PUNKTE) + $erg = $pruefling->getReihungstestErgebnis($item->prestudent_id, true); + else + $erg = $pruefling->getReihungstestErgebnis($item->prestudent_id); if($erg!=0) { $rt_in_anderen_stg.=number_format($erg,2).' Punkte im Studiengang '.$studiengang->kuerzel_arr[$item->studiengang_kz].'
';
'; echo ""; -foreach ($reihungstest->result as $row) +foreach ($reihungstest->result as $row) { //if($reihungstest_id=='') // $reihungstest_id=$row->reihungstest_id; @@ -437,7 +452,7 @@ if(!$neu) if(!$reihungstest->load($reihungstest_id)) die('Reihungstest existiert nicht'); } -else +else { if($stg_kz!=-1 && $stg_kz!='') $reihungstest->studiengang_kz = $stg_kz; @@ -565,7 +580,10 @@ if($reihungstest_id!='')