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 . ")";