Compare commits

...

1 Commits

Author SHA1 Message Date
ma0068 c4683f71db ZeiterfassungCSVValidierungBeiNegativerPause 2022-11-08 14:49:05 +01:00
3 changed files with 108 additions and 102 deletions
+101 -21
View File
@@ -21,7 +21,7 @@ class zeitaufzeichnung_import {
protected $project; protected $project;
protected $phase; protected $phase;
protected $limitdate; protected $limitdate;
protected $zeit; protected $zeit;
@@ -42,7 +42,7 @@ class zeitaufzeichnung_import {
$this->zeit = new zeitaufzeichnung(); $this->zeit = new zeitaufzeichnung();
} }
/** /**
* @return boolean * @return boolean
@@ -64,7 +64,7 @@ class zeitaufzeichnung_import {
public function hasInfos() { public function hasInfos() {
return !empty($this->infos); return !empty($this->infos);
} }
/** /**
* @return string * @return string
*/ */
@@ -96,15 +96,15 @@ class zeitaufzeichnung_import {
$html .= '<span style="color:green;"><b>' . $msg . '</b></span><br>' . "\n"; $html .= '<span style="color:green;"><b>' . $msg . '</b></span><br>' . "\n";
} }
return $html; return $html;
} }
/** /**
* @return string * @return string
*/ */
public function OutputToHTML() { public function OutputToHTML() {
return $this->InfosToHTML() . $this->WarningsToHTML() . $this->ErrorsToHTML(); return $this->InfosToHTML() . $this->WarningsToHTML() . $this->ErrorsToHTML();
} }
/** /**
* @param string $msg * @param string $msg
* @return void * @return void
@@ -112,7 +112,7 @@ class zeitaufzeichnung_import {
protected function addError($msg) { protected function addError($msg) {
$this->errors[] = $msg; $this->errors[] = $msg;
} }
/** /**
* @param string $msg * @param string $msg
* @return void * @return void
@@ -120,7 +120,7 @@ class zeitaufzeichnung_import {
protected function addWarning($msg) { protected function addWarning($msg) {
$this->warnings[] = $msg; $this->warnings[] = $msg;
} }
/** /**
* @param string $msg * @param string $msg
* @return void * @return void
@@ -134,7 +134,7 @@ class zeitaufzeichnung_import {
* @param string $uid The user id * @param string $uid The user id
* @param string $day "Y-m-d" formatted datestring * @param string $day "Y-m-d" formatted datestring
* @return void * @return void
* *
* @throws Exception * @throws Exception
*/ */
protected function checkZeitsperren($uid, $day) { 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])); throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": " . $this->p->t("zeitaufzeichnung/zeitsperreVorhanden", [$zsdate, $zs->result[0]->zeitsperretyp_kurzbz]));
} }
} }
/** /**
* @param string $date datetimestring * @param string $date datetimestring
* @return void * @return void
* *
* @throws Exception * @throws Exception
*/ */
protected function checkLimitdatum($date) { protected function checkLimitdatum($date) {
if ($this->datum->formatDatum($date, 'Y-m-d H:i:s') > $this->limitdate) { 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.'); 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 $start datestring
* @param string $end datestring * @param string $end datestring
* @param string $aktivitaet_kurzbz * @param string $aktivitaet_kurzbz
* @return void * @return void
* *
* @throws Exception * @throws Exception
*/ */
protected function checkDienstreise($start, $end, $aktivitaet_kurzbz) { 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).'); .': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).');
} }
} }
/** /**
* @param string $end timestring * @param string $end timestring
* @return void * @return void
* *
* @throws Exception * @throws Exception
*/ */
protected function checkTagesgenau($end) { 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!'); .': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!');
} }
} }
/** /**
* @param string $projekt_kurzbz * @param string $projekt_kurzbz
* @param string $start datestring * @param string $start datestring
* @param string $end datestring * @param string $end datestring
* @return void * @return void
* *
* @throws Exception * @throws Exception
*/ */
protected function checkProjectInterval($projekt_kurzbz, $start, $end) { 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 . ')'); 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 $phase The Projektphase ID
* @param string $start datestring * @param string $start datestring
* @param string $end datestring * @param string $end datestring
* @return void * @return void
* *
* @throws Exception * @throws Exception
*/ */
protected function checkPhaseInterval($phase, $start, $end) { protected function checkPhaseInterval($phase, $start, $end) {
@@ -222,4 +222,84 @@ class zeitaufzeichnung_import {
} }
} }
/**
* @param string $start datetime
* @param string $end datetime
* @return void
*/
protected function processPause($start, $end) {
if (isset($_POST['genPause'])) {
$p_start = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
$p_end = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$this->checkPauseInArbeitszeit($p_start, $p_end);
$this->checkPauseValid($p_start, $p_end);
$this->savePauseGeneric($start, $end);
}
}
/**
* @param string $start "Y-m-d H:i:s" formatted datetime
* @param string $end "Y-m-d H:i:s" formatted datetime
* @return void
*
* @throws Exception
*/
protected function checkPauseInArbeitszeit($start, $end) {
if ($this->zeit->start > $start || $this->zeit->ende < $end) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Pause außerhalb der Arbeitszeit');
}
}
/**
* @param string $start "Y-m-d H:i:s" formatted datetime
* @param string $end "Y-m-d H:i:s" formatted datetime
* @return void
*
* @throws Exception
*/
protected function checkPauseValid($start, $end) {
if ($start > $end) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Fehlerhafte Pausenzeiten');
}
}
/**
* @param string $start datetime
* @param string $end datetime
* @return void
*/
protected function savePauseGeneric($start, $end) {
//Eintrag Arbeit bis zur Pause
$ende = $this->zeit->ende;
$this->zeit->ende = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
if (!$this->zeit->save()) {
$this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $this->zeit->errormsg);
}
//Eintrag für die Pause
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $this->user;
$pause->insertvon = $this->user;
$pause->uid = $this->user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->homeoffice = $this->zeit->homeoffice;
$pause->start = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
$pause->ende = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$pause->beschreibung = '';
if (!$pause->save()) {
$this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $pause->errormsg);
}
// Eintrag Arbeit ab der Pause
if ($this->zeit->new == false) {
$this->zeit->new = true;
$this->zeit->insertamum = date('Y-m-d H:i:s');
$this->zeit->insertvon = $this->user;
}
$this->zeit->start = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$this->zeit->ende = $ende;
}
} }
@@ -176,6 +176,8 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import {
$this->mapLehreIntern($data); $this->mapLehreIntern($data);
$this->prepareZeitaufzeichnung($data); $this->prepareZeitaufzeichnung($data);
$this->checkImporttage($data[self::STARTDT]); $this->checkImporttage($data[self::STARTDT]);
$this->checkPauseInArbeitszeit($data[self::STARTDT], $data[self::ENDEDT]);
$this->checkPauseValid($data[self::STARTDT], $data[self::ENDEDT]);
$this->saveZeit($data[self::STARTDT], $data[self::ENDEDT]); $this->saveZeit($data[self::STARTDT], $data[self::ENDEDT]);
} catch (Exception $ex) { } catch (Exception $ex) {
$this->addError($ex->getMessage(), true); $this->addError($ex->getMessage(), true);
@@ -383,6 +385,8 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import {
/** /**
* @return void * @return void
*
* @throws Exception
*/ */
protected function savePause() { protected function savePause() {
$pause = new zeitaufzeichnung(); $pause = new zeitaufzeichnung();
@@ -399,7 +403,7 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import {
$pause->homeoffice = $this->zeit->homeoffice; $pause->homeoffice = $this->zeit->homeoffice;
if(!$pause->save()) if(!$pause->save())
{ {
$this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg, true); throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg, true);
} }
} }
@@ -407,6 +411,7 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import {
* @param string $start datetimestring * @param string $start datetimestring
* @param string $end datetimestring * @param string $end datetimestring
* @return void * @return void
*/ */
protected function saveZeit($start, $end) { protected function saveZeit($start, $end) {
if ($start != $end) { if ($start != $end) {
@@ -418,6 +423,7 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import {
} else { } else {
$this->anzahl++; $this->anzahl++;
} }
} }
/** /**
@@ -126,86 +126,6 @@ class zeitaufzeichnung_import_post extends zeitaufzeichnung_import {
$this->zeit->kunde_uid = $kunde_uid; $this->zeit->kunde_uid = $kunde_uid;
} }
/**
* @param string $start datetime
* @param string $end datetime
* @return void
*/
protected function processPause($start, $end) {
if (isset($_POST['genPause'])) {
$p_start = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
$p_end = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$this->checkPauseInArbeitszeit($p_start, $p_end);
$this->checkPauseValid($p_start, $p_end);
$this->savePause($start, $end);
}
}
/**
* @param string $start "Y-m-d H:i:s" formatted datetime
* @param string $end "Y-m-d H:i:s" formatted datetime
* @return void
*
* @throws Exception
*/
protected function checkPauseInArbeitszeit($start, $end) {
if ($this->zeit->start > $start || $this->zeit->ende < $end) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Pause außerhalb der Arbeitszeit');
}
}
/**
* @param string $start "Y-m-d H:i:s" formatted datetime
* @param string $end "Y-m-d H:i:s" formatted datetime
* @return void
*
* @throws Exception
*/
protected function checkPauseValid($start, $end) {
if ($start > $end) {
throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Fehlerhafte Pausenzeiten');
}
}
/**
* @param string $start datetime
* @param string $end datetime
* @return void
*/
protected function savePause($start, $end) {
//Eintrag Arbeit bis zur Pause
$ende = $this->zeit->ende;
$this->zeit->ende = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
if (!$this->zeit->save()) {
$this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $this->zeit->errormsg);
}
//Eintrag für die Pause
$pause = new zeitaufzeichnung();
$pause->new = true;
$pause->insertamum = date('Y-m-d H:i:s');
$pause->updateamum = date('Y-m-d H:i:s');
$pause->updatevon = $this->user;
$pause->insertvon = $this->user;
$pause->uid = $this->user;
$pause->aktivitaet_kurzbz = 'Pause';
$pause->homeoffice = $this->zeit->homeoffice;
$pause->start = $this->datum->formatDatum($start, 'Y-m-d H:i:s');
$pause->ende = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$pause->beschreibung = '';
if (!$pause->save()) {
$this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $pause->errormsg);
}
// Eintrag Arbeit ab der Pause
if ($this->zeit->new == false) {
$this->zeit->new = true;
$this->zeit->insertamum = date('Y-m-d H:i:s');
$this->zeit->insertvon = $this->user;
}
$this->zeit->start = $this->datum->formatDatum($end, 'Y-m-d H:i:s');
$this->zeit->ende = $ende;
}
/** /**
* @return void * @return void
* *