From b43b7fe95da4614e147c9b4c92705b5921b2ec5d Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 4 May 2023 09:38:18 +0200 Subject: [PATCH] Added new Vertragsbestandteil Class and few methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit . load() . isZAPflichtig() -- Check ob im übergebenen Monat ZApflichtig. . getZAPflichtig() -- Holt alle Vertragsbestandteile, die ZApflichtig sind . isAllin() -- Check, ob im übergebenen Monat Vertragsbestandteil AllIn hat. --- include/vertragsbestandteil.class.php | 451 ++++++++++++++++++++++++++ 1 file changed, 451 insertions(+) create mode 100644 include/vertragsbestandteil.class.php diff --git a/include/vertragsbestandteil.class.php b/include/vertragsbestandteil.class.php new file mode 100644 index 000000000..50b0b7b66 --- /dev/null +++ b/include/vertragsbestandteil.class.php @@ -0,0 +1,451 @@ +, + */ +/** + * Klasse Vertragsbestandteil + * @create 29.03.2023 + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class vertragsbestandteil extends basis_db +{ + public $new; // boolean + public $result = array(); + + //Tabellenspalten + public $vertragsbestandteil_id; // serial + public $dienstverhaeltnis_id; // integer + public $vertragsbestandteiltyp_kurzbz; // varchar(32) + public $von; // date + public $bis; // date + public $insertamum; // timestamp + public $insertvon; // varchar(32) + public $updateamum; // timestamp + public $updatevon; // varchar(32) + + /** + * Konstruktor + * @param $vertragsbestandteil_id ID des Vertragsbestandteils, der geladen werden soll (Default=null) + */ + public function __construct($vertragsbestandteil_id = null) + { + parent::__construct(); + + if($vertragsbestandteil_id != null) + $this->load($vertragsbestandteil_id); + } + + /** + * Laedt den Vertragsbestandteil mit der uebergebenen ID. + * @return true wenn ok, false im Fehlerfall + */ + public function load($vertragsbestandteil_id) + { + $qry = "SELECT * FROM hr.tbl_vertragsbestandteil WHERE vertragsbestandteil_id = ". $this->db_add_param($vertragsbestandteil_id, FHC_INTEGER); + + if (!$this->db_query($qry)) + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + + if($row = $this->db_fetch_object()) + { + $this->vertragsbestandteil_id = $row->vertragsbestandteil_id; + $this->dienstverhaeltnis_id = $row->dienstverhaeltnis_id; + $this->vertragsbestandteiltyp_kurzbz = $row->vertragsbestandteiltyp_kurzbz; + $this->von = $row->von; + $this->bis = $row->bis; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + } + else + { + $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; + return false; + } + + return true; + } + + /** + * Prueft ob MitarbeiterIn im Monat des uebergebenen $datums zeitaufzeichnungspflichtig ist. + * Wenn kein Datum übergeben wird, wird das heutige Datum gesetzt. + * + * @param $mitarbeiter_uid + * @param string $timestamp DD-MM-YYYY + * @return bool + */ + public function isZaPflichtig($mitarbeiter_uid, $datum = null) + { + + $timestamp = is_null($datum) ? 'NOW()' : '(date('. $this->db_add_param($datum).'))'; + + $qry = 'SELECT + vbt.vertragsbestandteil_id, vbt.dienstverhaeltnis_id, vbt.vertragsbestandteiltyp_kurzbz, + vbt.von, vbt.bis, vbt.insertamum, vbt.insertvon, vbt.updateamum, vbt.updatevon, + vbtza.zeitaufzeichnung, vbtza.azgrelevant, vbtza.homeoffice + FROM hr.tbl_vertragsbestandteil_zeitaufzeichnung vbtza + JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id) + JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id) + -- Dienstverhältnis(se) des Mitarbeiters + WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). ' + -- Zeitaufzeichnungspflichtig... + AND zeitaufzeichnung = TRUE + -- ...im aktuellen Monat (default) oder im Monat des übergebenen $datums + AND ((date_trunc(\'month\', '. $timestamp. ')::date < vbt.bis AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von) OR (vbt.bis IS NULL AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von)) + -- Vorerst nur check, ob zumindest eine aufrechte Zeitaufzeichnungspflicht. Später Unterscheidung nach Dienstverhältnis. + --ORDER BY vbt.von DESC --aktuellster + LIMIT 1'; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + { + $this->result = array(); + + while ($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + + $obj->vertragsbestandteil_id = $row->vertragsbestandteil_id; + $obj->dienstverhaeltnis_id = $row->dienstverhaeltnis_id; + $obj->vertragsbestandteiltyp_kurzbz = $row->vertragsbestandteiltyp_kurzbz; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->zeitaufzeichnung = $row->zeitaufzeichnung; + $obj->azgrelevant = $row->azgrelevant; + $obj->homeoffice = $row->homeoffice; + + $this->result[] = $obj; + } + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = "Fehler bei der Abfrage aufgetreten"; + return false; + } + + } + + /** + * Holt alle Vertragsbestandteile, die eine Zeitaufzeichnungspflicht haben. + * + * Set order DESC limit 1 to retrieve only most recent Vertragsbestandteil. + * Set order ASC limit 1 to retrieve only first Vertragsbestandteil. + * + * @param $mitarbeiter_uid + * @param string $order + * @param null $limit + * @return bool + */ + public function getZaPflichtig($mitarbeiter_uid, $order = 'DESC', $limit = null) + { + if ($order !== 'ASC' && $order !== 'DESC') + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + + $qry = 'SELECT + vbt.vertragsbestandteil_id, vbt.dienstverhaeltnis_id, vbt.vertragsbestandteiltyp_kurzbz, + vbt.von, vbt.bis, vbt.insertamum, vbt.insertvon, vbt.updateamum, vbt.updatevon, + vbtza.zeitaufzeichnung, vbtza.azgrelevant, vbtza.homeoffice + FROM hr.tbl_vertragsbestandteil_zeitaufzeichnung vbtza + JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id) + JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id) + -- Dienstverhältnis(se) des Mitarbeiters + WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). ' + -- Zeitaufzeichnungspflichtig + AND zeitaufzeichnung = TRUE + -- Vertragsbestandteile sind aktuell, liegen nach dem GoLive und starten vor dem aktuellen Monatsletzten + AND( + (COALESCE(vbt.bis, NOW()::date) > '. $this->db_add_param(CASETIME_TIMESHEET_GOLIVE). '::date) AND + (vbt.von < (date_trunc(\'month\', NOW()) + interval \'1 month - 1 day\')::date) + ) + ORDER BY vbt.von ' . $order; + + + if (!is_null($limit)) + { + $qry .= ' LIMIT ' . $this->db_add_param($limit, FHC_INTEGER); + } + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + { + $this->result = array(); + + while ($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + + $obj->vertragsbestandteil_id = $row->vertragsbestandteil_id; + $obj->dienstverhaeltnis_id = $row->dienstverhaeltnis_id; + $obj->vertragsbestandteiltyp_kurzbz = $row->vertragsbestandteiltyp_kurzbz; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->zeitaufzeichnung = $row->zeitaufzeichnung; + $obj->azgrelevant = $row->azgrelevant; + $obj->homeoffice = $row->homeoffice; + + $this->result[] = $obj; + } + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = "Fehler bei der Abfrage aufgetreten"; + return false; + } + + } + + /** + * Prueft ob MitarbeiterIn im Monat des uebergebenen $datums AZG-relevant ist. + * Wenn kein Datum übergeben wird, wird das heutige Datum gesetzt. + * + * @param $mitarbeiter_uid + * @param string $timestamp DD-MM-YYYY + * @return bool + */ + public function isAzgRelevant($mitarbeiter_uid, $datum = null) + { + + $timestamp = is_null($datum) ? 'NOW()' : '(date('. $this->db_add_param($datum).'))'; + + $qry = 'SELECT + vbt.vertragsbestandteil_id, vbt.dienstverhaeltnis_id, vbt.vertragsbestandteiltyp_kurzbz, + vbt.von, vbt.bis, vbt.insertamum, vbt.insertvon, vbt.updateamum, vbt.updatevon, + vbtza.zeitaufzeichnung, vbtza.azgrelevant, vbtza.homeoffice + FROM hr.tbl_vertragsbestandteil_zeitaufzeichnung vbtza + JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id) + JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id) + -- Dienstverhältnis(se) des Mitarbeiters + WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). ' + -- AZG-relevant... + AND azgrelevant = TRUE + -- ...im aktuellen Monat (default) oder im Monat des übergebenen $datums + AND ((date_trunc(\'month\', '. $timestamp. ')::date < vbt.bis AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von) OR (vbt.bis IS NULL AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von)) + -- Vorerst nur check, ob zumindest eine aufrechte Zeitaufzeichnungspflicht. Später Unterscheidung nach Dienstverhältnis. + --ORDER BY vbt.von DESC --aktuellster + LIMIT 1'; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + { + $this->result = array(); + + while ($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + + $obj->vertragsbestandteil_id = $row->vertragsbestandteil_id; + $obj->dienstverhaeltnis_id = $row->dienstverhaeltnis_id; + $obj->vertragsbestandteiltyp_kurzbz = $row->vertragsbestandteiltyp_kurzbz; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->zeitaufzeichnung = $row->zeitaufzeichnung; + $obj->azgrelevant = $row->azgrelevant; + $obj->homeoffice = $row->homeoffice; + + $this->result[] = $obj; + } + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = "Fehler bei der Abfrage aufgetreten"; + return false; + } + + } + + /** + * Prueft ob MitarbeiterIn im Monat des uebergebenen $datums AZG-relevant ist. + * Wenn kein Datum übergeben wird, wird das heutige Datum gesetzt. + * + * @param $mitarbeiter_uid + * @param string $timestamp DD-MM-YYYY + * @return bool + */ + public function hasHomeoffice($mitarbeiter_uid, $datum = null) + { + + $timestamp = is_null($datum) ? 'NOW()' : '(date('. $this->db_add_param($datum).'))'; + + $qry = 'SELECT + vbt.vertragsbestandteil_id, vbt.dienstverhaeltnis_id, vbt.vertragsbestandteiltyp_kurzbz, + vbt.von, vbt.bis, vbt.insertamum, vbt.insertvon, vbt.updateamum, vbt.updatevon, + vbtza.zeitaufzeichnung, vbtza.azgrelevant, vbtza.homeoffice + FROM hr.tbl_vertragsbestandteil_zeitaufzeichnung vbtza + JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id) + JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id) + -- Dienstverhältnis(se) des Mitarbeiters + WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). ' + -- Homeoffice... + AND homeoffice = TRUE + -- ...im aktuellen Monat (default) oder im Monat des übergebenen $datums + AND ((date_trunc(\'month\', '. $timestamp. ')::date < vbt.bis AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von) OR (vbt.bis IS NULL AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von)) + -- Vorerst nur check, ob zumindest eine aufrechte Zeitaufzeichnungspflicht. Später Unterscheidung nach Dienstverhältnis. + --ORDER BY vbt.von DESC --aktuellster + LIMIT 1'; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + { + $this->result = array(); + + while ($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + + $obj->vertragsbestandteil_id = $row->vertragsbestandteil_id; + $obj->dienstverhaeltnis_id = $row->dienstverhaeltnis_id; + $obj->vertragsbestandteiltyp_kurzbz = $row->vertragsbestandteiltyp_kurzbz; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->zeitaufzeichnung = $row->zeitaufzeichnung; + $obj->azgrelevant = $row->azgrelevant; + $obj->homeoffice = $row->homeoffice; + + $this->result[] = $obj; + } + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = "Fehler bei der Abfrage aufgetreten"; + return false; + } + + } + + /** + * Prueft ob MitarbeiterIn im Monat des uebergebenen $datums einen Allin Vertragsbestandteil hat. + * Wenn kein Datum übergeben wird, wird das heutige Datum gesetzt. + * + * @param $mitarbeiter_uid + * @param string $datum + * @return bool + */ + public function isAllin($mitarbeiter_uid, $datum = null) + { + $timestamp = is_null($datum) ? 'NOW()' : '(date('. $this->db_add_param($datum).'))'; + + $qry = 'SELECT + vbt.vertragsbestandteil_id, vbt.dienstverhaeltnis_id, vbt.vertragsbestandteiltyp_kurzbz, + vbt.von, vbt.bis, vbt.insertamum, vbt.insertvon, vbt.updateamum, vbt.updatevon, + vbtft.freitexttyp_kurzbz, vbtftt.bezeichnung, vbtft.titel, vbtft.anmerkung + FROM hr.tbl_vertragsbestandteil_freitext vbtft + JOIN hr.tbl_vertragsbestandteil vbt USING (vertragsbestandteil_id) + JOIN hr.tbl_dienstverhaeltnis dv USING (dienstverhaeltnis_id) + JOIN hr.tbl_vertragsbestandteil_freitexttyp vbtftt USING (freitexttyp_kurzbz) + -- Dienstverhältnis(se) des Mitarbeiters + WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). ' + -- All-In + AND freitexttyp_kurzbz = \'allin\' + -- Vertragsbestandteil Freitext ist im Monat des übergebenen $datums + AND ((date_trunc(\'month\', '. $timestamp. ')::date < vbt.bis AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von) OR (vbt.bis IS NULL AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von)) + -- Vorerst nur check, ob zumindest ein aufrechter Allin Vertragsbestandteil. Später Unterscheidung nach Dienstverhältnis. + --ORDER BY vbt.von DESC -- aktuellster + LIMIT 1'; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + { + $this->result = array(); + + while ($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + + $obj->vertragsbestandteil_id = $row->vertragsbestandteil_id; + $obj->dienstverhaeltnis_id = $row->dienstverhaeltnis_id; + $obj->vertragsbestandteiltyp_kurzbz = $row->vertragsbestandteiltyp_kurzbz; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->freitexttyp_kurzbz = $row->freitexttyp_kurzbz; + $obj->bezeichnung = $row->bezeichnung; + $obj->titel = $row->titel; + $obj->anmerkung = $row->anmerkung; + + $this->result[] = $obj; + } + return true; + } + else + { + return false; + } + } + else + { + $this->errormsg = "Fehler bei der Abfrage aufgetreten"; + return false; + } + } +} +?>