diff --git a/include/pruefling.class.php b/include/pruefling.class.php
index 3c5244067..24f93f784 100644
--- a/include/pruefling.class.php
+++ b/include/pruefling.class.php
@@ -446,6 +446,8 @@ class pruefling extends basis_db
if($this->db_num_rows($result)==0)
return false;
+ $summeGewicht = 0;
+
while($row = $this->db_fetch_object($result))
{
//wenn maxpunkte ueberschritten wurde -> 100%
@@ -455,17 +457,19 @@ class pruefling extends basis_db
$row->punkte = $row->maxpunkte;
}
else
- $prozent = ($row->punkte/$row->maxpunkte)*100;
+ $prozent = (($row->punkte + $row->offsetpunkte)/($row->maxpunkte + $row->offsetpunkte))*100;
if($punkte)
{
- $ergebnis +=$row->punkte;
+ $ergebnis += $row->punkte;
}
-
else
- $ergebnis+=$prozent*$row->gewicht;
+ {
+ $ergebnis += $prozent * $row->gewicht;
+ $summeGewicht += $row->gewicht;
+ }
}
- return $ergebnis;
+ return $summeGewicht > 0 ? $ergebnis/$summeGewicht : $ergebnis;
}
else
{
diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php
index 2265c838b..af529bab4 100644
--- a/system/dbupdate_3.3.php
+++ b/system/dbupdate_3.3.php
@@ -3460,6 +3460,118 @@ if(!$result = @$db->db_query("SELECT offsetpunkte FROM testtool.tbl_gebiet LIMIT
echo '
testtool.tbl_gebiet: Spalte offsetpunkte hinzugefuegt';
}
+// ADD COLUMN offset to testtool.vw_auswertung_ablauf
+if(!$result = @$db->db_query("SELECT offsetpunkte FROM testtool.vw_auswertung_ablauf LIMIT 1"))
+{
+ // CREATE OR REPLACE VIEW testtool.vw_auswertung_ablauf
+ $qry = '
+ CREATE OR REPLACE VIEW testtool.vw_auswertung_ablauf AS (
+ SELECT
+ tbl_gebiet.gebiet_id,
+ tbl_gebiet.bezeichnung AS gebiet,
+ tbl_ablauf.reihung,
+ tbl_gebiet.maxpunkte,
+ tbl_pruefling.pruefling_id,
+ tbl_pruefling.prestudent_id,
+ tbl_person.vorname,
+ tbl_person.nachname,
+ tbl_person.gebdatum,
+ tbl_person.geschlecht,
+ tbl_pruefling.semester,
+ upper(tbl_studiengang.typ::character varying(1)::text || tbl_studiengang.kurzbz::text) AS stg_kurzbz,
+ tbl_studiengang.bezeichnung AS stg_bez,
+ tbl_pruefling.registriert,
+ tbl_pruefling.idnachweis,
+ ( SELECT sum(tbl_vorschlag.punkte) AS sum
+ FROM testtool.tbl_vorschlag
+ JOIN testtool.tbl_antwort USING (vorschlag_id)
+ JOIN testtool.tbl_frage USING (frage_id)
+ WHERE tbl_antwort.pruefling_id = tbl_pruefling.pruefling_id AND tbl_frage.gebiet_id = tbl_gebiet.gebiet_id
+ ) AS punkte,
+ tbl_rt_person.rt_id AS reihungstest_id,
+ tbl_ablauf.gewicht,
+ tbl_studiengang.studiengang_kz,
+ tbl_gebiet.offsetpunkte
+ FROM
+ testtool.tbl_pruefling
+ JOIN testtool.tbl_ablauf ON tbl_ablauf.studiengang_kz = tbl_pruefling.studiengang_kz
+ JOIN testtool.tbl_gebiet USING (gebiet_id)
+ JOIN public.tbl_prestudent USING (prestudent_id)
+ JOIN public.tbl_person USING (person_id)
+ JOIN public.tbl_rt_person USING (person_id)
+ JOIN lehre.tbl_studienplan ON tbl_studienplan.studienplan_id = tbl_rt_person.studienplan_id
+ JOIN lehre.tbl_studienordnung ON tbl_studienordnung.studienordnung_id = tbl_studienplan.studienordnung_id
+ JOIN public.tbl_studiengang ON tbl_prestudent.studiengang_kz = tbl_studiengang.studiengang_kz
+ WHERE NOT (tbl_ablauf.gebiet_id IN
+ (
+ SELECT tbl_kategorie.gebiet_id
+ FROM testtool.tbl_kategorie
+ )
+ ) AND tbl_studienordnung.studiengang_kz = tbl_pruefling.studiengang_kz
+ )';
+
+ if(!$db->db_query($qry))
+ echo 'testtool.vw_auswertung_ablauf: '.$db->db_last_error().'
';
+ else
+ echo '
testtool.vw_auswertung_ablauf view created';
+}
+
+// ADD COLUMN offset to testtool.vw_auswertung_ablauf
+if(!$result = @$db->db_query("SELECT offsetpunkte FROM testtool.vw_auswertung LIMIT 1"))
+{
+ // CREATE OR REPLACE VIEW testtool.vw_auswertung_ablauf
+ $qry = '
+ CREATE OR REPLACE VIEW testtool.vw_auswertung AS
+ SELECT
+ tbl_gebiet.gebiet_id,
+ tbl_gebiet.bezeichnung AS gebiet,
+ tbl_gebiet.maxpunkte,
+ tbl_pruefling.pruefling_id,
+ tbl_pruefling.prestudent_id,
+ tbl_person.vorname,
+ tbl_person.nachname,
+ tbl_person.gebdatum,
+ tbl_person.geschlecht,
+ tbl_pruefling.semester,
+ upper(tbl_studiengang.typ::character varying(1)::text || tbl_studiengang.kurzbz::text) AS stg_kurzbz,
+ tbl_studiengang.bezeichnung AS stg_bez,
+ tbl_pruefling.registriert,
+ tbl_pruefling.idnachweis,
+ (
+ SELECT
+ sum(tbl_vorschlag.punkte) AS sum
+ FROM
+ testtool.tbl_vorschlag
+ JOIN testtool.tbl_antwort USING (vorschlag_id)
+ JOIN testtool.tbl_frage USING (frage_id)
+ WHERE
+ tbl_antwort.pruefling_id = tbl_pruefling.pruefling_id
+ AND tbl_frage.gebiet_id = tbl_gebiet.gebiet_id
+ ) AS punkte,
+ tbl_rt_person.rt_id as reihungstest_id,
+ tbl_ablauf.gewicht,
+ tbl_person.person_id,
+ tbl_gebiet.offsetpunkte
+ FROM
+ testtool.tbl_pruefling
+ JOIN testtool.tbl_ablauf ON (tbl_ablauf.studiengang_kz = tbl_pruefling.studiengang_kz AND tbl_ablauf.semester = tbl_pruefling.semester)
+ JOIN testtool.tbl_gebiet USING (gebiet_id)
+ JOIN public.tbl_prestudent USING (prestudent_id)
+ JOIN public.tbl_person USING (person_id)
+ JOIN public.tbl_studiengang ON tbl_prestudent.studiengang_kz = tbl_studiengang.studiengang_kz
+ JOIN public.tbl_rt_person USING (person_id)
+ JOIN lehre.tbl_studienplan ON (tbl_studienplan.studienplan_id = tbl_rt_person.studienplan_id)
+ JOIN lehre.tbl_studienordnung ON (tbl_studienordnung.studienordnung_id = tbl_studienplan.studienordnung_id)
+ WHERE
+ tbl_studienordnung.studiengang_kz = tbl_prestudent.studiengang_kz
+ AND NOT (tbl_ablauf.gebiet_id IN ( SELECT tbl_kategorie.gebiet_id
+ FROM testtool.tbl_kategorie));';
+
+ if(!$db->db_query($qry))
+ echo 'testtool.vw_auswertung: '.$db->db_last_error().'
';
+ else
+ echo '
testtool.vw_auswertung view created';
+}
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '