From 2ef3d696e67c2d4dfbc3b22233540b00a4257ad5 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 9 Jan 2023 12:30:21 +0100 Subject: [PATCH] =?UTF-8?q?neue=20Validierung=20bei=20Zeitsperre=20Kranken?= =?UTF-8?q?,=20ob=20bestehender=20KS=20verl=C3=A4ngert=20werden=20soll?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/profile/zeitsperre_resturlaub.php | 369 ++++++++++++------ include/zeitsperre.class.php | 110 ++++-- 2 files changed, 323 insertions(+), 156 deletions(-) diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 16ed393f9..7e5396dad 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -46,6 +46,7 @@ $uid = get_uid(); $PHP_SELF = $_SERVER['PHP_SELF']; $typen_arr = array("Urlaub", "PflegeU", "ZA", "Krank", "DienstF", "DienstV", "CovidSB", "CovidKS"); +$dataKS = array(); if(isset($_GET['type'])) $type=$_GET['type']; @@ -72,7 +73,7 @@ $ma= new mitarbeiter(); $zaufzeichnung = new zeitaufzeichnung(); if ($sperrdat = $zaufzeichnung->getEintragungGesperrtBisForUser($uid)) $gesperrt_bis = $sperrdat; -else if (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS != '') +elseif (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS != '') $gesperrt_bis = CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS; else $gesperrt_bis = '2015-08-31'; @@ -158,6 +159,8 @@ $( document ).ready(function() } return [true, ""]; } + + '; ?> @@ -259,6 +262,7 @@ function checkdatum() return true; } + function showHideBezeichnungDropDown() { var dd = document.zeitsperre_form.zeitsperretyp_kurzbz; @@ -347,6 +351,7 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $error_msg=''; + //von-datum pruefen if(isset($_POST['vondatum']) && !$datum_obj->checkDatum($_POST['vondatum'])) { @@ -394,59 +399,126 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ } } + //Prüfen auf angrenzenden Krankenstand //Manu + if (isset($_POST['bisdatum']) && isset($_POST['vondatum']) + && $_GET['type']=='new_sperre' + && $error!=true + && ($_POST['zeitsperretyp_kurzbz'] == 'Krank' )) + { + $vonDay = $_POST['vondatum']; + $von2 = new DateTime($von); + $von2 = $von2->format('Y-m-d'); + $bisDay = $_POST['bisdatum']; + + //grenzt Tag an einen anderen Krankenstand an? + $zs = new Zeitsperre(); + if ($zs->getAngrenzendenKrankenstand($uid, $von2)) + { + $krankenstand = $zs->result; + foreach ($krankenstand as $ks) + { + $text = "Es gibt einen bestehenden Krankenstand von " . date('d.m.Y', $datum_obj->mktime_fromdate($ks->vondatum)) . + " bis " . date('d.m.Y', $datum_obj->mktime_fromdate($ks->bisdatum)) . ".
"; + $link = ""; + echo $text; + echo $link; + echo "
"; + + + $bezeichnung = $_POST['bezeichnung']; + $von = $_POST['vondatum']; + $von2 = new DateTime($von); + $von2 = $von2->format('Y-m-d'); + $bis = $_POST['bisdatum']; + $bis2 = new DateTime($bis); + $bis2 = $bis2->format('Y-m-d'); + $vertretung = $_POST['vertretung_uid']; + $erreichbarkeit = $_POST['erreichbarkeit']; + $readonly = 'readonly'; + + echo "
Neuer Krankenstand: von " . $von . " bis " . $bis . ": " . + $_POST['bezeichnung'] . ""; + + if ($_POST['vertretung_uid']) + { + echo ", vertreten von ". $_POST['vertretung_uid'] . " (" . $erreichbarkeit .")"; + } + echo " +
+ + + + + + + + +
+ "; + exit(); + } + } + } + //von - bis-datum pruefen von darf nicht groesser als bis sein // 09.02.2009 simane - $vondatum=0; - if(isset($_POST['vondatum'])) + if(!isset($_GET['newKS'])) { - $date=explode('.',$_POST['vondatum']); - if (@checkdate($date[1], $date[0], $date[2])) + $vondatum=0; + if(isset($_POST['vondatum'])) { - $vondatum=$date[2].$date[1].$date[0]; - $vondatum_iso = $date[2].'-'.$date[1].'-'.$date[0]; + $date=explode('.', $_POST['vondatum']); + if (@checkdate($date[1], $date[0], $date[2])) + { + $vondatum=$date[2].$date[1].$date[0]; + $vondatum_iso = $date[2].'-'.$date[1].'-'.$date[0]; + } + else + { + $error=true; + $error_msg .= $p->t('zeitsperre/vonDatumUngueltig').' '; + } } else { $error=true; - $error_msg .= $p->t('zeitsperre/vonDatumUngueltig').' '; } - } - else - { - $error=true; - } - $bisdatum=0; - if(isset($_POST['bisdatum'])) - { - $date=explode('.',$_POST['bisdatum']); - if (@checkdate($date[1], $date[0], $date[2])) + $bisdatum=0; + if(isset($_POST['bisdatum'])) { - $bisdatum=$date[2].$date[1].$date[0]; + $date=explode('.', $_POST['bisdatum']); + if (@checkdate($date[1], $date[0], $date[2])) + { + $bisdatum=$date[2].$date[1].$date[0]; + } + else + { + $error=true; + $error_msg .= $p->t('zeitsperre/bisDatumUngueltig').' '; + } } else { $error=true; - $error_msg .= $p->t('zeitsperre/bisDatumUngueltig').' '; + } + + if($vondatum > $bisdatum) + { + $error=true; + $error_msg .= $p->t('zeitsperre/vonDatumGroesserAlsBisDatum').'! '; + } + + //von-datum pruefen TODO + if($vondatum_iso < $gesperrt_bis && in_array($_POST['zeitsperretyp_kurzbz'], $typen_arr) + && (!isset($_GET['editKS']) )) + { + $error=true; + $error_msg .= $p->t('zeitsperre/vorSperrdatum'); } } - else - { - $error=true; - } - if($vondatum > $bisdatum) - { - $error=true; - $error_msg .= $p->t('zeitsperre/vonDatumGroesserAlsBisDatum').'! '; - } - - //von-datum pruefen TODO - if($vondatum_iso < $gesperrt_bis && in_array($_POST['zeitsperretyp_kurzbz'],$typen_arr)) - { - $error=true; - $error_msg .= $p->t('zeitsperre/vorSperrdatum'); - } $zeitsperre = new zeitsperre(); @@ -476,94 +548,118 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $zeitsperre->insertvon = $uid; } - if(!$error && $_POST['zeitsperretyp_kurzbz']=='Urlaub') + if(!isset($_GET['newKS'])) { - if($zeitsperre->zeitsperre_id!='') - $id = $zeitsperre->zeitsperre_id; - else - $id = null; - if($zeitsperre->UrlaubEingetragen($uid, $datum_obj->formatDatum($_POST['vondatum']),$datum_obj->formatDatum($_POST['bisdatum']), $id)) + if(!$error && $_POST['zeitsperretyp_kurzbz']=='Urlaub') { - $error = true; - $error_msg.=$p->t('zeitsperre/urlaubBereitsEingetragen'); - } - } - if(!$error) - { - $zeitsperre->zeitsperretyp_kurzbz = $_POST['zeitsperretyp_kurzbz']; - $zeitsperre->mitarbeiter_uid = $uid; - $zeitsperre->bezeichnung = $_POST['bezeichnung']; - $zeitsperre->vondatum = $datum_obj->formatDatum($_POST['vondatum']); - $zeitsperre->vonstunde = $_POST['vonstunde']; - $zeitsperre->bisdatum = $datum_obj->formatDatum($_POST['bisdatum']); - $zeitsperre->bisstunde = $_POST['bisstunde']; - $zeitsperre->erreichbarkeit_kurzbz = $_POST['erreichbarkeit']; - $zeitsperre->vertretung_uid = $_POST['vertretung_uid']; - $zeitsperre->updateamum = date('Y-m-d H:i:s'); - $zeitsperre->updatevon = $uid; - - if($zeitsperre->save()) - { - echo "

