From 9e1b782c54dfff58bcedf1c8c8b4a1b01d9fd4cb Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Thu, 30 Jul 2026 14:31:48 +0200 Subject: [PATCH] Zeitmodell table: added sequence, zeitmodell_kurzbz, mitarbeiter: added method to get Mitarbeiter which are zeitaufzeichnungspflichtig --- include/mitarbeiter.class.php | 58 ++++++++++++ system/dbupdate_3.4.php | 2 +- .../76677_zeitaufzeichnung_zeitmodell.php | 91 ++++++++++++++----- 3 files changed, 127 insertions(+), 24 deletions(-) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 1517122c2..9607e13a9 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -28,6 +28,7 @@ class mitarbeiter extends benutzer { public $new; public $result=array(); + public $maData=array(); //Tabellenspalten public $ausbildungcode; //integer @@ -1937,6 +1938,63 @@ class mitarbeiter extends benutzer } } + /** + * Liefert alle zeitaufzeichnungspflichtigen Mitarbeiter*innen + * + * @param $aktiv + * @return boolean + */ + public function getZeitaufzeichnungspflichtig($aktiv=null) + { + $aktivClause = ''; + + if (is_bool($aktiv)) $aktivClause = 'AND b.aktiv = '.$this->db_add_param($aktiv, FHC_BOOLEAN); + + $qry = " + SELECT + ma.mitarbeiter_uid, p.nachname, p.vorname, b.alias + FROM + public.tbl_mitarbeiter ma + JOIN public.tbl_benutzer b ON (mitarbeiter_uid=uid) + JOIN public.tbl_person p USING(person_id) + WHERE + EXISTS ( + SELECT 1 + FROM + hr.tbl_vertragsbestandteil_zeitaufzeichnung vbtza + JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id) + JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id) + WHERE + dv.mitarbeiter_uid = b.uid + AND zeitaufzeichnung + ) + {$aktivClause} + ORDER BY b.uid + "; + + if($this->db_query($qry)) + { + $this->maData[] = array(); + while($row = $this->db_fetch_object()) + { + $ma_obj = new mitarbeiter(); + + $ma_obj->nachname = $row->nachname; + $ma_obj->vorname = $row->vorname; + $ma_obj->mitarbeiter_uid = $row->mitarbeiter_uid; + $ma_obj->alias = $row->alias; + + $this->maData[] = $ma_obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + /** * Generiert nächste freie Personalnummer anhand der sequence tbl_mitarbeiter_personalnummer_seq * @return string $personalnummer diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index b889201d8..18f2cd40e 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -251,7 +251,7 @@ $tabellen=array( "hr.tbl_lohnguide_modellstelle" => array("modellstelle_kurzbz", "bezeichnung", "grade", "modellfunktion_kurzbz", "aktiv", "sort", "insertvon", "insertamum", "updatevon", "updateamum"), "hr.tbl_lohnguide_fachrichtung" => array("fachrichtung_kurzbz", "bezeichnung", "aktiv", "insertvon", "insertamum", "updatevon", "updateamum"), "hr.tbl_vertragsbestandteil_lohnguide" => array("vertragsbestandteil_id", "stellenbezeichnung", "vordienstzeit", "fachrichtung_kurzbz", "modellstelle_kurzbz", "kommentar_person", "kommentar_modellstelle"), - "hr.tbl_zeitmodell" => array('zeitmodell_id','bezeichnung','aktiv', 'stundenanzahl','ext_id','sort'), + "hr.tbl_zeitmodell" => array('zeitmodell_id', 'zeitmodell_kurzbz','beschreibung','aktiv', 'stundenanzahl','ext_id','sort'), "lehre.tbl_abschlussbeurteilung" => array("abschlussbeurteilung_kurzbz","bezeichnung","bezeichnung_english","sort"), "lehre.tbl_abschlusspruefung" => array("abschlusspruefung_id","student_uid","vorsitz","pruefer1","pruefer2","pruefer3","abschlussbeurteilung_kurzbz","akadgrad_id","pruefungstyp_kurzbz","datum","uhrzeit","sponsion","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","note","protokoll","endezeit","pruefungsantritt_kurzbz","freigabedatum"), "lehre.tbl_abschlusspruefung_antritt" => array("pruefungsantritt_kurzbz","bezeichnung","bezeichnung_english","sort"), diff --git a/system/dbupdate_3.4/76677_zeitaufzeichnung_zeitmodell.php b/system/dbupdate_3.4/76677_zeitaufzeichnung_zeitmodell.php index 89d9d07a4..da4824ed1 100644 --- a/system/dbupdate_3.4/76677_zeitaufzeichnung_zeitmodell.php +++ b/system/dbupdate_3.4/76677_zeitaufzeichnung_zeitmodell.php @@ -1,28 +1,60 @@ db_query("SELECT * FROM pg_class WHERE relname = 'tbl_zeitmodell_zeitmodell_id_seq'")) +{ + if ($db->db_num_rows($result) == 0) + { + if ($count = @$db->db_query("SELECT * FROM hr.tbl_zeitmodell")) + { + $count = $db->db_num_rows($count) + 1; + $qry = 'CREATE SEQUENCE hr.tbl_zeitmodell_zeitmodell_id_seq START '; + $qry .= $count; + if(!$db->db_query($qry)) + { + echo ' hr.tbl_zeitmodell '.$db->db_last_error().'
'; + } + else + { + echo '
hr.tbl_zeitmodell: Sequence hr.tbl_zeitmodell_zeitmodell_id_seq mit Startwert ' . $count . ' erstellt'; + $qry2 = "GRANT SELECT, UPDATE ON hr.tbl_zeitmodell_zeitmodell_id_seq TO vilesci; + GRANT SELECT, UPDATE ON hr.tbl_zeitmodell_zeitmodell_id_seq TO web;"; + if(!$db->db_query($qry2)) + { + echo 'hr.tbl_zeitmodell_zeitmodell_id_seq Berechtigungen: '.$db->db_last_error().'
'; + } + else + { + echo '
hr.tbl_zeitmodell: Rechte auf hr.tbl_zeitmodell_zeitmodell_id_seq fuer web user und vilesci gesetzt '; + } + } + } + } +} + +//Create Table if ($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_name='tbl_zeitmodell' AND table_schema='hr'")) { if ($db->db_num_rows($result) == 0) { $qry = " -CREATE TABLE IF NOT EXISTS hr.tbl_zeitmodell ( - zeitmodell_id serial NOT NULL, - bezeichnung text, - aktiv boolean NOT NULL DEFAULT FALSE, - stundenanzahl numeric(8,2), - ext_id text, - sort smallint, - CONSTRAINT tbl_zeitmodell_pkey PRIMARY KEY (zeitmodell_id) -); + CREATE TABLE IF NOT EXISTS hr.tbl_zeitmodell ( + zeitmodell_id integer, + zeitmodell_kurzbz varchar(32) UNIQUE, + beschreibung text, + aktiv boolean NOT NULL DEFAULT FALSE, + stundenanzahl numeric(8,2), + ext_id text, + sort smallint, + insertamum TIMESTAMP DEFAULT NOW(), + insertvon VARCHAR(32), + updateamum TIMESTAMP, + updatevon VARCHAR(32), + CONSTRAINT tbl_zeitmodell_pkey PRIMARY KEY (zeitmodell_id) + ); -GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_zeitmodell TO vilesci; - -INSERT INTO hr.tbl_zeitmodell(bezeichnung,aktiv, stundenanzahl, sort) VALUES -('Zeitmodell 1', TRUE, 38.5,1), -('Zeitmodell 2', TRUE, 38.5,2) -ON CONFLICT (zeitmodell_id) DO NOTHING; - "; + GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE hr.tbl_zeitmodell TO vilesci;"; if (! $db->db_query($qry)) echo 'Zeitmodell: ' . $db->db_last_error() . '
'; @@ -31,22 +63,35 @@ ON CONFLICT (zeitmodell_id) DO NOTHING; } } -if ($result = $db->db_query("SELECT * FROM information_schema.columns WHERE column_name='zeitmodell_id' AND table_name='tbl_vertragsbestandteil_zeitaufzeichnung' AND table_schema='hr'")) +//hr.tbl_zeitmodell DEFAULT einstellen +if ($result = @$db->db_query("SELECT column_default FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_zeitmodell'AND column_name = 'zeitmodell_id' and column_default is null")) +{ + if($db->db_num_rows($result)==1) + { + $qry = "ALTER TABLE hr.tbl_zeitmodell ALTER COLUMN zeitmodell_id SET DEFAULT nextval('hr.tbl_zeitmodell_zeitmodell_id_seq'::regclass);"; + + if(!$db->db_query($qry)) + echo ' hr.tbl_zeitmodell '.$db->db_last_error().'
'; + else + echo '
hr.tbl_zeitmodell: Defaultwert bei Spalte hr.tbl_zeitmodell_id gesetzt'; + } +} + +//foreign key zu Vertragsbestandteil +if ($result = @$db->db_query("SELECT * FROM information_schema.columns WHERE column_name='zeitmodell_id' AND table_name='tbl_vertragsbestandteil_zeitaufzeichnung' AND table_schema='hr'")) { if ($db->db_num_rows($result) == 0) { $qry = " ALTER TABLE hr.tbl_vertragsbestandteil_zeitaufzeichnung - ADD COLUMN - zeitmodell_id int; - ALTER TABLE hr.tbl_vertragsbestandteil_zeitaufzeichnung ADD CONSTRAINT vertragsbestandteil_zeitaufzeichnung_zeitmodell_fk FOREIGN KEY (zeitmodell_id) REFERENCES hr.tbl_zeitmodell (zeitmodell_id) ON DELETE RESTRICT ON UPDATE CASCADE; - + ADD COLUMN + zeitmodell_id integer; + ALTER TABLE hr.tbl_vertragsbestandteil_zeitaufzeichnung ADD CONSTRAINT vertragsbestandteil_zeitaufzeichnung_zeitmodell_fk FOREIGN KEY (zeitmodell_id) REFERENCES hr.tbl_zeitmodell (zeitmodell_id) ON DELETE RESTRICT ON UPDATE CASCADE; "; if (! $db->db_query($qry)) echo 'Zeitmodell: ' . $db->db_last_error() . '
'; else - echo 'Spalte zeitmodell_id wurde in hr.tbl_vertragsbestandteil_zeitaufzeichnung neu erstellt
'; - + echo '
Spalte zeitmodell_id wurde in hr.tbl_vertragsbestandteil_zeitaufzeichnung neu erstellt
'; } }