adapted document export to new Projektarbeit version (percent assessment)

This commit is contained in:
Alexei Karpenko
2025-02-14 23:47:19 +01:00
parent 7083955702
commit 57eec9b940
6 changed files with 238 additions and 125 deletions
+158 -90
View File
@@ -16,8 +16,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
*/
/**
* Klasse projektarbeit
@@ -27,7 +27,7 @@ require_once(dirname(__FILE__).'/basis_db.class.php');
class projektarbeit extends basis_db
{
public $new; // boolean
public $new; // boolean
public $result = array(); // adresse Objekt
//Tabellenspalten
@@ -59,6 +59,37 @@ class projektarbeit extends basis_db
public $abgabedatum;
// Welche Version der Projektarbeit wird in welchem Semester verwendet
private $_versions = array(
'Diplom' => array(
'SS2025' => 3,
'SS2023' => 2,
'SS2022' => 1
),
'Others' => array(
'SS2025' => 2,
'SS2022' => 1
)
);
// welche Vorlagen werden für welche Projekarbeitsversion verwendet (beginnend mit 0)
private $_projektarbeitVorlageMappings = array(
'Begutachter' => array(
2 => 'ProjektBeurteilungBAProzent',
0 => 'ProjektBeurteilungBA'
),
'Senatsvorsitz' => array(
2 => 'ProjektBeurteilungBAProzent',
0 => 'ProjektBeurteilungBA'
),
'Erstbegutachter' => array(
3 => 'ProjektBeurteilungMAProzent',
0 => 'ProjektBeurteilungMAErst'
),
'Zweitbegutachter' => array(
0 => 'ProjektBeurteilungMAZweit'
)
);
/**
* Konstruktor
@@ -233,25 +264,25 @@ class projektarbeit extends basis_db
$qry='BEGIN; INSERT INTO lehre.tbl_projektarbeit (projekttyp_kurzbz, titel, lehreinheit_id, student_uid, firma_id, note, punkte,
beginn, ende, faktor, freigegeben, gesperrtbis, stundensatz, gesamtstunden, themenbereich, anmerkung,
insertamum, insertvon, updateamum, updatevon, titel_english, final) VALUES('.
$this->db_add_param($this->projekttyp_kurzbz).', '.
$this->db_add_param($this->titel).', '.
$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '.
$this->db_add_param($this->student_uid).', '.
$this->db_add_param($this->firma_id, FHC_INTEGER).', '.
$this->db_add_param($this->note).', '.
$this->db_add_param($this->punkte).', '.
$this->db_add_param($this->beginn).', '.
$this->db_add_param($this->ende).', '.
$this->db_add_param($this->faktor).', '.
$this->db_add_param($this->freigegeben, FHC_BOOLEAN).', '.
$this->db_add_param($this->gesperrtbis).', '.
$this->db_add_param($this->stundensatz).', '.
$this->db_add_param($this->gesamtstunden).', '.
$this->db_add_param($this->themenbereich).', '.
$this->db_add_param($this->anmerkung).', now(), '.
$this->db_add_param($this->insertvon).', now(), '.
$this->db_add_param($this->updatevon).','.
$this->db_add_param($this->titel_english).','.
$this->db_add_param($this->projekttyp_kurzbz).', '.
$this->db_add_param($this->titel).', '.
$this->db_add_param($this->lehreinheit_id, FHC_INTEGER).', '.
$this->db_add_param($this->student_uid).', '.
$this->db_add_param($this->firma_id, FHC_INTEGER).', '.
$this->db_add_param($this->note).', '.
$this->db_add_param($this->punkte).', '.
$this->db_add_param($this->beginn).', '.
$this->db_add_param($this->ende).', '.
$this->db_add_param($this->faktor).', '.
$this->db_add_param($this->freigegeben, FHC_BOOLEAN).', '.
$this->db_add_param($this->gesperrtbis).', '.
$this->db_add_param($this->stundensatz).', '.
$this->db_add_param($this->gesamtstunden).', '.
$this->db_add_param($this->themenbereich).', '.
$this->db_add_param($this->anmerkung).', now(), '.
$this->db_add_param($this->insertvon).', now(), '.
$this->db_add_param($this->updatevon).','.
$this->db_add_param($this->titel_english).','.
$this->db_add_param($this->final, FHC_BOOLEAN).');';
}
else
@@ -471,92 +502,129 @@ class projektarbeit extends basis_db
}
/**
* Prüft ob Projektarbeit aktuell ist (ab bestimmtem Semester).
* Masterarbeiten sind ab der Änderung zur Gewichtung der Punkte aktuell,
* Bachelorarbeiten schon ab dem Umstieg auf das Online Beurteilungsformular.
* Prüft ob Projektarbeit aktuell ist (also zurzeit online bewertet wird).
* @param $projektarbeit_id
* @return int -1 wenn Fehler, 0 wenn nicht aktuell, 1 wenn aktuell
* @return boolean
*/
public function projektarbeitIsCurrent($projektarbeit_id)
{
$version = $this->getVersion($projektarbeit_id);
// paarbeit sollte nur ab einem Studiensemester online bewertet werden
$qry="SELECT 1
FROM lehre.tbl_projektarbeit
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
WHERE projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND
(
(
projekttyp_kurzbz = 'Diplom'
AND tbl_studiensemester.start::date >= (
SELECT start
FROM public.tbl_studiensemester
WHERE studiensemester_kurzbz = 'SS2023'
)::date
)
OR
(
projekttyp_kurzbz <> 'Diplom'
AND tbl_studiensemester.start::date >= (
SELECT start
FROM public.tbl_studiensemester
WHERE studiensemester_kurzbz = 'SS2022'
)::date
)
)
LIMIT 1";
$result_sem=$this->db_query($qry);
if (!$result_sem)
{
$this->errormsg = "Fehler beim Ermitteln der Projektarbeit Aktualität";
return -1;
}
$num_rows = $this->db_num_rows($result_sem);
if ($num_rows < 0)
{
$this->errormsg = "Fehler beim Ermitteln der Anzahl der aktuellen Projektarbeiten";
}
return $num_rows;
return $version === null ? null : $version->isCurrent;
}
/**
* Prüft ob Projektarbeit aktuell ist (ab bestimmtem Semester), vor der Änderung zur Gewichtung der Punkte.
* Holt sich Version der Projektarbeit.
* Liefert auch mit, ob die Version die aktuellste ist.
* z.B.: Masterarbeiten waren ab der Änderung zur Gewichtung der Punkte aktuell,
* Bachelorarbeiten waren ab dem Umstieg auf das Online Beurteilungsformular aktuell.
* @param $projektarbeit_id
* @return int -1 wenn Fehler, 0 wenn nicht aktuell, 1 wenn aktuell
* @return objekt mit Versionsinfo, null im Fehlerfall
*/
public function projektarbeitIsCurrentBeforeWeightening($projektarbeit_id)
public function getVersion($projektarbeit_id)
{
// paarbeit sollte nur ab einem Studiensemester online bewertet werden
$qry="SELECT 1
FROM lehre.tbl_projektarbeit
$qry="
SELECT
CASE
WHEN semesters_diplom.studiensemester_kurzbz IS NOT NULL
THEN semesters_diplom.studiensemester_kurzbz
ELSE semesters.studiensemester_kurzbz
END AS version_studiensemester_kurzbz,
pa.projekttyp_kurzbz
FROM
lehre.tbl_projektarbeit pa
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
JOIN public.tbl_studiensemester USING(studiensemester_kurzbz)
WHERE projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
AND tbl_studiensemester.start::date >= (SELECT start FROM public.tbl_studiensemester WHERE studiensemester_kurzbz = 'SS2022')::date
LIMIT 1";
JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz)
LEFT JOIN (
SELECT
start, studiensemester_kurzbz
FROM
public.tbl_studiensemester
WHERE
studiensemester_kurzbz IN (".$this->db_implode4SQL(array_keys($this->_versions['Others'])).")
) semesters ON sem.start >= semesters.start AND pa.projekttyp_kurzbz <> 'Diplom'
LEFT JOIN (
SELECT
start, studiensemester_kurzbz
FROM
public.tbl_studiensemester
WHERE
studiensemester_kurzbz IN (".$this->db_implode4SQL(array_keys($this->_versions['Diplom'])).")
) semesters_diplom ON sem.start >= semesters_diplom.start AND pa.projekttyp_kurzbz = 'Diplom'
WHERE
projektarbeit_id=".$this->db_add_param($projektarbeit_id, FHC_INTEGER)."
ORDER BY
semesters.start DESC, semesters_diplom.start DESC
LIMIT 1";
$result_sem=$this->db_query($qry);
$errormsg = "Fehler beim Ermitteln der Projektarbeit Version";
if (!$result_sem)
if ($this->db_query($qry))
{
$this->errormsg = "Fehler beim Ermitteln der Projektarbeit Aktualität";
return -1;
if ($row = $this->db_fetch_object())
{
// known project types
if (isset($this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz]))
{
$row->versionNumber = $this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz];
$row->isCurrent =
$this->_versions[$row->projekttyp_kurzbz][$row->version_studiensemester_kurzbz]
== max($this->_versions[$row->projekttyp_kurzbz]);
}
elseif (isset($this->_versions['Others'][$row->version_studiensemester_kurzbz]))
{
$row->versionNumber = $this->_versions['Others'][$row->version_studiensemester_kurzbz];
$row->isCurrent =
$this->_versions['Others'][$row->version_studiensemester_kurzbz]
== max($this->_versions['Others']);
}
else
{
$row->isCurrent = false;
$row->versionNumber = 0;
}
return $row;
}
else
{
$this->errormsg = $errormsg;
return null;
}
}
else
{
$this->errormsg = $errormsg;
return null;
}
}
/**
* Holt Version einer Projektarbeit für eine Betreuerart.
* @param $projektarbeit_id
* @param $betreuerart_kurzbz
* @return string Vorlagenname
*/
public function getVorlage($projektarbeit_id, $betreuerart_kurzbz)
{
$version = $this->getVersion($projektarbeit_id);
if ($version == null) return null;
$key = 0;
if (isset($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz]))
{
foreach ($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz] as $versionNumber => $vorlage)
{
if ($versionNumber <= $version->versionNumber && $versionNumber > $key) $key = $versionNumber;
}
}
$num_rows = $this->db_num_rows($result_sem);
if ($num_rows < 0)
{
$this->errormsg = "Fehler beim Ermitteln der Anzahl der aktuellen Projektarbeiten";
}
return $num_rows;
return
isset($this->_projektarbeitVorlageMappings[$betreuerart_kurzbz][$key])
? $this->_projektarbeitVorlageMappings[$betreuerart_kurzbz][$key]
: '';
}
}
?>