From d53f14eeea259004d2ccef8aef7f5caecfececce Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 28 Feb 2022 14:02:16 +0100 Subject: [PATCH] =?UTF-8?q?blockierende=20Zeitsperren=20auch=20serverseiti?= =?UTF-8?q?g=20pr=C3=BCfen,=20clientseitige=20Pr=C3=BCfung=20geringf=C3=BC?= =?UTF-8?q?gig=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 ' - - -

-

- - -'; // 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 ' + +   + +

+ + '.$p->t("global/von").' - '.$p->t("global/bis").' - + '; 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 . ")";