Es kann nun konfiguriert werden ob bei der Punkteübernahme aus dem Reihungstest Punkte oder Prozentpunkte übernommen werden sollen

This commit is contained in:
oesi
2016-01-28 18:56:25 +01:00
parent 364c7b39d3
commit bf435a0896
4 changed files with 120 additions and 86 deletions
+4
View File
@@ -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);
+6 -3
View File
@@ -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;
}
}
+58 -52
View File
@@ -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 <christian.paminger@technikum-wien.at>,
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
@@ -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;
+52 -31
View File
@@ -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;
} ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML>
<html>
<head>
<title>Reihungstest</title>
@@ -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 '<br><table width="100%"><tr><td>';
echo "<SELECT name='studiengang' onchange='window.location.href=this.value'>";
if($stg_kz==-1)
$selected='selected';
else
else
$selected='';
echo "<OPTION value='".$_SERVER['PHP_SELF']."?stg_kz=-1' $selected>Alle Studiengaenge</OPTION>";
foreach ($studiengang->result as $row)
foreach ($studiengang->result as $row)
{
$stg_arr[$row->studiengang_kz] = $row->kuerzel;
if($stg_kz=='')
@@ -403,7 +418,7 @@ else
$reihungstest->getReihungstest($stg_kz,'datum DESC,uhrzeit DESC');
echo "<SELECT name='reihungstest' id='reihungstest' onchange='window.location.href=this.value'>";
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!='')
<tbody>";
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].'<br>';