From 0cf782601c7f851a1cad76702ae06004d628af4c Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 8 Sep 2021 15:40:17 +0200 Subject: [PATCH 01/29] =?UTF-8?q?Dropdown=20f=C3=BCr=20MA-Ansicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 76 +++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 2a7939e17..0fd1f8e91 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1,5 +1,5 @@ * Gerald Raab * Alexei Karpenko + * Manuela Thamer */ require_once('../../../config/cis.config.inc.php'); require_once('../../../include/functions.inc.php'); @@ -55,26 +56,64 @@ if (!$db = new basis_db()) $user = get_uid(); + $passuid = false; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); -//Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung +$mas = new mitarbeiter(); +$mas->getUntergebene($user, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mas->untergebene; + +//Wenn User Administrator ist und UID uebergeben wurde (bzw. Vorgesetzter ist und die übergebene UID von einem MA) dann die Zeitaufzeichnung //des uebergebenen Users anzeigen if(isset($_GET['uid'])) { - if($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid')) + if($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr)) ) { $user = $_GET['uid']; + //$username = $_GET['uid']; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); $passuid = true; + // echo "Adminview"; + // + // if(in_array($user, $untergebenen_arr)) + // { + // echo "
" . $user . " ist ein/e Mitarbeiterin"; + // } + // echo "
"; } + // if($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid')) + // { + // $user = $_GET['uid']; + // $rechte = new benutzerberechtigung(); + // $rechte->getBerechtigungen($user); + // $passuid = true; + // echo "Adminview"; + // + // // if(in_array($_GET['uid'], $untergebenen_arr)) + // // { + // // echo "
" . $_GET['uid'] . " ist ein/e Mitarbeiterin"; + // // } + // // echo "
"; + // } + // elseif(($rechte->isBerechtigt('mitarbeiter')) && in_array($_GET['uid'], $untergebenen_arr)) + // { + // echo "Vorgesetztenview"; + // $user = $_GET['uid']; + // $rechte = new benutzerberechtigung(); + // $rechte->getBerechtigungen($user); + // $passuid = true; + // } else { die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); } } + + if($rechte->isBerechtigt('addon/casetimeGenerateXLS')) $export_xls = 'true'; else { @@ -516,7 +555,7 @@ echo ' } return true; } - + function resetProjekt() { $("#projekt").val(""); @@ -1130,8 +1169,27 @@ if($projekt->getProjekteMitarbeiter($user, true)) } echo '

'.$p->t("urlaubstool/meineZeitsperren").'

'; echo $p->t("zeitaufzeichnung/supportAnfragen"); - echo ' - + + //Dropdown timesheets Mitarbeiter + if ($untergebenen_arr) + { + $ben = new benutzer(); + echo " +

+ + "; + } + echo ' '; echo ' @@ -1499,6 +1557,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) echo ''; echo '
'; echo ''; + echo '
'; echo '

'.($alle===true?$p->t('zeitaufzeichnung/alleEintraege'):$p->t('zeitaufzeichnung/xTageAnsicht', array($angezeigte_tage))).'

'; if ($alle===true) @@ -1525,6 +1584,9 @@ if($projekt->getProjekteMitarbeiter($user, true)) //var_dump($dr->result); + + + if(count($za->result)>0) { //Uebersichtstabelle @@ -1669,8 +1731,6 @@ if($projekt->getProjekteMitarbeiter($user, true)) // echo ''.$datum->formatDatum($row->datum,'D d.m.Y').' '; //} - - } // Nach jeder Woche eine Summenzeile einfuegen und eine neue Tabelle beginnen $datumwoche = $datum_obj->formatDatum($row->datum, 'W'); From 87ba21cf950a62213b2645aa4585385a0f45a627 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 9 Sep 2021 10:08:41 +0200 Subject: [PATCH 02/29] Entfernen von Buttons und Links in der Vorgesetzten- und Adminview --- cis/private/tools/zeitaufzeichnung.php | 1227 ++++++++++++------------ 1 file changed, 605 insertions(+), 622 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 0fd1f8e91..b2fad730b 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -46,17 +46,16 @@ require_once('../../../include/studiensemester.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); $sprache = getSprache(); -$p=new phrasen($sprache); +$p = new phrasen($sprache); $sprache_obj = new sprache(); $sprache_obj->load($sprache); -$sprache_index=$sprache_obj->index; +$sprache_index = $sprache_obj->index; if (!$db = new basis_db()) die($p->t("global/fehlerBeimOeffnenDerDatenbankverbindung")); $user = get_uid(); - $passuid = false; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); @@ -65,55 +64,27 @@ $mas = new mitarbeiter(); $mas->getUntergebene($user, true); $untergebenen_arr = array(); $untergebenen_arr = $mas->untergebene; +$adminView = false; -//Wenn User Administrator ist und UID uebergeben wurde (bzw. Vorgesetzter ist und die übergebene UID von einem MA) dann die Zeitaufzeichnung -//des uebergebenen Users anzeigen -if(isset($_GET['uid'])) +//Wenn User Administrator (bzw Vorgesetzter mit UID von MA) ist und UID uebergeben wurde +//dann die Zeitaufzeichnung des uebergebenen Users anzeigen +if (isset($_GET['uid'])) { - if($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr)) ) + if ($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid') || + (in_array($_GET['uid'], $untergebenen_arr))) { $user = $_GET['uid']; - //$username = $_GET['uid']; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); $passuid = true; - // echo "Adminview"; - // - // if(in_array($user, $untergebenen_arr)) - // { - // echo "
" . $user . " ist ein/e Mitarbeiterin"; - // } - // echo "
"; + $adminView = true; } - // if($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid')) - // { - // $user = $_GET['uid']; - // $rechte = new benutzerberechtigung(); - // $rechte->getBerechtigungen($user); - // $passuid = true; - // echo "Adminview"; - // - // // if(in_array($_GET['uid'], $untergebenen_arr)) - // // { - // // echo "
" . $_GET['uid'] . " ist ein/e Mitarbeiterin"; - // // } - // // echo "
"; - // } - // elseif(($rechte->isBerechtigt('mitarbeiter')) && in_array($_GET['uid'], $untergebenen_arr)) - // { - // echo "Vorgesetztenview"; - // $user = $_GET['uid']; - // $rechte = new benutzerberechtigung(); - // $rechte->getBerechtigungen($user); - // $passuid = true; - // } else { die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); } } - if($rechte->isBerechtigt('addon/casetimeGenerateXLS')) $export_xls = 'true'; else { @@ -1155,166 +1126,194 @@ if($projekt->getProjekteMitarbeiter($user, true)) echo " | ".$p->t("zeitaufzeichnung/projektexport").""; echo " "; - if ($p->t("dms_link/handbuchZeitaufzeichnung")!='') - { - // An der FHTW wird ins Moodle verlinkt - if (CAMPUS_NAME == 'FH Technikum Wien') - echo '

'.$p->t("zeitaufzeichnung/handbuchZeitaufzeichnung").'

'; - else - echo '

'.$p->t("zeitaufzeichnung/handbuchZeitaufzeichnung").'

'; - } - if ($p->t("dms_link/fiktiveNormalarbeitszeit")!='') - { - echo '

'.$p->t("zeitaufzeichnung/fiktiveNormalarbeitszeit").'

'; - } - echo '

'.$p->t("urlaubstool/meineZeitsperren").'

'; - echo $p->t("zeitaufzeichnung/supportAnfragen"); - - //Dropdown timesheets Mitarbeiter - if ($untergebenen_arr) - { - $ben = new benutzer(); - echo " -

- - "; - } - echo ' - '; - echo ' - - '; - - echo ''; + echo '\n"; - echo " \n"; - echo " \n"; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) + echo ''.$p->t("global/bearbeiten").''; + } + echo "\n"; + echo " \n"; + echo " \n"; if (($tagesbeginn=='' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s')) > $datum->mktime_fromtimestamp($datum->formatDatum($row->start, $format='Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe') $tagesbeginn = $row->start; From 3f90efaed2be5155fd6aab62e0bf8e515a3dc583 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 19 Oct 2021 14:54:39 +0200 Subject: [PATCH 08/29] Hinweis: Pause fehlt bei AllIn eingetragen --- cis/private/tools/zeitaufzeichnung.php | 32 ++++++++++++++++++-------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index fcf3dd811..724323f4c 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -762,7 +762,6 @@ echo ' else { $("#homeofficeBlock").hide(); - } } }); @@ -932,12 +931,8 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $verwendung->getVerwendungDatum($data[0],$vonCSV); foreach ($verwendung->result as $v) - // echo "homeoffice für Tag " . $vonCSV . " ". $v->homeoffice . " " . $v->bisverwendung_id . "
"; - if ($v->homeoffice) { - - // echo "homeoffice erlaubt
"; $zeit->homeoffice = true; } else @@ -1800,10 +1795,29 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $tagessaldo = $tagessaldo-$pausesumme; // fehlende Pausen berechnen $pausefehlt_str = ''; - if ($tagessaldo > 19800 && $pausesumme < 1800) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; - elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + + //Prüfung auf azgrelevant + $azgrelevant = false; + $verwendung = new bisverwendung(); + + $verwendung->getVerwendungDatum($user, $datum->formatDatum($tag, 'Y-m-d')); + $azgrelevant = true; + foreach ($verwendung->result as $v) + { + if ($v->azgrelevant) + { + $azgrelevant = false; + } + } + + if ($tagessaldo > 19800 && $pausesumme < 1800 && !$azgrelevant) + $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + elseif ($tagessaldo > 19800 && $pausesumme < 1800 && $azgrelevant) + $pausefehlt_str = '-- Hinweis: Pause fehlt --'; + elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000 && !$azgrelevant) + $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000 && $azgrelevant) + $pausefehlt_str = '-- Hinweis: Pause fehlt --'; $tagessaldo = date('H:i', ($tagessaldo)); From 4fb4b72b26c0cee617c9a856c0d36932a47c3c63 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 22 Oct 2021 10:39:48 +0200 Subject: [PATCH 09/29] =?UTF-8?q?Hinweis-=20und=20Warnsymbol=20f=C3=BCr=20?= =?UTF-8?q?Pause=20fehlt=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 1d4bb418d..cfa2105cf 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1846,6 +1846,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $verwendung->getVerwendungDatum($user, $datum->formatDatum($tag, 'Y-m-d')); $azgrelevant = true; + $linkExclamation = APP_ROOT. 'skin/images/exclamation.png'; + $linkInformation = APP_ROOT. 'skin/images/information.png'; foreach ($verwendung->result as $v) { if ($v->azgrelevant) @@ -1855,14 +1857,13 @@ if ($projekt->getProjekteMitarbeiter($user, true)) } if ($tagessaldo > 19800 && $pausesumme < 1800 && !$azgrelevant) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + $pausefehlt_str = ' -- Pause fehlt oder zu kurz --'; elseif ($tagessaldo > 19800 && $pausesumme < 1800 && $azgrelevant) - $pausefehlt_str = '-- Hinweis: Pause fehlt --'; + $pausefehlt_str = ' -- Pause fehlt --'; elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000 && !$azgrelevant) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + $pausefehlt_str = ' -- Pause fehlt oder zu kurz --'; elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000 && $azgrelevant) - $pausefehlt_str = '-- Hinweis: Pause fehlt --'; - + $pausefehlt_str = ' -- Pause fehlt --'; $tagessaldo = date('H:i', ($tagessaldo)); $colspan = ($za_simple)?6:8; From 4e9eb12a71dccafce527114c6759bffe630cd29b Mon Sep 17 00:00:00 2001 From: ma0068 Date: Sat, 23 Oct 2021 10:40:05 +0200 Subject: [PATCH 10/29] =?UTF-8?q?Detailsicht:=20Parameteruebergabe=20uid?= =?UTF-8?q?=20f=C3=BCr=20Projekt-=20und=20Projekt=C3=BCbersichtexport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 20 +++++++++++-------- .../tools/zeitaufzeichnung_projektliste.php | 11 +++++++--- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index cfa2105cf..10d2efdd7 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -182,7 +182,7 @@ if(isset($_POST['export'])) } //CSV export für Übersicht zugeteilter Projekte - Konflikt mit normalen HTML headern deshalb weiter vorne -if(isset($_POST['projektübersichtexport'])) +if(isset($_GET['projektübersichtexport'])) { exportProjectOverviewAsCSV($user, ','); } @@ -1275,13 +1275,19 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo "
'; - echo ''; - if (isset($_GET['projektexport'])) - { - $projektexpurl = dirname($_SERVER["PHP_SELF"]) .'/zeitaufzeichnung_projektliste.php'; - $aktjahr = intval(date("Y")); - $aktmonat = intval(date("m")) - 1; - $jahreanz = 3; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if ($passuid) - echo ''; - echo ''; - echo ''; - echo ''; - } - - //Formular - echo '
'; - -/* echo '

'.$p->t('zeitaufzeichnung/projektexport').''.$p->t('zeitaufzeichnung/monat').' '.$p->t('zeitaufzeichnung/jahr').'

- - +
'; - echo '';*/ - if (isset($_GET['csvimport'])) - { - echo ''; - echo ''; - echo ''; - echo ''; - } + if ($p->t("dms_link/handbuchZeitaufzeichnung")!='') + { + // An der FHTW wird ins Moodle verlinkt + if (CAMPUS_NAME == 'FH Technikum Wien') + echo '

'.$p->t("zeitaufzeichnung/handbuchZeitaufzeichnung").'

'; else - echo ''; + echo '

'.$p->t("zeitaufzeichnung/handbuchZeitaufzeichnung").'

'; + } + if ($p->t("dms_link/fiktiveNormalarbeitszeit")!='') + { + echo '

'.$p->t("zeitaufzeichnung/fiktiveNormalarbeitszeit").'

'; + } + echo '

'.$p->t("urlaubstool/meineZeitsperren").'

'; + echo $p->t("zeitaufzeichnung/supportAnfragen"); - if (isset($_GET['csvexport'])) + //Dropdown timesheets Mitarbeiter + if ($untergebenen_arr) + { + $ben = new benutzer(); + echo " +

+ + '; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - - if (isset($_GET['projektübersichtexport'])) - { - - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - - } - - //Aktivitaet - echo ''; - echo ''; - - - if($za_simple >= 0) + echo ""; + echo ""; + } + echo ' +

CSV-Import
Informationen zum Format der CSV-Datei s. Leitfaden Arbeitszeitaufzeichnung


CSV-Export'.$p->t('zeitaufzeichnung/startdatum').' '.$p->t('zeitaufzeichnung/enddatum').'


CSV-Export

'.$p->t("zeitaufzeichnung/aktivitaet").''; - //if ($za_simple == 1) - $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; - //else - // $qry = "SELECT * FROM fue.tbl_aktivitaet where sort != 5 or sort is null ORDER by sort,beschreibung"; - if($result = $db->db_query($qry)) - { - echo ''; } - echo '
'; + echo ' + + '; - if (!$za_simple) - { - echo ''; - } - echo ''; - if (!$za_simple) - { - echo ' - '; - } - echo ' - - - - - '; + if (!$za_simple) + { + echo ''; + } + echo ''; + if (!$za_simple) + { + echo ' + '; + } + echo ' + + + + + '; } /** From 072d1437e6a0ad7512bf6f89204933e3436b5510 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 27 Sep 2021 13:31:01 +0200 Subject: [PATCH 03/29] Bugfix: nun werden nach jedem Fehler die Projektphasen neu geladen --- cis/private/tools/zeitaufzeichnung.php | 44 +++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 824c0ba3c..626150dac 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -853,11 +853,11 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) if($data[0] == $user){ if(!empty($data[6]) && !in_array($data[6], $project_kurzbz_array) && empty($data[7])) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$data[6].')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$data[6].')
'; } elseif(!empty($data[7]) && !in_array($data[7], $projectphasen_kurzbz_array)) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$data[7].')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$data[7].')
'; } else { @@ -875,24 +875,24 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) if (!isset($data[8])) $data[8] = NULL; if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
'; elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.
'; elseif ($dateVonCSV!=$dateBisCSV && $data[1]!="DienstreiseMT") { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; } elseif (empty($data[7]) && !empty($data[6]) && !$projects_of_user->checkProjectInCorrectTime($data[6], $data[2], $data[3])) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; } elseif (!empty($data[7]) && !$projektph_of_user ->checkProjectphaseInCorrectTime($data[7], $data[2], $data[3])) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; } elseif (checkVals($data[5],$data[6],$data[7],$data[8])) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')
'; } else { @@ -982,7 +982,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $pause->homeoffice = $homeoffice; if(!$pause->save()) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; } } } @@ -999,7 +999,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) */ if(!$zeit->save()) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'('.$zeit->start.')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'('.$zeit->start.')
'; } else $anzahl++; @@ -1012,7 +1012,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } else if (strpos($data[0],'#') === false) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert ('.$data[0].')
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert ('.$data[0].')
'; } } if($anzahl>0) @@ -1030,7 +1030,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } } else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum) - echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; else if (isset($_POST['save']) || isset($_POST['edit'])) { @@ -1066,12 +1066,12 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.
'; $saveerror = 1; } elseif ($datum->formatDatum($von, $format='Y-m-d') > $limitdatum || $datum->formatDatum($bis, $format='Y-m-d') > $limitdatum) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs oder Enddatum zu weit in der Zukunft liegt.
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs oder Enddatum zu weit in der Zukunft liegt.
'; $saveerror = 1; } elseif (!$projectphase->checkProjectphaseInCorrectTime($projektphase_id, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) @@ -1083,7 +1083,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT") { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; $saveerror = 1; } elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit']))) @@ -1095,13 +1095,13 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) // checken ob Pause innerhalb der Arbeitszeit ist if ($zeit->start > $p_start || $zeit->ende < $p_end) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Pause außerhalb der Arbeitszeit
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Pause außerhalb der Arbeitszeit
'; $saveerror = 1; } elseif ($p_start > $p_end) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Pausenzeiten
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Pausenzeiten
'; $saveerror = 1; } else @@ -1110,7 +1110,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->ende = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); if(!$zeit->save()) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; $saveerror = 1; } //Eintrag für die Pause @@ -1128,7 +1128,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $pause->beschreibung = ''; if(!$pause->save()) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; $saveerror = 1; } // Eintrag Arbeit ab der Pause @@ -1143,7 +1143,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); if(!$zeit->save()) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; $saveerror = 1; } } @@ -1152,7 +1152,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { if(!$zeit->save()) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.''; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.''; $saveerror = 1; } } @@ -1189,7 +1189,7 @@ if(isset($_GET['type']) && $_GET['type']=='delete') { if ($zeit->start < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; else { if($zeit->uid==$user) From ddfee4499a760cd9d1aba1ba1b31db16b5581de1 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 27 Sep 2021 13:35:13 +0200 Subject: [PATCH 04/29] correct typo --- cis/private/tools/zeitaufzeichnung.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 626150dac..85156b1a0 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1,5 +1,5 @@ Date: Thu, 14 Oct 2021 15:39:17 +0200 Subject: [PATCH 05/29] Zeiterfassung: keine Bis-Buchungen 00:00:00 bzw. 24:00:00 erlaubt --- cis/private/tools/zeitaufzeichnung.php | 27 +++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index fcf3dd811..92f32d114 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -861,10 +861,11 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } else { - $vonCSV = $datum->formatDatum($data[2], $format='Y-m-d'); - $bisCSV = $datum->formatDatum($data[3], $format='Y-m-d'); + $vonCSV = $datum->formatDatum($data[2], $format = 'Y-m-d'); + $bisCSV = $datum->formatDatum($data[3], $format = 'Y-m-d'); $dateVonCSV = new DateTime($vonCSV); $dateBisCSV = new DateTime($bisCSV); + $extractHourBis = $datum->formatDatum($data[3], $format = 'H:i:s'); if (!isset($data[5])) $data[5] = NULL; @@ -882,6 +883,10 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; } + elseif ($extractHourBis == '00:00:00') + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!
'; + } elseif (empty($data[7]) && !empty($data[6]) && !$projects_of_user->checkProjectInCorrectTime($data[6], $data[2], $data[3])) { echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; @@ -932,18 +937,13 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $verwendung->getVerwendungDatum($data[0],$vonCSV); foreach ($verwendung->result as $v) - // echo "homeoffice für Tag " . $vonCSV . " ". $v->homeoffice . " " . $v->bisverwendung_id . "
"; - if ($v->homeoffice) { - - // echo "homeoffice erlaubt
"; $zeit->homeoffice = true; } else { echo ''.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
'; - $zeit->homeoffice = false; } } @@ -1050,8 +1050,8 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->uid = $user; $zeit->aktivitaet_kurzbz = $aktivitaet_kurzbz; - $zeit->start = $datum->formatDatum($von, $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); + $zeit->start = $datum->formatDatum($von, $format = 'Y-m-d H:i:s'); + $zeit->ende = $datum->formatDatum($bis, $format = 'Y-m-d H:i:s'); $zeit->beschreibung = $beschreibung; $zeit->oe_kurzbz_1 = $oe_kurzbz_1; $zeit->oe_kurzbz_2 = $oe_kurzbz_2; @@ -1063,6 +1063,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->service_id = $service_id; $zeit->kunde_uid = $kunde_uid; $saveerror = 0; + $extractTimeBis = $datum->formatDatum($bis, $format = 'H:i:s'); if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) { @@ -1081,11 +1082,16 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $saveerror = 1; } - elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT") + elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT" && $extractTimeBis != '00:00:00') { echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; $saveerror = 1; } + elseif ($extractTimeBis == '00:00:00') + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!
'; + $saveerror = 1; + } elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit']))) { @@ -1765,7 +1771,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) } else $zeitsperre_text = ''; - //var_dump($zs->result); if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; From aa3a52f201ad0ead1dbf4f561a99d45fb148fade Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 15 Oct 2021 11:36:15 +0200 Subject: [PATCH 06/29] =?UTF-8?q?Aufnahme=20PhasenReset=20f=C3=BCr=20neue?= =?UTF-8?q?=20Validierung=20Zeitabgrenzung=2000:00:00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index b938b3cb1..8171262b4 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1089,7 +1089,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } elseif ($extractTimeBis == '00:00:00') { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!
'; + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!
'; $saveerror = 1; } elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit']))) From b6b347ff8b0274568cf823b97e0499977f765817 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 18 Oct 2021 11:10:13 +0200 Subject: [PATCH 07/29] Merge Detailsicht Vorgesetzte --- cis/private/tools/zeitaufzeichnung.php | 99 ++++++++++++++++++-------- 1 file changed, 71 insertions(+), 28 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index fcf3dd811..e4cfbf892 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -61,16 +61,24 @@ $passuid = false; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); +$mas = new mitarbeiter(); +$mas->getUntergebene($user, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mas->untergebene; +$adminView = false; + //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung //des uebergebenen Users anzeigen if(isset($_GET['uid'])) { - if($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid')) + if ($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid') || + (in_array($_GET['uid'], $untergebenen_arr))) { $user = $_GET['uid']; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); $passuid = true; + $adminView = true; } else { @@ -1287,13 +1295,33 @@ if ($projekt->getProjekteMitarbeiter($user, true)) } echo '

'.$p->t("urlaubstool/meineZeitsperren").'

'; echo $p->t("zeitaufzeichnung/supportAnfragen"); - echo ' - -
'; + echo ''; + if (isset($_GET['projektexport'])) + { + $projektexpurl = dirname($_SERVER["PHP_SELF"]) .'/zeitaufzeichnung_projektliste.php'; + $aktjahr = intval(date("Y")); + $aktmonat = intval(date("m")) - 1; + $jahreanz = 3; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if ($passuid) + echo ''; + echo ''; + echo ''; + echo ''; + } - //OE_KURZBZ_1 - echo ' - '; + echo '

'.$p->t('zeitaufzeichnung/projektexport').''.$p->t('zeitaufzeichnung/monat').' '.$p->t('zeitaufzeichnung/jahr').'

'.$p->t("zeitaufzeichnung/organisationseinheiten").' + + '; + if (!$adminView) + { + echo '
'; + } + echo ''; + echo '
'; - echo '
'; + echo '';*/ + if (isset($_GET['csvimport'])) + { + echo ''; + echo ''; + echo ''; + echo ''; + } + else + echo ''; + + if (isset($_GET['csvexport'])) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + if (isset($_GET['projektübersichtexport'])) + { + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + } + + //Aktivitaet + echo ''; + echo ''; + + + if($za_simple >= 0) + { + $oestyle = ''; + if($za_simple == 0) + $oestyle = 'style="width:200px;"'; + + //OE_KURZBZ_1 + echo ' + '; + echo ''; } + echo ''; + } - //Projekte werden nicht angezeigt wenn es keine gibt - if($anzprojekte > 0) + //Projekte werden nicht angezeigt wenn es keine gibt + if($anzprojekte > 0) + { + //Projekt + echo ' + + - - '; + echo ''; } + echo ''; + } - if ($za_simple == 0) + if ($za_simple == 0) + { + // Service + echo ' + + - - - '; - - // person für Kundenvoransicht laden - $kunde_name = ''; - if($kunde_uid != '') - { - $user_kunde = new benutzer(); - - if($user_kunde->load($kunde_uid)) - $kunde_name=$user_kunde->vorname.' '.$user_kunde->nachname; - } - echo ' - - - + echo ''; + } + echo ''; - echo ''; - } - //Start/Ende - $von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); - $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); - $diff = $bis_ts - $von_ts; + // person für Kundenvoransicht laden + $kunde_name = ''; + if($kunde_uid != '') + { + $user_kunde = new benutzer(); + + if($user_kunde->load($kunde_uid)) + $kunde_name=$user_kunde->vorname.' '.$user_kunde->nachname; + } echo ' - - + + '; + echo ''; + } + + //Start/Ende + $von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); + $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); + $diff = $bis_ts - $von_ts; + echo ' + + + '; + if ($za_simple == 0 || $anzprojekte > 0) + { + echo ' + '; - if ($za_simple == 0 || $anzprojekte > 0) - { - echo ' - '; + } + echo ' + + '; + echo ' + + + + + '; -   + - - min. - -   - - '; - } - else - { - echo ''; - } - echo ' - - '; - echo ' - - - - - '; + if (!$adminView) + { //Beschreibung echo ''; echo ''; else { @@ -1514,91 +1488,93 @@ if($projekt->getProjekteMitarbeiter($user, true)) echo '  '; echo ''; } + } echo '

