diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 46d342971..ffd179401 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -79,7 +79,12 @@ else if (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GE else $gesperrt_bis = '2015-08-31'; -//echo $gesperrt_bis; +//Default-Wert für Max-Intervall in Tagen für Zeitsperre, über Config veränderbar +$maxDauerZS = 730; + +if (defined('CIS_ZEITSPERREN_MAX_DAUER') && CIS_ZEITSPERREN_MAX_DAUER != '') { + $maxDauerZS = CIS_ZEITSPERREN_MAX_DAUER; +} //Stundentabelleholen if(! $result_stunde=$db->db_query("SELECT * FROM lehre.tbl_stunde ORDER BY stunde")) @@ -204,66 +209,72 @@ 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, vonDatumDate, bisDatumDate, diff, diffTime, 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; + vonDatumDate = 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; + bisDatumDate = Jahr + '-' + Monat + '-' + Tag; - bisDatum=Jahr+''+Monat+''+Tag; + bisDatumDate = new Date(bisDatumDate); + vonDatumDate = new Date(vonDatumDate); - diff=bisDatum-vonDatum; + diffTime = bisDatumDate.getTime() - vonDatumDate.getTime(); + diff = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); + diffmax = - 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 +456,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 +476,17 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $error_msg .= $p->t('zeitsperre/vonDatumGroesserAlsBisDatum').'! '; } + //check if bis-Datum zu weit in der Zukunft + $bis = new DateTime($bisdatum); + $von = new DateTime($vondatum); + + $intervall = $bis->diff($von); + if ($intervall->days >= $maxDauerZS) + { + $error=true; + $error_msg = $p->t('zeitsperre/bisDatumGroesserMax'); + } + //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..346af8801 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -294,5 +294,4 @@ define ('DEFAULT_ALLIN_DIENSTVERTRAG',[111]); //Echter Dienstvertrag define ('DEFAULT_ECHTER_DIENSTVERTRAG',[103,111]); - ?> diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 8990bbd81..c4da2f6e3 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -47,6 +47,9 @@ define('CIS_PROFIL_STUDIENINFORMATION_ANZEIGEN',true); // Zeitaufzeichnung gesperrt_bis Datum YYYY-MM-DD define('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS',''); +// maximale Dauer einer Zeitsperre in Tagen +define('CIS_ZEITSPERREN_MAX_DAUER', 730); + // Anzeige des Links zur Noteneingabe in der LVA Uebersicht define('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN',true); diff --git a/locale/de-AT/zeitsperre.php b/locale/de-AT/zeitsperre.php index 463c092cf..413cd5be5 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']='BisDatum 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..31cdef6f8 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']='TO-Date value is too far in the future, action not permitted'; $this->phrasen['zeitsperre/resturlaubstage']='Carry-over days'; $this->phrasen['zeitsperre/aktuellerStand']='Available vacation'; diff --git a/vilesci/personen/urlaubsverwaltung.php b/vilesci/personen/urlaubsverwaltung.php index 274a04b94..20b2d293c 100644 --- a/vilesci/personen/urlaubsverwaltung.php +++ b/vilesci/personen/urlaubsverwaltung.php @@ -34,6 +34,7 @@ require_once('../../include/datum.class.php'); require_once('../../include/benutzerberechtigung.class.php'); require_once('../../include/addon.class.php'); require_once('../../include/benutzerfunktion.class.php'); +require_once('../../include/phrasen.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -63,6 +64,16 @@ $message=''; $error=false; $mlAbgeschickt = ''; +//Phrasen +$sprache = getSprache(); +$p = new phrasen($sprache); + +//Default-Wert für Max-Intervall in Tagen für Zeitsperre, über Config veränderbar +$maxDauerZS = 730; + +if (defined('CIS_ZEITSPERREN_MAX_DAUER') && CIS_ZEITSPERREN_MAX_DAUER != '') { + $maxDauerZS = CIS_ZEITSPERREN_MAX_DAUER; +} //prüfen, ob addon casetime aktiviert ist $addon_obj = new addon(); $addoncasetime = $addon_obj->checkActiveAddon("casetime"); @@ -205,6 +216,24 @@ if(isset($_POST['save'])) if(!$berechtigt) die('Sie haben keine Berechtigung für diese Aktion'); + //Validierungen Felder Bis-Datum und Von-Datum + if($vondatum > $bisdatum) + { + $errormsg = $p->t('zeitsperre/vonDatumGroesserAlsBisDatum').'! '; + $error=true; + } + + //Check if Bisdatum zu weit in der Zukunft + $von = new DateTime($vondatum); + $bis = new DateTime($bisdatum); + + $intervall = $bis->diff($von); + if ($intervall->days > $maxDauerZS) + { + $error=true; + $errormsg = $p->t('zeitsperre/bisDatumGroesserMax'); + } + //Speichern der Daten $zeitsperre = new zeitsperre(); @@ -225,6 +254,8 @@ if(isset($_POST['save'])) $zeitsperre->mitarbeiter_uid=$uid; } + + if(!$error) { $zeitsperre->zeitsperretyp_kurzbz=$zeitsperretyp_kurzbz;