From c94f185308864352534642913dce69680a870f1d Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 10 Jul 2024 15:13:46 +0200 Subject: [PATCH] =?UTF-8?q?-=20faktor=20f=C3=BCr=20lvs=20hinzugefuegt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/lehrveranstaltung_faktor.class.php | 258 ++++++++++++++++ soap/lehrveranstaltung_faktor.json.php | 123 ++++++++ system/dbupdate_3.4.php | 2 + system/dbupdate_3.4/40717_lv_faktor.php | 65 ++++ vilesci/lehre/lehrveranstaltung.php | 19 +- vilesci/lehre/lehrveranstaltung_details.php | 27 ++ vilesci/lehre/lehrveranstaltung_faktor.php | 309 ++++++++++++++++++++ 7 files changed, 801 insertions(+), 2 deletions(-) create mode 100644 include/lehrveranstaltung_faktor.class.php create mode 100644 soap/lehrveranstaltung_faktor.json.php create mode 100644 system/dbupdate_3.4/40717_lv_faktor.php create mode 100644 vilesci/lehre/lehrveranstaltung_faktor.php diff --git a/include/lehrveranstaltung_faktor.class.php b/include/lehrveranstaltung_faktor.class.php new file mode 100644 index 000000000..49459321b --- /dev/null +++ b/include/lehrveranstaltung_faktor.class.php @@ -0,0 +1,258 @@ +load($lehrveranstaltung_faktor_id); + } + + + public function load($lehrveranstaltung_faktor_id) + { + if (!is_numeric($lehrveranstaltung_faktor_id)) + { + $this->errormsg = 'Lehrveranstaltung_faktor_id muss eine gueltige Zahl sein'; + return false; + } + + $qry = "SELECT * FROM lehre.tbl_lehrveranstaltung_faktor + WHERE lehrveranstaltung_faktor_id=".$this->db_add_param($lehrveranstaltung_faktor_id, FHC_INTEGER); + + if (!$this->db_query($qry)) { + $this->errormsg = 'Datensatz konnte nicht geladen werden'; + return false; + } + + if ($row = $this->db_fetch_object()) + { + $this->lehrveranstaltung_faktor_id = $row->lehrveranstaltung_faktor_id; + $this->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $this->faktor = $row->faktor; + $this->studiensemester_kurzbz_von = $row->studiensemester_kurzbz_von; + $this->studiensemester_kurzbz_bis = $row->studiensemester_kurzbz_bis; + } + + return true; + } + + public function loadByLV($lv_id, $von = null, $bis = null, $id = null) + { + + if (!is_numeric($lv_id)) + { + $this->errormsg = 'Lehrveranstaltung_faktor_id muss eine gueltige Zahl sein'; + return false; + } + $qry = "SELECT * + FROM lehre.tbl_lehrveranstaltung_faktor + LEFT JOIN public.tbl_studiensemester vonstsem + ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_von = vonstsem.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester bisstem + ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_bis = bisstem.studiensemester_kurzbz + WHERE lehrveranstaltung_id = ".$this->db_add_param($lv_id, FHC_INTEGER); + + if(!empty($von)) + { + $qry .= " + AND (bisstem.ende >= ( + SELECT start + FROM public.tbl_studiensemester + WHERE studiensemester_kurzbz = " . $this->db_add_param($von, FHC_STRING) . " + ) + OR bisstem.ende IS NULL + )"; + } + + if(!empty($bis) && $bis !== "") + { + $qry .= " + AND + (vonstsem.start <= ( + SELECT ende + FROM public.tbl_studiensemester + WHERE studiensemester_kurzbz = " . $this->db_add_param($bis, FHC_STRING) . " + )) + "; + } + + if (!empty($id) && $id !== "") + { + $qry .= " + AND + lehrveranstaltung_faktor_id != ". $this->db_add_param($id, FHC_INTEGER); + } + + if (!$result = $this->db_query($qry)) { + $this->errormsg = 'Datensatz konnte nicht geladen werden'; + return false; + } + + while ($row = $this->db_fetch_object($result)) + { + $lv_faktor_objekt = new lehrveranstaltung_faktor(); + + $lv_faktor_objekt->lehrveranstaltung_faktor_id = $row->lehrveranstaltung_faktor_id; + $lv_faktor_objekt->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $lv_faktor_objekt->faktor = $row->faktor; + $lv_faktor_objekt->studiensemester_kurzbz_von = $row->studiensemester_kurzbz_von; + $lv_faktor_objekt->studiensemester_kurzbz_bis = $row->studiensemester_kurzbz_bis; + + $this->lv_faktoren[] = $lv_faktor_objekt; + } + + return true; + } + + public function addFaktor($lv_id, $faktor, $von, $bis = NULL) + { + $qry = 'INSERT INTO lehre.tbl_lehrveranstaltung_faktor (lehrveranstaltung_id, faktor, studiensemester_kurzbz_von, studiensemester_kurzbz_bis) + VALUES ('. $this->db_add_param($lv_id, FHC_INTEGER) . ', '. + $this->db_add_param($faktor, FHC_INTEGER) . ', '. + $this->db_add_param($von, FHC_STRING) . ', '. + $this->db_add_param($bis, FHC_STRING) . ');'; + + if ($this->db_query($qry)) + { + $qry_id = "SELECT currval('lehre.lehrveranstaltung_faktor_id_seq') as id;"; + if($this->db_query($qry_id)) + { + if($row = $this->db_fetch_object()) + { + $this->db_query('COMMIT'); + return [ + 'id' => $row->id, + 'lv_id' => $lv_id, + 'faktor' => $faktor, + 'von' => $von, + 'bis' => $bis + ]; + } + else + { + $this->db_query('ROLLBACK'); + return [ + 'status' => 'error', + 'message' => 'Fehler beim Einfügen in die Datenbank:' + ]; + } + } + else + { + $this->db_query('ROLLBACK'); + return [ + 'status' => 'error', + 'message' => 'Fehler beim Einfügen in die Datenbank:' + ]; + } + } + else + { + return [ + 'status' => 'error', + 'message' => 'Fehler beim Einfügen in die Datenbank:' + ]; + } + } + + public function updateFaktor($id, $faktor, $von, $bis) + { + $qry = "UPDATE lehre.tbl_lehrveranstaltung_faktor + SET faktor = ". $this->db_add_param($faktor) ." , + studiensemester_kurzbz_von = ". $this->db_add_param($von) .", + studiensemester_kurzbz_bis = ". $this->db_add_param($bis) ." + WHERE lehrveranstaltung_faktor_id = ". $this->db_add_param($id, FHC_INTEGER); + + if ($this->db_query($qry)) + { + return true; + } + else + { + return [ + 'status' => 'error', + 'message' => 'Fehler beim Einfügen in die Datenbank:' + ]; + } + } + + public function getAkt($lv_id) + { + if (!is_numeric($lv_id)) + { + $this->errormsg = 'Lehrveranstaltung_id muss eine gueltige Zahl sein'; + return false; + } + + $qry = "SELECT * + FROM lehre.tbl_lehrveranstaltung_faktor + LEFT JOIN public.tbl_studiensemester vonstsem + ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_von = vonstsem.studiensemester_kurzbz + LEFT JOIN public.tbl_studiensemester bisstem + ON tbl_lehrveranstaltung_faktor.studiensemester_kurzbz_bis = bisstem.studiensemester_kurzbz + WHERE lehrveranstaltung_id = ".$this->db_add_param($lv_id, FHC_INTEGER) . " + AND (vonstsem.start <= now() OR vonstsem.start IS NULL) + AND (bisstem.ende >= now() OR bisstem.ende IS NULL) + ORDER BY vonstsem.start DESC LIMIT 1 + "; + + + if (!$this->db_query($qry)) { + $this->errormsg = 'Datensatz konnte nicht geladen werden'; + return false; + } + + if ($row = $this->db_fetch_object()) + { + $this->lehrveranstaltung_faktor_id = $row->lehrveranstaltung_faktor_id; + $this->lehrveranstaltung_id = $row->lehrveranstaltung_id; + $this->faktor = $row->faktor; + $this->studiensemester_kurzbz_von = $row->studiensemester_kurzbz_von; + $this->studiensemester_kurzbz_bis = $row->studiensemester_kurzbz_bis; + } + + return true; + } + + + public function deleteFaktor($id) + { + $qry = "DELETE FROM lehre.tbl_lehrveranstaltung_faktor + WHERE lehrveranstaltung_faktor_id = ". $this->db_add_param($id, FHC_INTEGER); + + if ($this->db_query($qry)) + { + return true; + } + else + { + return [ + 'status' => 'error', + 'message' => 'Fehler beim Löschen aus der Datenbank:' + ]; + } + } +} +?> diff --git a/soap/lehrveranstaltung_faktor.json.php b/soap/lehrveranstaltung_faktor.json.php new file mode 100644 index 000000000..49f13ac47 --- /dev/null +++ b/soap/lehrveranstaltung_faktor.json.php @@ -0,0 +1,123 @@ +getBerechtigungen($uid); + +if(!$rechte->isBerechtigt('basis/person', null, 'suid')) +{ + exit('Sie haben keine Berechtigung für die Seite'); +} + +$method = isset($_REQUEST['method']) ? $_REQUEST['method']: '' ; +$lv_faktor = new lehrveranstaltung_faktor(); + +switch($method) +{ + case 'addFaktor': + $faktor = isset($_REQUEST['faktor']) ? $_REQUEST['faktor']: '' ; + if ($faktor !== '') + { + if (!isRightType($faktor['lv_id'])) + { + echo json_encode([ + 'status' => 'error', + 'message' => 'Nur LVs und Templates möglich' + ]); + break; + } + if (vonHigherThanBis($faktor['von'], $faktor['bis'])) + { + echo json_encode([ + 'status' => 'error', + 'message' => 'Von nach Bis' + ]); + break; + } + if (exists($faktor['lv_id'], $faktor['von'], $faktor['bis'])) + { + echo json_encode([ + 'status' => 'error', + 'message' => 'Für den Zeitraum bereits vorhanden' + ]); + break; + } + + $result = $lv_faktor->addFaktor($faktor['lv_id'], $faktor['faktor'], $faktor['von'], $faktor['bis']); + echo json_encode($result); + } + break; + case 'updateFaktor': + $faktor = isset($_REQUEST['faktor']) ? $_REQUEST['faktor']: '' ; + if ($faktor !== '') + { + if (vonHigherThanBis($faktor['von'], $faktor['bis'])) + { + echo json_encode([ + 'status' => 'error', + 'message' => 'Von nach Bis' + ]); + break; + } + if (exists($faktor['lv_id'], $faktor['von'], $faktor['bis'], $faktor['id'])) + { + echo json_encode([ + 'status' => 'error', + 'message' => 'Für den Zeitraum bereits vorhanden' + ]); + break; + } + + $result = $lv_faktor->updateFaktor($faktor['id'], $faktor['faktor'], $faktor['von'], $faktor['bis']); + echo json_encode($result); + } + break; + case 'deleteFaktor': + $faktor = isset($_REQUEST['faktor']) ? $_REQUEST['faktor']: '' ; + if ($faktor !== '') + { + $result = $lv_faktor->deleteFaktor($faktor['id']); + echo json_encode($result); + } + break; + default: + break; +} + +function isRightType($lv_id) +{ + $lv = new lehrveranstaltung($lv_id); + if (in_array($lv->lehrtyp_kurzbz, array('lv', 'tpl'))) + return true; + + return false; +} + +function exists($lv_id, $von, $bis, $id = null) +{ + $lv_faktor = new lehrveranstaltung_faktor(); + $lv_faktor->loadByLV($lv_id, $von, $bis, $id); + return !empty($lv_faktor->lv_faktoren); +} + +function vonHigherThanBis($von, $bis) +{ + $vonStsem = new studiensemester($von); + $bisStsem = new studiensemester($bis); + + if (is_null($bis) || $bis === "") + return false; + if ($vonStsem->start > $bisStsem->start) + return true; + else + return false; + +} + +?> diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 9fb7f0ee9..06b1e0cb4 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -56,6 +56,7 @@ require_once('dbupdate_3.4/36530_bis_internationsalisierung_codextabelle_neuerun require_once('dbupdate_3.4/34543_ux_template.php'); require_once('dbupdate_3.4/17513_Entwicklungsteam.php'); require_once('dbupdate_3.4/28575_softwarebereitstellung.php'); +require_once('dbupdate_3.4/40717_lv_faktor.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -246,6 +247,7 @@ $tabellen=array( "lehre.tbl_zeitfenster" => array("wochentag","stunde","ort_kurzbz","studiengang_kz","gewicht"), "lehre.tbl_zeugnis" => array("zeugnis_id","student_uid","zeugnis","erstelltam","gedruckt","titel","bezeichnung","updateamum","updatevon","insertamum","insertvon","ext_id"), "lehre.tbl_zeugnisnote" => array("lehrveranstaltung_id","student_uid","studiensemester_kurzbz","note","uebernahmedatum","benotungsdatum","bemerkung","updateamum","updatevon","insertamum","insertvon","ext_id","punkte"), + "lehre.tbl_lehrveranstaltung_faktor" => array("lehrveranstaltung_faktor_id", "lehrveranstaltung_id","faktor","studiensemester_kurzbz_von","studiensemester_kurzbz_bis","insertamum","insertvon","updateamum","updatevon"), "public.ci_apikey" => array("apikey_id","key","level","ignore_limits","date_created"), "public.tbl_adresse" => array("adresse_id","person_id","name","strasse","plz","ort","gemeinde","nation","typ","heimatadresse","zustelladresse","firma_id","updateamum","updatevon","insertamum","insertvon","ext_id","rechnungsadresse","anmerkung", "co_name"), "public.tbl_adressentyp" => array("adressentyp_kurzbz", "bezeichnung", "bezeichnung_mehrsprachig", "sort"), diff --git a/system/dbupdate_3.4/40717_lv_faktor.php b/system/dbupdate_3.4/40717_lv_faktor.php new file mode 100644 index 000000000..932d6fd40 --- /dev/null +++ b/system/dbupdate_3.4/40717_lv_faktor.php @@ -0,0 +1,65 @@ +db_query("SELECT 1 FROM lehre.tbl_lehrveranstaltung_faktor LIMIT 1")) +{ + $qry = " + + CREATE TABLE lehre.tbl_lehrveranstaltung_faktor + ( + lehrveranstaltung_faktor_id integer NOT NULL, + lehrveranstaltung_id integer NOT NULL, + faktor numeric NOT NULL, + studiensemester_kurzbz_von varchar(16) NOT NULL, + studiensemester_kurzbz_bis varchar(16), + insertamum timestamp DEFAULT NOW(), + insertvon varchar(32), + updateamum timestamp, + updatevon varchar(32), + CONSTRAINT tbl_lehrveranstaltung_faktor_pk PRIMARY KEY (lehrveranstaltung_faktor_id) + ); + + CREATE SEQUENCE lehre.lehrveranstaltung_faktor_id_seq + START WITH 1 + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + ALTER TABLE lehre.tbl_lehrveranstaltung_faktor ALTER COLUMN lehrveranstaltung_faktor_id SET DEFAULT nextval('lehre.lehrveranstaltung_faktor_id_seq'); + ALTER TABLE lehre.tbl_lehrveranstaltung_faktor ADD CONSTRAINT fk_lehrveranstaltung_faktor_lehrveranstaltung_id FOREIGN KEY (lehrveranstaltung_id) REFERENCES lehre.tbl_lehrveranstaltung (lehrveranstaltung_id) ON DELETE RESTRICT ON UPDATE CASCADE; + ALTER TABLE lehre.tbl_lehrveranstaltung_faktor ADD CONSTRAINT fk_lehrveranstaltung_faktor_studiensemester_von FOREIGN KEY (studiensemester_kurzbz_von) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT; + ALTER TABLE lehre.tbl_lehrveranstaltung_faktor ADD CONSTRAINT fk_lehrveranstaltung_faktor_studiensemester_bis FOREIGN KEY (studiensemester_kurzbz_bis) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT; + + GRANT SELECT ON lehre.tbl_lehrveranstaltung_faktor TO web; + GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_lehrveranstaltung_faktor TO vilesci; + GRANT SELECT ON lehre.lehrveranstaltung_faktor_id_seq TO web; + GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.lehrveranstaltung_faktor_id_seq TO vilesci; + "; + + if (!$db->db_query($qry)) + echo 'lehre.tbl_lehrveranstaltung_faktor: ' . $db->db_last_error() . '
'; + else + echo 'Tabelle: lehre.tbl_lehrveranstaltung_faktor erstellt!'; + + //TODO ggf default wert in eine config + $qry = " + INSERT INTO lehre.tbl_lehrveranstaltung_faktor + (lehrveranstaltung_id, faktor, studiensemester_kurzbz_von, insertvon) + ( + SELECT lehrveranstaltung_id, + 2, + ( + SELECT public.tbl_studiensemester.studiensemester_kurzbz + FROM public.tbl_studiensemester + ORDER BY start LIMIT 1 + ), + 'checksystem' + FROM lehre.tbl_lehrveranstaltung + WHERE lehrtyp_kurzbz IN ('lv', 'tpl') + ); + "; + if (!$db->db_query($qry)) + echo 'lehre.tbl_lehrveranstaltung_faktor: ' . $db->db_last_error() . '
'; + else + echo 'Tabelle: lehre.tbl_lehrveranstaltung_faktor befüllt!'; +} diff --git a/vilesci/lehre/lehrveranstaltung.php b/vilesci/lehre/lehrveranstaltung.php index ab7abd9cd..2b3346d02 100644 --- a/vilesci/lehre/lehrveranstaltung.php +++ b/vilesci/lehre/lehrveranstaltung.php @@ -32,6 +32,7 @@ require_once('../../include/organisationsform.class.php'); require_once('../../include/addon.class.php'); require_once('../../include/sprache.class.php'); require_once('../../include/lehrmodus.class.php'); +require_once('../../include/lehrveranstaltung_faktor.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -1108,7 +1109,8 @@ if ($result_lv!=0) { echo "LV-Angebot kompatible LV - Aktion"; + Aktion + Faktor"; } echo ""; @@ -1326,7 +1328,20 @@ if ($result_lv!=0) '; echo 'Kompatible LV'; - echo 'löschen'; + echo ' + löschen + '; + + if (in_array($row->lehrtyp_kurzbz, array("tpl", "lv"))) + echo '
Faktor'; + echo ''; + echo ' + '; + + $lv_faktor = new lehrveranstaltung_faktor(); + $lv_faktor->getAkt($row->lehrveranstaltung_id); + + echo $lv_faktor->faktor.''; echo "\n"; } } diff --git a/vilesci/lehre/lehrveranstaltung_details.php b/vilesci/lehre/lehrveranstaltung_details.php index bad2a7d93..60f2fc3c9 100644 --- a/vilesci/lehre/lehrveranstaltung_details.php +++ b/vilesci/lehre/lehrveranstaltung_details.php @@ -30,6 +30,8 @@ require_once('../../include/lehrmodus.class.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/studienplan.class.php'); + require_once('../../include/lehrveranstaltung_faktor.class.php'); + require_once('../../include/studiensemester.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -139,6 +141,31 @@ $reloadstr .= " window.location.href='".$_SERVER['PHP_SELF']."?stg_kz=$lv->studiengang_kz&semester=$lv->semester&neu=true';"; } $reloadstr .= "\n"; + + if (in_array($lv->lehrtyp_kurzbz, array('tpl', 'lv')) && $lv->new === true) + { + $lv_faktor = new lehrveranstaltung_faktor(); + $studiensemester = new studiensemester(); + $studiensemester_von = $studiensemester->getLastOrAktSemester(); + if ($lv->lehrtyp_kurzbz === 'lv' && $_POST['lehrveranstaltung_template_id'] !== '') + { + + $lv_faktor->getAkt($_POST['lehrveranstaltung_template_id']); + //TODO Faktor in eine Config + if (is_null($lv_faktor->faktor)) + $lv_faktor->addFaktor($lv->lehrveranstaltung_id, 2, $studiensemester_von); + else + $lv_faktor->addFaktor($lv->lehrveranstaltung_id, $lv_faktor->faktor, $studiensemester_von); + } + else + { + $lv_faktor->loadByLV($lv->lehrveranstaltung_id); + if (empty($lv_faktor->lv_faktoren)) + { + $lv_faktor->addFaktor($lv->lehrveranstaltung_id, 2, $studiensemester_von); + } + } + } } } diff --git a/vilesci/lehre/lehrveranstaltung_faktor.php b/vilesci/lehre/lehrveranstaltung_faktor.php new file mode 100644 index 000000000..d2b39427f --- /dev/null +++ b/vilesci/lehre/lehrveranstaltung_faktor.php @@ -0,0 +1,309 @@ +getBerechtigungen($uid); + +$sprache = getSprache(); +$p = new phrasen($sprache); + +if(!$rechte->isBerechtigt('basis/person', 'suid')) + die('Sie haben keine Berechtigung für diese Seite'); + +echo ' + + + + + + + + + + + +'; +?> + +load($lehrveranstaltung_id); + +$faktor = new lehrveranstaltung_faktor(); +$faktor->loadByLV($lv->lehrveranstaltung_id); + +$studiensemester = new studiensemester(); +$studiensemester->getAll('desc'); + + +echo ' + + +

Faktor - '. $lv->bezeichnung . ' - ' . $lv->lehrveranstaltung_id . '

'; + +echo ' +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + +'; + +if(count($faktor->lv_faktoren) > 0) +{ + foreach($faktor->lv_faktoren as $lv_faktor) + { + echo " + + + + + + " + ; + } +} + + ' +
'.$p->t('lv/faktor').''.$p->t('global/von').''.$p->t('global/bis').''.$p->t('global/bearbeiten').''.$p->t('global/loeschen').'
".$lv_faktor->faktor."".$lv_faktor->studiensemester_kurzbz_von."".$lv_faktor->studiensemester_kurzbz_bis."
+'; + +?> + +