Merge branch 'feature-25177/ZeiterfassungMergedBrancheDeploy1'

This commit is contained in:
Andreas Österreicher
2023-02-09 10:27:25 +01:00
20 changed files with 789 additions and 272 deletions
+21 -5
View File
@@ -30,7 +30,7 @@ class addon extends basis_db
public $fhcomplete_target_version;
public $aktive_addons=array();
/**
* Konstruktor
*/
@@ -38,12 +38,12 @@ class addon extends basis_db
{
parent::__construct();
$this->aktive_addons = array_filter(array_map('trim', explode(";", ACTIVE_ADDONS)));
}
/**
* Liefert alle aktivierten Addons
*/
*/
public function loadAddons()
{
@@ -55,7 +55,7 @@ class addon extends basis_db
$fhcomplete_target_version='';
include(dirname(__FILE__).'/../addons/'.$addon.'/version.php');
$obj = new stdClass();
$obj->kurzbz = $addon;
$obj->addon_name = $addon_name;
@@ -63,7 +63,7 @@ class addon extends basis_db
$obj->addon_description = $addon_description;
$obj->fhcomplete_target_version = $fhcomplete_target_version;
$this->result[] = $obj;
}
return true;
@@ -87,5 +87,21 @@ class addon extends basis_db
$this->fhcomplete_target_version = $fhcomplete_target_version;
}
/**
* Prüfen, ob ein bestimmtes Addon aktivierten ist
* @param $addon_kurzbz (fhtw,casetime, wawi..)
* @return true wenn addon aktiv, sonst false
*/
public function checkActiveAddon($addon_kurzbz)
{
$addonIsActive = false;
foreach($this->aktive_addons as $addon)
{
if ($addon == $addon_kurzbz)
$addonIsActive = true;
}
return $addonIsActive;
}
}
?>
+59
View File
@@ -865,5 +865,64 @@ class bisverwendung extends basis_db
return false;
}
}
/**
* Lädt die letzte zeitaufzeichnungspflichtige Bisverwendung
* @param $uid UID des Mitarbeiters
* @return true wenn ok, false wenn Fehler
*/
public function getLastBisZAPflicht($uid)
{
$qry = '
SELECT
*
FROM
bis.tbl_bisverwendung
WHERE
mitarbeiter_uid = '. $this->db_add_param($uid).'
AND
zeitaufzeichnungspflichtig = true
ORDER BY ende DESC NULLS FIRST LIMIT 1
';
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new bisverwendung();
$obj->bisverwendung_id = $row->bisverwendung_id;
$obj->ba1code = $row->ba1code;
$obj->ba2code = $row->ba2code;
$obj->beschausmasscode = $row->beschausmasscode;
$obj->verwendung_code = $row->verwendung_code;
$obj->hauptberufcode = $row->hauptberufcode;
$obj->hauptberuflich = $row->hauptberuflich;
$obj->habilitation = $row->habilitation;
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->updatevon = $row->updatevon;
$obj->updateamum = $row->updateamum;
$obj->insertamum = $row->insertamum;
$obj->insertvon = $row->insertvon;
$obj->vertragsstunden = $row->vertragsstunden;
$obj->dv_art = $row->dv_art;
$obj->inkludierte_lehre = $row->inkludierte_lehre;
$obj->azgrelevant = $row->azgrelevant;
$obj->homeoffice = $row->homeoffice;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
}
?>
+44
View File
@@ -1113,6 +1113,50 @@ class mitarbeiter extends benutzer
return $return;
}
/**
* Gibt ein Array mit den UIDs der Vorgesetzten zum Zeitpunkt des korrespondierenden Timesheets zurück
* @return uid
*/
public function getVorgesetzteMonatTimesheet($uid, $timesheetDate)
{
$return=false;
$qry = "SELECT
uid as vorgesetzter
FROM
public.tbl_benutzerfunktion
WHERE
funktion_kurzbz='Leitung' AND
(datum_von is null OR datum_von<=".$this->db_add_param($timesheetDate).") AND
(datum_bis is null OR datum_bis>=".$this->db_add_param($timesheetDate).") AND
oe_kurzbz in (SELECT oe_kurzbz
FROM public.tbl_benutzerfunktion
WHERE
funktion_kurzbz='oezuordnung' AND uid=".$this->db_add_param($uid)." AND
(datum_von is null OR (datum_von<= ".$this->db_add_param($timesheetDate).")) AND
(datum_bis is null OR (datum_bis>=".$this->db_add_param($timesheetDate)."))
);";
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
if ($row->vorgesetzter!='')
{
$this->vorgesetzte[]=$row->vorgesetzter;
$return=true;
}
}
$this->vorgesetzte = array_unique($this->vorgesetzte);
}
else
{
$this->errormsg = 'Fehler bei einer Datenbankabfrage!';
}
return $return;
}
/**
* Gibt UID des letzten Vorgesetzten zurück
* @param string $uid Mitarbeiter.
+34
View File
@@ -829,5 +829,39 @@ class projektphase extends basis_db
return false;
}
}
/**
* Gibt zurück, ob für eine Projektphase Zeitaufzeichnungsbuchung erlaubt ist
* @param $projektphase_id die zu überprüfende Projektphase
* @return boolean true, wenn Buchung erlaubt
*/
public function getPhasenZA($projektphase_id)
{
$qry = "
SELECT
fue.tbl_projektphase.zeitaufzeichnung
FROM
fue.tbl_projektphase
WHERE
tbl_projektphase.projektphase_id = ".$this->db_add_param($projektphase_id);
if ($this->db_query($qry))
{
if ($row = $this->db_fetch_object())
{
return $row->zeitaufzeichnung;
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
}
?>
+53 -21
View File
@@ -21,7 +21,7 @@ class zeitaufzeichnung_import {
protected $project;
protected $phase;
protected $limitdate;
protected $zeit;
@@ -42,7 +42,7 @@ class zeitaufzeichnung_import {
$this->zeit = new zeitaufzeichnung();
}
/**
* @return boolean
@@ -64,7 +64,7 @@ class zeitaufzeichnung_import {
public function hasInfos() {
return !empty($this->infos);
}
/**
* @return string
*/
@@ -96,15 +96,15 @@ class zeitaufzeichnung_import {
$html .= '<span style="color:green;"><b>' . $msg . '</b></span><br>' . "\n";
}
return $html;
}
}
/**
* @return string
*/
public function OutputToHTML() {
return $this->InfosToHTML() . $this->WarningsToHTML() . $this->ErrorsToHTML();
}
}
/**
* @param string $msg
* @return void
@@ -112,7 +112,7 @@ class zeitaufzeichnung_import {
protected function addError($msg) {
$this->errors[] = $msg;
}
/**
* @param string $msg
* @return void
@@ -120,7 +120,7 @@ class zeitaufzeichnung_import {
protected function addWarning($msg) {
$this->warnings[] = $msg;
}
/**
* @param string $msg
* @return void
@@ -134,7 +134,7 @@ class zeitaufzeichnung_import {
* @param string $uid The user id
* @param string $day "Y-m-d" formatted datestring
* @return void
*
*
* @throws Exception
*/
protected function checkZeitsperren($uid, $day) {
@@ -150,25 +150,25 @@ class zeitaufzeichnung_import {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": " . $this->p->t("zeitaufzeichnung/zeitsperreVorhanden", [$zsdate, $zs->result[0]->zeitsperretyp_kurzbz]));
}
}
/**
* @param string $date datetimestring
* @return void
*
*
* @throws Exception
*/
protected function checkLimitdatum($date) {
if ($this->datum->formatDatum($date, 'Y-m-d H:i:s') > $this->limitdate) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich da (' . $date . ') zu weit in der Zukunft liegt.');
}
}
}
/**
* @param string $start datestring
* @param string $end datestring
* @param string $aktivitaet_kurzbz
* @return void
*
*
* @throws Exception
*/
protected function checkDienstreise($start, $end, $aktivitaet_kurzbz) {
@@ -179,11 +179,11 @@ class zeitaufzeichnung_import {
.': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).');
}
}
/**
* @param string $end timestring
* @return void
*
*
* @throws Exception
*/
protected function checkTagesgenau($end) {
@@ -193,13 +193,13 @@ class zeitaufzeichnung_import {
.': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!');
}
}
/**
* @param string $projekt_kurzbz
* @param string $start datestring
* @param string $end datestring
* @return void
*
*
* @throws Exception
*/
protected function checkProjectInterval($projekt_kurzbz, $start, $end) {
@@ -207,13 +207,13 @@ class zeitaufzeichnung_import {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: (' . $start . ') (' . $end . ')');
}
}
/**
* @param string $phase The Projektphase ID
* @param string $start datestring
* @param string $end datestring
* @return void
*
*
* @throws Exception
*/
protected function checkPhaseInterval($phase, $start, $end) {
@@ -222,4 +222,36 @@ class zeitaufzeichnung_import {
}
}
/**
* @param string $phase The Projektphase ID
* @return void
*
* @throws Exception
*/
protected function checkPhaseBebuchbar($phase)
{
if ($this->phase->getPhasenZA($phase) == 'f')
{
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Dieses Arbeitspaket darf nicht bebucht werden!');
}
}
/**
* @param string $phase The Projektphase ID
* @return void
*
* @throws Exception
*/
protected function checkIfArbeitspaketZuWaehlen($projekt_kurzbz, $phase)
{
if ($projekt_kurzbz != '')
{
$this->project->load($projekt_kurzbz);
if (!$this->project->zeitaufzeichnung && !$phase)
{
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Bitte ein Arbeitspaket wählen!');
}
}
}
}
@@ -163,7 +163,8 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import {
$this->initData($data);
$this->checkProject($data[self::PROJEKT], $data[self::PHASE]);
$this->checkPhase($data[self::PHASE]);
$this->checkPhaseBebuchbar($data[self::PHASE]);
$this->checkIfArbeitspaketZuWaehlen($data[self::PROJEKT], $data[self::PHASE]);
$this->checkZeitsperren($this->user, $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d'));
$this->checkSperrdatum($data[self::STARTDT]);
$this->checkLimitdatum($data[self::STARTDT]);
@@ -72,6 +72,8 @@ class zeitaufzeichnung_import_post extends zeitaufzeichnung_import {
$this->checkDienstreise($this->data['von'], $this->data['bis'], $this->data['aktivitaet_kurzbz']);
$this->checkTagesgenau($this->data['bis']);
$this->processPause($this->data['von_pause'], $this->data['bis_pause']);
$this->checkPhaseBebuchbar($this->data['projektphase_id']);
$this->checkIfArbeitspaketZuWaehlen($this->data['projekt_kurzbz'], $this->data['projektphase_id']);
$this->saveZeit();
} catch (Exception $ex) {
$this->addError($ex->getMessage());
+45 -4
View File
@@ -551,13 +551,13 @@ class zeitsperre extends basis_db
public function getVonBis($uid, $von, $bis, $zeitsperretyp_kurzbz = null)
{
$qry = '
SELECT
SELECT
zeitsperre_id, zeitsperretyp_kurzbz, vondatum, vonstunde, bisdatum, bisstunde
FROM
FROM
campus.tbl_zeitsperre
LEFT JOIN campus.tbl_zeitsperretyp USING (zeitsperretyp_kurzbz)
WHERE
mitarbeiter_uid = '. $this->db_add_param($uid). '
WHERE
mitarbeiter_uid = '. $this->db_add_param($uid). '
AND (
(vondatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).')
OR
@@ -592,5 +592,46 @@ class zeitsperre extends basis_db
return true;
}
}
/**
* Laedt einen Zeitsperretyp.
*
* @param $zeitsperretyp_kurzbz
* @return Gibt Zeitsperretyp als Objekt zurück. True wenn ok, false im Fehlerfall.
*/
public function loadZeitsperretyp($zeitsperretyp_kurzbz)
{
if(!is_string($zeitsperretyp_kurzbz))
{
$this->errormsg = 'zeitsperretyp muß ein String sein';
return false;
}
$qry = "SELECT * FROM campus.tbl_zeitsperretyp WHERE zeitsperretyp_kurzbz = ". $this->db_add_param($zeitsperretyp_kurzbz);
if(!$this->db_query($qry))
{
$this->errormsg = 'Fehler beim Laden des Datensatzes';
return false;
}
if($row = $this->db_fetch_object())
{
$obj = new StdClass();
$obj->zeitsperretyp_kurzbz = $row->zeitsperretyp_kurzbz;
$obj->beschreibung = $row->beschreibung;
$obj->farbe = $row->farbe;
$this->result[]= $obj;
}
else
{
$this->errormsg = 'Zeitsperretyp konnte nicht geladen werden';
return false;
}
return true;
}
}
?>