blockierende Zeitsperren auch serverseitig prüfen, clientseitige Prüfung geringfügig angepasst

This commit is contained in:
Harald Bamberger
2022-02-28 14:02:16 +01:00
parent 934631f4e3
commit d53f14eeea
3 changed files with 82 additions and 35 deletions
+70 -32
View File
@@ -45,6 +45,37 @@ require_once('../../../include/bisverwendung.class.php');
require_once('../../../include/studiensemester.class.php'); require_once('../../../include/studiensemester.class.php');
require_once('../../../include/benutzerberechtigung.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(); $sprache = getSprache();
$p=new phrasen($sprache); $p=new phrasen($sprache);
@@ -336,7 +367,7 @@ echo '
ret_uhrzeit = foo(now.getHours()); ret_uhrzeit = foo(now.getHours());
ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes()); ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes());
document.getElementById("bis_datum").value=ret_datum; document.getElementById("bis_datum").value=ret_datum;
document.getElementById("bis_uhrzeit").value=ret_uhrzeit; document.getElementById("bis_uhrzeit").value=ret_uhrzeit;
} }
@@ -354,9 +385,10 @@ echo '
ret_uhrzeit = foo(now.getHours()); ret_uhrzeit = foo(now.getHours());
ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes()); ret_uhrzeit = ret_uhrzeit + ":" + foo(now.getMinutes());
document.getElementById("von_datum").value=ret_datum; document.getElementById("von_datum").value=ret_datum;
document.getElementById("von_uhrzeit").value=ret_uhrzeit; document.getElementById("von_uhrzeit").value=ret_uhrzeit;
$("#von_datum").trigger("change");
} }
function foo(val) function foo(val)
@@ -464,6 +496,7 @@ echo '
{ {
document.getElementById("von_datum").value=document.getElementById("bis_datum").value; document.getElementById("von_datum").value=document.getElementById("bis_datum").value;
document.getElementById("von_uhrzeit").value=document.getElementById("bis_uhrzeit").value; document.getElementById("von_uhrzeit").value=document.getElementById("bis_uhrzeit").value;
$("#von_datum").trigger("change");
} }
function checkdatum() function checkdatum()
@@ -794,26 +827,23 @@ echo '
uid: uid uid: uid
}, },
success: function (json) success: function (json)
{
if (json.length > 0)
{ {
var output = ""; 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!"; output = "' . $p->t("zeitaufzeichnung/zeitsperreVorhanden", ['{day}', '{typ}']) . '";
output = output.replace(\'{day}\', json[0].day);
var phrase = "' . $p->t("zeitaufzeichnung/zeitsperreVorhanden", ['{day}', '{typ}']) . '"; output = output.replace(\'{typ}\', json[0].typ);
phrase = phrase.replace(\'{day}\', json[i].day); $("#errZeitsperren").show();
phrase = phrase.replace(\'{typ}\', json[i].typ); $("#buttonSave").prop("disabled",true);
alert (phrase);
} }
} else
else {
{ $("#errZeitsperren").hide();
$("#buttonSave").prop("disabled",false); $("#buttonSave").prop("disabled",false);
output = ""; output = "";
} }
$("#outputZeitsperren").html(output); $("#outputZeitsperren").html(output);
} }
}); });
} }
@@ -826,14 +856,6 @@ echo '
echo '<h1>'.$p->t("zeitaufzeichnung/zeitaufzeichnungVon").' '.$db->convert_html_chars($bn->vorname).' '.$db->convert_html_chars($bn->nachname).'</h1>'; echo '<h1>'.$p->t("zeitaufzeichnung/zeitaufzeichnungVon").' '.$db->convert_html_chars($bn->vorname).' '.$db->convert_html_chars($bn->nachname).'</h1>';
echo '
<tr>
<td colspan="1">
<p id="outputZeitsperren" style="color:red; font-weight:bold;" >
</p>
</td>
</tr>
';
// Wenn Kartennummer übergeben wurde dann hole uid von Karteninhaber // Wenn Kartennummer übergeben wurde dann hole uid von Karteninhaber
if($kartennummer != '') if($kartennummer != '')
{ {
@@ -934,7 +956,12 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
$data[7] = NULL; $data[7] = NULL;
if (!isset($data[8])) if (!isset($data[8]))
$data[8] = NULL; $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 '<span id="triggerPhasenReset" style="color:red"><b>' . $p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $zscheck['msg'] . '</b></span><br>';
}
elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum)
echo '<span id="triggerPhasenReset" style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')</b></span><br>'; echo '<span id="triggerPhasenReset" style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')</b></span><br>';
elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum) elseif ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') > $limitdatum)
echo '<span id="triggerPhasenReset" style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.</b></span><br>'; echo '<span id="triggerPhasenReset" style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da ('.$data[2].') zu weit in der Zukunft liegt.</b></span><br>';
@@ -1125,8 +1152,13 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
$extractTimeBis = $datum->formatDatum($bis, $format = 'H:i:s'); $extractTimeBis = $datum->formatDatum($bis, $format = 'H:i:s');
$extractVon = $datum->formatDatum($von, $format = 'Y-m-d'); $extractVon = $datum->formatDatum($von, $format = 'Y-m-d');
$extractBis = $datum->formatDatum($bis, $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 '<span id="triggerPhasenReset" style="color:red"><b>' . $p->t("global/fehlerBeimSpeichernDerDaten") . ': ' . $zscheck['msg'] . '</b></span><br>';
$saveerror = 1;
}
elseif (!$projects_of_user->checkProjectInCorrectTime($projekt_kurzbz, $datum->formatDatum($von, $format='Y-m-d'), $datum->formatDatum($bis, $format='Y-m-d')))
{ {
echo '<span id="triggerPhasenReset" style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.</b></span><br>'; echo '<span id="triggerPhasenReset" style="color:red"><b>'.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt.</b></span><br>';
$saveerror = 1; $saveerror = 1;
@@ -1222,7 +1254,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import']))
$saveerror = 1; $saveerror = 1;
} }
} }
if ($saveerror == 0) if ($saveerror == 0)
{ {
echo '<span style="color:green"><b>'.$p->t("global/datenWurdenGespeichert").'</b></span>'; echo '<span style="color:green"><b>'.$p->t("global/datenWurdenGespeichert").'</b></span>';
@@ -1658,16 +1690,22 @@ if ($projekt->getProjekteMitarbeiter($user, true))
</tr>'; </tr>';
echo '<tr><td colspan="4">&nbsp;</td></tr>'; echo '<tr><td colspan="4">&nbsp;</td></tr>';
} }
//Start/Ende //Start/Ende
$von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); $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')); $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s'));
$diff = $bis_ts - $von_ts; $diff = $bis_ts - $von_ts;
echo ' echo '
<tr id="errZeitsperren">
<td>&nbsp;</td>
<td colspan="3">
<p id="outputZeitsperren" style="color:red; font-weight:bold;" ></p>
</td>
</tr>
<tr> <tr>
<td>'.$p->t("global/von").' - '.$p->t("global/bis").'</td> <td>'.$p->t("global/von").' - '.$p->t("global/bis").'</td>
<td> <td>
<input type="text" class="datepicker_datum" id="von_datum" name="von_datum" value="'.$db->convert_html_chars($datum->formatDatum($von, $format='d.m.Y')).'" size="9"> <input type="text" class="datepicker_datum" id="von_datum" name="von_datum" value="'.$db->convert_html_chars($datum->formatDatum($von, $format='d.m.Y')).'" size="9">
<input onchange="checkZeiten()" type="text" class="timepicker" id="von_uhrzeit" name="von_uhrzeit" value="'.$db->convert_html_chars($datum->formatDatum($von, $format='H:i')).'" size="4"> <input onchange="checkZeiten()" type="text" class="timepicker" id="von_uhrzeit" name="von_uhrzeit" value="'.$db->convert_html_chars($datum->formatDatum($von, $format='H:i')).'" size="4">
</td>'; </td>';
@@ -42,7 +42,7 @@ if ( isset($_GET['day']) )
$zs = new zeitsperre(); $zs = new zeitsperre();
$sperreVorhanden = false; $sperreVorhanden = false;
$typ = ''; $typ = '';
$zs->getSperreByDate($uid, $day, null); $zs->getSperreByDate($uid, $day, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN);
$result_obj = array(); $result_obj = array();
$now = new DateTime($day); $now = new DateTime($day);
$now = $now->format('d.m.Y'); $now = $now->format('d.m.Y');
+11 -2
View File
@@ -23,6 +23,9 @@ require_once(dirname(__FILE__).'/basis_db.class.php');
class zeitsperre extends basis_db 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 $new; // boolean
public $result = array(); // news Objekt public $result = array(); // news Objekt
@@ -369,10 +372,12 @@ class zeitsperre extends basis_db
* @param $user * @param $user
* @param $datum * @param $datum
* @param $stunde optional, wird nur abgefragt, wenn != null * @param $stunde optional, wird nur abgefragt, wenn != null
* @param $nurblockierend boolean default false
* @return true wenn ok, false im Fehlerfall * @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 = " $qry = "
SELECT SELECT
* *
@@ -382,6 +387,10 @@ class zeitsperre extends basis_db
vondatum<=".$this->db_add_param($datum)." vondatum<=".$this->db_add_param($datum)."
AND bisdatum>=".$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)) if(!is_null($stunde))
$qry.=" AND $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 ((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 $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 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 . ")";