".$p->t('global/erfolgreichgespeichert')."

"; - if(URLAUB_TOOLS) + if($zeitsperre->zeitsperre_id!='') + $id = $zeitsperre->zeitsperre_id; + else + $id = null; + if($zeitsperre->UrlaubEingetragen($uid, $datum_obj->formatDatum($_POST['vondatum']), $datum_obj->formatDatum($_POST['bisdatum']), $id)) { - if($zeitsperre->new && $zeitsperre->zeitsperretyp_kurzbz=='Urlaub') + $error = true; + $error_msg.=$p->t('zeitsperre/urlaubBereitsEingetragen'); + } + } + + if(!$error) + { + $zeitsperre->zeitsperretyp_kurzbz = $_POST['zeitsperretyp_kurzbz']; + $zeitsperre->mitarbeiter_uid = $uid; + $zeitsperre->bezeichnung = $_POST['bezeichnung']; + $zeitsperre->vondatum = $datum_obj->formatDatum($_POST['vondatum']); + $zeitsperre->vonstunde = $_POST['vonstunde']; + $zeitsperre->bisdatum = $datum_obj->formatDatum($_POST['bisdatum']); + $zeitsperre->bisstunde = $_POST['bisstunde']; + $zeitsperre->erreichbarkeit_kurzbz = $_POST['erreichbarkeit']; + $zeitsperre->vertretung_uid = $_POST['vertretung_uid']; + $zeitsperre->updateamum = date('Y-m-d H:i:s'); + $zeitsperre->updatevon = $uid; + + if($zeitsperre->save()) + { + echo "

