From 73ae230cf03109fa3753975e8ff3bc455621c315 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 24 Nov 2017 14:31:43 +0100 Subject: [PATCH] =?UTF-8?q?Added=20"Notenspiegel=5Ferweitert"=20excel=20ex?= =?UTF-8?q?port=20for=20color=20highlighting=20of=20negative=20marks=20and?= =?UTF-8?q?=20Nachpr=C3=BCfungen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/fas.xul.php | 7 + content/fasoverlay.js.php | 26 + content/statistik/notenspiegel_erweitert.php | 639 +++++++++++++++++++ include/note.class.php | 66 +- include/pruefungstermin.class.php | 21 +- locale/de-AT/fas.dtd | 4 + locale/de-SFU/fas.dtd | 4 + system/dbupdate_3.3.php | 69 +- 8 files changed, 803 insertions(+), 33 deletions(-) create mode 100644 content/statistik/notenspiegel_erweitert.php diff --git a/content/fas.xul.php b/content/fas.xul.php index 282a6580a..fd1eb09e9 100644 --- a/content/fas.xul.php +++ b/content/fas.xul.php @@ -109,6 +109,7 @@ foreach($addon_obj->result as $addon) + @@ -357,6 +358,12 @@ foreach($addon_obj->result as $addon) label = "&menu-statistic-notenspiegel-excel.label;" command = "menu-statistic-notenspiegel-excel:command" accesskey = "&menu-statistic-notenspiegel-excel.accesskey;"/> + content/statistik/notenspiegel.php?studiengang_kz='+studiengang_kz+'&semester='+semester+'&typ='+typ+'&orgform='+orgform,'Notenspiegel'); } +// **** +// * Liefert eine HTML Liste mit Uebersicht ueber die eingetragenen Noten +// * Studiengang und optional Semester muss gewaehlt sein. +// **** +function StatistikPrintNotenspiegelErweitert(typ) +{ + tree = document.getElementById('tree-verband'); + + if(tree.currentIndex==-1) + { + alert('Bitte zuerst einen Studiengang auswaehlen'); + return; + } + + //Studiengang und Semester holen + var col; + col = tree.columns ? tree.columns["stg_kz"] : "stg_kz"; + var studiengang_kz=tree.view.getCellText(tree.currentIndex,col); + col = tree.columns ? tree.columns["sem"] : "sem"; + var semester=tree.view.getCellText(tree.currentIndex,col); + col = tree.columns ? tree.columns["tree-verband-col-orgform"] : "tree-verband-col-orgform"; + var orgform=tree.view.getCellText(tree.currentIndex,col); + + window.open('content/statistik/notenspiegel_erweitert.php?studiengang_kz='+studiengang_kz+'&semester='+semester+'&typ='+typ+'&orgform='+orgform,'Notenspiegel'); +} + // **** // * Liefert eine statistik ueber die Anzahl der Interessenten/Bewerber Studenten // **** diff --git a/content/statistik/notenspiegel_erweitert.php b/content/statistik/notenspiegel_erweitert.php new file mode 100644 index 000000000..700148b74 --- /dev/null +++ b/content/statistik/notenspiegel_erweitert.php @@ -0,0 +1,639 @@ +, + * Andreas Oesterreicher , + * Rudolf Hangl and + * Alexei Karpenko + */ +/** + * Erstellt einen Notenspiegel + * + * Parameter: studiengang_kz ... Studiengang der angezeigt werden soll + * semester ... Semester das angezeigt werden soll + * orgform ... Filter für Organisationsform (VZ | BB | FST | etc) + * typ ... Output format (xls | html) + * + * Listet alle Noten der Studierenden des Studiengangs/Semester im eingestellten Studiensemester + * und berechnet den Notendurchschnitt und gewichteten Notendurchschnitt. + * + * Gewichteter Notendurchschnitt = (Note der LV) * (ECTS der LV) / (Summe aller ECTS) + */ +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/functions.inc.php'); +require_once('../../include/studiengang.class.php'); +require_once('../../include/person.class.php'); +require_once('../../include/benutzer.class.php'); +require_once('../../include/student.class.php'); +require_once('../../include/prestudent.class.php'); +require_once('../../include/note.class.php'); +require_once('../../include/lehrveranstaltung.class.php'); +require_once('../../include/pruefungstermin.class.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/Excel/excel.php'); + +$db = new basis_db(); +$user = get_uid(); +loadVariables($user); + +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); + +if (!isset($_GET['studiengang_kz'])) + die('Falsche Parameteruebergabe'); +else + $studiengang_kz = $_GET['studiengang_kz']; + +if (!$rechte->isBerechtigt('student/noten', $studiengang_kz, 's')) + die('Sie haben keine Berechtigung fuer diese Seite'); + +$semester = isset($_GET['semester']) ? $_GET['semester'] : ''; +$typ = isset($_GET['typ']) ? $_GET['typ'] : ''; + +if ($semester == '') + die('Bitte ein Semester auswaehlen'); + +$orgform = isset($_GET['orgform']) ? $_GET['orgform'] : ''; + +$stg = new studiengang(); +$stg_arr = array(); +$stg->getAll(false); +foreach ($stg->result as $studiengang) + $stg_arr[$studiengang->studiengang_kz] = $studiengang->kuerzel; + +$stg = new studiengang(); +$stg->load($studiengang_kz); + +$student = new student(); +$result_student = $student->getStudents($studiengang_kz, $semester, null, null, null, $semester_aktuell); +$uids = ''; +foreach ($result_student as $row) +{ + if ($uids != '') + $uids .= ','; + $uids .= $db->db_add_param($row->uid); +} +if ($uids == '') + die('Es befinden sich keine Studierende in diesem Semester'); + +$qry = "SELECT + lehrveranstaltung_id, bezeichnung, studiengang_kz, semester, ects + FROM + lehre.tbl_lehrveranstaltung + WHERE + lehrveranstaltung_id IN + ( + SELECT + distinct lehrveranstaltung_id + FROM + campus.vw_student_lehrveranstaltung, public.tbl_studentlehrverband + WHERE + tbl_studentlehrverband.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER)." AND + tbl_studentlehrverband.semester=".$db->db_add_param($semester, FHC_INTEGER)." AND + vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($semester_aktuell)." AND + uid=student_uid AND + vw_student_lehrveranstaltung.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz + ) + AND studiengang_kz<>0 + UNION + SELECT + lehrveranstaltung_id, bezeichnung, studiengang_kz, semester, ects + FROM + lehre.tbl_lehrveranstaltung JOIN lehre.tbl_zeugnisnote USING(lehrveranstaltung_id) + WHERE + tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER)." AND + tbl_zeugnisnote.student_uid in($uids) AND + tbl_zeugnisnote.studiensemester_kurzbz=".$db->db_add_param($semester_aktuell)." + ORDER BY bezeichnung"; + +if (!$result_lva = $db->db_query($qry)) + die('Fehler beim Ermitteln der Lehrveranstaltungen'); + +$noten = new note(); +$noten->getActive(); +$noten_arr = $noten_bezeichnungen = $noten_farben = $noten_positiv = array(); + +$pruefungstermin = new pruefungstermin(); + +$termine = $pruefungstermin->getAllPruefungstypen(false, true); + +$terminbez = 'Termin'; +$kommPruef = 'kommPruef'; +$zusKommPruef = 'zusKommPruef'; + +//null Werte und undefiniert rausfiltern +$termine = array_filter($termine, function ($termin) +{ + return !(is_null($termin->beschreibung) || $termin->pruefungstyp_kurzbz == 'undefiniert'); +}); + +$termineWithSort = array_filter($termine, function ($termin) +{ + return is_numeric($termin->sort); +}); + +$nulltermine = array_filter($termine, function ($termin) +{ + return is_null($termin->sort); +}); + +//keine Werte in sort Spalte - es wird versucht, Reihenfolge aufgrund Strings zu bestimmen +//zuerst Termine 1 - n, dann kommissionelle und zusätzliche kommissionelle +$max = 0; +foreach ($nulltermine as $termin) +{ + if (preg_match('/^'.$terminbez.'\d+$/', $termin->pruefungstyp_kurzbz)) + { + if (preg_match_all('/\d+/', $termin->pruefungstyp_kurzbz, $numbers)) + { + $number = intval(end($numbers[0])); + $termin->sort = $number; + if ($number > $max) + $max = $number; + } + } +} + +foreach ($nulltermine as $termin) +{ + if ($termin->pruefungstyp_kurzbz == $kommPruef || $termin->pruefungstyp_kurzbz == $zusKommPruef) + { + $termin->sort = ++$max; + } +} + +usort($nulltermine, function ($termina, $terminb) +{ + return is_null($termina->sort) ? 1 : (is_null($terminb->sort) ? -1 : $termina->sort - $terminb->sort); +}); + +$termine = array_merge($termineWithSort, $nulltermine); + +//Farben für Prüfungsantritte (1. Termin, 2., kommissionelle...) +$colors = array('ffff00', 'fa9200', 'ff1500', '800000', '9400D3', '1500ff', '305041', '00fff2', '00ff2b'); +$colorsForPositiv = array('ffffff', 'ffdfb3', 'ffb9b3', 'ff9494', 'ddb3ff', '7366ff', '80b39b', 'b3fffb', 'b3ffbf'); + +$counter = 0; +foreach ($termine as $termin) +{ + $terminkurzbz = $termin->pruefungstyp_kurzbz; + $pruefungsart_farben[$terminkurzbz] = $colors[$counter]; + $pruefungsart_farben[$terminkurzbz.'Pos'] = $colorsForPositiv[$counter]; + $counter++; +} + +foreach ($noten->result as $row) +{ + $noten_arr[$row->note] = $row->anmerkung; + $noten_wert[$row->note] = $row->notenwert; + $noten_bezeichnungen[$row->note] = $row->bezeichnung; + $noten_farben[$row->note] = $row->farbe; + $noten_positiv[$row->note] = $row->positiv; +} + +if ($typ == 'xls') +{ + // Creating a workbook + $workbook = new Spreadsheet_Excel_Writer(); + $workbook->setVersion(8); + // sending HTTP headers + $workbook->send("Notenliste_".$semester_aktuell."_".$stg->kuerzel.($semester != '' ? '_'.$semester : '').".xls"); + + // Creating a worksheet + $worksheet =& $workbook->addWorksheet("Notenliste"); + $worksheet->setInputEncoding('utf-8'); + + //Formate Definieren + $format_bold =& $workbook->addFormat(); + $format_bold->setBold(); + $format_bold->setBorder(1); + + $format_bold_wrap =& $workbook->addFormat(); + $format_bold_wrap->setBold(); + $format_bold_wrap->setBorder(1); + $format_bold_wrap->setTextWrap(); + + $format_rotate =& $workbook->addFormat(); + $format_rotate->setTextRotation(270); + $format_rotate->setAlign('center'); + + $format_bold_center =& $workbook->addFormat(); + $format_bold_center->setBold(); + $format_bold_center->setAlign('center'); + $format_bold_center->setBorder(1); + + $format_bold_noborder =& $workbook->addFormat(); + $format_bold_noborder->setBold(); + + $format_number =& $workbook->addFormat(); + $format_number->setNumFormat('0.00'); + $format_number->setBorder(1); + + //Farben ueberschreiben + foreach ($noten_farben as $note => $farbe) + { + if ($farbe != '') + { + $workbook->setCustomColor( + $note + 10, + hexdec(substr($farbe, 0, 2)), + hexdec(substr($farbe, 2, 2)), + hexdec(substr($farbe, 4, 2)) + ); + } + else + { + $workbook->setCustomColor($note + 10, 255, 255, 255); + } + + $format_colored[$note] =& $workbook->addFormat(); + $format_colored[$note]->setFgColor($note + 10); + $format_colored[$note]->setBorder(1); + $format_colored[$note]->setAlign('center'); + } + + $counter = 1; + + foreach ($pruefungsart_farben as $art => $farbe) + { + //eigene Farben für Indizes 40 + definieren + $colornumber = 40 + $counter; + $workbook->setCustomColor( + $colornumber, + hexdec(substr($farbe, 0, 2)), + hexdec(substr($farbe, 2, 2)), + hexdec(substr($farbe, 4, 2)) + ); + $format_colored[$art] =& $workbook->addFormat(); + $format_colored[$art]->setFgColor($colornumber); + $format_colored[$art]->setBorder(1); + $format_colored[$art]->setAlign('center'); + $counter++; + } + + //30 = Grau = Nicht teilgenommen + $workbook->setCustomColor(30, 90, 90, 90); + + $format_colored_nichtzugeteilt =& $workbook->addFormat(); + $format_colored_nichtzugeteilt->setFgColor(30); + $format_colored_nichtzugeteilt->setBorder(1); + $format_colored_nichtzugeteilt->setAlign('center'); + + $format_colored_nichteingetragen =& $workbook->addFormat(); + $format_colored_nichteingetragen->setFgColor(19); + $format_colored_nichteingetragen->setBorder(1); + $format_colored_nichteingetragen->setAlign('center'); + + $spalte = 0; + $zeile = 1; + + $worksheet->write($zeile, $spalte, 'Nachname', $format_bold); + $maxlength[$spalte] = 10; + $worksheet->write($zeile, ++$spalte, 'Vorname', $format_bold); + $maxlength[$spalte] = 10; + $worksheet->write($zeile, ++$spalte, 'Personenkennzeichen', $format_bold); + $maxlength[$spalte] = 30; + $maxheaderheight = 20; + + while ($row_lva = $db->db_fetch_object($result_lva)) + { + $value = $stg_arr[$row_lva->studiengang_kz].$row_lva->semester.' '.$row_lva->bezeichnung.' ('.$row_lva->ects.' ECTS)'; + $worksheet->write($zeile, ++$spalte, $value, $format_rotate); + $maxlength[$spalte] = 3; + + if (mb_strlen($value) > $maxheaderheight) + $maxheaderheight = mb_strlen($value); + } + $anzahl_lvspalten = $spalte - 2; + + $worksheet->write($zeile, ++$spalte, 'Notendurchschnitt', $format_bold); + $maxlength[$spalte] = 15; + $worksheet->write($zeile, ++$spalte, "Gewichteter\nNotendurchschnitt", $format_bold_wrap); + $maxlength[$spalte] = 15; + + $anzahl_lv = array(); + $summe_lv = array(); + $summegewichtet = 0; + $anzahlgewichtet = 0; + foreach ($result_student as $row_student) + { + if ($orgform != '') + { + //Wenn der Student nicht die passende orgform hat (VZ,BB,FST, etc) + //dann nicht anzeigen + $prestudent = new prestudent(); + $prestudent->getLastStatus($row_student->prestudent_id); + + if ($prestudent->orgform_kurzbz != $orgform) + continue; + } + $zeile++; + $spalte = 0; + + $worksheet->write($zeile, $spalte, $row_student->nachname, $format_bold); + if ($maxlength[$spalte] < strlen($row_student->nachname)) + $maxlength[$spalte] = strlen($row_student->nachname); + $worksheet->write($zeile, ++$spalte, $row_student->vorname, $format_bold); + if ($maxlength[$spalte] < strlen($row_student->vorname)) + $maxlength[$spalte] = strlen($row_student->vorname); + $worksheet->write($zeile, ++$spalte, $row_student->matrikelnr, $format_bold); + + //Alle Zeugnisnoten des Studierenden holen + $noten = array(); + $qry = "SELECT * FROM lehre.tbl_zeugnisnote WHERE student_uid=".$db->db_add_param($row_student->uid)." AND studiensemester_kurzbz=".$db->db_add_param($semester_aktuell); + if ($result = $db->db_query($qry)) + while ($row = $db->db_fetch_object($result)) + $noten[$row->lehrveranstaltung_id] = $row->note; + + //Zu jeder Lehrveranstaltungsnote Prüfungstyp (Anzahl der Antritte) holen + $pruefungstypen = array(); + $qry = "SELECT tbl_lehrveranstaltung.lehrveranstaltung_id, pruefungstyp_kurzbz, sort, datum + FROM + lehre.tbl_pruefung + JOIN + lehre.tbl_lehreinheit using(lehreinheit_id) + JOIN + lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id) + WHERE + student_uid=".$db->db_add_param($row_student->uid)." AND studiensemester_kurzbz=".$db->db_add_param($semester_aktuell)." + ORDER BY lehrveranstaltung_id, sort, datum"; + if ($result = $db->db_query($qry)) + { + while ($row = $db->db_fetch_object($result)) + { + $pruefungstypen[$row->lehrveranstaltung_id] = $row->pruefungstyp_kurzbz; + } + } + + //Alle LVs holen zu denen der Studierende zugeteilt ist + $zugeteilte_lvs = array(); + $qry = "SELECT distinct lehrveranstaltung_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + uid=".$db->db_add_param($row_student->uid)." AND + studiensemester_kurzbz=".$db->db_add_param($semester_aktuell); + + if ($result = $db->db_query($qry)) + while ($row = $db->db_fetch_object($result)) + $zugeteilte_lvs[] = $row->lehrveranstaltung_id; + + $anzahl = 0; + $summe = 0; + $rowcount = 0; + $summeects = 0; + $gewichtetenote = 0; + + while ($rowcount < $db->db_num_rows($result_lva)) + { + $row_lva = $db->db_fetch_object($result_lva, $rowcount); + $rowcount++; + //wenn es eine Note gibt + if (isset($noten[$row_lva->lehrveranstaltung_id])) + { + $note = $noten[$row_lva->lehrveranstaltung_id]; + $format = 0; + + //wenn für die LV der Studierende eine Nachprüfung hat (z.B. 2 Termin, kommissionelle...) + if (isset($pruefungstypen[$row_lva->lehrveranstaltung_id])) + { + $pruefungstyp = $pruefungstypen[$row_lva->lehrveranstaltung_id]; + if (isset($format_colored[$pruefungstyp])) + { + //wenn es eine Farbe für die Art der Nachprüfung gibt, diese verwenden (positiv oder negativ) + $format = ($noten_positiv[$note]) ? $format_colored[$pruefungstyp."Pos"] : $format_colored[$pruefungstyp]; + } + } + //keine Nachprüfung aber negativ - 1. Antritt Farbe wenn es eine Notenanmerkung gibt + else if (!$noten_positiv[$note] && $noten_arr[$note] != '' && isset($noten_arr[$note])) + { + reset($pruefungsart_farben); + $format = $format_colored[key($pruefungsart_farben)]; + } + else if (isset($format_colored[$note])) + $format = $format_colored[$note]; + + $worksheet->write($zeile, ++$spalte, $noten_arr[$note], $format); + + if ($noten_wert[$noten[$row_lva->lehrveranstaltung_id]] != '') + { + if (!isset($summe_lv[$row_lva->lehrveranstaltung_id])) + { + $summe_lv[$row_lva->lehrveranstaltung_id] = 0; + $anzahl_lv[$row_lva->lehrveranstaltung_id] = 0; + } + $summe_lv[$row_lva->lehrveranstaltung_id] += $noten_wert[$noten[$row_lva->lehrveranstaltung_id]]; + $anzahl_lv[$row_lva->lehrveranstaltung_id]++; + $summe += $noten_wert[$noten[$row_lva->lehrveranstaltung_id]]; + if (is_numeric($row_lva->ects)) + { + $gewichtetenote += $noten_wert[$noten[$row_lva->lehrveranstaltung_id]] * $row_lva->ects; + $summeects += $row_lva->ects; + } + $anzahl++; + } + } + else + { + //Keine Note fuer diese LV vorhanden + if (in_array($row_lva->lehrveranstaltung_id, $zugeteilte_lvs)) + { + $worksheet->write($zeile, ++$spalte, '', $format_colored_nichteingetragen); + } + else + { + $worksheet->write($zeile, ++$spalte, '', $format_colored_nichtzugeteilt); + } + } + } + + if ($anzahl != 0) + $schnitt = $summe / $anzahl; + else + $schnitt = 0; + + if ($summeects != 0) + $gewichtetenote /= $summeects; + + $worksheet->write($zeile, ++$spalte, sprintf("%.2f", $schnitt), $format_number); + $worksheet->write($zeile, ++$spalte, sprintf("%.2f", $gewichtetenote), $format_number); + if ($gewichtetenote != 0) + { + $summegewichtet += $gewichtetenote; + $anzahlgewichtet++; + } + } + $zeile++; + $spalte = 2; + $worksheet->write($zeile, $spalte, 'Notendurchschnitt', $format_bold); + + $summe_schnitt = 0; + $anzahl_schnitt = 0; + $rowcount = 0; + while ($rowcount < $db->db_num_rows($result_lva)) + { + $row_lva = $db->db_fetch_object($result_lva, $rowcount); + $rowcount++; + if (isset($summe_lv[$row_lva->lehrveranstaltung_id])) + { + if ($anzahl_lv[$row_lva->lehrveranstaltung_id] != 0) + $schnitt = $summe_lv[$row_lva->lehrveranstaltung_id] / $anzahl_lv[$row_lva->lehrveranstaltung_id]; + else + $schnitt = 0; + } + else + $schnitt = 0; + if ($schnitt != 0) + { + $summe_schnitt += $schnitt; + $anzahl_schnitt++; + } + $worksheet->write($zeile, ++$spalte, sprintf("%.2f", $schnitt), $format_number); + } + + if ($anzahl_schnitt != 0) + $schnitt = $summe_schnitt / $anzahl_schnitt; + else + $schnitt = 0; + $worksheet->write($zeile, ++$spalte, sprintf("%.2f", $schnitt), $format_number); + if ($anzahlgewichtet != 0) + $summegewichtet = $summegewichtet / $anzahlgewichtet; + $worksheet->write($zeile, ++$spalte, sprintf("%.2f", $summegewichtet), $format_number); + + $zeile += 5; + $legendzeile = $zeile; + $startcolumn = 2; + + //Farblegende + $bezeichnungen = array(); + foreach ($termine as $termin) + $bezeichnungen[$termin->pruefungstyp_kurzbz] = $termin->beschreibung; + + $worksheet->setMerge($legendzeile, $startcolumn, $legendzeile, $startcolumn + 4); + $worksheet->write($legendzeile, $startcolumn, "Farblegende Prüfungsantritte", $format_bold_center); + $worksheet->write($legendzeile, $startcolumn + 4, "", $format_bold_center); + $legendzeile++; + $worksheet->write($legendzeile, $startcolumn, "Termin", $format_bold_center); + $worksheet->setMerge($legendzeile, $startcolumn + 1, $legendzeile, $startcolumn + 2); + $worksheet->write($legendzeile, $startcolumn + 1, "positiv", $format_bold_center); + $worksheet->setMerge($legendzeile, $startcolumn + 3, $legendzeile, $startcolumn + 4); + $worksheet->write($legendzeile, $startcolumn + 3, "negativ", $format_bold_center); + $worksheet->write($legendzeile, $startcolumn + 4, "", $format_bold_center); + $legendzeile++; + foreach ($bezeichnungen as $name => $bezeichnung) + { + if (strstr($bezeichnung, PHP_EOL)) + $worksheet->setRow($legendzeile, 25); + $worksheet->write($legendzeile, $startcolumn, $bezeichnung, $format_bold); + $worksheet->setMerge($legendzeile, $startcolumn + 1, $legendzeile, $startcolumn + 2); + $worksheet->write($legendzeile, $startcolumn + 1, "", $format_colored[$name.'Pos']); + $worksheet->setMerge($legendzeile, $startcolumn + 3, $legendzeile, $startcolumn + 4); + $worksheet->write($legendzeile, $startcolumn + 3, "", $format_colored[$name]); + $worksheet->write($legendzeile, $startcolumn + 4, "", $format_colored[$name]); + $legendzeile++; + } + $worksheet->write($legendzeile, $startcolumn, "nicht eingetragen", $format_bold); + $worksheet->setMerge($legendzeile, $startcolumn + 1, $legendzeile, $startcolumn + 4); + $worksheet->write($legendzeile, $startcolumn + 1, "", $format_colored_nichteingetragen); + $worksheet->write($legendzeile, $startcolumn + 4, "", $format_colored_nichteingetragen); + $legendzeile++; + $worksheet->write($legendzeile, $startcolumn, "nicht zugeteilt", $format_bold); + $worksheet->setMerge($legendzeile, $startcolumn + 1, $legendzeile, $startcolumn + 4); + $worksheet->write($legendzeile, $startcolumn + 1, "", $format_colored_nichtzugeteilt); + $worksheet->write($legendzeile, $startcolumn + 4, "", $format_colored_nichtzugeteilt); + + $startcolumn = $currentcolumn = 9; + + //Notenlegende + //optimale Länge in kleinsten Einheiten - Notenspalten + $optimalLengthBeschr = 6; + $groesse = $toMerge = 0; + $beschrColumnMerges = array(0, 0); + $index = 0; + + foreach ($beschrColumnMerges as $toMerge) + { + $groesse = 0; + while ($groesse < $optimalLengthBeschr) + { + if ($currentcolumn < 3 + $anzahl_lvspalten) + { + $groesse++; + } + else if ($currentcolumn < 3 + $anzahl_lvspalten + 2) + { + $groesse += 4; + } + else + { + $groesse += 2; + } + $currentcolumn++; + $beschrColumnMerges[$index]++; + } + $currentcolumn++; + $index++; + } + + $allmerges = array($beschrColumnMerges[0], 1, $beschrColumnMerges[1], 1); + $headingmerge = array_sum($allmerges) - 1; + $positivmerge = $allmerges[0] + $allmerges[1] - 1; + $negativmerge = $allmerges[1] + $allmerges[2] - 1; + + $worksheet->setMerge($zeile, $startcolumn, $zeile, $startcolumn + $headingmerge); + $worksheet->write($zeile, $startcolumn, "Notenlegende", $format_bold_center); + $worksheet->write($zeile++, $startcolumn + $headingmerge, "", $format_bold_center); + $worksheet->setMerge($zeile, $startcolumn, $zeile, $startcolumn + $positivmerge); + $worksheet->write($zeile, $startcolumn, "positiv", $format_bold_center); + $worksheet->setMerge($zeile, $startcolumn + $positivmerge + 1, $zeile, $startcolumn + $headingmerge); + $worksheet->write($zeile, $startcolumn + $headingmerge, "", $format_bold_center); + $worksheet->write($zeile++, $startcolumn + $positivmerge + 1, "negativ", $format_bold_center); + $tempzeile = $zeile; + foreach ($noten_arr as $note => $anmerkung) + { + if (is_null($noten_bezeichnungen[$note]) || $noten_bezeichnungen[$note] == "" || is_null($anmerkung) || $anmerkung == "") + continue; + if ($noten_positiv[$note]) + { + $worksheet->setMerge($zeile, $startcolumn, $zeile, $startcolumn + $positivmerge - 1); + $worksheet->write($zeile, $startcolumn, $noten_bezeichnungen[$note], $format_bold); + $worksheet->write($zeile++, $startcolumn + $positivmerge, $anmerkung, $format_bold_center); + } + else + { + $worksheet->setMerge($tempzeile, $startcolumn + $positivmerge + 1, $tempzeile, $startcolumn + $headingmerge - 1); + $worksheet->write($tempzeile, $startcolumn + $positivmerge + 1, $noten_bezeichnungen[$note], $format_bold); + $worksheet->write($tempzeile++, $startcolumn + $headingmerge, $anmerkung, $format_bold_center); + } + } + + //Die Breite der Spalten setzen + foreach ($maxlength as $i => $breite) + $worksheet->setColumn($i, $i, $breite + 2); + + $worksheet->write(0, 0, $semester_aktuell." ".$stg->kuerzel.($semester != '' ? ' '.$semester.'. Semester' : '').' Stand: '.date('d.m.Y'), $format_bold_center); + //Zellen der 1. Zeile verbinden + $worksheet->setMerge(0, 0, 0, $spalte); + + //Hoehe der 2. Zeile anpassen damit die LVs alle sichtbar sind + $worksheet->setRow(1, $maxheaderheight * 5); + + //Ausdruck auf 1 Seite anpassen + $worksheet->fitToPages(1, 1); + $workbook->close(); +} + diff --git a/include/note.class.php b/include/note.class.php index 6c119cae9..9994c0b38 100644 --- a/include/note.class.php +++ b/include/note.class.php @@ -36,9 +36,9 @@ class note extends basis_db public $bezeichnung; // varchar(32) public $anmerkung; // varchar(256) public $farbe; // varchar(6) - public $positiv=true; // boolean - public $notenwert; // boolean - public $aktiv; // boolean + public $positiv=true; // boolean + public $notenwert; // boolean + public $aktiv; // boolean public $lehre; // boolean /** @@ -75,10 +75,10 @@ class note extends basis_db $this->note = $row->note; $this->bezeichnung = $row->bezeichnung; $this->anmerkung = $row->anmerkung; - $this->farbe = $row->farbe; + $this->farbe = $row->farbe; $this->notenwert = $row->notenwert; - $this->positiv = $this->db_parse_bool($row->positiv); - $this->lehre = $this->db_parse_bool($row->lehre); + $this->positiv = $this->db_parse_bool($row->positiv); + $this->lehre = $this->db_parse_bool($row->lehre); $this->aktiv = $this->db_parse_bool($row->aktiv); return true; } @@ -130,10 +130,10 @@ class note extends basis_db $this->db_add_param($this->note).', '. $this->db_add_param($this->bezeichnung).', '. $this->db_add_param($this->anmerkung).', '. - $this->db_add_param($this->positiv, FHC_BOOLEAN).','. - $this->db_add_param($this->notenwert).','. - $this->db_add_parma($this->aktiv, FHC_BOOLEAN).','. - $this->db_add_param($htis->lehre, FHC_BOOLEAN).');'; + $this->db_add_param($this->positiv, FHC_BOOLEAN).','. + $this->db_add_param($this->notenwert).','. + $this->db_add_parma($this->aktiv, FHC_BOOLEAN).','. + $this->db_add_param($this->lehre, FHC_BOOLEAN).');'; } else { @@ -141,9 +141,9 @@ class note extends basis_db 'note='.$this->db_add_param($this->note).', '. 'bezeichnung='.$this->db_add_param($this->bezeichnung).', '. 'anmerkung='.$this->db_add_param($this->anmerkung).', '. - 'positiv='.$this->db_add_param($this->positiv, FHC_BOOLEAN).', '. - 'notenwert='.$this->db_add_param($this->notenwert).', '. - 'aktiv='.$this->db_add_param($this->aktiv, FHC_BOOLEAN).', '. + 'positiv='.$this->db_add_param($this->positiv, FHC_BOOLEAN).', '. + 'notenwert='.$this->db_add_param($this->notenwert).', '. + 'aktiv='.$this->db_add_param($this->aktiv, FHC_BOOLEAN).', '. 'lehre='.$this->db_add_param($this->lehre, FHC_BOOLEAN).' '. 'WHERE note='.$this->db_add_param($this->note).';'; } @@ -177,9 +177,43 @@ class note extends basis_db $n->bezeichnung = $row->bezeichnung; $n->anmerkung = $row->anmerkung; $n->farbe = $row->farbe; - $n->positiv = $this->db_parse_bool($row->positiv); - $n->notenwert = $row->notenwert; - $n->aktiv = $this->db_parse_bool($row->aktiv); + $n->positiv = $this->db_parse_bool($row->positiv); + $n->notenwert = $row->notenwert; + $n->aktiv = $this->db_parse_bool($row->aktiv); + $n->lehre = $this->db_parse_bool($row->lehre); + + $this->result[] = $n; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt alle aktive Noten + * @return true wenn ok, false wenn Fehler + */ + public function getActive() + { + $qry = "SELECT * FROM lehre.tbl_note WHERE aktiv = TRUE ORDER BY note"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $n = new note(); + + $n->note = $row->note; + $n->bezeichnung = $row->bezeichnung; + $n->anmerkung = $row->anmerkung; + $n->farbe = $row->farbe; + $n->positiv = $this->db_parse_bool($row->positiv); + $n->notenwert = $row->notenwert; + $n->aktiv = $this->db_parse_bool($row->aktiv); $n->lehre = $this->db_parse_bool($row->lehre); $this->result[] = $n; diff --git a/include/pruefungstermin.class.php b/include/pruefungstermin.class.php index c3ff1badb..74222cceb 100644 --- a/include/pruefungstermin.class.php +++ b/include/pruefungstermin.class.php @@ -104,19 +104,22 @@ class pruefungstermin extends basis_db{ } } - - /** - * Lädt alle Prüfungstypen aus der Datenbank - * @return Array/Boolean Ein Array mit den Daten, wenn ok; ansonsten false - */ - public function getAllPruefungstypen($abschluss = null) + + /** + * Lädt alle Prüfungstypen aus der Datenbank + * @param null $abschluss gibt an, ob Abschlussprüfungen ausgegeben werden sollen. default: Abschlussprüfungen und andere Prüfungen + * @return array /Boolean Ein Array mit den Daten, wenn ok; ansonsten false + */ + public function getAllPruefungstypen($abschluss = null, $sort = false) { $qry = 'SELECT * FROM lehre.tbl_pruefungstyp'; - if(!is_null($abschluss)) + if(is_bool($abschluss)) { - $qry .= ' WHERE abschluss='.$this->db_add_param($abschluss); + $qry .= ' WHERE abschluss='.$this->db_add_param($abschluss, FHC_BOOLEAN); } + if($sort) + $qry .= ' ORDER BY (sort IS NULL), sort, pruefungstyp_kurzbz'; $qry .=';'; if($this->db_query($qry)) @@ -128,6 +131,7 @@ class pruefungstermin extends basis_db{ $obj->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz; $obj->beschreibung = $row->beschreibung; $obj->abschluss = $row->abschluss; + $obj->sort = $row->sort; array_push($result, $obj); } } @@ -137,7 +141,6 @@ class pruefungstermin extends basis_db{ return false; } return $result; - } /** diff --git a/locale/de-AT/fas.dtd b/locale/de-AT/fas.dtd index 03b9966f4..11c8dd171 100644 --- a/locale/de-AT/fas.dtd +++ b/locale/de-AT/fas.dtd @@ -106,6 +106,10 @@ + + + + diff --git a/locale/de-SFU/fas.dtd b/locale/de-SFU/fas.dtd index df67cfe7f..3742f1a4b 100644 --- a/locale/de-SFU/fas.dtd +++ b/locale/de-SFU/fas.dtd @@ -102,6 +102,10 @@ + + + + diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index bea94d3e1..f905ab35e 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -358,8 +358,8 @@ if(!$result = @$db->db_query("SELECT mailversand FROM campus.tbl_coodle LIMIT 1; if(!$db->db_query($qry)) echo 'campus.tbl_coodle: '.$db->db_last_error().'
'; - else - echo '
campus.tbl_coodle: Spalten mailversand, teilnehmer_anonym und termine_anonym hinzugefuegt!
'; + else + echo '
campus.tbl_coodle: Spalten mailversand, teilnehmer_anonym und termine_anonym hinzugefuegt!
'; } // Spalte onlinebewerbung_studienplan in lehre.tbl_studienplan @@ -369,8 +369,61 @@ if(!$result = @$db->db_query("SELECT onlinebewerbung_studienplan FROM lehre.tbl_ if(!$db->db_query($qry)) echo 'lehre.tbl_studienplan: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_studienplan: Spalte onlinebewerbung_studienplan hinzugefuegt!
'; +} + +// Spalte sort in lehre.tbl_pruefungstyp (gibt Reihenfolge der Prüfungsantritte an) +if(!$result = @$db->db_query("SELECT sort FROM lehre.tbl_pruefungstyp LIMIT 1;")) +{ + $qry = "ALTER TABLE lehre.tbl_pruefungstyp ADD COLUMN sort smallint;"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_pruefungstyp: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_pruefungstyp: Spalte sort hinzugefuegt!
'; +} + +// zusätzliche kommissionelle Prüfung (4.Termin) als Zeile hinzufügen +if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_pruefungstyp WHERE pruefungstyp_kurzbz= 'zusKommPruef';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO lehre.tbl_pruefungstyp(pruefungstyp_kurzbz, beschreibung, abschluss) VALUES ('zusKommPruef', 'zusätzliche kommissionelle Prüfung', FALSE);"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_pruefungstyp: '.$db->db_last_error().'
'; else - echo '
lehre.tbl_studienplan: Spalte onlinebewerbung_studienplan hinzugefuegt!
'; + echo '
lehre.tbl_pruefungstyp: Zeile zusKommPruef hinzugefuegt!
'; + } +} + +// Note "entschuldigt" hinzufügen +if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'en' AND bezeichnung = 'entschuldigt' OR bezeichnung = 'Entschuldigt';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO lehre.tbl_note(note, bezeichnung, anmerkung, farbe, positiv, notenwert, aktiv, lehre) VALUES(17, 'entschuldigt', 'en', NULL, TRUE, NULL, TRUE, TRUE);"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_note: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_note: Zeile entschuldigt hinzugefuegt!
'; + } +} + +// Note "unentschuldigt" hinzufügen +if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_note WHERE anmerkung = 'ue' AND bezeichnung = 'unentschuldigt' OR bezeichnung = 'Unentschuldigt';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO lehre.tbl_note(note, bezeichnung, anmerkung, farbe, positiv, notenwert, aktiv, lehre) VALUES(18, 'unentschuldigt', 'ue', NULL, FALSE, NULL, TRUE, TRUE);"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_note: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_note: Zeile unentschuldigt hinzugefuegt!
'; + } } // Column design_uid, betrieb_uid and operativ_uid to tbl_service @@ -385,8 +438,8 @@ if(!$result = @$db->db_query("SELECT design_uid FROM public.tbl_service LIMIT 1; if(!$db->db_query($qry)) echo 'public.tbl_service: '.$db->db_last_error().'
'; - else - echo '
public.tbl_service: Spalten design_uid,betrieb_uid,operativ_uid hinzugefuegt!
'; + else + echo '
public.tbl_service: Spalten design_uid,betrieb_uid,operativ_uid hinzugefuegt!
'; } // FOREIGN KEY tbl_phrasentext_sprache_fkey: system.tbl_phrasentext.sprache references public.tbl_sprache.sprache @@ -527,7 +580,7 @@ if(!@$db->db_query("SELECT campus.get_highest_content_version(0)")) $_$; ALTER FUNCTION campus.get_highest_content_version(bigint) OWNER TO fhcomplete;'; - + if(!$db->db_query($qry)) echo 'campus.get_highest_content_version(content_id): '.$db->db_last_error().'
'; else @@ -543,7 +596,7 @@ if(!@$db->db_query("SELECT ausstellungsnation FROM public.tbl_akte LIMIT 1")) COMMENT ON COLUMN public.tbl_akte.ausstellungsnation IS 'Nation-Code des Landes, in dem das Dokument ausgestellt wurde'; COMMENT ON COLUMN public.tbl_akte.formal_geprueft_amum IS 'Bestaetigungsdatum, an dem das Dokument inhaltlich auf Formalkriterien (Leserlichkeit, Vollständigkeit, etc) geprueft wurde'; "; - + if(!$db->db_query($qry)) echo 'public.tbl_rt_person '.$db->db_last_error().'
'; else @@ -556,7 +609,7 @@ if(!@$db->db_query("SELECT ausstellungsdetails FROM public.tbl_dokument LIMIT 1" $qry = "ALTER TABLE public.tbl_dokument ADD COLUMN ausstellungsdetails boolean NOT NULL DEFAULT false; COMMENT ON COLUMN public.tbl_dokument.ausstellungsdetails IS 'Sollen beim Dokument weitere Felder (zB Ausstellungsnation) angezeigt werden?'; "; - + if(!$db->db_query($qry)) echo 'public.tbl_dokument '.$db->db_last_error().'
'; else