CSV-Import
Informationen zum Format der CSV-Datei s. Leitfaden Arbeitszeitaufzeichnung


CSV-Export'.$p->t('zeitaufzeichnung/startdatum').' '.$p->t('zeitaufzeichnung/enddatum').'


CSV-Export

'.$p->t("zeitaufzeichnung/aktivitaet").''; + //if ($za_simple == 1) + $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; + //else + // $qry = "SELECT * FROM fue.tbl_aktivitaet where sort != 5 or sort is null ORDER by sort,beschreibung"; + if($result = $db->db_query($qry)) + { + echo ''; + } + echo '
'.$p->t("zeitaufzeichnung/organisationseinheiten").'     '; + if($za_simple == 0) + { + //OE_KURZBZ_2 + echo '     '; - if($za_simple == 0) - { - //OE_KURZBZ_2 - echo ''; - } - echo '
'.$p->t("zeitaufzeichnung/projekt").'
'.$p->t("zeitaufzeichnung/projekt").''; + + //Projektphase + $showprojphases = isset($projektphasen) && is_array($projektphasen) && count($projektphasen) > 0 && $projektfound; + $hiddentext = $showprojphases ? "" : " style='display:none'"; + + echo + '    '. + $p->t("zeitaufzeichnung/projektphase").' + '; - - //Projektphase - $showprojphases = isset($projektphasen) && is_array($projektphasen) && count($projektphasen) > 0 && $projektfound; - $hiddentext = $showprojphases ? "" : " style='display:none'"; - - echo - '    '. - $p->t("zeitaufzeichnung/projektphase").' - '; - } - echo '
'.$p->t('zeitaufzeichnung/service').'
'.$p->t('zeitaufzeichnung/service').'
'.$p->t("zeitaufzeichnung/kunde").' '.$p->t("zeitaufzeichnung/oderKartennummerOptional").' -
 
'.$p->t("global/von").' - '.$p->t("global/bis").' - - + '.$p->t("zeitaufzeichnung/kunde").' '.$p->t("zeitaufzeichnung/oderKartennummerOptional").' +
 
'.$p->t("global/von").' - '.$p->t("global/bis").' + + + +   + + +   + + + min. + +   + -   - + } + else + { + echo ' -  + + +
  + + '.$p->t("zeitaufzeichnung/pauseEinfuegen").' - + +
 -  - - -
  - - '.$p->t("zeitaufzeichnung/pauseEinfuegen").' - - -
'.$p->t("global/beschreibung").'
'; //SpeichernButton - if($zeitaufzeichnung_id=='') + if($zeitaufzeichnung_id == '') echo '
'; + echo '


'; - echo '


'; - echo '
'; + // Summen Lehre anzeigen + $bv = new bisverwendung(); + $bv->getLastAktVerwendung($user); + $lehre_inkludiert = $bv->inkludierte_lehre; + if (!$lehre_inkludiert) + $lehre_inkludiert = 0; - // Summen Lehre anzeigen - $bv = new bisverwendung(); - $bv->getLastAktVerwendung($user); - $lehre_inkludiert = $bv->inkludierte_lehre; - if (!$lehre_inkludiert) - $lehre_inkludiert = 0; - - $stsem = new studiensemester(); - $sem_akt = $stsem->getakt(); - $lehre = new zeitaufzeichnung(); - $l_arr = $lehre->getLehreForUser($user, $sem_akt); - if ($l_arr["LehreAuftraege"]>0 || $l_arr["Lehre"] > 0 || $l_arr["LehreExtern"] > 0) + $stsem = new studiensemester(); + $sem_akt = $stsem->getakt(); + $lehre = new zeitaufzeichnung(); + $l_arr = $lehre->getLehreForUser($user, $sem_akt); + if ($l_arr["LehreAuftraege"]>0 || $l_arr["Lehre"] > 0 || $l_arr["LehreExtern"] > 0) + { + if ($lehre_inkludiert == -1) { - if ($lehre_inkludiert == -1) - { - $l_extern_soll = 0; - $lehre_inkludiert = $l_arr["LehreAuftraege"]; - } - else - $l_extern_soll = $l_arr["LehreAuftraege"]-$lehre_inkludiert; - $l_extern_soll_norm = $l_extern_soll/4*3; - $lehre_inkludiert_norm = $lehre_inkludiert/4*3; - echo ''; - echo ''; - echo ''; - echo ''; - if ($lehre_inkludiert > 0 || $l_arr["Lehre"] > 0) - echo ''; - if ($l_extern_soll > 0 || $l_arr["LehreExtern"] > 0) - echo ''; - - echo '

Übersicht Lehre '.$sem_akt.'

(in Stunden)
beauftragt (LE)gebucht
Lehre:'.$lehre_inkludiert_norm.' ('.$lehre_inkludiert.')'.$l_arr["Lehre"].'
LehreExtern:'.$l_extern_soll_norm.' ('.$l_extern_soll.')'.$l_arr["LehreExtern"].'
'; + $l_extern_soll = 0; + $lehre_inkludiert = $l_arr["LehreAuftraege"]; } - - echo '
'; - echo ''; - - echo '
'; - echo '

'.($alle===true?$p->t('zeitaufzeichnung/alleEintraege'):$p->t('zeitaufzeichnung/xTageAnsicht', array($angezeigte_tage))).'

'; - if ($alle===true) - echo ''; else - echo ''; - //echo ''; + $l_extern_soll = $l_arr["LehreAuftraege"]-$lehre_inkludiert; + $l_extern_soll_norm = $l_extern_soll/4*3; + $lehre_inkludiert_norm = $lehre_inkludiert/4*3; + echo ''; + echo ''; + echo ''; + echo ''; + if ($lehre_inkludiert > 0 || $l_arr["Lehre"] > 0) + echo ''; + if ($l_extern_soll > 0 || $l_arr["LehreExtern"] > 0) + echo ''; - $za = new zeitaufzeichnung(); - if(isset($_GET['filter'])) - $za->getListeProjekt($_GET['filter']); - else - { - if ($alle==true) - $za->getListeUserFull($user, ''); - else - $za->getListeUserFull($user, $angezeigte_tage); - } + echo '

Übersicht Lehre '.$sem_akt.'

(in Stunden)
beauftragt (LE)gebucht
Lehre:'.$lehre_inkludiert_norm.' ('.$lehre_inkludiert.')'.$l_arr["Lehre"].'
LehreExtern:'.$l_extern_soll_norm.' ('.$l_extern_soll.')'.$l_arr["LehreExtern"].'
'; + } - $summe=0; - $dr = new zeitaufzeichnung(); - $dr->getDienstreisenUser($user, 180); - $dr_arr = $dr->result; + echo '
'; + echo ''; - //var_dump($dr->result); + echo '
'; + echo '

'.($alle===true?$p->t('zeitaufzeichnung/alleEintraege'):$p->t('zeitaufzeichnung/xTageAnsicht', array($angezeigte_tage))).'

'; + if ($alle===true) + echo ''; + else + echo ''; + //echo ''; + $za = new zeitaufzeichnung(); + if(isset($_GET['filter'])) + $za->getListeProjekt($_GET['filter']); + else + { + if ($alle==true) + $za->getListeUserFull($user, ''); + else + $za->getListeUserFull($user, $angezeigte_tage); + } + $summe=0; + $dr = new zeitaufzeichnung(); + $dr->getDienstreisenUser($user, 180); + $dr_arr = $dr->result; + //var_dump($dr->result); - if(count($za->result)>0) - { - //Uebersichtstabelle - $woche=date('W'); - $colspan=($za_simple)?12:14; - echo ' - + if(count($za->result)>0) + { + //Uebersichtstabelle + $woche=date('W'); + $colspan=($za_simple)?12:14; + echo ' +
- - - '; - printTableHeadings($fieldheadings, $za_simple); + + + '; + printTableHeadings($fieldheadings, $za_simple); $tag=null; @@ -1618,196 +1594,196 @@ if($projekt->getProjekteMitarbeiter($user, true)) $pflichtpause = false; - foreach($za->result as $row) + foreach($za->result as $row) + { + $datumtag = $datum_obj->formatDatum($row->datum, 'Y-m-d'); + + // Nach jedem Tag eine Summenzeile einfuegen + if(is_null($tag)) + $tag = $datumtag; + if($tag!=$datumtag) { - $datumtag = $datum_obj->formatDatum($row->datum, 'Y-m-d'); - // Nach jedem Tag eine Summenzeile einfuegen - if(is_null($tag)) - $tag = $datumtag; - if($tag!=$datumtag) + //if ($row->uid) + //{ + if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') + $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; + else + $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; + + // zeitsperren anzeigen + if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) { - - //if ($row->uid) - //{ - if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') - $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; - else - $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; - - // zeitsperren anzeigen - if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) - { - $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; - $style = 'style="background-color:#cccccc; font-size: 8pt;"'; - } - else - $zeitsperre_text = ''; - //var_dump($zs->result); - if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) - $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; - - list($h1, $m1) = explode(':', $pausesumme); - $pausesumme = $h1*3600+$m1*60; - $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; - foreach($extlehrearr as $el) - { - if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) - $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); - } - list($h2, $m2) = explode(':', $elsumme); - $elsumme = $h2*3600+$m2*60; - if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') - { - $pausesumme = $pausesumme; - } - else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $tagessaldo-18000; - } - else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $pausesumme+1800; - } - - if ($elsumme > 0){ - $pausesumme = $pausesumme + $elsumme; - $pflichtpause = true; - } - - $tagessaldo = $tagessaldo-$pausesumme; - // fehlende Pausen berechnen - $pausefehlt_str = ''; - if ($tagessaldo > 19800 && $pausesumme < 1800) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; - elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) - $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; - - $tagessaldo = date('H:i', ($tagessaldo)); - $colspan = ($za_simple)?6:8; - echo ' - - - '; - - - - $tag=$datumtag; - $tagessumme='00:00'; - $pausesumme='00:00'; - $elsumme='00:00'; - $ersumme = '00:00'; - $extlehrearr = array(); - $tagesbeginn = ''; - $tagesende = ''; - $pflichtpause = false; - $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); - //} - //else - //{ - // echo ''; - //} - + $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; + $style = 'style="background-color:#cccccc; font-size: 8pt;"'; } - // Nach jeder Woche eine Summenzeile einfuegen und eine neue Tabelle beginnen - $datumwoche = $datum_obj->formatDatum($row->datum, 'W'); - if(is_null($woche)) - $woche = $datumwoche; - if($woche!=$datumwoche) + else + $zeitsperre_text = ''; + //var_dump($zs->result); + if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) + $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; + + list($h1, $m1) = explode(':', $pausesumme); + $pausesumme = $h1*3600+$m1*60; + $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; + foreach($extlehrearr as $el) { - if ($ersumme_woche != '00:00') - $erstr = ' (+ '.$ersumme_woche.')'; - else - { - $erstr = ''; - } - echo ' - - - - - - - - - - - '; - - $colspan=($za_simple)?12:14; - echo ' - - - - - - '; - printTableHeadings($fieldheadings, $za_simple); - - $woche=$datumwoche; - $wochensumme='00:00'; - $tagessumme='00:00'; - $pausesumme='00:00'; - $wochensaldo = '00:00'; - $ersumme = '00:00'; - $ersumme_woche = '00:00'; + if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) + $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); + } + list($h2, $m2) = explode(':', $elsumme); + $elsumme = $h2*3600+$m2*60; + if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') + { + $pausesumme = $pausesumme; + } + else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $tagessaldo-18000; + } + else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $pausesumme+1800; } - // Diestreisen NEU - if (array_key_exists($datumtag, $dr_arr)) + if ($elsumme > 0){ + $pausesumme = $pausesumme + $elsumme; + $pflichtpause = true; + } + + $tagessaldo = $tagessaldo-$pausesumme; + // fehlende Pausen berechnen + $pausefehlt_str = ''; + if ($tagessaldo > 19800 && $pausesumme < 1800) + $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) + $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + + $tagessaldo = date('H:i', ($tagessaldo)); + $colspan = ($za_simple)?6:8; + echo ''; - echo ''; - echo ''; - echo ' + + + '; + + + + $tag=$datumtag; + $tagessumme='00:00'; + $pausesumme='00:00'; + $elsumme='00:00'; + $ersumme = '00:00'; + $extlehrearr = array(); + $tagesbeginn = ''; + $tagesende = ''; + $pflichtpause = false; + $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); + //} + //else + //{ + // echo ''; + //} + + } + // Nach jeder Woche eine Summenzeile einfuegen und eine neue Tabelle beginnen + $datumwoche = $datum_obj->formatDatum($row->datum, 'W'); + if(is_null($woche)) + $woche = $datumwoche; + if($woche!=$datumwoche) + { + if ($ersumme_woche != '00:00') + $erstr = ' (+ '.$ersumme_woche.')'; + else + { + $erstr = ''; + } + echo ' + + + + + + + + + + + '; + + $colspan=($za_simple)?12:14; + echo ' + + + + + + '; + printTableHeadings($fieldheadings, $za_simple); + + $woche=$datumwoche; + $wochensumme='00:00'; + $tagessumme='00:00'; + $pausesumme='00:00'; + $wochensaldo = '00:00'; + $ersumme = '00:00'; + $ersumme_woche = '00:00'; + } + + // Diestreisen NEU + if (array_key_exists($datumtag, $dr_arr)) + { + $colspan=($za_simple)?6:8; + echo ''; + echo ''; + echo ''; + echo '\n"; - echo "\n"; - echo ''; - unset($dr_arr[$datumtag]); - } + echo "\n"; + echo "\n"; + echo ''; + unset($dr_arr[$datumtag]); + } - if ($row->uid) - { + if ($row->uid) + { $wochensumme = $datum_obj->sumZeit($wochensumme, $row->diff); if ($row->aktivitaet_kurzbz=='Pause') { @@ -1855,12 +1831,20 @@ if($projekt->getProjekteMitarbeiter($user, true)) \n"; echo " \n"; echo " \n"; @@ -1871,23 +1855,22 @@ if($projekt->getProjekteMitarbeiter($user, true)) $tagesende = $row->ende; if ($row->aktivitaet_kurzbz == 'LehreExtern') $extlehrearr[] = array("start"=>$row->start, "ende"=>$row->ende, "diff"=>$row->diff); - } - - } - echo ''; - - - if ($alle===false) - { - echo ' - - - - '; } - //echo $p->t("zeitaufzeichnung/gesamtdauer").": ".$db->convert_html_chars($summe); Aukommentiert. Irrelevant + } + echo ''; + + if ($alle===false) + { + echo ' + + + + '; } + + //echo $p->t("zeitaufzeichnung/gesamtdauer").": ".$db->convert_html_chars($summe); Aukommentiert. Irrelevant + } echo '
'.$p->t("eventkalender/kw").' '.$woche.'
'.$p->t("eventkalender/kw").' '.$woche.'
'; - - // Zusaetzlicher span fuer Addon Informationen - - $lang = getSprache(); - if ($lang == 'German') - $langindex = 1; - else - $langindex = 2; - echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; - if ($ersumme != '00:00') - $erstr = ' (+ '.$ersumme.' ER)'; - else - { - $erstr = ''; - } - echo ' - '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
- '.$p->t("zeitaufzeichnung/pause").': -
'.$tagessaldo.$erstr.'
'.date('H:i', ($pausesumme-3600)).'
'; - if ($tag > $sperrdatum) - echo '<-'; - - echo '
'.$datum->formatDatum($row->datum,'D d.m.Y').'
'.$p->t("zeitaufzeichnung/wochensummeArbeitszeit").':'.$wochensaldo.$erstr.'
 
'.$p->t("eventkalender/kw").' '.$datumwoche.'
'; + + // Zusaetzlicher span fuer Addon Informationen + + $lang = getSprache(); + if ($lang == 'German') + $langindex = 1; + else + $langindex = 2; + echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; + if ($ersumme != '00:00') + $erstr = ' (+ '.$ersumme.' ER)'; + else { - $colspan=($za_simple)?6:8; - echo '
'.$p->t('zeitaufzeichnung/dienstreise'); - if (array_key_exists('start', $dr_arr[$datumtag]) && !array_key_exists('ende', $dr_arr[$datumtag])) - echo ' '.$p->t('global/beginn'); - if (array_key_exists('ende', $dr_arr[$datumtag]) && !array_key_exists('start', $dr_arr[$datumtag])) - echo ' '.$p->t('global/ende'); - echo ''; - if (array_key_exists('start', $dr_arr[$datumtag])) - echo $dr_arr[$datumtag]['start']; - echo ''; - if (array_key_exists('ende', $dr_arr[$datumtag])) - echo $dr_arr[$datumtag]['ende']; - echo ''; + $erstr = ''; + } + echo ' + '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
+ '.$p->t("zeitaufzeichnung/pause").': +
'.$tagessaldo.$erstr.'
'.date('H:i', ($pausesumme-3600)).'
'; + if ($tag > $sperrdatum) + echo '<-'; + + echo '
'.$datum->formatDatum($row->datum,'D d.m.Y').'
'.$p->t("zeitaufzeichnung/wochensummeArbeitszeit").':'.$wochensaldo.$erstr.'
 
'.$p->t("eventkalender/kw").' '.$datumwoche.'
'.$p->t('zeitaufzeichnung/dienstreise'); + if (array_key_exists('start', $dr_arr[$datumtag]) && !array_key_exists('ende', $dr_arr[$datumtag])) + echo ' '.$p->t('global/beginn'); + if (array_key_exists('ende', $dr_arr[$datumtag]) && !array_key_exists('start', $dr_arr[$datumtag])) + echo ' '.$p->t('global/ende'); + echo ''; + if (array_key_exists('start', $dr_arr[$datumtag])) + echo $dr_arr[$datumtag]['start']; + echo ''; + if (array_key_exists('ende', $dr_arr[$datumtag])) + echo $dr_arr[$datumtag]['ende']; + echo ''; // if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) // echo ''.$p->t("global/bearbeiten").''; - echo ""; - if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) - echo ''.$p->t("global/loeschen").''; - echo "
"; + if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) + echo ''.$p->t("global/loeschen").''; + echo "
'.$db->convert_html_chars($row->diff).' beschreibung)).'">'.StringCut($db->convert_html_chars($row->beschreibung),20,null,'...').' '; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) - echo ''.$p->t("global/bearbeiten").''; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) + echo ''.$p->t("global/bearbeiten").''; + } echo ""; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) - echo ''.$p->t("global/loeschen").''; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) + echo ''.$p->t("global/loeschen").''; + } echo "
'.$p->t('zeitaufzeichnung/endeXTageAnsicht', array($angezeigte_tage)).'
'.$p->t('zeitaufzeichnung/endeXTageAnsicht', array($angezeigte_tage)).'
'; /* } @@ -1921,22 +1904,22 @@ function printTableHeadings($fieldheadings, $za_simple = false){
'.$fieldheadings['projekt'].' '.$fieldheadings['ap'].' '.$fieldheadings['oe1'].''.$fieldheadings['oe2'].''.$fieldheadings['aktivitaet'].' '.$fieldheadings['service'].''.$fieldheadings['start'].''.$fieldheadings['ende'].''.$fieldheadings['dauer'].''.$fieldheadings['beschreibung'].''.$fieldheadings['aktion'].'
'.$fieldheadings['oe2'].''.$fieldheadings['aktivitaet'].' '.$fieldheadings['service'].''.$fieldheadings['start'].''.$fieldheadings['ende'].''.$fieldheadings['dauer'].''.$fieldheadings['beschreibung'].''.$fieldheadings['aktion'].'
'; + + //Dropdown timesheets Mitarbeiter + if ($untergebenen_arr) + { + $ben = new benutzer(); + echo " +

