Zeitmodell table: added sequence, zeitmodell_kurzbz, mitarbeiter: added method to get Mitarbeiter which are zeitaufzeichnungspflichtig

This commit is contained in:
Alexei Karpenko
2026-07-30 14:31:48 +02:00
parent 2acbb6ecd0
commit 9e1b782c54
3 changed files with 127 additions and 24 deletions
+58
View File
@@ -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
+1 -1
View File
@@ -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"),
@@ -1,28 +1,60 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
//Create Sequence hr.tbl_zeitmodell and grant Rights
if ($result = @$db->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 '<strong> hr.tbl_zeitmodell '.$db->db_last_error().'</strong><br>';
}
else
{
echo '<br>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 '<strong>hr.tbl_zeitmodell_zeitmodell_id_seq Berechtigungen: '.$db->db_last_error().'</strong><br>';
}
else
{
echo '<br>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 '<strong>Zeitmodell: ' . $db->db_last_error() . '</strong><br>';
@@ -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 '<strong> hr.tbl_zeitmodell '.$db->db_last_error().'</strong><br>';
else
echo '<br> 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 '<strong>Zeitmodell: ' . $db->db_last_error() . '</strong><br>';
else
echo 'Spalte zeitmodell_id wurde in hr.tbl_vertragsbestandteil_zeitaufzeichnung neu erstellt<br>';
echo '<br>Spalte zeitmodell_id wurde in hr.tbl_vertragsbestandteil_zeitaufzeichnung neu erstellt<br>';
}
}