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 '

Pruefe Tabellen und Attribute!

';