+ + "; + } + echo '
'; echo ''; + echo ''; + else + { + echo ''; + echo '  '; + echo ''; + } + } + echo '
'; echo ''; + if (isset($_GET['projektexport'])) { $projektexpurl = dirname($_SERVER["PHP_SELF"]) .'/zeitaufzeichnung_projektliste.php'; @@ -1628,23 +1656,30 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; - //Beschreibung - echo ''; - echo ''; - else - { - echo ''; - echo '  '; - echo ''; - } - echo '
'.$p->t("global/beschreibung").'
'; - //SpeichernButton - if($zeitaufzeichnung_id=='') - echo '
'; + if (!$adminView) + { + //Beschreibung + echo '
'.$p->t("global/beschreibung").'
'; + //SpeichernButton + if($zeitaufzeichnung_id == '') + echo '
'; + echo '


'; - echo '


'; + if (!$adminView) + { + echo '
'; + } + echo '
'; // Summen Lehre anzeigen $bv = new bisverwendung(); @@ -1985,14 +2020,22 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '.$db->convert_html_chars($row->diff).' beschreibung)).'">'.StringCut($db->convert_html_chars($row->beschreibung),20,null,'...').' '; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) - echo ''.$p->t("global/bearbeiten").''; - echo ""; - if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) - echo ''.$p->t("global/loeschen").''; - echo "
"; + + if (!$adminView) + { + if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) + echo ''.$p->t("global/loeschen").''; + } + echo "
@@ -1389,13 +1395,11 @@ if ($projekt->getProjekteMitarbeiter($user, true)) if (isset($_GET['projektübersichtexport'])) { - echo ''; echo ''; echo ''; echo ''; echo ''; - } //Aktivitaet @@ -1960,7 +1964,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $ersumme_woche = '00:00'; } - // Diestreisen NEU + // Dienstreisen NEU if (array_key_exists($datumtag, $dr_arr)) { $colspan=($za_simple)?6:8; diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 177f1f8aa..468405a06 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -46,7 +46,12 @@ $sprache_obj = new sprache(); $sprache_obj->load($sprache); $sprache_index = $sprache_obj->index; -$uid = get_uid(); +echo $uid = get_uid(); + +$mitarbeiter = new mitarbeiter(); +$mitarbeiter->getUntergebene($uid, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mitarbeiter->untergebene; //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung //des uebergebenen Users anzeigen @@ -55,7 +60,7 @@ if (isset($_GET['uid'])) $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($uid); - if ($rechte->isBerechtigt('admin')) + if ($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr))) { $uid = $_GET['uid']; } @@ -74,9 +79,9 @@ $year = $_GET['projexpjahr']; $monthtext = $monatsname[$sprache_index][$month - 1]; $username = $benutzer->vorname." ".$benutzer->nachname; -$mitarbeiter = new mitarbeiter(); $mitarbeiter->load($uid); $persnr = $mitarbeiter->personalnummer; +$persnr; $daysinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); $date = new datum(); From 63949faef618b3c4df701df917181accc6c2ea71 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 27 Oct 2021 09:29:37 +0200 Subject: [PATCH 11/29] Phrasenupdate Zeitsperre --- locale/de-AT/zeitaufzeichnung.php | 1 + locale/en-US/zeitaufzeichnung.php | 1 + 2 files changed, 2 insertions(+) diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php index ad9a4de0c..22bf69918 100644 --- a/locale/de-AT/zeitaufzeichnung.php +++ b/locale/de-AT/zeitaufzeichnung.php @@ -65,3 +65,4 @@ $this->phrasen['zeitaufzeichnung/pauseEinfuegen']='Pause automatisch einfügen'; $this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Zeitraum zu kurz für automatische Pause'; $this->phrasen['zeitaufzeichnung/supportAnfragen']='


Supportanfragen unter
zeiterfassung@technikum-wien.at

'; $this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice für den Tag %s nicht erlaubt'; +$this->phrasen['zeitaufzeichnung/zeitsperreVorhanden']='

Achtung: Für den Tag %s existiert eine ganztägige Zeitsperre vom Typ %s!

'; diff --git a/locale/en-US/zeitaufzeichnung.php b/locale/en-US/zeitaufzeichnung.php index 9e0b84ec1..9b06303d4 100644 --- a/locale/en-US/zeitaufzeichnung.php +++ b/locale/en-US/zeitaufzeichnung.php @@ -65,3 +65,4 @@ $this->phrasen['zeitaufzeichnung/pauseEinfuegen']='insert break automatically'; $this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Timeslot too short for automatic break.'; $this->phrasen['zeitaufzeichnung/supportAnfragen']='


Contact for support
zeiterfassung@technikum-wien.at

'; $this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice for day %s not allowed'; +$this->phrasen['zeitaufzeichnung/zeitsperreVorhanden']='

Please note: There is a timeout for the day %s: %s!

'; From c3771b9cd06ee449c81839971c888fd76435f2e6 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 27 Oct 2021 10:47:21 +0200 Subject: [PATCH 12/29] merge feature-11468/ZeitsperrenBeruecksichtigen into featuresZeiterfassung/Sprint177 --- cis/private/tools/zeitaufzeichnung.php | 31 +++++++++- .../tools/zeitaufzeichnung_zeitsperren.php | 59 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 cis/private/tools/zeitaufzeichnung_zeitsperren.php diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 10d2efdd7..f17f9eb06 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -751,6 +751,7 @@ echo ' Jahr=Datum.substring(6,10); var checkedDay = Jahr + "-" + Monat + "-" + Tag; checkBisverwendung(checkedDay, uid); + checkZeitsperre(checkedDay, uid); } function checkBisverwendung(day, uid) @@ -775,6 +776,31 @@ echo ' }); } + function checkZeitsperre(day, uid) + { + $.ajax + ({ + url: "zeitaufzeichnung_zeitsperren.php", + data: + { + day: day, + uid: uid + }, + success: function (json) + { + if (json.length > 1) + { + $("#buttonSave").hide(); + } + else + { + $("#buttonSave").show(); + } + $("#outputZs").html(json); + } + }); + } + @@ -1652,6 +1678,9 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; + //Zeitsperren + echo '

'; + //Homeoffice Checkbox echo '
@@ -1672,7 +1701,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; + echo ''; else { echo ''; diff --git a/cis/private/tools/zeitaufzeichnung_zeitsperren.php b/cis/private/tools/zeitaufzeichnung_zeitsperren.php new file mode 100644 index 000000000..2ab602c29 --- /dev/null +++ b/cis/private/tools/zeitaufzeichnung_zeitsperren.php @@ -0,0 +1,59 @@ + + */ +/** + * Checks, if there is a zeitsperre for a certain date. It should not be possible + * to add a zeitaufzeichnung with a holiday (or else) entry on the same day. + */ + + +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/globals.inc.php'); +require_once('../../../include/phrasen.class.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/Excel/excel.php'); +require_once('../../../include/benutzer.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/mitarbeiter.class.php'); +require_once('../../../include/zeitaufzeichnung.class.php'); +require_once('../../../include/projekt.class.php'); +require_once('../../../include/zeitsperre.class.php'); + + +$sprache = getSprache(); +$p = new phrasen($sprache); + +if ((isset($_GET['uid'])) && (isset($_GET['day']))) +{ + $uid = $_GET['uid']; + $day = $_GET['day']; + + $zs = new zeitsperre(); + $zs->getZeitsperrenForZeitaufzeichnung($uid, '180'); + $zeitsperren = $zs->result; + + if (array_key_exists($day, $zeitsperren)) + { + echo ''.$p->t('zeitaufzeichnung/zeitsperreVorhanden', [$day, $zeitsperren[$day]]).'
'; + } + else + { + echo ""; + } +} From 6d4e5238fdb5dfeada84e8a352b932ea07190c9a Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 27 Oct 2021 11:19:59 +0200 Subject: [PATCH 13/29] merge feature-11468/ZeitsperrenBeruecksichtigen into featuresZeiterfassung/Sprint177 --- cis/private/tools/zeitaufzeichnung.php | 1 + 1 file changed, 1 insertion(+) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index f17f9eb06..9360d03f8 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -304,6 +304,7 @@ echo ' Jahr=Datum.substring(6,10); var day = Jahr + "-" + Monat + "-" + Tag; checkBisverwendung(day,uid); + checkZeitsperre(day,uid); } ) From 2b9d688ff7aab0c63710c4671377690ab85bc323 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 27 Oct 2021 13:07:21 +0200 Subject: [PATCH 14/29] =?UTF-8?q?Adaptierung=20ZE:Fix=20Bug=20Eingabe=20gr?= =?UTF-8?q?=C3=B6=C3=9Fer=2024:00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 9360d03f8..1fdf71330 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1098,6 +1098,8 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->kunde_uid = $kunde_uid; $saveerror = 0; $extractTimeBis = $datum->formatDatum($bis, $format = 'H:i:s'); + $extractVon = $datum->formatDatum($von, $format = 'Y-m-d'); + $extractBis = $datum->formatDatum($bis, $format = 'Y-m-d'); if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) { @@ -1114,9 +1116,8 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) echo '

'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.


'; $saveerror = 1; - } - elseif (abs($von-$bis)>0 && $aktivitaet_kurzbz!="DienstreiseMT" && $extractTimeBis != '00:00:00') + elseif ((abs($von - $bis) > 0 || $extractVon != $extractBis) && $aktivitaet_kurzbz!="DienstreiseMT" && $extractTimeBis != '00:00:00') { echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; $saveerror = 1; From 6809dbdb1ff90a18ec03379b6122cb986a564816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 28 Jan 2022 15:23:04 +0100 Subject: [PATCH 15/29] Debug Output entfernt --- cis/private/tools/zeitaufzeichnung_projektliste.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 9388527a8..ce55e1f51 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -46,7 +46,7 @@ $sprache_obj = new sprache(); $sprache_obj->load($sprache); $sprache_index = $sprache_obj->index; -echo $uid = get_uid(); +$uid = get_uid(); $mitarbeiter = new mitarbeiter(); $mitarbeiter->getUntergebene($uid, true); From 06408ba66ec4cb39ca89f1edc5cc068bc665f850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 28 Jan 2022 15:52:06 +0100 Subject: [PATCH 16/29] Variable entfernt --- cis/private/tools/zeitaufzeichnung_projektliste.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index ce55e1f51..c96e816df 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -81,7 +81,7 @@ $monthtext = $monatsname[$sprache_index][$month - 1]; $username = $benutzer->vorname." ".$benutzer->nachname; $mitarbeiter->load($uid); $persnr = $mitarbeiter->personalnummer; -$persnr; + $daysinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); $date = new datum(); From 615a55eccc7cff90c0f0a93d15174560c4a06a96 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 3 Feb 2022 14:49:29 +0100 Subject: [PATCH 17/29] Adaptierungen Zeiterfassungen von Sprint177 --- cis/private/tools/zeitaufzeichnung.php | 86 ++++++++++++++++--- .../tools/zeitaufzeichnung_zeitsperren.php | 56 +++++++++--- include/zeitsperre.class.php | 17 ++-- locale/de-AT/zeitaufzeichnung.php | 1 + 4 files changed, 129 insertions(+), 31 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 8ee09891c..1a830ea99 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -651,7 +651,6 @@ echo ' } projphasenhtml += "<\/option>"; } - $("#projektphase").append(projphasenhtml); $("#projektphaseformgroup").show(); } @@ -785,7 +784,9 @@ echo ' { $.ajax ({ + type: "GET", url: "zeitaufzeichnung_zeitsperren.php", + dataType: "json", data: { day: day, @@ -793,15 +794,25 @@ echo ' }, success: function (json) { - if (json.length > 1) + if (json.length > 0) + { + var output = ""; + for (var i = 0; i < json.length; i++) { - $("#buttonSave").hide(); + output = "Für den Tag " + json[i].day + " ist bereits eine Zeitsperre vom Typ " + json[i].typ + " eingetragen!"; + alert("'.$p->t("zeitaufzeichnung/zeitsperreVorhanden1").'"); + $("#buttonSave").attr("disabled","disabled"); + $("#triggerPhasenReset").hide(); } - else - { - $("#buttonSave").show(); - } - $("#outputZs").html(json); + } + else + { + $("#buttonSave").prop("disabled",false); + output = ""; + } + $("#outputZeitsperren").html(output); + + } }); } @@ -811,8 +822,17 @@ echo ' '; + echo '

'.$p->t("zeitaufzeichnung/zeitaufzeichnungVon").' '.$db->convert_html_chars($bn->vorname).' '.$db->convert_html_chars($bn->nachname).'

'; +echo ' +
+ + +'; // Wenn Kartennummer übergeben wurde dann hole uid von Karteninhaber if($kartennummer != '') { @@ -1772,6 +1792,54 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; //echo ''; + // $test = '2022-02-01'; + // echo "hello " . $test . "
"; + // + // $zs = new zeitsperre(); + // $sperreVorhanden = false; + // $stunde = '09'; + // $zs->getSperreByDate($user, $test, $stunde); + + //var_dump($zs->result); + + // foreach ($zs->result as $z) + // { + // if ($z->zeitsperretyp_kurzbz) + // { + // $sperreVorhanden = true; + // echo "zeitsperre vorhanden: ". $z->zeitsperretyp_kurzbz . " am: " . $test; + // } + // else { + // echo "zeitsperre nicht vorhanden"; + // } + // } + //Testausgaben + // echo ' + // + // + // + // + // + // '; + // + // echo ' + // + // + // + // + // '; + + + + $za = new zeitaufzeichnung(); if(isset($_GET['filter'])) $za->getListeProjekt($_GET['filter']); @@ -1788,8 +1856,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $dr->getDienstreisenUser($user, 180); $dr_arr = $dr->result; - //var_dump($dr->result); - if(count($za->result)>0) { //Uebersichtstabelle diff --git a/cis/private/tools/zeitaufzeichnung_zeitsperren.php b/cis/private/tools/zeitaufzeichnung_zeitsperren.php index 2ab602c29..eb52bb84e 100644 --- a/cis/private/tools/zeitaufzeichnung_zeitsperren.php +++ b/cis/private/tools/zeitaufzeichnung_zeitsperren.php @@ -26,14 +26,16 @@ require_once('../../../config/cis.config.inc.php'); require_once('../../../include/globals.inc.php'); require_once('../../../include/phrasen.class.php'); -require_once('../../../include/datum.class.php'); -require_once('../../../include/Excel/excel.php'); -require_once('../../../include/benutzer.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); -require_once('../../../include/mitarbeiter.class.php'); -require_once('../../../include/zeitaufzeichnung.class.php'); -require_once('../../../include/projekt.class.php'); require_once('../../../include/zeitsperre.class.php'); +//require_once('../../../include/datum.class.php'); +// require_once('../../../include/Excel/excel.php'); +//require_once('../../../include/benutzer.class.php'); + +// require_once('../../../include/mitarbeiter.class.php'); +//require_once('../../../include/zeitaufzeichnung.class.php'); +// require_once('../../../include/projekt.class.php'); + $sprache = getSprache(); @@ -44,16 +46,42 @@ if ((isset($_GET['uid'])) && (isset($_GET['day']))) $uid = $_GET['uid']; $day = $_GET['day']; - $zs = new zeitsperre(); - $zs->getZeitsperrenForZeitaufzeichnung($uid, '180'); - $zeitsperren = $zs->result; + //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung + //des uebergebenen Users anzeigen + if (isset($_GET['uid']) && $_GET['uid'] != $uid) + { + $p = new phrasen(); + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); - if (array_key_exists($day, $zeitsperren)) - { - echo ''.$p->t('zeitaufzeichnung/zeitsperreVorhanden', [$day, $zeitsperren[$day]]).'
'; + if ($rechte->isBerechtigt('admin')) + { + $uid = $_GET['uid']; + } + else + { + die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); + } } - else + + $zs = new zeitsperre(); + $sperreVorhanden = false; + $typ = ''; + $zs->getSperreByDate($uid, $day, null); + $result_obj = array(); + $now = new DateTime($day); + $now = $now->format('d.m.Y'); + + foreach ($zs->result as $z) { - echo ""; + if ($z->zeitsperretyp_kurzbz) + { + $item['typ'] = $z->zeitsperretyp_kurzbz; + $item['day'] = $now; + $item['sperreVorhanden'] = true; + $result_obj[] = $item; + } } + //var_dump($result_obj); + echo json_encode($result_obj); } diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php index 681916c26..b28a305f8 100644 --- a/include/zeitsperre.class.php +++ b/include/zeitsperre.class.php @@ -368,10 +368,10 @@ class zeitsperre extends basis_db * * @param $user * @param $datum - * @param $stunde + * @param $stunde optional, wird nur abgefragt, wenn != null * @return true wenn ok, false im Fehlerfall */ - public function getSperreByDate($user, $datum, $stunde) + public function getSperreByDate($user, $datum, $stunde=null) { $qry = " SELECT @@ -380,16 +380,19 @@ class zeitsperre extends basis_db campus.tbl_zeitsperre WHERE vondatum<=".$this->db_add_param($datum)." - AND bisdatum>=".$this->db_add_param($datum)." AND - ((vondatum=".$this->db_add_param($datum)." AND vonstunde<=".$this->db_add_param($stunde).") OR vonstunde is null OR vondatum<>".$this->db_add_param($datum).") AND - ((bisdatum=".$this->db_add_param($datum)." AND bisstunde>=".$this->db_add_param($stunde).") OR bisstunde is null OR bisdatum<>".$this->db_add_param($datum).") AND - mitarbeiter_uid=".$this->db_add_param($user); + AND bisdatum>=".$this->db_add_param($datum); + + if(!is_null($stunde)) + $qry.=" AND + ((vondatum=".$this->db_add_param($datum)." AND vonstunde<=".$this->db_add_param($stunde).") OR vonstunde is null OR vondatum<>".$this->db_add_param($datum).") AND + ((bisdatum=".$this->db_add_param($datum)." AND bisstunde>=".$this->db_add_param($stunde).") OR bisstunde is null OR bisdatum<>".$this->db_add_param($datum).")"; + + $qry .= "AND mitarbeiter_uid=".$this->db_add_param($user); if($result = $this->db_query($qry)) { while($row = $this->db_fetch_object($result)) { - $obj = new zeitsperre(); $obj->zeitsperre_id = $row->zeitsperre_id; diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php index 22bf69918..af7d15b58 100644 --- a/locale/de-AT/zeitaufzeichnung.php +++ b/locale/de-AT/zeitaufzeichnung.php @@ -66,3 +66,4 @@ $this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Zeitraum zu kurz für automat $this->phrasen['zeitaufzeichnung/supportAnfragen']='


Supportanfragen unter
zeiterfassung@technikum-wien.at

'; $this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice für den Tag %s nicht erlaubt'; $this->phrasen['zeitaufzeichnung/zeitsperreVorhanden']='

Achtung: Für den Tag %s existiert eine ganztägige Zeitsperre vom Typ %s!