".$p->t('global/erfolgreichgespeichert')."

"; + if(URLAUB_TOOLS) { - //Beim Anlegen von neuen Urlauben wird ein Mail an den Vorgesetzten versendet um diesen Freizugeben - $prsn = new person(); - - $vorgesetzter = $ma->getVorgesetzte($uid); - if($vorgesetzter) + if($zeitsperre->new && $zeitsperre->zeitsperretyp_kurzbz=='Urlaub') { - $to=''; - $fullName=''; - foreach($ma->vorgesetzte as $vg) - { - if (!empty($to)) - { - $to.=','; - $fullName.=','; - } - $to.=trim($vg.'@'.DOMAIN); - $name = $prsn->getFullNameFromBenutzer($vg); - $fullName.=$name; - } + //Beim Anlegen von neuen Urlauben wird ein Mail an den Vorgesetzten versendet um diesen Freizugeben + $prsn = new person(); - $benutzer = new benutzer(); - $benutzer->load($uid); - if($datum_obj->formatDatum($zeitsperre->vondatum, 'm')>=9) - $jahr = $datum_obj->formatDatum($zeitsperre->vondatum, 'Y')+1; - else - $jahr = $datum_obj->formatDatum($zeitsperre->vondatum, 'Y'); - - $message = "Dies ist eine automatische Mail! \n". - "$benutzer->nachname $benutzer->vorname hat einen neuen Urlaub eingetragen:\n". - "$zeitsperre->bezeichnung von ".$datum_obj->formatDatum($zeitsperre->vondatum,'d.m.Y')." bis ".$datum_obj->formatDatum($zeitsperre->bisdatum,'d.m.Y')."\n\n". - "Sie können diesen unter folgender Adresse freigeben:\n". - APP_ROOT."cis/private/profile/urlaubsfreigabe.php?uid=$uid&year=".$jahr; - $from='vilesci@'.DOMAIN; - $mail = new mail($to, $from, 'Freigabeansuchen', $message); - if($mail->send()) + $vorgesetzter = $ma->getVorgesetzte($uid); + if($vorgesetzter) { - echo "
".$p->t('urlaubstool/freigabemailWurdeVersandt',array($fullName)).""; + $to=''; + $fullName=''; + foreach($ma->vorgesetzte as $vg) + { + if (!empty($to)) + { + $to.=','; + $fullName.=','; + } + $to.=trim($vg.'@'.DOMAIN); + $name = $prsn->getFullNameFromBenutzer($vg); + $fullName.=$name; + } + + $benutzer = new benutzer(); + $benutzer->load($uid); + if($datum_obj->formatDatum($zeitsperre->vondatum, 'm')>=9) + $jahr = $datum_obj->formatDatum($zeitsperre->vondatum, 'Y')+1; + else + $jahr = $datum_obj->formatDatum($zeitsperre->vondatum, 'Y'); + + $message = "Dies ist eine automatische Mail! \n". + "$benutzer->nachname $benutzer->vorname hat einen neuen Urlaub eingetragen:\n". + "$zeitsperre->bezeichnung von ".$datum_obj->formatDatum($zeitsperre->vondatum, 'd.m.Y')." bis ".$datum_obj->formatDatum($zeitsperre->bisdatum, 'd.m.Y')."\n\n". + "Sie können diesen unter folgender Adresse freigeben:\n". + APP_ROOT."cis/private/profile/urlaubsfreigabe.php?uid=$uid&year=".$jahr; + $from='vilesci@'.DOMAIN; + $mail = new mail($to, $from, 'Freigabeansuchen', $message); + if($mail->send()) + { + echo "
".$p->t('urlaubstool/freigabemailWurdeVersandt', array($fullName)).""; + } + else + { + echo "
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten', array($fullName)).""; + } } else { - echo "
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName)).""; + echo "
".$p->t('urlaubstool/konnteKeinFreigabemailVersendetWerden').""; } } - else - { - echo "
".$p->t('urlaubstool/konnteKeinFreigabemailVersendetWerden').""; - } } } + else + echo "".$p->t('global/fehleraufgetreten').""; } else - echo "".$p->t('global/fehleraufgetreten').""; + echo "$error_msg"; } + + //Krankenstand neu else - echo "$error_msg"; + { + if(!$error) + { + $zeitsperre->zeitsperretyp_kurzbz = $_POST['zeitsperretyp_kurzbz']; + $zeitsperre->mitarbeiter_uid = $uid; + $zeitsperre->bezeichnung = $_POST['bezeichnung']; + $zeitsperre->vondatum = $_POST['vonDatum']; + $zeitsperre->bisdatum = $datum_obj->formatDatum($_POST['bisDatum']); + $zeitsperre->erreichbarkeit_kurzbz = $_POST['erreichbarkeit']; + $zeitsperre->vertretung_uid = $_POST['vertretung']; + $zeitsperre->updateamum = date('Y-m-d H:i:s'); + $zeitsperre->updatevon = $uid; + } + + if($zeitsperre->save()) + echo "

