From 9b11b19cf9a4d4bf2e16a92141768e1c25ebec18 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 22 Sep 2023 13:33:54 +0200 Subject: [PATCH] Zeitsperre: Maxwert bei Bisdatum --- cis/private/profile/zeitsperre_resturlaub.php | 106 +++++++++++------- config/cis.config-default.inc.php | 2 + locale/de-AT/zeitsperre.php | 1 + locale/en-US/zeitsperre.php | 1 + 4 files changed, 69 insertions(+), 41 deletions(-) diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 46d342971..7f13e0da4 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -79,7 +79,21 @@ else if (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GE else $gesperrt_bis = '2015-08-31'; -//echo $gesperrt_bis; +$todayDate = new DateTime(); +$today = strtotime($todayDate->format('Y-m-d')); + +//MaxDatum für BisFeld berechnen: Default 2 Jahre, über Config veränderbar +$maxPeriodeBisDatum = '+2 years'; + +if (defined('CIS_MAXTIME_ENDEDATUM') && CIS_MAXTIME_ENDEDATUM != '') { + $maxPeriodeBisDatum = CIS_MAXTIME_ENDEDATUM; +} +$maxBisDatum = strtotime($maxPeriodeBisDatum, $today); + +$maxBisDatumDate = new DateTime($maxBisDatum); +$maxInterval = $todayDate->diff($maxBisDatumDate); +$diffTageMax = $maxInterval->days; +echo ""; //Stundentabelleholen if(! $result_stunde=$db->db_query("SELECT * FROM lehre.tbl_stunde ORDER BY stunde")) @@ -96,7 +110,7 @@ $num_rows_stunde=$db->db_num_rows($result_stunde); - + @@ -204,65 +218,65 @@ function berechnen() function checkdatum() { - if(document.getElementById('vondatum').value.length<10) + if (document.getElementById('vondatum').value.length < 10) { alert('t('zeitsperre/vonDatumIstUngueltigNullenAngeben');?>'); return false; } - if(document.getElementById('bisdatum').value.length<10) + if (document.getElementById('bisdatum').value.length < 10) { alert('t('zeitsperre/bisDatumIstUngueltigNullenAngeben');?>'); return false; } - var Datum, Tag, Monat,Jahr,vonDatum,bisDatum, diff; + var Datum, Tag, Monat, Jahr, vonDatum, bisDatum, diff, diffmax; - Datum=document.getElementById('vondatum').value; - Tag=Datum.substring(0,2); - Monat=Datum.substring(3,5); - if (parseInt(Monat,10)<1 || parseInt(Monat,10)>12) - { - alert('t('zeitsperre/vonDatumMonat');?>'+ document.getElementById('vondatum').value+ ' t('zeitsperre/istNichtRichtig');?>.'); + Datum = document.getElementById('vondatum').value; + Tag = Datum.substring(0, 2); + Monat = Datum.substring(3, 5); + if (parseInt(Monat, 10) < 1 || parseInt(Monat, 10) > 12) + { + alert('t('zeitsperre/vonDatumMonat');?>' + document.getElementById('vondatum').value + ' t('zeitsperre/istNichtRichtig');?>.'); document.getElementById('vondatum').focus(); - return false; - } + return false; + } - Jahr=Datum.substring(6,10); + Jahr = Datum.substring(6, 10); - vonDatum=Jahr+''+Monat+''+Tag; + vonDatum = Jahr + '' + Monat + '' + Tag; - Datum=document.getElementById('bisdatum').value; - Tag=Datum.substring(0,2); - Monat=Datum.substring(3,5); - if (parseInt(Monat,10)<1 || parseInt(Monat,10)>12) - { - alert('t('zeitsperre/bisDatumMonat');?>'+ document.getElementById('bisdatum').value+ ' t('zeitsperre/istNichtRichtig');?>.'); + Datum = document.getElementById('bisdatum').value; + Tag = Datum.substring(0, 2); + Monat = Datum.substring(3, 5); + if (parseInt(Monat, 10) < 1 || parseInt(Monat, 10) > 12) { + alert('t('zeitsperre/bisDatumMonat');?>' + document.getElementById('bisdatum').value + ' t('zeitsperre/istNichtRichtig');?>.'); document.getElementById('bisdatum').focus(); - return false; - } + return false; + } - Jahr=Datum.substring(6,10); + Jahr = Datum.substring(6, 10); + bisDatum = Jahr + '' + Monat + '' + Tag; - bisDatum=Jahr+''+Monat+''+Tag; + diff = bisDatum - vonDatum; + diffmax = $("#maxdiff").val(); - diff=bisDatum-vonDatum; - - if (vonDatum>bisDatum) - { - alert('t('zeitsperre/vonDatum');?> '+ document.getElementById('vondatum').value+ ' t('zeitsperre/istGroesserAlsBisDatum');?> '+document.getElementById('bisdatum').value); + if (vonDatum > bisDatum) { + alert('t('zeitsperre/vonDatum');?> ' + document.getElementById('vondatum').value + ' t('zeitsperre/istGroesserAlsBisDatum');?> ' + document.getElementById('bisdatum').value); document.getElementById('vondatum').focus(); - return false; - } - else if (diff>14) - { - Check = confirm('t('zeitaufzeichnung/zeitraumAuffallendHoch');?>'); + return false; + } else if (diff > 14 && diff < diffmax) { + Check = confirm('t('zeitaufzeichnung/zeitraumAuffallendHoch');?>'); document.getElementById('bisdatum').focus(); - if (Check == false) - return false; - else - return true; - } + if (Check == false) + return false; + else + return true; + } else if (diff >= diffmax){ + alert('t('zeitsperre/bisDatumGroesserMax');?> '); + document.getElementById('bisdatum').focus(); + return false; + } return true; } @@ -445,7 +459,8 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $date=explode('.',$_POST['bisdatum']); if (@checkdate($date[1], $date[0], $date[2])) { - $bisdatum=$date[2].$date[1].$date[0]; + $bisdatum=$date[2].$date[1].$date[0]; + $bisdatum_iso = $date[2].'-'.$date[1].'-'.$date[0]; } else { @@ -464,6 +479,15 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $error_msg .= $p->t('zeitsperre/vonDatumGroesserAlsBisDatum').'! '; } + //check if bis-Datum > MaxDatum + $bis = new DateTime($bisdatum); + + if (strtotime($bis->format('Y-m-d')) > $maxBisDatum) + { + $error=true; + $error_msg .= $p->t('zeitsperre/bisDatumGroesserMax',date('d.m.Y', $maxBisDatum)).' '; + } + //von-datum pruefen TODO if($vondatum_iso < $gesperrt_bis && in_array($_POST['zeitsperretyp_kurzbz'],$typen_arr)) { diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index 27e0a9a70..a2d61dbcb 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -294,5 +294,7 @@ define ('DEFAULT_ALLIN_DIENSTVERTRAG',[111]); //Echter Dienstvertrag define ('DEFAULT_ECHTER_DIENSTVERTRAG',[103,111]); +//Max-Ende-Datum für Zeitsperren (Aktuelles Datum + angegebenes Intervall +define('CIS_MAXTIME_ENDEDATUM', '+2 years'); ?> diff --git a/locale/de-AT/zeitsperre.php b/locale/de-AT/zeitsperre.php index 463c092cf..c3acd00d0 100644 --- a/locale/de-AT/zeitsperre.php +++ b/locale/de-AT/zeitsperre.php @@ -26,6 +26,7 @@ $this->phrasen['zeitsperre/vonDatumMonat']='Von-Datum Monat'; $this->phrasen['zeitsperre/bisDatumMonat']='Bis-Datum Monat'; $this->phrasen['zeitsperre/istGroesserAlsBisDatum']='ist größer als das Bis-Datum'; $this->phrasen['zeitsperre/vonDatum']='Von-Datum'; +$this->phrasen['zeitsperre/bisDatumGroesserMax']='Datumswert liegt zu weit in der Zukunft, nicht zulässig!'; $this->phrasen['zeitsperre/resturlaubstage']='Resturlaubstage'; $this->phrasen['zeitsperre/aktuellerStand']='aktueller Stand'; diff --git a/locale/en-US/zeitsperre.php b/locale/en-US/zeitsperre.php index 44123529f..5f54250b8 100644 --- a/locale/en-US/zeitsperre.php +++ b/locale/en-US/zeitsperre.php @@ -26,6 +26,7 @@ $this->phrasen['zeitsperre/vonDatumMonat']='From-date month'; $this->phrasen['zeitsperre/bisDatumMonat']='To-date month'; $this->phrasen['zeitsperre/istGroesserAlsBisDatum']='is later than To-date'; $this->phrasen['zeitsperre/vonDatum']='From-date'; +$this->phrasen['zeitsperre/bisDatumGroesserMax']='Date value is too far in the future, action not permitted'; $this->phrasen['zeitsperre/resturlaubstage']='Carry-over days'; $this->phrasen['zeitsperre/aktuellerStand']='Available vacation';