From 0a179c963f6a77af978432baaf2f432e50cf4e2a Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 25 May 2023 16:35:44 +0200 Subject: [PATCH] bismeldestichtag: added meldestichtag_id to table, created bismeldestichtag class, improved comment for prestudentstatuschecks in studentDBML --- content/student/studentDBDML.php | 7 +- include/bismeldestichtag.class.php | 144 ++++++++++++++++++ system/dbupdate_3.4.php | 2 +- ...student_status_nach_bismeldung_sperren.php | 25 ++- 4 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 include/bismeldestichtag.class.php diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 2d5c9e0b8..c5818ebb3 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -74,6 +74,7 @@ require_once('../../include/reihungstest.class.php'); require_once('../../include/studienplan.class.php'); require_once('../../include/mobilitaet.class.php'); require_once('../../include/studienordnung.class.php'); +require_once('../../include/bismeldestichtag.class.php'); $user = get_uid(); $db = new basis_db(); @@ -383,7 +384,7 @@ function isBuchungAllowedToChange($buchung_obj) * @param $new_status_ausbildungssemester Ausbildungssemester des neuen/zu ändernen Status * @param $old_status_studiensemester Studiensemester des alten Status, leer wenn neuer Status * @param $old_status_ausbildungssemester Ausbildungssemester des alten Status, leer wenn neuer Status - * @return array + * @return array mit error = true und Fehlerbeschreibung wenn ungültig, andernfalls error = false */ function checkStatusaenderung( $prestudent_id, $status_kurzbz, $new_status_studiensemester, $new_status_datum, $new_status_ausbildungssemester, @@ -417,7 +418,7 @@ function checkStatusaenderung( $studiensemester->load($new_status_studiensemester); $new_status_semesterstart = new DateTime($studiensemester->start); - // Alle bisherigen prestudentstatus nach Datum sortiert + // Alle prestudentstatus nach Datum sortiert $qry = "SELECT status_kurzbz, studiensemester_kurzbz, ausbildungssemester, datum, sem.start AS studiensemester_start FROM public.tbl_prestudentstatus pss JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz) @@ -464,7 +465,7 @@ function checkStatusaenderung( // Gültige Zeitabfolge, bestehenden Status hinzufügen $statusArr[] = $row; } - // oder Neuer/editierter Statuseintrag nach bestehendem Statuseintrag + // oder Neuer/editierter Statuseintrag vor bestehendem Statuseintrag elseif ($new_status_datum <= $status_datum && $new_status_semesterstart <= $studiensemester_start) { // Gültige Zeitabfolge, bestehenden Status hinzufügen diff --git a/include/bismeldestichtag.class.php b/include/bismeldestichtag.class.php new file mode 100644 index 000000000..e4b3746a6 --- /dev/null +++ b/include/bismeldestichtag.class.php @@ -0,0 +1,144 @@ +, + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class bismeldestichtag extends basis_db +{ + //Tabellenspalten + public $meldestichtag_id; // integer + public $meldestichtag; // date + public $studiensemester_kurzbz; // varchar(16) + public $insertamum; // timestamp + public $insertvon; // varchar(16) + public $updateamum; // timestamp + public $updatevon; // varchar(16) + + // ErgebnisArray + public $result=array(); + + /** + * Konstruktor - Uebergibt die Connection und laedt optional einen Meldestichtag + * @param $meldestichtag_id Stichtag der geladen werden soll (default=null) + */ + public function __construct($meldestichtag_id=null) + { + parent::__construct(); + + if(!is_null($meldestichtag_id)) + $this->load($meldestichtag_id); + } + + /** + * Laedt Meldestichtag mit der uebergebenen ID + * @param $meldestichtag_id ID des Stichtags der geladen werden soll + */ + public function load($meldestichtag_id) + { + $qry = "SELECT * FROM bis.tbl_meldestichtag WHERE meldestichtag_id=".$this->db_add_param($meldestichtag_id, FHC_INTEGER); + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->meldestichtag_id = $row->meldestichtag_id; + $this->meldestichtag = $row->meldestichtag; + $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + return true; + } + else + { + $this->errormsg = 'Kein Eintrag gefunden'; + return false; + } + } + else + { + $this->errormsg = "Fehler beim Laden des Stichtags"; + return false; + } + } + + /** + * Prueft die Variablen vor dem Speichern + * auf Gueltigkeit. + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + return true; + } + + /** + * Liefert die Antwort eines Pruefling zu einer Frage + * + * @param $pruefling_id + * @param $frage_id + * @return boolean + */ + public function getLastMeldestichtag($studiensemester_kurzbz = null) + { + $qry = "SELECT + meldestichtag, studiensemester_kurzbz + FROM + bis.tbl_meldestichtag"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " + WHERE + studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz); + } + + $qry .= " + ORDER BY + meldestichtag DESC + LIMIT 1;" + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new antwort(); + + $obj->meldestichtag_id = $row->meldestichtag_id; + $obj->meldestichtag = $row->meldestichtag; + $obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + + $this->result[] = $obj; + } + + return true; + } + else + { + $this->errormsg = 'Meldestichtag konnte nicht geladen werden'; + return false; + } + } +} +?> diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 01dd9ea8f..f9920900b 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -56,7 +56,7 @@ $tabellen=array( "bis.tbl_bisfunktion" => array("bisverwendung_id","studiengang_kz","sws","updateamum","updatevon","insertamum","insertvon","ext_id"), "bis.tbl_bisio" => array("bisio_id","mobilitaetsprogramm_code","nation_code","von","bis","zweck_code","student_uid","updateamum","updatevon","insertamum","insertvon","ext_id","ort","universitaet","lehreinheit_id","ects_erworben","ects_angerechnet","herkunftsland_code"), "bis.tbl_bisio_zweck" => array("bisio_id","zweck_code"), - "bis.tbl_bismeldestichtag" => array("studiensemester_kurzbz","meldestichtag"), + "bis.tbl_bismeldestichtag" => array("meldestichtag_id", "meldestichtag", "studiensemester_kurzbz"), "bis.tbl_bisstandort" => array("standort_code","bezeichnung","aktiv","insertamum","insertvon","updateamum","updatevon"), "bis.tbl_bisverwendung" => array("bisverwendung_id","ba1code","ba2code","vertragsstunden","beschausmasscode","verwendung_code","mitarbeiter_uid","hauptberufcode","hauptberuflich","habilitation","beginn","ende","updateamum","updatevon","insertamum","insertvon","ext_id","dv_art","inkludierte_lehre","zeitaufzeichnungspflichtig","azgrelevant", "homeoffice"), "bis.tbl_bundesland" => array("bundesland_code","kurzbz","bezeichnung"), diff --git a/system/dbupdate_3.4/29144_prestudent_status_nach_bismeldung_sperren.php b/system/dbupdate_3.4/29144_prestudent_status_nach_bismeldung_sperren.php index 0d5819c49..b3e2eed7c 100644 --- a/system/dbupdate_3.4/29144_prestudent_status_nach_bismeldung_sperren.php +++ b/system/dbupdate_3.4/29144_prestudent_status_nach_bismeldung_sperren.php @@ -6,8 +6,9 @@ if (! defined('DB_NAME')) exit('No direct script access allowed'); if (!$result = @$db->db_query('SELECT 1 FROM bis.tbl_bismeldestichtag LIMIT 1')) { $qry = 'CREATE TABLE bis.tbl_bismeldestichtag ( - studiensemester_kurzbz varchar(16), + meldestichtag_id integer, meldestichtag date NOT NULL, + studiensemester_kurzbz varchar(16) NOT NULL, insertamum timestamp DEFAULT NOW(), insertvon varchar(32), updateamum timestamp, @@ -16,7 +17,15 @@ if (!$result = @$db->db_query('SELECT 1 FROM bis.tbl_bismeldestichtag LIMIT 1')) COMMENT ON TABLE bis.tbl_bismeldestichtag IS \'Deadline Dates for BIS reporting\'; - ALTER TABLE bis.tbl_bismeldestichtag ADD CONSTRAINT pk_bismeldestichtag PRIMARY KEY (studiensemester_kurzbz); + ALTER TABLE bis.tbl_bismeldestichtag ADD CONSTRAINT pk_bismeldestichtag PRIMARY KEY (meldestichtag_id); + + CREATE SEQUENCE bis.tbl_meldestichtag_meldestichtag_id_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + ALTER TABLE bis.tbl_bismeldestichtag ALTER COLUMN meldestichtag_id SET DEFAULT nextval(\'tbl_meldestichtag_meldestichtag_id_seq\'); ALTER TABLE bis.tbl_bismeldestichtag ADD CONSTRAINT fk_bismeldestichtag_studiensemester_kurzbz FOREIGN KEY (studiensemester_kurzbz) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;'; @@ -36,4 +45,16 @@ if (!$result = @$db->db_query('SELECT 1 FROM bis.tbl_bismeldestichtag LIMIT 1')) echo 'bis.tbl_bismeldestichtag: '.$db->db_last_error().'
'; else echo '
Granted privileges to vilesci on bis.tbl_bismeldestichtag'; + + $qry = 'GRANT SELECT, UPDATE ON SEQUENCE bis.tbl_meldestichtag_meldestichtag_id_seq TO web;'; + if (!$db->db_query($qry)) + echo 'bis.tbl_meldestichtag_meldestichtag_id_seq: '.$db->db_last_error().'
'; + else + echo '
Granted privileges to web on bis.tbl_meldestichtag_meldestichtag_id_seq'; + + $qry = 'GRANT SELECT, UPDATE ON SEQUENCE bis.tbl_meldestichtag_meldestichtag_id_seq TO vilesci;'; + if (!$db->db_query($qry)) + echo 'bis.tbl_meldestichtag_meldestichtag_id_seq: '.$db->db_last_error().'
'; + else + echo '
Granted privileges to vilesci on bis.tbl_meldestichtag_meldestichtag_id_seq'; }