".$p->t('global/erfolgreichgespeichert')."

"; + } } //loeschen eines bereits freigegebenen Urlaubs @@ -605,20 +701,20 @@ if((isset($_GET['type']) && $_GET['type']=='delete_sperre' && isset($_GET['infor $benutzer = new benutzer(); $benutzer->load($uid); $message = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\n". - $p->t('urlaubstool/xHatUrlaubGeloescht',array($benutzer->nachname,$benutzer->vorname)).":\n"; + $p->t('urlaubstool/xHatUrlaubGeloescht', array($benutzer->nachname,$benutzer->vorname)).":\n"; $message.= $p->t('urlaubstool/von')." ".date("d.m.Y", strtotime($vondatum))." ".$p->t('urlaubstool/bis')." ".date("d.m.Y", strtotime($bisdatum))."\n"; - $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigegebenerUrlaubGeloescht'), $message); + $mail = new mail($to, 'vilesci@'.DOMAIN, $p->t('urlaubstool/freigegebenerUrlaubGeloescht'), $message); if($mail->send()) { - echo "
".$p->t('urlaubstool/VorgesetzteInformiert',array($fullName)).""; + echo "
".$p->t('urlaubstool/VorgesetzteInformiert', array($fullName)).""; } else { - echo "
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName))."!"; + echo "
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten', array($fullName))."!"; } } else @@ -628,7 +724,7 @@ if((isset($_GET['type']) && $_GET['type']=='delete_sperre' && isset($_GET['infor } //loeschen einer zeitsperre -if(isset($_GET['type']) && $_GET['type']=='delete_sperre' && !isset($_GET['informSupervisor']) ) +if(isset($_GET['type']) && $_GET['type']=='delete_sperre' && !isset($_GET['informSupervisor'])) { $zeit = new zeitsperre(); $zeit->load($_GET['id']); @@ -636,11 +732,11 @@ if(isset($_GET['type']) && $_GET['type']=='delete_sperre' && !isset($_GET['infor //besitzer dieses datensatzes ist if($zeit->mitarbeiter_uid==$uid) { - if ($zeit->vondatum < $gesperrt_bis && in_array($zeit->zeitsperretyp_kurzbz,$typen_arr)) + if ($zeit->vondatum < $gesperrt_bis && in_array($zeit->zeitsperretyp_kurzbz, $typen_arr)) { echo "".$p->t('zeitsperre/vorSperrdatum').""; } - else if($zeit->delete($_GET['id'])) + elseif($zeit->delete($_GET['id'])) { echo $p->t('global/erfolgreichgelöscht'); } @@ -692,13 +788,13 @@ if(count($zeit->result)>0) ".($row->freigabeamum!=''?'Ja':'').""; if ($row->zeitsperretyp_kurzbz == 'DienstV' || $row->zeitsperretyp_kurzbz == 'ZVerfueg') $content_table .= ' '; - else if ($row->vondatum < $gesperrt_bis AND in_array($row->zeitsperretyp_kurzbz,$typen_arr)) + elseif ($row->vondatum < $gesperrt_bis AND in_array($row->zeitsperretyp_kurzbz, $typen_arr)) $content_table .= ' '; else $content_table.="".$p->t('zeitsperre/edit').""; - if ($row->vondatum < $gesperrt_bis AND in_array($row->zeitsperretyp_kurzbz,$typen_arr)) + if ($row->vondatum < $gesperrt_bis AND in_array($row->zeitsperretyp_kurzbz, $typen_arr)) $content_table .= ' '; - else if($row->vondatum>=date("Y-m-d",time()) && $row->zeitsperretyp_kurzbz=='Urlaub') + elseif($row->vondatum>=date("Y-m-d", time()) && $row->zeitsperretyp_kurzbz=='Urlaub') { $content_table.="\n".$p->t('zeitsperre/loeschen').""; } @@ -717,6 +813,13 @@ else $zeitsperre = new zeitsperre(); $action = "$PHP_SELF?type=new_sperre"; + +//standardvalues + $readonlyKS=''; + $disabledKS=''; + $styleKS=''; + $classKS = ' class="datepicker_datum"'; + //wenn ein datensatz editiert werden soll, dann diesen laden if(isset($_GET['type']) && $_GET['type']=='edit') { @@ -734,6 +837,17 @@ if(isset($_GET['type']) && $_GET['type']=='edit') { die("".$p->t('global/fehlerBeiDerParameteruebergabe').""); } + + //manu + if(isset($_GET['editKS']) && $_GET['editKS'] == 1) + { + //alle Parameter außer bis als readonly definieren"); + $readonlyKS=' readonly="readonly"'; //für Textfelder + $disabledKS=' disabled'; //für select-options + $styleKS=' style="border: 1px solid #999; color: #999;"'; //disabled-Optik + $classKS = ''; + $action.='&editKS=1'; + } } if($zeitsperre->freigabeamum!='' && $zeitsperre->zeitsperretyp_kurzbz=='Urlaub') @@ -770,12 +884,12 @@ if($result = $db->db_query($qry)) if($zeitsperre->zeitsperretyp_kurzbz == $row->zeitsperretyp_kurzbz) $content_form.= ""; else - $content_form.= ""; + $content_form.= ""; } } $content_form.= ''; $content_form.= ''.$p->t('global/bezeichnung').''; -$content_form.= ''.$p->t('global/von').' '; +$content_form.= ''.$p->t('global/von').' '; //dropdown fuer vonstunde $content_form.= $p->t('zeitsperre/stundeInklusive'); @@ -785,19 +899,19 @@ if($zeitsperre->vonstunde=='') else $content_form.= "\n"; -for($i=0;$i<$num_rows_stunde;$i++) +for($i=0; $i<$num_rows_stunde; $i++) { $row = $db->db_fetch_object($result_stunde, $i); if($zeitsperre->vonstunde==$row->stunde) - $content_form.= "\n"; + $content_form.= "\n"; else - $content_form.= "\n"; + $content_form.= "\n"; } $content_form.= ""; -$content_form.= ''.$p->t('global/bis').' '; +$content_form.= ''.$p->t('global/bis').' '; //dropdown fuer bisstunde $content_form.= $p->t('zeitsperre/stundeInklusive'); $content_form.= " "; @@ -837,7 +951,7 @@ if($result = $db->db_query($qry)) $content_form.= ''; $content_form.= "".$p->t('urlaubstool/erreichbarkeit')."'; $content_form.= ''; if(isset($_GET['type']) && $_GET['type']=='edit') +{ $content_form.= ""; +} + else $content_form.= ""; diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php index 0e737eaf0..6f00e57a4 100644 --- a/include/zeitsperre.class.php +++ b/include/zeitsperre.class.php @@ -52,7 +52,7 @@ class zeitsperre extends basis_db * Konstruktor * @param $zeitsperre_id ID der zu ladenden Funktion */ - public function __construct($zeitsperre_id=null) + public function __construct($zeitsperre_id = null) { parent::__construct(); @@ -62,7 +62,7 @@ class zeitsperre extends basis_db public static function getBlockierendeZeitsperren() { - return explode("','",trim(self::BLOCKIERENDE_ZEITSPERREN, '\'')); + return explode("','", trim(self::BLOCKIERENDE_ZEITSPERREN, '\'')); } /** @@ -72,7 +72,7 @@ class zeitsperre extends basis_db * aktuellen Geschaeftsjahres geholt (1.9.-31.8.) * @return true wenn ok, false im Fehlerfall */ - public function getzeitsperren($uid, $bisgrenze=true) + public function getzeitsperren($uid, $bisgrenze = true) { unset($this->result); $this->result=array(); @@ -94,10 +94,8 @@ class zeitsperre extends basis_db if($this->db_query($qry)) { - while($row = $this->db_fetch_object()) { - $obj = new zeitsperre(); $obj->zeitsperre_id = $row->zeitsperre_id; @@ -123,7 +121,6 @@ class zeitsperre extends basis_db $obj->freigabevon = $row->freigabevon; $this->result[] = $obj; - } return true; } @@ -380,7 +377,7 @@ class zeitsperre extends basis_db * @param $nurblockierend boolean default false * @return true wenn ok, false im Fehlerfall */ - public function getSperreByDate($user, $datum, $stunde=null, $nurblockierend=false) + public function getSperreByDate($user, $datum, $stunde = null, $nurblockierend = false) { $this->result = array(); $qry = " @@ -392,16 +389,17 @@ 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($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 - ((bisdatum=".$this->db_add_param($datum)." AND bisstunde>=".$this->db_add_param($stunde).") OR bisstunde is null OR bisdatum<>".$this->db_add_param($datum).")"; + 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 + ((bisdatum=".$this->db_add_param($datum)." AND bisstunde>=".$this->db_add_param($stunde).") OR bisstunde is null OR bisdatum<>".$this->db_add_param($datum).")"; - $qry .= "AND mitarbeiter_uid=".$this->db_add_param($user); + $qry .= "AND mitarbeiter_uid=".$this->db_add_param($user); if($result = $this->db_query($qry)) { @@ -427,7 +425,6 @@ class zeitsperre extends basis_db $obj->freigabevon = $row->freigabevon; $this->result[] = $obj; - } return true; } @@ -446,7 +443,7 @@ class zeitsperre extends basis_db * @param $bis * @param $id Eintrag mit dieser ID wird nicht beruecksichtigt (zB bei Editieren von Eintraegen) */ - function UrlaubEingetragen($uid, $von, $bis, $id=null) + public function UrlaubEingetragen($uid, $von, $bis, $id = null) { $qry = "SELECT @@ -485,14 +482,14 @@ class zeitsperre extends basis_db } } - /** + /** * Liefert die Zeitsperren eines Users für die Zeitaufzeichnung * * @param $uid * @param $anz_tage * @return array 'datum'->'zeitsperre_kurzbz' */ - public function getZeitsperrenForZeitaufzeichnung($uid, $anz_tage=50) + public function getZeitsperrenForZeitaufzeichnung($uid, $anz_tage = 50) { unset($this->result); $this->result=array(); @@ -501,22 +498,16 @@ class zeitsperre extends basis_db 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 (" . self::BLOCKIERENDE_ZEITSPERREN . ")"; - - - if($this->db_query($qry)) { - while($row = $this->db_fetch_object()) { - - if ($row->zeitsperretyp_kurzbz == 'Urlaub' && $row->freigabevon == NULL) + if ($row->zeitsperretyp_kurzbz == 'Urlaub' && $row->freigabevon == null) $result[$row->datum] = "Urlaubsantrag (Freigabe fehlt)"; else $result[$row->datum] = $row->zeitsperretyp_kurzbz; $this->result = $result; - } return true; } @@ -551,13 +542,13 @@ class zeitsperre extends basis_db public function getVonBis($uid, $von, $bis, $zeitsperretyp_kurzbz = null) { $qry = ' - SELECT + SELECT zeitsperre_id, zeitsperretyp_kurzbz, vondatum, vonstunde, bisdatum, bisstunde - FROM + FROM campus.tbl_zeitsperre LEFT JOIN campus.tbl_zeitsperretyp USING (zeitsperretyp_kurzbz) - WHERE - mitarbeiter_uid = '. $this->db_add_param($uid). ' + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid). ' AND ( (vondatum BETWEEN '.$this->db_add_param($von).' AND '.$this->db_add_param($bis).') OR @@ -592,5 +583,64 @@ class zeitsperre extends basis_db return true; } } + + /** + * Liefert zurück, ob es einen angrenzenden Krankenstand gibt + * Einschränkung nach Zeitsperrentyp möglich. + * + * @param $uid + * @param $day string Datum im Format YYYY-MM-DD + * @param null $zeitsperretyp_kurzbz + * @return bool + */ + public function getAngrenzendenKrankenstand($uid, $vonDay) + { + //gibt es einen Tag davor einen Krankenstand? + //echo $vonDay; + $DayBefore = strtotime("-1 day", strtotime($vonDay)); + $woTag = date("w", $DayBefore); + + //wenn vonTag Montag: gibt es einen Krankenstand bis Freitag davor? + if($woTag == 0) + { + $DayBefore = strtotime("-3 day", strtotime($vonDay)); + } + + $DateToCheck = date("Y-m-d", $DayBefore); + + $qry = ' + SELECT + zeitsperre_id, zeitsperretyp_kurzbz, vondatum, bisdatum + FROM + campus.tbl_zeitsperre + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid). ' + AND + zeitsperretyp_kurzbz = \'Krank\' + AND + bisdatum < '.$this->db_add_param($vonDay) . ' + AND + bisdatum >= '.$this->db_add_param($DateToCheck) .';'; + + if (!$this->db_query($qry)) + { + $this->errormsg=$this->db_last_error(); + return false; + } + else + { + while($row = $this->db_fetch_object()) + { + $obj = new stdClass(); + $obj->zeitsperre_id = $row->zeitsperre_id; + $obj->zeitsperretyp_kurzbz = $row->zeitsperretyp_kurzbz; + $obj->vondatum = $row->vondatum; + $obj->bisdatum = $row->bisdatum; + + $this->result[]= $obj; + } + return true; + } + } } ?>