'; +$this->phrasen['zeitaufzeichnung/zeitsperreVorhanden1']='Für diesen Tag ist bereits eine ganztägige Zeitsperre eingetragen!'; From fc47391392dd344294df207b0f5ca459370a98ea Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 7 Feb 2022 17:09:05 +0100 Subject: [PATCH 18/29] =?UTF-8?q?Fix=20Bug=20Fehlermeldung,=20Erg=C3=A4nzu?= =?UTF-8?q?ng=20Zeittypen=20Covid,=20Erg=C3=A4nzung=20Dropdown=20um=20OE-A?= =?UTF-8?q?uswahl=20Leitung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/profile/zeitsperre_resturlaub.php | 47 ++++++++++++-- cis/private/tools/zeitaufzeichnung.php | 55 +--------------- .../tools/zeitaufzeichnung_zeitsperren.php | 9 --- include/zeitaufzeichnung.class.php | 62 ++++++++++++++++--- locale/de-AT/zeitsperre.php | 3 + locale/en-US/zeitsperre.php | 3 + 6 files changed, 107 insertions(+), 72 deletions(-) diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 6ceaff350..079d4a62f 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -45,7 +45,7 @@ $uid = get_uid(); $PHP_SELF = $_SERVER['PHP_SELF']; -$typen_arr = array("Urlaub", "PflegeU", "ZA", "Krank", "DienstF", "DienstV"); +$typen_arr = array("Urlaub", "PflegeU", "ZA", "Krank", "DienstF", "DienstV", "CovidSB", "CovidKS"); if(isset($_GET['type'])) $type=$_GET['type']; @@ -69,8 +69,8 @@ $datum_obj = new datum(); $ma= new mitarbeiter(); // definiert bis zu welchem Datum die Eintragung nicht mehr möglich ist -$zasperre = new zeitaufzeichnung(); -if ($sperrdat = $zasperre->getEintragungGesperrtBisForUser($uid)) +$zaufzeichnung = new zeitaufzeichnung(); +if ($sperrdat = $zaufzeichnung->getEintragungGesperrtBisForUser($uid)) $gesperrt_bis = $sperrdat; else if (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS != '') $gesperrt_bis = CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS; @@ -138,7 +138,15 @@ $( document ).ready(function() rows: 4, }); + $("#vondatum").change( + function() + { + $(".error").text(""); + } + ) + }); + // set holidays function which is configured in beforeShowDay function setHoliDays(date) { for (i = 0; i < holiDays.length; i++) { @@ -302,7 +310,9 @@ function showHideStudeDropDown() || dd.options[dd.selectedIndex].value == 'Urlaub' || dd.options[dd.selectedIndex].value == 'Krank' || dd.options[dd.selectedIndex].value == 'DienstF' - || dd.options[dd.selectedIndex].value == 'DienstV') + || dd.options[dd.selectedIndex].value == 'DienstV' + || dd.options[dd.selectedIndex].value == 'CovidSB' + || dd.options[dd.selectedIndex].value == 'CovidKS') { document.getElementById('vonStd').style.visibility = 'hidden'; document.getElementById('bisStd').style.visibility = 'hidden'; @@ -350,6 +360,35 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $error_msg .= $p->t('zeitsperre/bisDatumUngueltig').' '; } + //Prüfen auf vorhandene Zeitaufzeichnung + if (isset($_POST['bisdatum']) && isset($_POST['vondatum']) && $zaufzeichnung->existsZeitaufzeichnung($uid, $_POST['vondatum'], $_POST['bisdatum'])) + { + $error = true; + $error_msg .= $p->t('zeitsperre/zeitaufzeichnungVorhanden'); + } + + //Prüfen auf vorhandene Zeitsperre + if (isset($_POST['bisdatum']) && isset($_POST['vondatum'])) + { + $von = $_POST['vondatum']; + $von2 = new DateTime($von); + $von2 = $von2->format('Y-m-d'); + $zeitsperre = new zeitsperre(); + + if ($zeitsperre->getSperreByDate($uid, $von2, null)) + { + foreach ($zeitsperre->result as $z) + { + if ($z->zeitsperretyp_kurzbz) + { + $typ = $z->zeitsperretyp_kurzbz; + } + $error = true; + $error_msg .= $p->t('zeitsperre/zeitsperreEingetragen', [$von, $typ]); + } + } + } + //von - bis-datum pruefen von darf nicht groesser als bis sein // 09.02.2009 simane $vondatum=0; diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 1a830ea99..a61d43acd 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -299,6 +299,7 @@ echo ' { var uid = $("#uidpass").val(); var Datum = $(this).val(); + $("#triggerPhasenReset").text(""); Tag=Datum.substring(0,2); Monat=Datum.substring(3,5); Jahr=Datum.substring(6,10); @@ -802,17 +803,14 @@ echo ' output = "Für den Tag " + json[i].day + " ist bereits eine Zeitsperre vom Typ " + json[i].typ + " eingetragen!"; alert("'.$p->t("zeitaufzeichnung/zeitsperreVorhanden1").'"); $("#buttonSave").attr("disabled","disabled"); - $("#triggerPhasenReset").hide(); } } else { $("#buttonSave").prop("disabled",false); - output = ""; + output = ""; } $("#outputZeitsperren").html(output); - - } }); } @@ -1494,7 +1492,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ' - // - // - // - // - // '; - // - // echo ' - // - // - // - // - // '; - diff --git a/cis/private/tools/zeitaufzeichnung_zeitsperren.php b/cis/private/tools/zeitaufzeichnung_zeitsperren.php index eb52bb84e..b073303e4 100644 --- a/cis/private/tools/zeitaufzeichnung_zeitsperren.php +++ b/cis/private/tools/zeitaufzeichnung_zeitsperren.php @@ -28,14 +28,6 @@ require_once('../../../include/globals.inc.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/zeitsperre.class.php'); -//require_once('../../../include/datum.class.php'); -// require_once('../../../include/Excel/excel.php'); -//require_once('../../../include/benutzer.class.php'); - -// require_once('../../../include/mitarbeiter.class.php'); -//require_once('../../../include/zeitaufzeichnung.class.php'); -// require_once('../../../include/projekt.class.php'); - $sprache = getSprache(); @@ -82,6 +74,5 @@ if ((isset($_GET['uid'])) && (isset($_GET['day']))) $result_obj[] = $item; } } - //var_dump($result_obj); echo json_encode($result_obj); } diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index 48e189c32..f3e8ffff3 100644 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -812,15 +812,63 @@ or not exists $qry = "select max(datum) from addon.tbl_casetime_timesheet where ".$where." and abgeschicktamum is not null"; - if($result = $this->db_query($qry)) - { + if ($result = $this->db_query($qry)) + { $datum = $this->db_fetch_object($result); return $datum->max; - } - else - { - return false; - } + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * Prüft, ob es für einen bestimmten User für einen bestimmten Tag eine Zeitaufzeichnung gibt + * @param string $user Uid des zu prüfenden Users. + * @param date $vonDay Startdatum des zu prüfenden Zeitraumes im Format d.m.Y. + * @param date $bisDay Enddatum des zu prüfenden Zeitraumes im Format d.m.Y. + * @return boolean true, wenn vorhanden, sonst false + */ + public function existsZeitaufzeichnung($user, $vonDay, $bisDay) + { + $datum = date($vonDay); + $year = substr($datum, 6, 4); + $month = substr($datum, 3, 2); + $day = substr($datum, 0, 2); + + $datumbisDay = date($bisDay); + $yearbisDay = substr($datumbisDay, 6, 4); + $monthbisDay = substr($datumbisDay, 3, 2); + $daybisDay = substr($datumbisDay, 0, 2); + + $bisDay = date("Y-m-d", (mktime(0, 0, 0, $monthbisDay, $daybisDay + 1, $yearbisDay))); + $datum = date("Y-m-d", (mktime(0, 0, 0, $month, $day, $year))); + + $qry = " + SELECT * + FROM campus.tbl_zeitaufzeichnung + WHERE uid = ". $this->db_add_param($user). " + AND start >= ". $this->db_add_param($datum). " + AND ende < ". $this->db_add_param($bisDay). "; + "; + + if ($this->db_query($qry)) + { + $num_rows = $this->db_num_rows(); + if ($num_rows >= 1) + { + return true; + } + else + { + return false; + } } else { diff --git a/locale/de-AT/zeitsperre.php b/locale/de-AT/zeitsperre.php index 06476e33d..463c092cf 100644 --- a/locale/de-AT/zeitsperre.php +++ b/locale/de-AT/zeitsperre.php @@ -44,4 +44,7 @@ $this->phrasen['zeitsperre/legendeDurchwahl']='(123)...Durchwahl'; $this->phrasen['zeitsperre/vertretungNichtKorrekt']='Die angegebene Vertretung kann nicht gefunden werden. Bitte prüfen Sie die Vertretung und versuchen Sie es erneut.'; $this->phrasen['zeitsperre/vorSperrdatum']='Datum liegt vor dem Sperrdatum der Zeitliste'; $this->phrasen['zeitsperre/abwesend']='Abwesend'; +$this->phrasen['zeitsperre/zeitaufzeichnungVorhanden']='Es existiert mindestens eine Zeitaufzeichnung im angegebenen Zeitraum.'; +$this->phrasen['zeitsperre/zeitsperreEingetragen']='Für den %s existiert bereits eine Zeitsperre vom Typ %s. + Bitte löschen Sie diese bevor Sie eine neue für diesen Tag eintragen!'; ?> diff --git a/locale/en-US/zeitsperre.php b/locale/en-US/zeitsperre.php index 43909358e..44123529f 100644 --- a/locale/en-US/zeitsperre.php +++ b/locale/en-US/zeitsperre.php @@ -44,4 +44,7 @@ $this->phrasen['zeitsperre/legendeDurchwahl']='(123)...Extension'; $this->phrasen['zeitsperre/vertretungNichtKorrekt']='The selected substitute is invalid. Please check the substitute an try again.'; $this->phrasen['zeitsperre/vorSperrdatum']='Date is before last open timesheet date'; $this->phrasen['zeitsperre/abwesend']='absent'; +$this->phrasen['zeitsperre/zeitaufzeichnungVorhanden']='It exists at least one time record in the specified period.'; +$this->phrasen['zeitsperre/zeitsperreEingetragen']='There already exists an unavailability on the %s of the type %s. + Please delete the existing before creating a new one for this date!'; ?> From c8e31dffa8398a9550846e1f1312af079e94067b Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 10 Feb 2022 15:02:43 +0100 Subject: [PATCH 19/29] Adaptierung Phrasen und Authentifizierung --- cis/private/tools/zeitaufzeichnung.php | 7 ++-- .../tools/zeitaufzeichnung_zeitsperren.php | 32 +++++++------------ locale/de-AT/zeitaufzeichnung.php | 2 +- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index a61d43acd..f911ded3b 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -801,8 +801,11 @@ echo ' for (var i = 0; i < json.length; i++) { output = "Für den Tag " + json[i].day + " ist bereits eine Zeitsperre vom Typ " + json[i].typ + " eingetragen!"; - alert("'.$p->t("zeitaufzeichnung/zeitsperreVorhanden1").'"); - $("#buttonSave").attr("disabled","disabled"); + + var phrase = "' . $p->t("zeitaufzeichnung/zeitsperreVorhanden", ['{day}', '{typ}']) . '"; + phrase = phrase.replace(\'{day}\', json[i].day); + phrase = phrase.replace(\'{typ}\', json[i].typ); + alert (phrase); } } else diff --git a/cis/private/tools/zeitaufzeichnung_zeitsperren.php b/cis/private/tools/zeitaufzeichnung_zeitsperren.php index b073303e4..0f889e9b6 100644 --- a/cis/private/tools/zeitaufzeichnung_zeitsperren.php +++ b/cis/private/tools/zeitaufzeichnung_zeitsperren.php @@ -29,33 +29,16 @@ require_once('../../../include/phrasen.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/zeitsperre.class.php'); - +header('Content-Type: application/json; charset=utf-8'); $sprache = getSprache(); $p = new phrasen($sprache); -if ((isset($_GET['uid'])) && (isset($_GET['day']))) +if ( isset($_GET['day']) ) { - $uid = $_GET['uid']; + $auth = new authentication(); + $uid = $auth->getUser(); $day = $_GET['day']; - //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung - //des uebergebenen Users anzeigen - if (isset($_GET['uid']) && $_GET['uid'] != $uid) - { - $p = new phrasen(); - $rechte = new benutzerberechtigung(); - $rechte->getBerechtigungen($uid); - - if ($rechte->isBerechtigt('admin')) - { - $uid = $_GET['uid']; - } - else - { - die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); - } - } - $zs = new zeitsperre(); $sperreVorhanden = false; $typ = ''; @@ -75,4 +58,11 @@ if ((isset($_GET['uid'])) && (isset($_GET['day']))) } } echo json_encode($result_obj); +} else { + http_response_code(500); + echo json_encode(array( + array( + "error" => 'missing parameter day' + ) + )); } diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php index af7d15b58..8e9969856 100644 --- a/locale/de-AT/zeitaufzeichnung.php +++ b/locale/de-AT/zeitaufzeichnung.php @@ -65,5 +65,5 @@ $this->phrasen['zeitaufzeichnung/pauseEinfuegen']='Pause automatisch einfügen'; $this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Zeitraum zu kurz für automatische Pause'; $this->phrasen['zeitaufzeichnung/supportAnfragen']='


Supportanfragen unter
zeiterfassung@technikum-wien.at

'; $this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice für den Tag %s nicht erlaubt'; -$this->phrasen['zeitaufzeichnung/zeitsperreVorhanden']='

Achtung: Für den Tag %s existiert eine ganztägige Zeitsperre vom Typ %s!

'; +$this->phrasen['zeitaufzeichnung/zeitsperreVorhanden']='Achtung: Für den Tag %s existiert eine ganztägige Zeitsperre vom Typ %s!'; $this->phrasen['zeitaufzeichnung/zeitsperreVorhanden1']='Für diesen Tag ist bereits eine ganztägige Zeitsperre eingetragen!'; From 51b1f2cfa972ac6456b61007cfa863d1c584ca12 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 14 Feb 2022 16:26:13 +0100 Subject: [PATCH 20/29] Funktion checkPausenErrors() in zeitaufzeichnung.class.php --- include/zeitaufzeichnung.class.php | 73 ++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index 48e189c32..17ca8a7d6 100644 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -827,5 +827,78 @@ or not exists return false; } } + + /** Check, if there is a blocking PausenError + * + * @param string $uid User uid. + * @param string $datumday Day to be check in the format "Y-m-d". + * @return boolean True if there is a Pausen error. + */ + public function checkPausenErrors($uid, $datumday) + { + $tagesbeginn = ''; + $tagesende = ''; + $pausesumme = '00:00'; + $tagessaldo = ''; + $elsumme = '00:00'; + $pflichtpause = false; + $blockingError = false; + $datum = new datum(); + + $this->getListeUserFromTo($uid, $datumday, $datumday, null); + + foreach ($this->result as $row) + { + $datumtag = $datum->formatDatum($row->datum, 'Y-m-d'); + + if (($tagesbeginn == '' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format = 'Y-m-d H:i:s')) > $datum->mktime_fromtimestamp($datum->formatDatum($row->start, $format = 'Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe') + $tagesbeginn = $datum->formatDatum($row->start, 'H:i'); + + if (($tagesende == '' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format = 'Y-m-d H:i:s')) < $datum->mktime_fromtimestamp($datum->formatDatum($row->ende, $format = 'Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe') + $tagesende = $datum->formatDatum($row->ende, 'H:i'); + + if ($row->aktivitaet_kurzbz == "Pause") + $pausesumme = $row->diff; + } + + $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format = 'Y-m-d H:i:s')) - $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format = 'Y-m-d H:i:s')) - 3600; + + list($h1, $m1) = explode(':', $pausesumme); + $pausesumme = $h1 * 3600 + $m1 * 60; + + list($h2, $m2) = explode(':', $elsumme); + $elsumme = $h2 * 3600 + $m2 * 60; + + + if ($datum->formatDatum($datumday, 'Y-m-d') >= '2019-11-06') + { + $pausesumme = $pausesumme; + } + elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause == false && $elsumme == 0) + { + $pausesumme = $tagessaldo - 18000; + } + elseif ($tagessaldo > 18000 && $pflichtpause == false && $elsumme == 0) + { + $pausesumme = $pausesumme + 1800; + } + + if ($elsumme > 0) + { + $pausesumme = $pausesumme + $elsumme; + $pflichtpause = true; + } + + $tagessaldo = $tagessaldo - $pausesumme; + + //check if blocking error + if (($tagessaldo > 19800 && $pausesumme < 1800) || ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000)) + { + $blockingError = true; + } + + return $blockingError; + } + } ?> From bbc8c0e0527a56570d808dd6da97f78338562127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 25 Feb 2022 14:26:40 +0100 Subject: [PATCH 21/29] CheckPausenError aus Funktion verwendet --- cis/private/tools/zeitaufzeichnung.php | 33 ++++++++++++-------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index f911ded3b..96a773956 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1901,31 +1901,28 @@ if ($projekt->getProjekteMitarbeiter($user, true)) // fehlende Pausen berechnen $pausefehlt_str = ''; - //Prüfung auf azgrelevant - $azgrelevant = false; - $verwendung = new bisverwendung(); - - $verwendung->getVerwendungDatum($user, $datum->formatDatum($tag, 'Y-m-d')); - $azgrelevant = true; + //Prüfung auf azgrelevant und blockierende Pausenfehler $linkExclamation = APP_ROOT. 'skin/images/exclamation.png'; $linkInformation = APP_ROOT. 'skin/images/information.png'; - foreach ($verwendung->result as $v) + + $za = new zeitaufzeichnung(); + $verwendung = new bisverwendung(); + if ($za->checkPausenErrors($user, $tag)) { - if ($v->azgrelevant) + $verwendung->getVerwendungDatum($user, $tag); + foreach ($verwendung->result as $v) { - $azgrelevant = false; + if ($v->azgrelevant) + { + $pausefehlt_str = ' -- Pause fehlt oder zu kurz -- '; + } + else + { + $pausefehlt_str = ' -- Pause fehlt --'; + } } } - if ($tagessaldo > 19800 && $pausesumme < 1800 && !$azgrelevant) - $pausefehlt_str = ' -- Pause fehlt oder zu kurz --'; - elseif ($tagessaldo > 19800 && $pausesumme < 1800 && $azgrelevant) - $pausefehlt_str = ' -- Pause fehlt --'; - elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000 && !$azgrelevant) - $pausefehlt_str = ' -- Pause fehlt oder zu kurz --'; - elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000 && $azgrelevant) - $pausefehlt_str = ' -- Pause fehlt --'; - $tagessaldo = date('H:i', ($tagessaldo)); $colspan = ($za_simple)?6:8; echo '
- - -'; // Wenn Kartennummer übergeben wurde dann hole uid von Karteninhaber if($kartennummer != '') { @@ -934,7 +956,12 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $data[7] = NULL; if (!isset($data[8])) $data[8] = NULL; - if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) + + $zscheck = checkZeitsperren($p, $user, $vonCSV); + if( $zscheck['status'] === false ) { + echo '' . $p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $zscheck['msg'] . '
'; + } + elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
'; elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum) echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.
'; @@ -1125,8 +1152,13 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $extractTimeBis = $datum->formatDatum($bis, $format = 'H:i:s'); $extractVon = $datum->formatDatum($von, $format = 'Y-m-d'); $extractBis = $datum->formatDatum($bis, $format = 'Y-m-d'); - - if (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) + + $zscheck = checkZeitsperren($p, $user, $datum->formatDatum($von, $format='Y-m-d')); + if( $zscheck['status'] === false ) { + echo '' . $p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $zscheck['msg'] . '
'; + $saveerror = 1; + } + elseif (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) { echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.
'; $saveerror = 1; @@ -1222,7 +1254,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $saveerror = 1; } } - + if ($saveerror == 0) { echo ''.$p->t("global/datenWurdenGespeichert").''; @@ -1658,16 +1690,22 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; echo ''; } - + //Start/Ende $von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); $diff = $bis_ts - $von_ts; echo ' + + + + - '; diff --git a/cis/private/tools/zeitaufzeichnung_zeitsperren.php b/cis/private/tools/zeitaufzeichnung_zeitsperren.php index 0f889e9b6..47611ba6f 100644 --- a/cis/private/tools/zeitaufzeichnung_zeitsperren.php +++ b/cis/private/tools/zeitaufzeichnung_zeitsperren.php @@ -42,7 +42,7 @@ if ( isset($_GET['day']) ) $zs = new zeitsperre(); $sperreVorhanden = false; $typ = ''; - $zs->getSperreByDate($uid, $day, null); + $zs->getSperreByDate($uid, $day, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN); $result_obj = array(); $now = new DateTime($day); $now = $now->format('d.m.Y'); diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php index b28a305f8..f42ce4669 100644 --- a/include/zeitsperre.class.php +++ b/include/zeitsperre.class.php @@ -23,6 +23,9 @@ require_once(dirname(__FILE__).'/basis_db.class.php'); class zeitsperre extends basis_db { + const NUR_BLOCKIERENDE_ZEITSPERREN = true; + const BLOCKIERENDE_ZEITSPERREN = "'Krank','Urlaub','ZA','DienstV','PflegeU','DienstF','CovidSB','CovidKS'"; + public $new; // boolean public $result = array(); // news Objekt @@ -369,10 +372,12 @@ class zeitsperre extends basis_db * @param $user * @param $datum * @param $stunde optional, wird nur abgefragt, wenn != null + * @param $nurblockierend boolean default false * @return true wenn ok, false im Fehlerfall */ - public function getSperreByDate($user, $datum, $stunde=null) + public function getSperreByDate($user, $datum, $stunde=null, $nurblockierend=false) { + $this->result = array(); $qry = " SELECT * @@ -382,6 +387,10 @@ class zeitsperre extends basis_db vondatum<=".$this->db_add_param($datum)." AND bisdatum>=".$this->db_add_param($datum); + if( $nurblockierend ) { + $qry .= " AND zeitsperretyp_kurzbz in (" . self::BLOCKIERENDE_ZEITSPERREN . ")"; + } + if(!is_null($stunde)) $qry.=" AND ((vondatum=".$this->db_add_param($datum)." AND vonstunde<=".$this->db_add_param($stunde).") OR vonstunde is null OR vondatum<>".$this->db_add_param($datum).") AND @@ -485,7 +494,7 @@ class zeitsperre extends basis_db $qry = "select datum::date, freigabevon, zeitsperretyp_kurzbz from (SELECT generate_series(vondatum::timestamp, bisdatum::timestamp, '1 day') as datum, freigabevon, mitarbeiter_uid, zeitsperretyp_kurzbz FROM campus.tbl_zeitsperre where vonstunde is null and bisstunde is null) a - where a.mitarbeiter_uid = ".$this->db_add_param($uid)." and datum>(now() - interval '".$anz_tage." Days') and zeitsperretyp_kurzbz in ('Krank','Urlaub', 'ZA', 'DienstV','PflegeU', 'DienstF','CovidSB','CovidKS')"; + where a.mitarbeiter_uid = ".$this->db_add_param($uid)." and datum>(now() - interval '".$anz_tage." Days') and zeitsperretyp_kurzbz in (" . self::BLOCKIERENDE_ZEITSPERREN . ")"; From 4066a7a2282d44c824db742770be0553253b337e Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Wed, 2 Mar 2022 16:38:23 +0100 Subject: [PATCH 24/29] zeitaufzeichnung_csv_import.class --- cis/private/tools/zeitaufzeichnung.php | 227 +-------- include/zeitaufzeichnung_csv_import.class.php | 433 ++++++++++++++++++ 2 files changed, 438 insertions(+), 222 deletions(-) create mode 100644 include/zeitaufzeichnung_csv_import.class.php diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 8c7f4d1dc..02dcc20eb 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -44,6 +44,7 @@ require_once('../../../include/globals.inc.php'); require_once('../../../include/bisverwendung.class.php'); require_once('../../../include/studiensemester.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/zeitaufzeichnung_csv_import.class.php'); function checkZeitsperren($p, $uid, $day) { @@ -867,28 +868,6 @@ if($kartennummer != '') } //Speichern der Daten -function checkVals ($oe_val, $project_val, $phase_val, $service_val) -{ - $error = 0; - if ($service_val && ( filter_var($service_val, FILTER_VALIDATE_INT) === false )) - $error = 1; - if ($phase_val && ( filter_var($phase_val, FILTER_VALIDATE_INT) === false )) - $error = 1; - if ($oe_val) - { - $oecheck = new organisationseinheit($oe_val); - if ($oecheck->errormsg) - $error = 1; - } - if ($project_val) - { - $procheck = new projekt($project_val); - if ($procheck->errormsg) - $error = 1; - } - return $error; -} - if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { $zeit = new zeitaufzeichnung(); @@ -914,206 +893,10 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) if ($_FILES['csv']['error'] == 0 && isset($_POST['import'])) { - $name = $_FILES['csv']['name']; - $tmpName = $_FILES['csv']['tmp_name']; - $mimeType = mime_content_type($_FILES['csv']['tmp_name']); - //echo($mimeType); - if($mimeType=='text/plain') - { - if(($handle = fopen($tmpName, 'r')) !== FALSE) - { - if (mb_detect_encoding(fgets($handle), 'UTF-8', true)) - { - set_time_limit(0); - $anzahl = 0; - $importtage_array = array(); - $ende_vorher = date('Y-m-d H:i:s'); - - while(($data = fgetcsv($handle, 1000, ';', '"')) !== FALSE) - { - if($data[0] == $user){ - if(!empty($data[6]) && !in_array($data[6], $project_kurzbz_array) && empty($data[7])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$data[6].')
'; - } - elseif(!empty($data[7]) && !in_array($data[7], $projectphasen_kurzbz_array)) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$data[7].')
'; - } - else - { - $vonCSV = $datum->formatDatum($data[2], $format = 'Y-m-d'); - $bisCSV = $datum->formatDatum($data[3], $format = 'Y-m-d'); - $dateVonCSV = new DateTime($vonCSV); - $dateBisCSV = new DateTime($bisCSV); - $extractHourBis = $datum->formatDatum($data[3], $format = 'H:i:s'); - - if (!isset($data[5])) - $data[5] = NULL; - if (!isset($data[6])) - $data[6] = NULL; - if (!isset($data[7])) - $data[7] = NULL; - if (!isset($data[8])) - $data[8] = NULL; - - $zscheck = checkZeitsperren($p, $user, $vonCSV); - if( $zscheck['status'] === false ) { - echo '' . $p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $zscheck['msg'] . '
'; - } - elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
'; - elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.
'; - elseif ($dateVonCSV!=$dateBisCSV && $data[1]!="DienstreiseMT") - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; - } - elseif ($extractHourBis == '00:00:00') - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!
'; - } - elseif (empty($data[7]) && !empty($data[6]) && !$projects_of_user->checkProjectInCorrectTime($data[6], $data[2], $data[3])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; - } - elseif (!empty($data[7]) && !$projektph_of_user ->checkProjectphaseInCorrectTime($data[7], $data[2], $data[3])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: ('.$data[2].') ('.$data[3].')
'; - } - elseif (checkVals($data[5],$data[6],$data[7],$data[8])) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.$data[2].')
'; - } - else - { - if ($data[1] == 'LehreIntern') - $data[1] = 'Lehre'; - $zeit->new = true; - $zeit->beschreibung = NULL; - $zeit->oe_kurzbz_1 = NULL; - $zeit->projekt_kurzbz = NULL; - $zeit->projektphase_id = NULL; - $zeit->service_id = NULL; - - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->updateamum = date('Y-m-d H:i:s'); - $zeit->updatevon = $user; - $zeit->insertvon = $user; - $zeit->uid = $data[0]; - $zeit->aktivitaet_kurzbz = $data[1]; - $zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s'); - if (isset($data[4])) - $zeit->beschreibung = $data[4]; - if (isset($data[5])) - $zeit->oe_kurzbz_1 = $data[5]; - if (isset($data[6])) - $zeit->projekt_kurzbz = $data[6]; - if (isset($data[7])) - $zeit->projektphase_id = $data[7]; - if (isset($data[8])) - $zeit->service_id = $data[8]; - if (isset($data[9])) - { - if (strtolower($data[9] == 'true')) - { - // check, ob homeoffice gemäß Bisverwendung - $verwendung = new bisverwendung(); - $verwendung->getVerwendungDatum($data[0],$vonCSV); - - foreach ($verwendung->result as $v) - if ($v->homeoffice) - { - $zeit->homeoffice = true; - } - else - { - echo ''.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
'; - $zeit->homeoffice = false; - } - } - else - { - $zeit->homeoffice = false; - } - } - else - { - $zeit->homeoffice = false; - } - $tag = $datum->formatDatum($data[2], $format='Y-m-d'); - - if(!in_array($tag, $importtage_array)) - { - $importtage_array[] = $tag; - $zeit->deleteEntriesForUser($user, $tag); - $tag_aktuell = $tag; - } - else - { - if ($ende_vorher < $zeit->start) - { - $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 = $user; - $pause->insertvon = $user; - $pause->uid = $user; - $pause->aktivitaet_kurzbz = 'Pause'; - $pause->start = $ende_vorher; - $pause->ende = $zeit->start; - $pause->beschreibung = ''; - $pause->homeoffice = $homeoffice; - if(!$pause->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; - } - } - } - - $ende_vorher = $zeit->ende; - if($data[2] != $data[3]) - { - /* - if ($data[1] == 'LehreExtern') - { - $zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2]))); - $zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3]))); - } - */ - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'('.$zeit->start.')
'; - } - else - $anzahl++; - } - else - $anzahl++; - - } - } - } - else if (strpos($data[0],'#') === false) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert ('.$data[0].')
'; - } - } - if($anzahl>0) - { - echo ''.$p->t("global/datenWurdenGespeichert").' ('.$anzahl.')'; - foreach ($importtage_array as $ptag) - { - $zeit->cleanPausenForUser($user, $ptag); - } - } - } - else - echo 'Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!'; - } - } + $zeit_csv_import = new zeitaufzeichnung_csv_import($p, $zeit, $project_kurzbz_array, $projectphasen_kurzbz_array, $sperrdatum, $limitdatum, $projects_of_user, $projektph_of_user, $datum, $user); + $zeit_csv_import->parseCSV(); + echo $zeit_csv_import->InfosToHTML(); + echo $zeit_csv_import->ErrorsToHTML(); } else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum) echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; diff --git a/include/zeitaufzeichnung_csv_import.class.php b/include/zeitaufzeichnung_csv_import.class.php new file mode 100644 index 000000000..23cf16037 --- /dev/null +++ b/include/zeitaufzeichnung_csv_import.class.php @@ -0,0 +1,433 @@ +p = $p; + $this->zeit = $zeit; + + $this->project_kurzbz_array = $project_kurzbz_array; + $this->projectphasen_kurzbz_array = $projectphasen_kurzbz_array; + + $this->sperrdatum = $sperrdatum; + $this->limitdatum = $limitdatum; + + $this->projects_of_user = $projects_of_user; + $this->projektph_of_user = $projektph_of_user; + + $this->datum = $datum; + + $this->user = $user; + $this->errors = array(); + $this->infos = array(); + } + + public function parseCSV() { + $this->tmpname = $_FILES['csv']['tmp_name']; + try { + $this->checkMimeType(); + $this->openFileForReading(); + $this->checkEncoding(); + $this->iterateRows(); + $this->checkAndCleanup(); + } catch (Exception $ex) { + $this->addError($ex->getMessage()); + } + } + + public function hasErrors() { + return !empty($this->errors); + } + + public function hasInfos() { + return !empty($this->infos); + } + + public function ErrorsToHTML() { + $html = ''; + foreach ($this->errors as $msg) { + $html .= '' . $msg . '
' . "\n"; + } + return $html; + } + + public function InfosToHTML() { + $html = ''; + foreach ($this->infos as $msg) { + $html .= '' . $msg . '
' . "\n"; + } + return $html; + } + + protected function addError($msg, $prepend_current_line=false) { + if( $prepend_current_line ) { + $msg = 'Zeile ' . $this->current_line . ' - ' . $msg; + } + $this->errors[] = $msg; + } + + protected function addInfo($msg) { + $this->infos[] = $msg; + } + + protected function checkMimeType() { + $mimeType = mime_content_type($this->tmpname); + if( $mimeType !== 'text/plain' ) { + throw new Exception('Datei ist nicht im CSV Format.'); + } + } + + protected function openFileForReading() { + if( false === ($this->fh = fopen($this->tmpname, 'r')) ) + { + throw new Exception('CSV - Datei konnte nicht zum lesen geöffnet werden.'); + } + } + + protected function checkEncoding() { + $filecontent = file_get_contents($this->tmpname); + if( !mb_detect_encoding($filecontent, 'UTF-8', true) ) { + throw new Exception('Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!'); + } + } + + protected function iterateRows() { + set_time_limit(0); + $this->anzahl = 0; + $this->importtage_array = array(); + $this->ende_vorher = date('Y-m-d H:i:s'); + + $this->data = null; + $this->current_line = 0; + while(($this->data = fgetcsv($this->fh, 1000, ';', '"')) !== FALSE) + { + if( false !== strpos($this->data[self::USER], '#') ) { + // ignore lines starting with # + continue; + } + $this->current_line++; + $this->processData(); + } + } + + protected function processData() { + try { + $this->checkUser(); + $this->checkProject(); + $this->checkPhase(); + $this->initData(); + $this->checkZeitsperren(); + $this->checkSperrdatum(); + $this->checkLimitdatum(); + $this->checkDienstreise(); + $this->checkTagesgenau(); + $this->checkProjectInterval(); + $this->checkPhaseInterval(); + $this->checkVals(); + $this->mapLehreIntern(); + $this->prepareZeitaufzeichnung(); + $this->checkImporttage(); + $this->saveZeit(); + } catch (Exception $ex) { + $this->addError($ex->getMessage(), true); + } + } + + protected function checkUser() { + if( $this->data[self::USER] !== $this->user && (strpos($this->data[self::USER],'#') !== false) ) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert ('.$this->data[self::USER].')'); + } + } + + protected function checkProject() { + if(!empty($this->data[self::PROJEKT]) && !in_array($this->data[self::PROJEKT], $this->project_kurzbz_array) && empty($this->data[self::PHASE])) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$this->data[self::PROJEKT].')'); + } + + } + + protected function checkPhase() { + if(!empty($this->data[self::PHASE]) && !in_array($this->data[self::PHASE], $this->projectphasen_kurzbz_array)) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$this->data[self::PHASE].')'); + } + } + + protected function initData() { + if (!isset($this->data[self::OE])) { + $this->data[self::OE] = NULL; + } + if (!isset($this->data[self::PROJEKT])) { + $this->data[self::PROJEKT] = NULL; + } + if (!isset($this->data[self::PHASE])) { + $this->data[self::PHASE] = NULL; + } + if (!isset($this->data[self::SERVICE])) { + $this->data[self::SERVICE] = NULL; + } + } + + protected function checkZeitsperren() { + $zscheck = checkZeitsperren($this->p, $this->user, $this->datum->formatDatum($this->data[self::STARTDT], $format = 'Y-m-d')); + if ($zscheck['status'] === false) { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": " . $zscheck['msg']); + } + } + + protected function checkSperrdatum() { + if ($this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d H:i:s') < $this->sperrdatum) { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': Eingabe nicht möglich da vor dem Sperrdatum ('.$this->data[self::STARTDT].')'); + } + + } + + protected function checkLimitdatum() { + if ($this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d H:i:s') > $this->limitdatum) { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': Eingabe nicht möglich da ('.$this->data[self::STARTDT].') zu weit in der Zukunft liegt.'); + } + } + + protected function checkDienstreise() { + $vonCSV = $this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d'); + $bisCSV = $this->datum->formatDatum($this->data[self::ENDEDT], $format='Y-m-d'); + $dateVonCSV = new DateTime($vonCSV); + $dateBisCSV = new DateTime($bisCSV); + if ($dateVonCSV!=$dateBisCSV && $this->data[self::AKTIVITAET]!="DienstreiseMT") + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).'); + } + } + + protected function checkTagesgenau() { + $bisHour = $this->datum->formatDatum($this->data[self::ENDEDT], $format = 'H:i:s'); + if ($bisHour == '00:00:00') { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!'); + } + } + + protected function checkProjectInterval() { + if (empty($this->data[self::PHASE]) && !empty($this->data[self::PROJEKT]) + && !$this->projects_of_user->checkProjectInCorrectTime($this->data[self::PROJEKT], $this->data[self::STARTDT], $this->data[self::ENDEDT])) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: (' + .$this->data[self::STARTDT].') ('.$this->data[self::ENDEDT].')'); + } + } + + protected function checkPhaseInterval() { + if (!empty($this->data[self::PHASE]) && !$this->projektph_of_user->checkProjectphaseInCorrectTime($this->data[self::PHASE], $this->data[self::STARTDT], $this->data[self::ENDEDT])) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: (' + .$this->data[self::STARTDT].') ('.$this->data[self::ENDEDT].')'); + } + } + + protected function checkVals() { + $failedvals = $this->_checkVals($this->data[self::OE],$this->data[self::PROJEKT],$this->data[self::PHASE],$this->data[self::SERVICE]); + if( count($failedvals) > 0 ) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.implode(', ', $failedvals).')'); + } + } + + protected function _checkVals ($oe_val, $project_val, $phase_val, $service_val) { + $error = array(); + if ($service_val && ( filter_var($service_val, FILTER_VALIDATE_INT) === false )) { + $error[] = 'service'; + } + if ($phase_val && ( filter_var($phase_val, FILTER_VALIDATE_INT) === false )) { + $error[] = 'phase'; + } + if ($oe_val) { + $oecheck = new organisationseinheit($oe_val); + if ($oecheck->errormsg) { + $error[] = 'OE'; + } + } + if ($project_val) { + $procheck = new projekt($project_val); + if ($procheck->errormsg) { + $error[] = 'projekt'; + } + } + return $error; + } + + protected function mapLehreIntern() { + if ($this->data[self::AKTIVITAET] == 'LehreIntern') { + $this->data[self::AKTIVITAET] = 'Lehre'; + } + } + + protected function prepareZeitaufzeichnung() { + $this->zeit->new = true; + $this->zeit->beschreibung = NULL; + $this->zeit->oe_kurzbz_1 = NULL; + $this->zeit->projekt_kurzbz = NULL; + $this->zeit->projektphase_id = NULL; + $this->zeit->service_id = NULL; + + $this->zeit->insertamum = date('Y-m-d H:i:s'); + $this->zeit->updateamum = date('Y-m-d H:i:s'); + $this->zeit->updatevon = $this->user; + $this->zeit->insertvon = $this->user; + $this->zeit->uid = $this->data[self::USER]; + $this->zeit->aktivitaet_kurzbz = $this->data[self::AKTIVITAET]; + $this->zeit->start = $this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d H:i:s'); + $this->zeit->ende = $this->datum->formatDatum($this->data[self::ENDEDT], $format='Y-m-d H:i:s'); + if (isset($this->data[self::BESCHREIBUNG])) { + $this->zeit->beschreibung = $this->data[self::BESCHREIBUNG]; + } + if (isset($this->data[self::OE])) { + $this->zeit->oe_kurzbz_1 = $this->data[self::OE]; + } + if (isset($this->data[self::PROJEKT])) { + $this->zeit->projekt_kurzbz = $this->data[self::PROJEKT]; + } + if (isset($this->data[self::PHASE])) { + $this->zeit->projektphase_id = $this->data[self::PHASE]; + } + if (isset($this->data[self::SERVICE])) { + $this->zeit->service_id = $this->data[self::SERVICE]; + } + $this->zeit->homeoffice = false; + if (isset($this->data[self::HOMEOFFICE])) { + $this->zeit->homeoffice = (strtolower($this->data[self::HOMEOFFICE]) == 'true'); + if (strtolower($this->data[self::HOMEOFFICE]) == 'true') { + // check, ob homeoffice gemäß Bisverwendung + $vonCSV = $this->datum->formatDatum($this->data[self::STARTDT], $format = 'Y-m-d'); + $verwendung = new bisverwendung(); + $verwendung->getVerwendungDatum($this->data[self::USER], $vonCSV); + + foreach ($verwendung->result as $v) { + if ($v->homeoffice) { + $this->zeit->homeoffice = true; + } else { + $this->addError($this->p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV))); + $this->zeit->homeoffice = false; + } + } + } + } + } + + protected function checkImporttage() { + $tag = $this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d'); + + if(!in_array($tag, $this->importtage_array)) + { + $this->importtage_array[] = $tag; + $this->zeit->deleteEntriesForUser($this->user, $tag); + $tag_aktuell = $tag; + } + else if ($this->ende_vorher < $this->zeit->start) + { + $this->savePause(); + } + + $this->ende_vorher = $this->zeit->ende; + } + + protected function savePause() { + $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->start = $this->ende_vorher; + $pause->ende = $this->zeit->start; + $pause->beschreibung = ''; + $pause->homeoffice = $this->zeit->homeoffice; + if(!$pause->save()) + { + $this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg, true); + } + } + + protected function saveZeit() { + if($this->data[self::STARTDT] != $this->data[self::ENDEDT]) + { + if(!$this->zeit->save()) + { + $this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$this->zeit->errormsg.'('.$this->zeit->start.')', true); + } + else { + $this->anzahl++; + } + } + else { + $this->anzahl++; + } + } + + protected function checkAndCleanup() { + if($this->anzahl>0) + { + $this->addInfo($this->p->t("global/datenWurdenGespeichert").' ('.$this->anzahl.')'); + foreach ($this->importtage_array as $ptag) + { + $this->zeit->cleanPausenForUser($this->user, $ptag); + } + } + } +} From c3b2533ae9d825c9dd205dd2dcc73a9f2a76139b Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Thu, 3 Mar 2022 08:37:42 +0100 Subject: [PATCH 25/29] Comment & Warnings --- cis/private/tools/zeitaufzeichnung.php | 1 + include/zeitaufzeichnung_csv_import.class.php | 24 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 02dcc20eb..39cd2935b 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -896,6 +896,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit_csv_import = new zeitaufzeichnung_csv_import($p, $zeit, $project_kurzbz_array, $projectphasen_kurzbz_array, $sperrdatum, $limitdatum, $projects_of_user, $projektph_of_user, $datum, $user); $zeit_csv_import->parseCSV(); echo $zeit_csv_import->InfosToHTML(); + echo $zeit_csv_import->WarningsToHTML(); echo $zeit_csv_import->ErrorsToHTML(); } else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum) diff --git a/include/zeitaufzeichnung_csv_import.class.php b/include/zeitaufzeichnung_csv_import.class.php index 23cf16037..290da70e6 100644 --- a/include/zeitaufzeichnung_csv_import.class.php +++ b/include/zeitaufzeichnung_csv_import.class.php @@ -20,6 +20,7 @@ class zeitaufzeichnung_csv_import { protected $fh; protected $errors; + protected $warnings; protected $infos; protected $anzahl; @@ -67,6 +68,7 @@ class zeitaufzeichnung_csv_import { $this->user = $user; $this->errors = array(); + $this->warnings = array(); $this->infos = array(); } @@ -87,6 +89,10 @@ class zeitaufzeichnung_csv_import { return !empty($this->errors); } + public function hasWarnings() { + return !empty($this->warnings); + } + public function hasInfos() { return !empty($this->infos); } @@ -99,6 +105,14 @@ class zeitaufzeichnung_csv_import { return $html; } + public function WarningsToHTML() { + $html = ''; + foreach ($this->errors as $msg) { + $html .= '' . $msg . '
' . "\n"; + } + return $html; + } + public function InfosToHTML() { $html = ''; foreach ($this->infos as $msg) { @@ -114,6 +128,13 @@ class zeitaufzeichnung_csv_import { $this->errors[] = $msg; } + protected function addWarning($msg, $prepend_current_line=false) { + if( $prepend_current_line ) { + $msg = 'Zeile ' . $this->current_line . ' - ' . $msg; + } + $this->warnings[] = $msg; + } + protected function addInfo($msg) { $this->infos[] = $msg; } @@ -219,6 +240,7 @@ class zeitaufzeichnung_csv_import { } protected function checkZeitsperren() { + // NOTE(chris): checkZeitsperren() is defined in private/tools/zeitaufzeichnung.php $zscheck = checkZeitsperren($this->p, $this->user, $this->datum->formatDatum($this->data[self::STARTDT], $format = 'Y-m-d')); if ($zscheck['status'] === false) { throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": " . $zscheck['msg']); @@ -360,7 +382,7 @@ class zeitaufzeichnung_csv_import { if ($v->homeoffice) { $this->zeit->homeoffice = true; } else { - $this->addError($this->p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV))); + $this->addWarning($this->p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV))); $this->zeit->homeoffice = false; } } From 091fd3487f3b78b91bee32949d51e5bdfccfb62b Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Thu, 3 Mar 2022 15:59:16 +0100 Subject: [PATCH 26/29] refactoring: zeitaufzeichnung_import & zeitaufzeichnung_import_csv & zeitaufzeichnung_import_post --- cis/private/tools/zeitaufzeichnung.php | 94 +++- include/zeitaufzeichnung_csv_import.class.php | 455 ------------------ include/zeitaufzeichnung_import.class.php | 225 +++++++++ include/zeitaufzeichnung_import_csv.class.php | 429 +++++++++++++++++ .../zeitaufzeichnung_import_post.class.php | 222 +++++++++ 5 files changed, 945 insertions(+), 480 deletions(-) delete mode 100644 include/zeitaufzeichnung_csv_import.class.php create mode 100644 include/zeitaufzeichnung_import.class.php create mode 100644 include/zeitaufzeichnung_import_csv.class.php create mode 100644 include/zeitaufzeichnung_import_post.class.php diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 39cd2935b..42780cc59 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -44,9 +44,10 @@ require_once('../../../include/globals.inc.php'); require_once('../../../include/bisverwendung.class.php'); require_once('../../../include/studiensemester.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); -require_once('../../../include/zeitaufzeichnung_csv_import.class.php'); +require_once('../../../include/zeitaufzeichnung_import_csv.class.php'); +require_once('../../../include/zeitaufzeichnung_import_post.class.php'); -function checkZeitsperren($p, $uid, $day) +/*function checkZeitsperren($p, $uid, $day) { $zs = new zeitsperre(); $sperreVorhanden = false; @@ -76,7 +77,7 @@ function checkZeitsperren($p, $uid, $day) "msg" => $msg ); } -} +}*/ $sprache = getSprache(); $p=new phrasen($sprache); @@ -156,8 +157,8 @@ else $gesperrt_bis = '2015-08-31'; $sperrdatum = date('c', strtotime($gesperrt_bis)); -$datumjetzt = strtotime("+5 weeks"); -$limitdatum = date('c', $datumjetzt); +/*$datumjetzt = strtotime("+5 weeks"); +$limitdatum = date('c', $datumjetzt);*/ // Uses urlencode to avoid XSS issues $zeitaufzeichnung_id = urlencode(isset($_GET['zeitaufzeichnung_id'])?$_GET['zeitaufzeichnung_id']:''); @@ -870,40 +871,80 @@ if($kartennummer != '') if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { - $zeit = new zeitaufzeichnung(); + #$zeit = new zeitaufzeichnung(); // TODO(chris): make lokal - $projects_of_user = new projekt(); + // TODO(chris): make lokal + /*$projects_of_user = new projekt(); $projects= $projects_of_user->getProjekteListForMitarbeiter($user); - $project_kurzbz_array = array(); + $project_kurzbz_array = array();*/ + // TODO(chris): make lokal? $projektph_of_user = new projektphase(); - $projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user); - $projectphasen_kurzbz_array = array(); + $projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user); // TODO(chris): this seems to be used below + /*$projectphasen_kurzbz_array = array();*/ - foreach($projects as $prjct) + // TODO(chris): make lokal + /*foreach($projects as $prjct) { array_push($project_kurzbz_array, (string) $prjct->projekt_kurzbz); - } - foreach ($projektphasen as $pp) + }*/ + // TODO(chris): make lokal + /*foreach ($projektphasen as $pp) { array_push($projectphasen_kurzbz_array, (string) $pp->projektphase_id); - } + }*/ - $projectphase = new projektphase(); + // NOTE(chris): this is the same as projektph_of_user + /*$projectphase = new projektphase();*/ + // NOTE(chris): CSV Import if ($_FILES['csv']['error'] == 0 && isset($_POST['import'])) { - $zeit_csv_import = new zeitaufzeichnung_csv_import($p, $zeit, $project_kurzbz_array, $projectphasen_kurzbz_array, $sperrdatum, $limitdatum, $projects_of_user, $projektph_of_user, $datum, $user); - $zeit_csv_import->parseCSV(); - echo $zeit_csv_import->InfosToHTML(); - echo $zeit_csv_import->WarningsToHTML(); - echo $zeit_csv_import->ErrorsToHTML(); + $zeit_csv_import = new zeitaufzeichnung_import_csv($p, $user, $sperrdatum, $_FILES['csv']['tmp_name']); + $zeit_csv_import->import(); + echo $zeit_csv_import->OutputToHTML(); } else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum) echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; + // NOTE(chris): Save else if (isset($_POST['save']) || isset($_POST['edit'])) { + $zeit_post_import = new zeitaufzeichnung_import_post($p, $user, isset($_POST['edit']), [ + 'aktivitaet_kurzbz' => $aktivitaet_kurzbz, + 'beschreibung' => $beschreibung, + 'bis' => $bis, + 'bis_pause' => $bis_pause, + 'homeoffice' => $homeoffice, + 'kunde_uid' => $kunde_uid, + 'oe_kurzbz_1' => $oe_kurzbz_1, + 'oe_kurzbz_2' => $oe_kurzbz_2, + 'projekt_kurzbz' => $projekt_kurzbz, + 'projektphase_id' => $projektphase_id, + 'service_id' => $service_id, + 'von' => $von, + 'von_pause' => $von_pause, + 'zeitaufzeichnung_id' => $zeitaufzeichnung_id, + ]); + $zeit_post_import->import(); + echo $zeit_post_import->OutputToHTML(); + if (!$zeit_post_import->hasErrors() && !$zeit_post_import->hasWarnings()) { + // Nach dem Speichern in den neu Modus springen und als Von Zeit + // das Ende des letzten Eintrages eintragen + $zeitaufzeichnung_id = ''; + $uid = $user; + $aktivitaet_kurzbz = ''; + $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))); + $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))+3600); + $beschreibung = ''; + $oe_kurzbz_1 = ''; + $oe_kurzbz_2 = ''; + $projekt_kurzbz = ''; + $projektphase_id = ''; + $service_id = ''; + $kunde_uid = ''; + } + /* if(isset($_POST['edit'])) { if(!$zeit->load($zeitaufzeichnung_id)) @@ -1048,8 +1089,10 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeitaufzeichnung_id = ''; $uid = $zeit->uid; $aktivitaet_kurzbz = ''; - $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)); - $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)+3600); + #$von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)); + #$bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)+3600); + $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))); + $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))+3600); $beschreibung = ''; $oe_kurzbz_1 = ''; $oe_kurzbz_2 = ''; @@ -1058,6 +1101,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $service_id = ''; $kunde_uid = ''; } + */ } } @@ -1235,7 +1279,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) //Formular echo '
'; -/* echo '
- ".$p->t("zeitaufzeichnung/neu")." | + ".$p->t("zeitaufzeichnung/neu")." | "; - CSV Import | + if (!$adminView) + { + echo + " + CSV Import | - CSV Export | + CSV Export | + "; + } - Projektübersichtexport"; + echo " Projektübersichtexport"; if($anzprojekte > 0) echo " | ".$p->t("zeitaufzeichnung/projektexport").""; echo "

CSV-Export

'; //SpeichernButton if($zeitaufzeichnung_id == '') - echo '
+

+

+
  + // + // TESTAUSGABEN + // + //
  + // + // TESTAUSGABEN + // + //
'.$p->t("zeitaufzeichnung/organisationseinheiten").' '; else echo ''; - //echo ''; - - // $test = '2022-02-01'; - // echo "hello " . $test . "
"; - // - // $zs = new zeitsperre(); - // $sperreVorhanden = false; - // $stunde = '09'; - // $zs->getSperreByDate($user, $test, $stunde); - - //var_dump($zs->result); - - // foreach ($zs->result as $z) - // { - // if ($z->zeitsperretyp_kurzbz) - // { - // $sperreVorhanden = true; - // echo "zeitsperre vorhanden: ". $z->zeitsperretyp_kurzbz . " am: " . $test; - // } - // else { - // echo "zeitsperre nicht vorhanden"; - // } - // } - //Testausgaben - // echo ' - //
  - // - // TESTAUSGABEN - // - //
  - // - // TESTAUSGABEN - // - //
'; From 934631f4e321eec49ba5cd8160a4db307fa4adc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 25 Feb 2022 15:23:48 +0100 Subject: [PATCH 22/29] =?UTF-8?q?Berechtigungspr=C3=BCfung=20auf=20Unterge?= =?UTF-8?q?bene=20erweitert=20beim=20Laden=20der=20Projektphasen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung_projektphasen.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung_projektphasen.php b/cis/private/tools/zeitaufzeichnung_projektphasen.php index cd0acc0bd..053f38b91 100644 --- a/cis/private/tools/zeitaufzeichnung_projektphasen.php +++ b/cis/private/tools/zeitaufzeichnung_projektphasen.php @@ -27,12 +27,18 @@ require_once('../../../include/projektphase.class.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/phrasen.class.php'); +require_once('../../../include/mitarbeiter.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); $user = get_uid(); +$mitarbeiter = new mitarbeiter(); +$mitarbeiter->getUntergebene($user, true); +$untergebenen_arr = array(); +$untergebenen_arr = $mitarbeiter->untergebene; + //Wenn User Administrator ist und UID uebergeben wurde, dann die Phasen //des uebergebenen Users anzeigen if (isset($_GET['uid']) && $user != $_GET['uid']) @@ -40,7 +46,7 @@ if (isset($_GET['uid']) && $user != $_GET['uid']) $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); - if ($rechte->isBerechtigt('admin')) + if ($rechte->isBerechtigt('admin') || (in_array($_GET['uid'], $untergebenen_arr))) { $user = $_GET['uid']; } From d53f14eeea259004d2ccef8aef7f5caecfececce Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 28 Feb 2022 14:02:16 +0100 Subject: [PATCH 23/29] =?UTF-8?q?blockierende=20Zeitsperren=20auch=20serve?= =?UTF-8?q?rseitig=20pr=C3=BCfen,=20clientseitige=20Pr=C3=BCfung=20geringf?= =?UTF-8?q?=C3=BCgig=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 102 ++++++++++++------ .../tools/zeitaufzeichnung_zeitsperren.php | 2 +- include/zeitsperre.class.php | 13 ++- 3 files changed, 82 insertions(+), 35 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 96a773956..8c7f4d1dc 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -45,6 +45,37 @@ require_once('../../../include/bisverwendung.class.php'); require_once('../../../include/studiensemester.class.php'); require_once('../../../include/benutzerberechtigung.class.php'); +function checkZeitsperren($p, $uid, $day) +{ + $zs = new zeitsperre(); + $sperreVorhanden = false; + + if( !$zs->getSperreByDate($uid, $day, null, + zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN) ) + { + return array( + "status" => false, + "msg" => 'Fehler beim Überprüfen der Zeitsperren' + ); + } + + if( count($zs->result) === 0 ) + { + return array( + "status" => true, + "msg" => '' + ); + } else { + $zsdate = new DateTime($day); + $zsdate = $zsdate->format('d.m.Y'); + $msg = $p->t("zeitaufzeichnung/zeitsperreVorhanden", + [$zsdate, $zs->result[0]->zeitsperretyp_kurzbz]); + return array( + "status" => false, + "msg" => $msg + ); + } +} $sprache = getSprache(); $p=new phrasen($sprache); @@ -336,7 +367,7 @@ echo ' ret_uhrzeit = foo(now.getHours()); ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes()); - + document.getElementById("bis_datum").value=ret_datum; document.getElementById("bis_uhrzeit").value=ret_uhrzeit; } @@ -354,9 +385,10 @@ echo ' ret_uhrzeit = foo(now.getHours()); ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes()); - + document.getElementById("von_datum").value=ret_datum; document.getElementById("von_uhrzeit").value=ret_uhrzeit; + $("#von_datum").trigger("change"); } function foo(val) @@ -464,6 +496,7 @@ echo ' { document.getElementById("von_datum").value=document.getElementById("bis_datum").value; document.getElementById("von_uhrzeit").value=document.getElementById("bis_uhrzeit").value; + $("#von_datum").trigger("change"); } function checkdatum() @@ -794,26 +827,23 @@ echo ' uid: uid }, success: function (json) - { - if (json.length > 0) { var output = ""; - for (var i = 0; i < json.length; i++) + if (json.length > 0) { - output = "Für den Tag " + json[i].day + " ist bereits eine Zeitsperre vom Typ " + json[i].typ + " eingetragen!"; - - var phrase = "' . $p->t("zeitaufzeichnung/zeitsperreVorhanden", ['{day}', '{typ}']) . '"; - phrase = phrase.replace(\'{day}\', json[i].day); - phrase = phrase.replace(\'{typ}\', json[i].typ); - alert (phrase); + output = "' . $p->t("zeitaufzeichnung/zeitsperreVorhanden", ['{day}', '{typ}']) . '"; + output = output.replace(\'{day}\', json[0].day); + output = output.replace(\'{typ}\', json[0].typ); + $("#errZeitsperren").show(); + $("#buttonSave").prop("disabled",true); } - } - else - { - $("#buttonSave").prop("disabled",false); - output = ""; - } - $("#outputZeitsperren").html(output); + else + { + $("#errZeitsperren").hide(); + $("#buttonSave").prop("disabled",false); + output = ""; + } + $("#outputZeitsperren").html(output); } }); } @@ -826,14 +856,6 @@ echo ' echo '

'.$p->t("zeitaufzeichnung/zeitaufzeichnungVon").' '.$db->convert_html_chars($bn->vorname).' '.$db->convert_html_chars($bn->nachname).'

'; -echo ' -
-

-

-
 
  +

+
'.$p->t("global/von").' - '.$p->t("global/bis").' +
+ /*echo '
'; echo '';*/ @@ -1859,8 +1903,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; echo ''; echo '\n"; echo "
'; -// if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) -// echo ''.$p->t("global/bearbeiten").''; + //if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) + // echo ''.$p->t("global/bearbeiten").''; echo ""; if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) diff --git a/include/zeitaufzeichnung_csv_import.class.php b/include/zeitaufzeichnung_csv_import.class.php deleted file mode 100644 index 290da70e6..000000000 --- a/include/zeitaufzeichnung_csv_import.class.php +++ /dev/null @@ -1,455 +0,0 @@ -p = $p; - $this->zeit = $zeit; - - $this->project_kurzbz_array = $project_kurzbz_array; - $this->projectphasen_kurzbz_array = $projectphasen_kurzbz_array; - - $this->sperrdatum = $sperrdatum; - $this->limitdatum = $limitdatum; - - $this->projects_of_user = $projects_of_user; - $this->projektph_of_user = $projektph_of_user; - - $this->datum = $datum; - - $this->user = $user; - $this->errors = array(); - $this->warnings = array(); - $this->infos = array(); - } - - public function parseCSV() { - $this->tmpname = $_FILES['csv']['tmp_name']; - try { - $this->checkMimeType(); - $this->openFileForReading(); - $this->checkEncoding(); - $this->iterateRows(); - $this->checkAndCleanup(); - } catch (Exception $ex) { - $this->addError($ex->getMessage()); - } - } - - public function hasErrors() { - return !empty($this->errors); - } - - public function hasWarnings() { - return !empty($this->warnings); - } - - public function hasInfos() { - return !empty($this->infos); - } - - public function ErrorsToHTML() { - $html = ''; - foreach ($this->errors as $msg) { - $html .= '' . $msg . '
' . "\n"; - } - return $html; - } - - public function WarningsToHTML() { - $html = ''; - foreach ($this->errors as $msg) { - $html .= '' . $msg . '
' . "\n"; - } - return $html; - } - - public function InfosToHTML() { - $html = ''; - foreach ($this->infos as $msg) { - $html .= '' . $msg . '
' . "\n"; - } - return $html; - } - - protected function addError($msg, $prepend_current_line=false) { - if( $prepend_current_line ) { - $msg = 'Zeile ' . $this->current_line . ' - ' . $msg; - } - $this->errors[] = $msg; - } - - protected function addWarning($msg, $prepend_current_line=false) { - if( $prepend_current_line ) { - $msg = 'Zeile ' . $this->current_line . ' - ' . $msg; - } - $this->warnings[] = $msg; - } - - protected function addInfo($msg) { - $this->infos[] = $msg; - } - - protected function checkMimeType() { - $mimeType = mime_content_type($this->tmpname); - if( $mimeType !== 'text/plain' ) { - throw new Exception('Datei ist nicht im CSV Format.'); - } - } - - protected function openFileForReading() { - if( false === ($this->fh = fopen($this->tmpname, 'r')) ) - { - throw new Exception('CSV - Datei konnte nicht zum lesen geöffnet werden.'); - } - } - - protected function checkEncoding() { - $filecontent = file_get_contents($this->tmpname); - if( !mb_detect_encoding($filecontent, 'UTF-8', true) ) { - throw new Exception('Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!'); - } - } - - protected function iterateRows() { - set_time_limit(0); - $this->anzahl = 0; - $this->importtage_array = array(); - $this->ende_vorher = date('Y-m-d H:i:s'); - - $this->data = null; - $this->current_line = 0; - while(($this->data = fgetcsv($this->fh, 1000, ';', '"')) !== FALSE) - { - if( false !== strpos($this->data[self::USER], '#') ) { - // ignore lines starting with # - continue; - } - $this->current_line++; - $this->processData(); - } - } - - protected function processData() { - try { - $this->checkUser(); - $this->checkProject(); - $this->checkPhase(); - $this->initData(); - $this->checkZeitsperren(); - $this->checkSperrdatum(); - $this->checkLimitdatum(); - $this->checkDienstreise(); - $this->checkTagesgenau(); - $this->checkProjectInterval(); - $this->checkPhaseInterval(); - $this->checkVals(); - $this->mapLehreIntern(); - $this->prepareZeitaufzeichnung(); - $this->checkImporttage(); - $this->saveZeit(); - } catch (Exception $ex) { - $this->addError($ex->getMessage(), true); - } - } - - protected function checkUser() { - if( $this->data[self::USER] !== $this->user && (strpos($this->data[self::USER],'#') !== false) ) - { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert ('.$this->data[self::USER].')'); - } - } - - protected function checkProject() { - if(!empty($this->data[self::PROJEKT]) && !in_array($this->data[self::PROJEKT], $this->project_kurzbz_array) && empty($this->data[self::PHASE])) - { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: ('.$this->data[self::PROJEKT].')'); - } - - } - - protected function checkPhase() { - if(!empty($this->data[self::PHASE]) && !in_array($this->data[self::PHASE], $this->projectphasen_kurzbz_array)) - { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: ('.$this->data[self::PHASE].')'); - } - } - - protected function initData() { - if (!isset($this->data[self::OE])) { - $this->data[self::OE] = NULL; - } - if (!isset($this->data[self::PROJEKT])) { - $this->data[self::PROJEKT] = NULL; - } - if (!isset($this->data[self::PHASE])) { - $this->data[self::PHASE] = NULL; - } - if (!isset($this->data[self::SERVICE])) { - $this->data[self::SERVICE] = NULL; - } - } - - protected function checkZeitsperren() { - // NOTE(chris): checkZeitsperren() is defined in private/tools/zeitaufzeichnung.php - $zscheck = checkZeitsperren($this->p, $this->user, $this->datum->formatDatum($this->data[self::STARTDT], $format = 'Y-m-d')); - if ($zscheck['status'] === false) { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": " . $zscheck['msg']); - } - } - - protected function checkSperrdatum() { - if ($this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d H:i:s') < $this->sperrdatum) { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") - .': Eingabe nicht möglich da vor dem Sperrdatum ('.$this->data[self::STARTDT].')'); - } - - } - - protected function checkLimitdatum() { - if ($this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d H:i:s') > $this->limitdatum) { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") - .': Eingabe nicht möglich da ('.$this->data[self::STARTDT].') zu weit in der Zukunft liegt.'); - } - } - - protected function checkDienstreise() { - $vonCSV = $this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d'); - $bisCSV = $this->datum->formatDatum($this->data[self::ENDEDT], $format='Y-m-d'); - $dateVonCSV = new DateTime($vonCSV); - $dateBisCSV = new DateTime($bisCSV); - if ($dateVonCSV!=$dateBisCSV && $this->data[self::AKTIVITAET]!="DienstreiseMT") - { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") - .': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).'); - } - } - - protected function checkTagesgenau() { - $bisHour = $this->datum->formatDatum($this->data[self::ENDEDT], $format = 'H:i:s'); - if ($bisHour == '00:00:00') { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") - .': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!'); - } - } - - protected function checkProjectInterval() { - if (empty($this->data[self::PHASE]) && !empty($this->data[self::PROJEKT]) - && !$this->projects_of_user->checkProjectInCorrectTime($this->data[self::PROJEKT], $this->data[self::STARTDT], $this->data[self::ENDEDT])) - { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") - .': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: (' - .$this->data[self::STARTDT].') ('.$this->data[self::ENDEDT].')'); - } - } - - protected function checkPhaseInterval() { - if (!empty($this->data[self::PHASE]) && !$this->projektph_of_user->checkProjectphaseInCorrectTime($this->data[self::PHASE], $this->data[self::STARTDT], $this->data[self::ENDEDT])) - { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") - .': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: (' - .$this->data[self::STARTDT].') ('.$this->data[self::ENDEDT].')'); - } - } - - protected function checkVals() { - $failedvals = $this->_checkVals($this->data[self::OE],$this->data[self::PROJEKT],$this->data[self::PHASE],$this->data[self::SERVICE]); - if( count($failedvals) > 0 ) - { - throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.implode(', ', $failedvals).')'); - } - } - - protected function _checkVals ($oe_val, $project_val, $phase_val, $service_val) { - $error = array(); - if ($service_val && ( filter_var($service_val, FILTER_VALIDATE_INT) === false )) { - $error[] = 'service'; - } - if ($phase_val && ( filter_var($phase_val, FILTER_VALIDATE_INT) === false )) { - $error[] = 'phase'; - } - if ($oe_val) { - $oecheck = new organisationseinheit($oe_val); - if ($oecheck->errormsg) { - $error[] = 'OE'; - } - } - if ($project_val) { - $procheck = new projekt($project_val); - if ($procheck->errormsg) { - $error[] = 'projekt'; - } - } - return $error; - } - - protected function mapLehreIntern() { - if ($this->data[self::AKTIVITAET] == 'LehreIntern') { - $this->data[self::AKTIVITAET] = 'Lehre'; - } - } - - protected function prepareZeitaufzeichnung() { - $this->zeit->new = true; - $this->zeit->beschreibung = NULL; - $this->zeit->oe_kurzbz_1 = NULL; - $this->zeit->projekt_kurzbz = NULL; - $this->zeit->projektphase_id = NULL; - $this->zeit->service_id = NULL; - - $this->zeit->insertamum = date('Y-m-d H:i:s'); - $this->zeit->updateamum = date('Y-m-d H:i:s'); - $this->zeit->updatevon = $this->user; - $this->zeit->insertvon = $this->user; - $this->zeit->uid = $this->data[self::USER]; - $this->zeit->aktivitaet_kurzbz = $this->data[self::AKTIVITAET]; - $this->zeit->start = $this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d H:i:s'); - $this->zeit->ende = $this->datum->formatDatum($this->data[self::ENDEDT], $format='Y-m-d H:i:s'); - if (isset($this->data[self::BESCHREIBUNG])) { - $this->zeit->beschreibung = $this->data[self::BESCHREIBUNG]; - } - if (isset($this->data[self::OE])) { - $this->zeit->oe_kurzbz_1 = $this->data[self::OE]; - } - if (isset($this->data[self::PROJEKT])) { - $this->zeit->projekt_kurzbz = $this->data[self::PROJEKT]; - } - if (isset($this->data[self::PHASE])) { - $this->zeit->projektphase_id = $this->data[self::PHASE]; - } - if (isset($this->data[self::SERVICE])) { - $this->zeit->service_id = $this->data[self::SERVICE]; - } - $this->zeit->homeoffice = false; - if (isset($this->data[self::HOMEOFFICE])) { - $this->zeit->homeoffice = (strtolower($this->data[self::HOMEOFFICE]) == 'true'); - if (strtolower($this->data[self::HOMEOFFICE]) == 'true') { - // check, ob homeoffice gemäß Bisverwendung - $vonCSV = $this->datum->formatDatum($this->data[self::STARTDT], $format = 'Y-m-d'); - $verwendung = new bisverwendung(); - $verwendung->getVerwendungDatum($this->data[self::USER], $vonCSV); - - foreach ($verwendung->result as $v) { - if ($v->homeoffice) { - $this->zeit->homeoffice = true; - } else { - $this->addWarning($this->p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV))); - $this->zeit->homeoffice = false; - } - } - } - } - } - - protected function checkImporttage() { - $tag = $this->datum->formatDatum($this->data[self::STARTDT], $format='Y-m-d'); - - if(!in_array($tag, $this->importtage_array)) - { - $this->importtage_array[] = $tag; - $this->zeit->deleteEntriesForUser($this->user, $tag); - $tag_aktuell = $tag; - } - else if ($this->ende_vorher < $this->zeit->start) - { - $this->savePause(); - } - - $this->ende_vorher = $this->zeit->ende; - } - - protected function savePause() { - $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->start = $this->ende_vorher; - $pause->ende = $this->zeit->start; - $pause->beschreibung = ''; - $pause->homeoffice = $this->zeit->homeoffice; - if(!$pause->save()) - { - $this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg, true); - } - } - - protected function saveZeit() { - if($this->data[self::STARTDT] != $this->data[self::ENDEDT]) - { - if(!$this->zeit->save()) - { - $this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$this->zeit->errormsg.'('.$this->zeit->start.')', true); - } - else { - $this->anzahl++; - } - } - else { - $this->anzahl++; - } - } - - protected function checkAndCleanup() { - if($this->anzahl>0) - { - $this->addInfo($this->p->t("global/datenWurdenGespeichert").' ('.$this->anzahl.')'); - foreach ($this->importtage_array as $ptag) - { - $this->zeit->cleanPausenForUser($this->user, $ptag); - } - } - } -} diff --git a/include/zeitaufzeichnung_import.class.php b/include/zeitaufzeichnung_import.class.php new file mode 100644 index 000000000..e8e6a8b15 --- /dev/null +++ b/include/zeitaufzeichnung_import.class.php @@ -0,0 +1,225 @@ +errors = []; + $this->warnings = []; + $this->infos = []; + + $this->p = $p; + $this->datum = new datum(); + + $this->project = new projekt(); + $this->phase = new projektphase(); + $this->limitdate = date('c', strtotime("+5 weeks")); + + $this->zeit = new zeitaufzeichnung(); + } + + + /** + * @return boolean + */ + public function hasErrors() { + return !empty($this->errors); + } + + /** + * @return boolean + */ + public function hasWarnings() { + return !empty($this->warnings); + } + + /** + * @return boolean + */ + public function hasInfos() { + return !empty($this->infos); + } + + /** + * @return string + */ + public function ErrorsToHTML() { + $html = ''; + foreach ($this->errors as $msg) { + $html .= '' . $msg . '
' . "\n"; + } + return $html; + } + + /** + * @return string + */ + public function WarningsToHTML() { + $html = ''; + foreach ($this->warnings as $msg) { + $html .= '' . $msg . '
' . "\n"; + } + return $html; + } + + /** + * @return string + */ + public function InfosToHTML() { + $html = ''; + foreach ($this->infos as $msg) { + $html .= '' . $msg . '
' . "\n"; + } + return $html; + } + + /** + * @return string + */ + public function OutputToHTML() { + return $this->InfosToHTML() . $this->WarningsToHTML() . $this->ErrorsToHTML(); + } + + /** + * @param string $msg + * @return void + */ + protected function addError($msg) { + $this->errors[] = $msg; + } + + /** + * @param string $msg + * @return void + */ + protected function addWarning($msg) { + $this->warnings[] = $msg; + } + + /** + * @param string $msg + * @return void + */ + protected function addInfo($msg) { + $this->infos[] = $msg; + } + + + /** + * @param string $uid The user id + * @param string $day "Y-m-d" formatted datestring + * @return void + * + * @throws Exception + */ + protected function checkZeitsperren($uid, $day) { + $zs = new zeitsperre(); + + if (!$zs->getSperreByDate($uid, $day, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN)) { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": Fehler beim Überprüfen der Zeitsperren"); + } + + if (count($zs->result) !== 0) { + $zsdate = new DateTime($day); + $zsdate = $zsdate->format('d.m.Y'); + 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) { + $startDate = $this->datum->formatDatum($start, 'Y-m-d'); + $endDate = $this->datum->formatDatum($end, 'Y-m-d'); + if ($startDate != $endDate && $aktivitaet_kurzbz != "DienstreiseMT") { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': 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) { + $endTime = $this->datum->formatDatum($end, 'H:i:s'); + if ($endTime == '00:00:00') { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") + .': 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) { + if (!$this->project->checkProjectInCorrectTime($projekt_kurzbz, $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 $start datestring + * @param string $end datestring + * @return void + * + * @throws Exception + */ + protected function checkPhaseInterval($phase, $start, $end) { + if (!$this->phase->checkProjectphaseInCorrectTime($phase, $start, $end)) { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt: (' . $start . ') (' . $end . ')'); + } + } + +} diff --git a/include/zeitaufzeichnung_import_csv.class.php b/include/zeitaufzeichnung_import_csv.class.php new file mode 100644 index 000000000..7d4250ac9 --- /dev/null +++ b/include/zeitaufzeichnung_import_csv.class.php @@ -0,0 +1,429 @@ +user = $user; + $this->tmpname = $filename; + $this->sperrdatum = $sperrdatum; + + $this->project_kurzbz_array = []; + $projects = $this->project->getProjekteListForMitarbeiter($user); + foreach ($projects as $pp) + $this->project_kurzbz_array[] = (string) $pp->projekt_kurzbz; + + $this->projectphasen_kurzbz_array = []; + $projektphasen = $this->phase->getProjectphaseForMitarbeiter($user); + foreach ($projektphasen as $pp) + $this->projectphasen_kurzbz_array[] = (string) $pp->projektphase_id; + } + + + /** + * @param string $msg + * @param boolean $prepend_current_line + * @return void + */ + protected function addError($msg, $prepend_current_line = false) { + if( $prepend_current_line ) { + $msg = 'Zeile ' . $this->current_line . ' - ' . $msg; + } + $this->errors[] = $msg; + } + + + /** + * @return void + */ + public function import() { + try { + $this->checkMimeType(); + $this->openFileForReading(); + $this->checkEncoding(); + $this->iterateRows(); + $this->checkAndCleanup(); + } catch (Exception $ex) { + $this->addError($ex->getMessage()); + } + } + + + /** + * @return void + * + * @throws Exception + */ + protected function checkMimeType() { + $mimeType = mime_content_type($this->tmpname); + if ($mimeType !== 'text/plain' ) { + throw new Exception('Datei ist nicht im CSV Format.'); + } + } + + /** + * @return void + * + * @throws Exception + */ + protected function openFileForReading() { + if (false === ($this->fh = fopen($this->tmpname, 'r')) ) + { + throw new Exception('CSV - Datei konnte nicht zum lesen geöffnet werden.'); + } + } + + /** + * @return void + * + * @throws Exception + */ + protected function checkEncoding() { + $filecontent = file_get_contents($this->tmpname); + if (!mb_detect_encoding($filecontent, 'UTF-8', true) ) { + throw new Exception('Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!'); + } + } + + /** + * @return void + */ + protected function iterateRows() { + set_time_limit(0); + + $this->anzahl = 0; + $this->importtage_array = array(); + $this->ende_vorher = date('Y-m-d H:i:s'); + + $data = null; + $this->current_line = 0; + while (($data = fgetcsv($this->fh, 1000, ';', '"')) !== FALSE) { + if (false !== strpos($data[self::USER], '#') ) { + // ignore lines starting with # + continue; + } + $this->current_line++; + $this->processData($data); + } + } + + /** + * @param array $data + * @return void + */ + protected function processData($data) { + try { + $this->checkUser($data[self::USER]); + $this->checkProject($data[self::PROJEKT], $data[self::PHASE]); + $this->checkPhase($data[self::PHASE]); + $this->initData($data); + $this->checkZeitsperren($this->user, $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d')); + $this->checkSperrdatum($data[self::STARTDT]); + $this->checkLimitdatum($data[self::STARTDT]); + $this->checkDienstreise($data[self::STARTDT], $data[self::ENDEDT], $data[self::AKTIVITAET]); + $this->checkTagesgenau($data[self::ENDEDT]); + if(empty($data[self::PHASE])) + $this->checkProjectInterval($data[self::PROJEKT], $data[self::STARTDT], $data[self::ENDEDT]); + $this->checkPhaseInterval($data[self::PHASE], $data[self::STARTDT], $data[self::ENDEDT]); + $this->checkVals($data[self::OE],$data[self::PROJEKT],$data[self::PHASE],$data[self::SERVICE]); + $this->mapLehreIntern($data); + $this->prepareZeitaufzeichnung($data); + $this->checkImporttage($data[self::STARTDT]); + $this->saveZeit($data[self::STARTDT], $data[self::ENDEDT]); + } catch (Exception $ex) { + $this->addError($ex->getMessage(), true); + } + } + + /** + * @param string $user The User ID + * @return void + * + * @throws Exception + */ + protected function checkUser($user) { + if ($user !== $this->user && (strpos($user, '#') !== false) ) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert (' . $user . ')'); + } + } + + /** + * @param string $project The Project ID or empty string + * @param string $phase The Phase ID or empty string + * @return void + * + * @throws Exception + */ + protected function checkProject($project, $phase) { + if(!empty($project) && !in_array($project, $this->project_kurzbz_array) && empty($phase)) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: (' . $project . ')'); + } + + } + + /** + * @param string $phase The Phase ID or empty string + * @return void + * + * @throws Exception + */ + protected function checkPhase($phase) { + if(!empty($phase) && !in_array($phase, $this->projectphasen_kurzbz_array)) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgender Projektphase entweder nicht zugewiesen sind oder die Projektphase schon abgeschlossen wurde: (' . $phase . ')'); + } + } + + /** + * @param array $data + * @return void + */ + protected function initData(&$data) { + foreach ([self::OE, self::PROJEKT, self::PHASE, self::SERVICE] as $key) + if (!isset($data[$key])) + $data[$key] = NULL; + } + + /** + * @param string $start datetimestring + * @return void + * + * @throws Exception + */ + protected function checkSperrdatum($start) { + if ($this->datum->formatDatum($start, 'Y-m-d H:i:s') < $this->sperrdatum) { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich da vor dem Sperrdatum (' . $start . ')'); + } + + } + + /** + * @param string $oe_val + * @param string $project_val + * @param string $phase_val + * @param string $service_val + * @return void + * + * @throws Exception + */ + protected function checkVals($oe_val, $project_val, $phase_val, $service_val) { + $failedvals = $this->_checkVals($oe_val, $project_val, $phase_val, $service_val); + if( count($failedvals) > 0 ) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Werte ('.implode(', ', $failedvals).')'); + } + } + + /** + * @param string $oe_val + * @param string $project_val + * @param string $phase_val + * @param string $service_val + * @return array + */ + protected function _checkVals ($oe_val, $project_val, $phase_val, $service_val) { + $error = []; + if ($service_val && ( filter_var($service_val, FILTER_VALIDATE_INT) === false )) { + $error[] = 'service'; + } + if ($phase_val && ( filter_var($phase_val, FILTER_VALIDATE_INT) === false )) { + $error[] = 'phase'; + } + if ($oe_val) { + $oecheck = new organisationseinheit($oe_val); + if ($oecheck->errormsg) { + $error[] = 'OE'; + } + } + if ($project_val) { + $procheck = new projekt($project_val); + if ($procheck->errormsg) { + $error[] = 'projekt'; + } + } + return $error; + } + + /** + * @param array $data + * @return void + */ + protected function mapLehreIntern(&$data) { + if ($data[self::AKTIVITAET] == 'LehreIntern') { + $data[self::AKTIVITAET] = 'Lehre'; + } + } + + /** + * @param array $data + * @return void + */ + protected function prepareZeitaufzeichnung($data) { + $this->zeit->new = true; + $this->zeit->beschreibung = NULL; + $this->zeit->oe_kurzbz_1 = NULL; + $this->zeit->projekt_kurzbz = NULL; + $this->zeit->projektphase_id = NULL; + $this->zeit->service_id = NULL; + + $this->zeit->insertamum = date('Y-m-d H:i:s'); + $this->zeit->updateamum = date('Y-m-d H:i:s'); + $this->zeit->updatevon = $this->user; + $this->zeit->insertvon = $this->user; + $this->zeit->uid = $data[self::USER]; + $this->zeit->aktivitaet_kurzbz = $data[self::AKTIVITAET]; + $this->zeit->start = $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d H:i:s'); + $this->zeit->ende = $this->datum->formatDatum($data[self::ENDEDT], 'Y-m-d H:i:s'); + if (isset($data[self::BESCHREIBUNG])) { + $this->zeit->beschreibung = $data[self::BESCHREIBUNG]; + } + if (isset($data[self::OE])) { + $this->zeit->oe_kurzbz_1 = $data[self::OE]; + } + if (isset($data[self::PROJEKT])) { + $this->zeit->projekt_kurzbz = $data[self::PROJEKT]; + } + if (isset($data[self::PHASE])) { + $this->zeit->projektphase_id = $data[self::PHASE]; + } + if (isset($data[self::SERVICE])) { + $this->zeit->service_id = $data[self::SERVICE]; + } + $this->zeit->homeoffice = false; + if (isset($data[self::HOMEOFFICE])) { + $this->zeit->homeoffice = (strtolower($data[self::HOMEOFFICE]) == 'true'); + if (strtolower($data[self::HOMEOFFICE]) == 'true') { + // check, ob homeoffice gemäß Bisverwendung + $vonCSV = $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d'); + $verwendung = new bisverwendung(); + $verwendung->getVerwendungDatum($data[self::USER], $vonCSV); + + foreach ($verwendung->result as $v) { + if ($v->homeoffice) { + $this->zeit->homeoffice = true; + } else { + $this->addWarning($this->p->t("zeitaufzeichnung/homeofficeNichtErlaubt", [$vonCSV])); + $this->zeit->homeoffice = false; + } + } + } + } + } + + /** + * @param string $start datestring + * @return void + * + * @throws Exception + */ + protected function checkImporttage($start) { + $tag = $this->datum->formatDatum($start, 'Y-m-d'); + + if (!in_array($tag, $this->importtage_array)) { + $this->importtage_array[] = $tag; + $this->zeit->deleteEntriesForUser($this->user, $tag); + } else if ($this->ende_vorher < $this->zeit->start) { + $this->savePause(); + } + + $this->ende_vorher = $this->zeit->ende; + } + + /** + * @return void + */ + protected function savePause() { + $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->start = $this->ende_vorher; + $pause->ende = $this->zeit->start; + $pause->beschreibung = ''; + $pause->homeoffice = $this->zeit->homeoffice; + if(!$pause->save()) + { + $this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg, true); + } + } + + /** + * @param string $start datetimestring + * @param string $end datetimestring + * @return void + */ + protected function saveZeit($start, $end) { + if ($start != $end) { + if (!$this->zeit->save()) { + $this->addError($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $this->zeit->errormsg . '(' . $this->zeit->start . ')', true); + } else { + $this->anzahl++; + } + } else { + $this->anzahl++; + } + } + + /** + * @return void + */ + protected function checkAndCleanup() { + if ($this->anzahl > 0) { + $this->addInfo($this->p->t("global/datenWurdenGespeichert") . ' (' . $this->anzahl . ')'); + foreach ($this->importtage_array as $ptag) { + $this->zeit->cleanPausenForUser($this->user, $ptag); + } + } + } + +} diff --git a/include/zeitaufzeichnung_import_post.class.php b/include/zeitaufzeichnung_import_post.class.php new file mode 100644 index 000000000..dc6381ecb --- /dev/null +++ b/include/zeitaufzeichnung_import_post.class.php @@ -0,0 +1,222 @@ +user = $user; + $this->edit = $edit; + $this->data = $data; + } + + + /** + * @return string + */ + public function ErrorsToHTML() { + $html = ''; + foreach ($this->errors as $msg) { + $html .= '' . $msg . '
' . "\n"; + } + return $html; + } + + + /** + * @return void + */ + public function import() { + try { + $this->checkNew($this->data['zeitaufzeichnung_id']); + $this->prepareZeitaufzeichnung($this->data['aktivitaet_kurzbz'], $this->data['von'], $this->data['bis'], $this->data['beschreibung'], $this->data['oe_kurzbz_1'], $this->data['oe_kurzbz_2'], $this->data['projekt_kurzbz'], $this->data['projektphase_id'], $this->data['homeoffice'], $this->data['service_id'], $this->data['kunde_uid']); + $this->checkZeitsperren($this->user, $this->datum->formatDatum($this->data['von'], 'Y-m-d')); + $this->checkProjectInterval($this->data['projekt_kurzbz'], $this->data['von'], $this->data['bis']); + $this->checkLimitdatum($this->data['von']); + $this->checkLimitdatum($this->data['bis']); + $this->checkPhaseInterval($this->data['projektphase_id'], $this->data['von'], $this->data['bis']); + $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->saveZeit(); + } catch (Exception $ex) { + $this->addError($ex->getMessage()); + } + } + + /** + * @param string $zeitaufzeichnung_id + * @return void + */ + protected function checkNew($zeitaufzeichnung_id) { + if($this->edit) { + if(!$this->zeit->load($zeitaufzeichnung_id)) + die($this->p->t("global/fehlerBeimLadenDesDatensatzes")); + + $this->zeit->new = false; + } else { + $this->zeit->new = true; + $this->zeit->insertamum = date('Y-m-d H:i:s'); + $this->zeit->insertvon = $this->user; + } + } + + /** + * @param string $aktivitaet_kurzbz + * @param string $von datetime + * @param string $bis datetime + * @param string $beschreibung + * @param string $oe_kurzbz_1 + * @param string $oe_kurzbz_2 + * @param string $projekt_kurzbz + * @param string $projektphase_id + * @param boolean $homeoffice + * @param string $service_id + * @param string $kunde_uid + * @return void + */ + protected function prepareZeitaufzeichnung($aktivitaet_kurzbz, $von, $bis, $beschreibung, $oe_kurzbz_1, $oe_kurzbz_2, $projekt_kurzbz, $projektphase_id, $homeoffice, $service_id, $kunde_uid) { + $this->zeit->uid = $this->user; + $this->zeit->aktivitaet_kurzbz = $aktivitaet_kurzbz; + $this->zeit->start = $this->datum->formatDatum($von, 'Y-m-d H:i:s'); + $this->zeit->ende = $this->datum->formatDatum($bis, 'Y-m-d H:i:s'); + $this->zeit->beschreibung = $beschreibung; + $this->zeit->oe_kurzbz_1 = $oe_kurzbz_1; + $this->zeit->oe_kurzbz_2 = $oe_kurzbz_2; + $this->zeit->updateamum = date('Y-m-d H:i:s'); + $this->zeit->updatevon = $this->user; + $this->zeit->projekt_kurzbz = $projekt_kurzbz; + $this->zeit->projektphase_id = $projektphase_id; + $this->zeit->homeoffice = $homeoffice; + $this->zeit->service_id = $service_id; + $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($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($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 + * + * @throws Exception + */ + protected function saveZeit() { + if (!$this->zeit->save()) { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $this->zeit->errormsg); + } else if (!$this->hasErrors()) { + $this->addInfo($this->p->t("global/datenWurdenGespeichert")); + } + } + +} From fd209efe55d33f1956b7a14ad9f1e433dcbd4bb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 4 Mar 2022 14:45:44 +0100 Subject: [PATCH 27/29] =?UTF-8?q?CSV=20Import=20Error=20Handling=20=20-=20?= =?UTF-8?q?Leerzeilen=20ignorieren=20=20-=20Pr=C3=BCfung=20der=20Pflichtfe?= =?UTF-8?q?lder=20Zeitsperre=20=20-=20Nicht=20Zeitaufzeichnungsrelevante?= =?UTF-8?q?=20Zeitsperren=20parallell=20zu=20=20=20=20Zeitaufzeichnungen?= =?UTF-8?q?=20m=C3=B6glich?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/profile/zeitsperre_resturlaub.php | 23 +- cis/private/tools/zeitaufzeichnung.php | 493 +++++------------- include/zeitaufzeichnung_import_csv.class.php | 66 +-- include/zeitsperre.class.php | 9 +- 4 files changed, 178 insertions(+), 413 deletions(-) diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 079d4a62f..aba828241 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -361,30 +361,35 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ } //Prüfen auf vorhandene Zeitaufzeichnung - if (isset($_POST['bisdatum']) && isset($_POST['vondatum']) && $zaufzeichnung->existsZeitaufzeichnung($uid, $_POST['vondatum'], $_POST['bisdatum'])) + if (isset($_POST['bisdatum']) && isset($_POST['vondatum']) + && $zaufzeichnung->existsZeitaufzeichnung($uid, $_POST['vondatum'], $_POST['bisdatum']) + // Nur Zeitaufzeichnungsrelevante Typen sollen das speichern blockieren + && in_array($_POST['zeitsperretyp_kurzbz'], zeitsperre::getBlockierendeZeitsperren())) { $error = true; $error_msg .= $p->t('zeitsperre/zeitaufzeichnungVorhanden'); } //Prüfen auf vorhandene Zeitsperre - if (isset($_POST['bisdatum']) && isset($_POST['vondatum'])) + if (isset($_POST['bisdatum']) && isset($_POST['vondatum']) + && in_array($_POST['zeitsperretyp_kurzbz'], zeitsperre::getBlockierendeZeitsperren())) { $von = $_POST['vondatum']; $von2 = new DateTime($von); $von2 = $von2->format('Y-m-d'); $zeitsperre = new zeitsperre(); - if ($zeitsperre->getSperreByDate($uid, $von2, null)) + if ($zeitsperre->getSperreByDate($uid, $von2, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN)) { foreach ($zeitsperre->result as $z) { - if ($z->zeitsperretyp_kurzbz) - { - $typ = $z->zeitsperretyp_kurzbz; - } - $error = true; - $error_msg .= $p->t('zeitsperre/zeitsperreEingetragen', [$von, $typ]); + // Beim editieren nicht mit dem eigenen Eintrag kollidieren + if($_GET['type'] == 'edit_sperre' && $z->zeitsperre_id == $_GET['id']) + continue; + + $typ = $z->zeitsperretyp_kurzbz; + $error = true; + $error_msg .= $p->t('zeitsperre/zeitsperreEingetragen', [$von, $typ]); } } } diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 42780cc59..200697aa8 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -47,38 +47,6 @@ require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/zeitaufzeichnung_import_csv.class.php'); require_once('../../../include/zeitaufzeichnung_import_post.class.php'); -/*function checkZeitsperren($p, $uid, $day) -{ - $zs = new zeitsperre(); - $sperreVorhanden = false; - - if( !$zs->getSperreByDate($uid, $day, null, - zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN) ) - { - return array( - "status" => false, - "msg" => 'Fehler beim Überprüfen der Zeitsperren' - ); - } - - if( count($zs->result) === 0 ) - { - return array( - "status" => true, - "msg" => '' - ); - } else { - $zsdate = new DateTime($day); - $zsdate = $zsdate->format('d.m.Y'); - $msg = $p->t("zeitaufzeichnung/zeitsperreVorhanden", - [$zsdate, $zs->result[0]->zeitsperretyp_kurzbz]); - return array( - "status" => false, - "msg" => $msg - ); - } -}*/ - $sprache = getSprache(); $p=new phrasen($sprache); $sprache_obj = new sprache(); @@ -157,8 +125,6 @@ else $gesperrt_bis = '2015-08-31'; $sperrdatum = date('c', strtotime($gesperrt_bis)); -/*$datumjetzt = strtotime("+5 weeks"); -$limitdatum = date('c', $datumjetzt);*/ // Uses urlencode to avoid XSS issues $zeitaufzeichnung_id = urlencode(isset($_GET['zeitaufzeichnung_id'])?$_GET['zeitaufzeichnung_id']:''); @@ -369,7 +335,7 @@ echo ' ret_uhrzeit = foo(now.getHours()); ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes()); - + document.getElementById("bis_datum").value=ret_datum; document.getElementById("bis_uhrzeit").value=ret_uhrzeit; } @@ -387,7 +353,7 @@ echo ' ret_uhrzeit = foo(now.getHours()); ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes()); - + document.getElementById("von_datum").value=ret_datum; document.getElementById("von_uhrzeit").value=ret_uhrzeit; $("#von_datum").trigger("change"); @@ -871,33 +837,9 @@ if($kartennummer != '') if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { - #$zeit = new zeitaufzeichnung(); // TODO(chris): make lokal - - // TODO(chris): make lokal - /*$projects_of_user = new projekt(); - $projects= $projects_of_user->getProjekteListForMitarbeiter($user); - $project_kurzbz_array = array();*/ - - // TODO(chris): make lokal? $projektph_of_user = new projektphase(); - $projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user); // TODO(chris): this seems to be used below - /*$projectphasen_kurzbz_array = array();*/ + $projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user); - // TODO(chris): make lokal - /*foreach($projects as $prjct) - { - array_push($project_kurzbz_array, (string) $prjct->projekt_kurzbz); - }*/ - // TODO(chris): make lokal - /*foreach ($projektphasen as $pp) - { - array_push($projectphasen_kurzbz_array, (string) $pp->projektphase_id); - }*/ - - // NOTE(chris): this is the same as projektph_of_user - /*$projectphase = new projektphase();*/ - - // NOTE(chris): CSV Import if ($_FILES['csv']['error'] == 0 && isset($_POST['import'])) { $zeit_csv_import = new zeitaufzeichnung_import_csv($p, $user, $sperrdatum, $_FILES['csv']['tmp_name']); @@ -910,24 +852,25 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) else if (isset($_POST['save']) || isset($_POST['edit'])) { $zeit_post_import = new zeitaufzeichnung_import_post($p, $user, isset($_POST['edit']), [ - 'aktivitaet_kurzbz' => $aktivitaet_kurzbz, - 'beschreibung' => $beschreibung, - 'bis' => $bis, + 'aktivitaet_kurzbz' => $aktivitaet_kurzbz, + 'beschreibung' => $beschreibung, + 'bis' => $bis, 'bis_pause' => $bis_pause, - 'homeoffice' => $homeoffice, + 'homeoffice' => $homeoffice, 'kunde_uid' => $kunde_uid, - 'oe_kurzbz_1' => $oe_kurzbz_1, - 'oe_kurzbz_2' => $oe_kurzbz_2, - 'projekt_kurzbz' => $projekt_kurzbz, - 'projektphase_id' => $projektphase_id, - 'service_id' => $service_id, - 'von' => $von, - 'von_pause' => $von_pause, + 'oe_kurzbz_1' => $oe_kurzbz_1, + 'oe_kurzbz_2' => $oe_kurzbz_2, + 'projekt_kurzbz' => $projekt_kurzbz, + 'projektphase_id' => $projektphase_id, + 'service_id' => $service_id, + 'von' => $von, + 'von_pause' => $von_pause, 'zeitaufzeichnung_id' => $zeitaufzeichnung_id, ]); $zeit_post_import->import(); echo $zeit_post_import->OutputToHTML(); - if (!$zeit_post_import->hasErrors() && !$zeit_post_import->hasWarnings()) { + if (!$zeit_post_import->hasErrors() && !$zeit_post_import->hasWarnings()) + { // Nach dem Speichern in den neu Modus springen und als Von Zeit // das Ende des letzten Eintrages eintragen $zeitaufzeichnung_id = ''; @@ -943,169 +886,9 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $service_id = ''; $kunde_uid = ''; } - - /* - if(isset($_POST['edit'])) - { - if(!$zeit->load($zeitaufzeichnung_id)) - die($p->t("global/fehlerBeimLadenDesDatensatzes")); - - $zeit->new = false; - } - else - { - $zeit->new = true; - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->insertvon = $user; - } - - $zeit->uid = $user; - $zeit->aktivitaet_kurzbz = $aktivitaet_kurzbz; - $zeit->start = $datum->formatDatum($von, $format = 'Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($bis, $format = 'Y-m-d H:i:s'); - $zeit->beschreibung = $beschreibung; - $zeit->oe_kurzbz_1 = $oe_kurzbz_1; - $zeit->oe_kurzbz_2 = $oe_kurzbz_2; - $zeit->updateamum = date('Y-m-d H:i:s'); - $zeit->updatevon = $user; - $zeit->projekt_kurzbz = $projekt_kurzbz; - $zeit->projektphase_id = $projektphase_id; - $zeit->homeoffice = $homeoffice; - $zeit->service_id = $service_id; - $zeit->kunde_uid = $kunde_uid; - $saveerror = 0; - $extractTimeBis = $datum->formatDatum($bis, $format = 'H:i:s'); - $extractVon = $datum->formatDatum($von, $format = 'Y-m-d'); - $extractBis = $datum->formatDatum($bis, $format = 'Y-m-d'); - - $zscheck = checkZeitsperren($p, $user, $datum->formatDatum($von, $format='Y-m-d')); - if( $zscheck['status'] === false ) { - echo '' . $p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $zscheck['msg'] . '
'; - $saveerror = 1; - } - elseif (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.
'; - $saveerror = 1; - } - elseif ($datum->formatDatum($von, $format='Y-m-d') > $limitdatum || $datum->formatDatum($bis, $format='Y-m-d') > $limitdatum) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs oder Enddatum zu weit in der Zukunft liegt.
'; - $saveerror = 1; - } - elseif (!$projectphase->checkProjectphaseInCorrectTime($projektphase_id, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d'))) - { - echo '

'.$p->t("global/fehlerBeimSpeichernDerDaten").': - Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektphasenzeitrahmen fällt.


'; - $saveerror = 1; - } - elseif ((abs($von - $bis) > 0 || $extractVon != $extractBis) && $aktivitaet_kurzbz!="DienstreiseMT" && $extractTimeBis != '00:00:00') - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).
'; - $saveerror = 1; - } - elseif ($extractTimeBis == '00:00:00') - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!
'; - $saveerror = 1; - } - elseif (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit']))) - { - - $p_start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - $p_end = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - - // checken ob Pause innerhalb der Arbeitszeit ist - if ($zeit->start > $p_start || $zeit->ende < $p_end) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Pause außerhalb der Arbeitszeit
'; - $saveerror = 1; - - } - elseif ($p_start > $p_end) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Pausenzeiten
'; - $saveerror = 1; - } - else - { - //Eintrag Arbeit bis zur Pause - $zeit->ende = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; - $saveerror = 1; - } - //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 = $user; - $pause->insertvon = $user; - $pause->uid = $user; - $pause->aktivitaet_kurzbz = 'Pause'; - $pause->homeoffice = $homeoffice; - $pause->start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); - $pause->ende = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - $pause->beschreibung = ''; - if(!$pause->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; - $saveerror = 1; - } - // Eintrag Arbeit ab der Pause - if ($zeit->new == false) - { - $zeit->new = true; - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->insertvon = $user; - } - - $zeit->start = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; - $saveerror = 1; - } - } - } - elseif (!isset($_POST['genPause'])) - { - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.''; - $saveerror = 1; - } - } - - if ($saveerror == 0) - { - echo ''.$p->t("global/datenWurdenGespeichert").''; - - // Nach dem Speichern in den neu Modus springen und als Von Zeit - // das Ende des letzten Eintrages eintragen - $zeitaufzeichnung_id = ''; - $uid = $zeit->uid; - $aktivitaet_kurzbz = ''; - #$von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)); - #$bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)+3600); - $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))); - $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))+3600); - $beschreibung = ''; - $oe_kurzbz_1 = ''; - $oe_kurzbz_2 = ''; - $projekt_kurzbz = ''; - $projektphase_id = ''; - $service_id = ''; - $kunde_uid = ''; - } - */ } } - //Datensatz loeschen if(isset($_GET['type']) && $_GET['type']=='delete') { @@ -1176,7 +959,6 @@ if (isset($_GET['type']) && $_GET['type'] == 'edit') } } - //Projekte holen zu denen der Benutzer zugeteilt ist $projekt = new projekt(); @@ -1279,10 +1061,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) //Formular echo '
'; - /*echo ' - -
'; - echo '';*/ if (isset($_GET['csvimport'])) { echo ''; @@ -1318,19 +1096,13 @@ if ($projekt->getProjekteMitarbeiter($user, true)) //Aktivitaet echo ''; echo ''; echo ''; } - + //Start/Ende $von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); @@ -1533,7 +1305,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) - '; @@ -1716,128 +1488,116 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $tag = $datumtag; if($tag!=$datumtag) { + if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') + $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; + else + $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; - //if ($row->uid) - //{ - if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') - $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; - else - $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; + // zeitsperren anzeigen + if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) + { + $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; + $style = 'style="background-color:#cccccc; font-size: 8pt;"'; + } + else + $zeitsperre_text = ''; + if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) + $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; - // zeitsperren anzeigen - if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) + list($h1, $m1) = explode(':', $pausesumme); + $pausesumme = $h1*3600+$m1*60; + $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; + foreach($extlehrearr as $el) + { + if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) + $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); + } + list($h2, $m2) = explode(':', $elsumme); + $elsumme = $h2*3600+$m2*60; + if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') + { + $pausesumme = $pausesumme; + } + else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $tagessaldo-18000; + } + else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) + { + $pausesumme = $pausesumme+1800; + } + + if ($elsumme > 0){ + $pausesumme = $pausesumme + $elsumme; + $pflichtpause = true; + } + + $tagessaldo = $tagessaldo-$pausesumme; + // fehlende Pausen berechnen + $pausefehlt_str = ''; + + //Prüfung auf azgrelevant und blockierende Pausenfehler + $linkExclamation = APP_ROOT. 'skin/images/exclamation.png'; + $linkInformation = APP_ROOT. 'skin/images/information.png'; + + $za = new zeitaufzeichnung(); + $verwendung = new bisverwendung(); + if ($za->checkPausenErrors($user, $tag)) + { + $verwendung->getVerwendungDatum($user, $tag); + foreach ($verwendung->result as $v) { - $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; - $style = 'style="background-color:#cccccc; font-size: 8pt;"'; - } - else - $zeitsperre_text = ''; - if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) - $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; - - list($h1, $m1) = explode(':', $pausesumme); - $pausesumme = $h1*3600+$m1*60; - $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; - foreach($extlehrearr as $el) - { - if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) - $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); - } - list($h2, $m2) = explode(':', $elsumme); - $elsumme = $h2*3600+$m2*60; - if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') - { - $pausesumme = $pausesumme; - } - else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $tagessaldo-18000; - } - else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) - { - $pausesumme = $pausesumme+1800; - } - - if ($elsumme > 0){ - $pausesumme = $pausesumme + $elsumme; - $pflichtpause = true; - } - - $tagessaldo = $tagessaldo-$pausesumme; - // fehlende Pausen berechnen - $pausefehlt_str = ''; - - //Prüfung auf azgrelevant und blockierende Pausenfehler - $linkExclamation = APP_ROOT. 'skin/images/exclamation.png'; - $linkInformation = APP_ROOT. 'skin/images/information.png'; - - $za = new zeitaufzeichnung(); - $verwendung = new bisverwendung(); - if ($za->checkPausenErrors($user, $tag)) - { - $verwendung->getVerwendungDatum($user, $tag); - foreach ($verwendung->result as $v) + if ($v->azgrelevant) { - if ($v->azgrelevant) - { - $pausefehlt_str = ' -- Pause fehlt oder zu kurz -- '; - } - else - { - $pausefehlt_str = ' -- Pause fehlt --'; - } + $pausefehlt_str = ' -- Pause fehlt oder zu kurz -- '; + } + else + { + $pausefehlt_str = ' -- Pause fehlt --'; } } + } - $tagessaldo = date('H:i', ($tagessaldo)); - $colspan = ($za_simple)?6:8; - echo ' - - - '; - - - - $tag=$datumtag; - $tagessumme='00:00'; - $pausesumme='00:00'; - $elsumme='00:00'; - $ersumme = '00:00'; - $extlehrearr = array(); - $tagesbeginn = ''; - $tagesende = ''; - $pflichtpause = false; - $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); - //} - //else - //{ - // echo ''; - //} + $lang = getSprache(); + if ($lang == 'German') + $langindex = 1; + else + $langindex = 2; + echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; + if ($ersumme != '00:00') + $erstr = ' (+ '.$ersumme.' ER)'; + else + { + $erstr = ''; + } + echo ' + + + '; + $tag=$datumtag; + $tagessumme='00:00'; + $pausesumme='00:00'; + $elsumme='00:00'; + $ersumme = '00:00'; + $extlehrearr = array(); + $tagesbeginn = ''; + $tagesende = ''; + $pflichtpause = false; + $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); } // Nach jeder Woche eine Summenzeile einfuegen und eine neue Tabelle beginnen @@ -1903,8 +1663,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) echo ''; echo ''; echo '\n"; echo " '; } - - //echo $p->t("zeitaufzeichnung/gesamtdauer").": ".$db->convert_html_chars($summe); Aukommentiert. Irrelevant } echo '

'.$p->t("zeitaufzeichnung/aktivitaet").''; - //if ($za_simple == 1) - $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; - //else - // $qry = "SELECT * FROM fue.tbl_aktivitaet where sort != 5 or sort is null ORDER by sort,beschreibung"; + + $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; + if($result = $db->db_query($qry)) { echo '
 
'.$p->t("global/von").' - '.$p->t("global/bis").' +
'; + $tagessaldo = date('H:i', ($tagessaldo)); + $colspan = ($za_simple)?6:8; + echo '
'; - // Zusaetzlicher span fuer Addon Informationen + // Zusaetzlicher span fuer Addon Informationen - $lang = getSprache(); - if ($lang == 'German') - $langindex = 1; - else - $langindex = 2; - echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').''.$zeitsperre_text.''.$pausefehlt_str; - if ($ersumme != '00:00') - $erstr = ' (+ '.$ersumme.' ER)'; - else - { - $erstr = ''; - } - echo ' - '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
- '.$p->t("zeitaufzeichnung/pause").': -
'.$tagessaldo.$erstr.'
'.date('H:i', ($pausesumme-3600)).'
'; - if ($tag > $sperrdatum) - echo '<-'; - - echo '
'.$datum->formatDatum($row->datum,'D d.m.Y').'
+ '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
+ '.$p->t("zeitaufzeichnung/pause").': +
'.$tagessaldo.$erstr.'
'.date('H:i', ($pausesumme-3600)).'
'; + if ($tag > $sperrdatum) + echo '<-'; + echo '
'; - //if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) - // echo ''.$p->t("global/bearbeiten").''; echo ""; if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) @@ -2006,17 +1764,8 @@ if ($projekt->getProjekteMitarbeiter($user, true))
'; - /* - } - else - { - echo $p->t("zeitaufzeichnung/sieSindDerzeitKeinenProjektenZugeordnet"); - } - */ } else { diff --git a/include/zeitaufzeichnung_import_csv.class.php b/include/zeitaufzeichnung_import_csv.class.php index 7d4250ac9..27a240e45 100644 --- a/include/zeitaufzeichnung_import_csv.class.php +++ b/include/zeitaufzeichnung_import_csv.class.php @@ -19,7 +19,8 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { const PHASE = 7; const SERVICE = 8; const HOMEOFFICE = 9; - + const ANZAHL_PFLICHTFELDER = 4; + protected $tmpname; protected $fh; @@ -33,12 +34,12 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { protected $projectphasen_kurzbz_array; protected $sperrdatum; - + protected $current_line; protected $homeoffice; - + /** * @param phrasen $p The Translator object * @param string $user The user ID @@ -51,19 +52,19 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { $this->user = $user; $this->tmpname = $filename; $this->sperrdatum = $sperrdatum; - + $this->project_kurzbz_array = []; $projects = $this->project->getProjekteListForMitarbeiter($user); foreach ($projects as $pp) $this->project_kurzbz_array[] = (string) $pp->projekt_kurzbz; - + $this->projectphasen_kurzbz_array = []; $projektphasen = $this->phase->getProjectphaseForMitarbeiter($user); foreach ($projektphasen as $pp) $this->projectphasen_kurzbz_array[] = (string) $pp->projektphase_id; } - + /** * @param string $msg * @param boolean $prepend_current_line @@ -91,11 +92,11 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { $this->addError($ex->getMessage()); } } - + /** * @return void - * + * * @throws Exception */ protected function checkMimeType() { @@ -107,19 +108,19 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { /** * @return void - * + * * @throws Exception */ protected function openFileForReading() { - if (false === ($this->fh = fopen($this->tmpname, 'r')) ) + if (false === ($this->fh = fopen($this->tmpname, 'r')) ) { throw new Exception('CSV - Datei konnte nicht zum lesen geöffnet werden.'); } } - + /** * @return void - * + * * @throws Exception */ protected function checkEncoding() { @@ -142,7 +143,8 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { $data = null; $this->current_line = 0; while (($data = fgetcsv($this->fh, 1000, ';', '"')) !== FALSE) { - if (false !== strpos($data[self::USER], '#') ) { + if ((false !== strpos($data[self::USER], '#')) + || count($data) < self::ANZAHL_PFLICHTFELDER) { // ignore lines starting with # continue; } @@ -158,9 +160,10 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { protected function processData($data) { try { $this->checkUser($data[self::USER]); + $this->initData($data); $this->checkProject($data[self::PROJEKT], $data[self::PHASE]); $this->checkPhase($data[self::PHASE]); - $this->initData($data); + $this->checkZeitsperren($this->user, $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d')); $this->checkSperrdatum($data[self::STARTDT]); $this->checkLimitdatum($data[self::STARTDT]); @@ -182,11 +185,11 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { /** * @param string $user The User ID * @return void - * + * * @throws Exception */ protected function checkUser($user) { - if ($user !== $this->user && (strpos($user, '#') !== false) ) + if ($user !== $this->user || (strpos($user, '#') !== false)) { throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Falsche UID nicht importiert (' . $user . ')'); } @@ -196,7 +199,7 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { * @param string $project The Project ID or empty string * @param string $phase The Phase ID or empty string * @return void - * + * * @throws Exception */ protected function checkProject($project, $phase) { @@ -204,13 +207,13 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { { throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da Sie folgendem Projekt entweder nicht zugewiesen sind oder das Projekt schon abgeschlossen wurde: (' . $project . ')'); } - + } /** * @param string $phase The Phase ID or empty string * @return void - * + * * @throws Exception */ protected function checkPhase($phase) { @@ -228,28 +231,31 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { foreach ([self::OE, self::PROJEKT, self::PHASE, self::SERVICE] as $key) if (!isset($data[$key])) $data[$key] = NULL; + + if (!isset($data[self::HOMEOFFICE])) + $data[$key] = false; } - + /** * @param string $start datetimestring * @return void - * + * * @throws Exception */ protected function checkSperrdatum($start) { if ($this->datum->formatDatum($start, 'Y-m-d H:i:s') < $this->sperrdatum) { throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich da vor dem Sperrdatum (' . $start . ')'); } - + } - + /** * @param string $oe_val * @param string $project_val * @param string $phase_val * @param string $service_val * @return void - * + * * @throws Exception */ protected function checkVals($oe_val, $project_val, $phase_val, $service_val) { @@ -355,11 +361,11 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { } } } - + /** * @param string $start datestring * @return void - * + * * @throws Exception */ protected function checkImporttage($start) { @@ -371,10 +377,10 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { } else if ($this->ende_vorher < $this->zeit->start) { $this->savePause(); } - + $this->ende_vorher = $this->zeit->ende; } - + /** * @return void */ @@ -413,7 +419,7 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { $this->anzahl++; } } - + /** * @return void */ @@ -425,5 +431,5 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { } } } - + } diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php index f42ce4669..57d2ba09a 100644 --- a/include/zeitsperre.class.php +++ b/include/zeitsperre.class.php @@ -25,7 +25,7 @@ class zeitsperre extends basis_db { const NUR_BLOCKIERENDE_ZEITSPERREN = true; const BLOCKIERENDE_ZEITSPERREN = "'Krank','Urlaub','ZA','DienstV','PflegeU','DienstF','CovidSB','CovidKS'"; - + public $new; // boolean public $result = array(); // news Objekt @@ -60,6 +60,11 @@ class zeitsperre extends basis_db $this->load($zeitsperre_id); } + public static function getBlockierendeZeitsperren() + { + return explode("','",trim(self::BLOCKIERENDE_ZEITSPERREN, '\'')); + } + /** * Laedt alle Zeitsperren eines Benutzers wo ende>=now() ist * @param $uid @@ -390,7 +395,7 @@ class zeitsperre extends basis_db if( $nurblockierend ) { $qry .= " AND zeitsperretyp_kurzbz in (" . self::BLOCKIERENDE_ZEITSPERREN . ")"; } - + if(!is_null($stunde)) $qry.=" AND ((vondatum=".$this->db_add_param($datum)." AND vonstunde<=".$this->db_add_param($stunde).") OR vonstunde is null OR vondatum<>".$this->db_add_param($datum).") AND From 6e6ed893e42e66b521e951eaf8f26a8ef7f31d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 4 Mar 2022 14:50:42 +0100 Subject: [PATCH 28/29] =?UTF-8?q?Zeitaufzeichnung=20Problem=20behoben=20wo?= =?UTF-8?q?durch=20nach=20dem=20L=C3=B6schen=20in=20den=20edit=20Modus=20g?= =?UTF-8?q?ewechselt=20wird=20statt=20in=20den=20neu=20Modus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 200697aa8..e94bc0fa4 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -904,7 +904,10 @@ if(isset($_GET['type']) && $_GET['type']=='delete') if($zeit->uid==$user) { if($zeit->delete($zeitaufzeichnung_id)) + { + $zeitaufzeichnung_id = ''; echo ''.$p->t("global/eintragWurdeGeloescht").''; + } else echo ''.$p->t("global/fehlerBeimLoeschenDesEintrags").''; } From e0a2f0490be8a4e5ff491cc6bea4dcf4992d4096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 14 Mar 2022 15:58:13 +0100 Subject: [PATCH 29/29] =?UTF-8?q?Laden=20der=20Untergebenen=20optimiert=20?= =?UTF-8?q?bei=20vielen=20Eintr=C3=A4gen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 11 +++++------ include/mitarbeiter.class.php | 23 +++++++++++++---------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index e94bc0fa4..ba57b442f 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1008,18 +1008,17 @@ if ($projekt->getProjekteMitarbeiter($user, true)) //Dropdown timesheets Mitarbeiter if ($untergebenen_arr) { - $ben = new benutzer(); + $mitarbeiter = new mitarbeiter(); + $mitarbeiter->getMitarbeiterArray($untergebenen_arr); + echo "

"; diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 658154170..cbf31bba1 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1468,22 +1468,25 @@ class mitarbeiter extends benutzer $hasUDF = false; $udf = new UDF(); - $qry = "SELECT DISTINCT ON(mitarbeiter_uid) *, - tbl_benutzer.aktiv as aktiv, - tbl_mitarbeiter.insertamum, - tbl_mitarbeiter.insertvon, - tbl_mitarbeiter.updateamum, - tbl_mitarbeiter.updatevon"; + $qry = "SELECT + *, + tbl_benutzer.aktiv as aktiv, + tbl_mitarbeiter.insertamum, + tbl_mitarbeiter.insertvon, + tbl_mitarbeiter.updateamum, + tbl_mitarbeiter.updatevon"; if ($hasUDF = $udf->personHasUDF()) { $qry .= ", public.tbl_person.udf_values AS p_udf_values"; } - $qry .= " FROM ((public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid)) - JOIN public.tbl_person USING(person_id)) - LEFT JOIN public.tbl_benutzerfunktion USING(uid) - WHERE uid in(".$this->db_implode4SQL($uid_arr).")";; + $qry .= " FROM + public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid) + JOIN public.tbl_person USING(person_id) + WHERE uid in(".$this->db_implode4SQL($uid_arr).")"; + $qry .= " ORDER BY nachname, vorname"; if($this->db_query($qry)) {