diff --git a/cis/private/profile/urlaubstool.php b/cis/private/profile/urlaubstool.php index fc77a01d0..7a113f623 100644 --- a/cis/private/profile/urlaubstool.php +++ b/cis/private/profile/urlaubstool.php @@ -16,8 +16,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Authors: Christian Paminger , - * Andreas Oesterreicher and - * Rudolf Hangl . + * Andreas Oesterreicher , + * Rudolf Hangl , + * Manuela Thamer */ /** * Seite zum Eintragen von Urlaubstagen @@ -30,11 +31,13 @@ require_once('../../../include/person.class.php'); require_once('../../../include/benutzer.class.php'); require_once('../../../include/mitarbeiter.class.php'); require_once('../../../include/mail.class.php'); +require_once('../../../include/sancho.inc.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/globals.inc.php'); require_once('../../../include/sprache.class.php'); require_once('../../../include/zeitaufzeichnung.class.php'); +$datum_obj = new datum(); $sprache = getSprache(); $lang = new sprache(); $lang->load($sprache); @@ -49,8 +52,8 @@ $mehrarbeitsstunden = '0'; $anspruch = '25'; $zaehl=1; $tage=array(); //Array Tage für Kalenderanzeige -$hgfarbe=array_fill(0,44,'#E9ECEE'); //Array mit Hintegrundfarben der Kalenderfelder -$datensatz=array_fill(0,44,0); +$hgfarbe=array_fill(0, 44, '#E9ECEE'); //Array mit Hintegrundfarben der Kalenderfelder +$datensatz=array_fill(0, 44, 0); $freigabevon=array(); $freigabeamum=array(); $vertretung_uid=array(); @@ -60,26 +63,26 @@ $erreichbarkeit_kurzbz=array(); //$monatsname = array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"); $jahre = array(); //Array Jahreszahlen für Auswahl (immer aktuelles Jahr und die 4 nächsten Jahre) -$akette=array_fill(0,1,0); -$ekette=array_fill(0,1,0); -$links=''; -$rechts=''; -$tag=array(); -$vertretung=''; -$erreichbar=''; -$vgmail=''; -$vtmail=''; -$spmonat=array(); -$hgchange=false; -$wvon=''; -$wbis=''; -$datensatz=''; -$t=getdate(); +$akette = array_fill(0, 1, 0); +$ekette = array_fill(0, 1, 0); +$links = ''; +$rechts = ''; +$tag = array(); +$vertretung = ''; +$erreichbar = ''; +$vgmail = ''; +$vtmail = ''; +$spmonat = array(); +$hgchange = false; +$wvon = ''; +$wbis = ''; +$datensatz = ''; +$t = getdate(); $uid = get_uid(); -$taste=0; +$taste = 0; -$ma= new mitarbeiter(); -for($i=0;$i<6;$i++) +$ma = new mitarbeiter(); +for($i = 0; $i<6; $i++) { $jahre[$i]="$t[year]"+($i-1); } @@ -118,14 +121,13 @@ else } if (isset($_GET['hgfarbe'])) { - $hgfarbe=explode(",",$_GET['hgfarbe']); + $hgfarbe=explode(",", $_GET['hgfarbe']); } else { - if (!isset($_GET['spmonat'])) { - for($i=0;$i<44;$i++) + for($i=0; $i<44; $i++) { if(!isset($hgfarbe[$i]) || $hgfarbe[$i]!='#FFFC7F') $hgfarbe[$i]='#E9ECEE'; @@ -167,71 +169,76 @@ if (isset($_GET['rechts_x']) || isset($_POST['rechts_x'])) //Bereits freigegebenen Eintrag löschen //Eintragung löschen -if((isset($_GET['delete']) && isset($_GET['informSupervisor'])) || (isset($_POST['delete']) && isset($_POST['informSupervisor']))) -{ - $zeitsperre = new zeitsperre(); - $zeitsperre->load($_GET['delete']); - - $vondatum = $zeitsperre->getVonDatum(); - $bisdatum = $zeitsperre->getBisDatum(); - - if(!$zeitsperre->delete($_GET['delete'])) - echo $zeitsperre->errormsg; - - //Mail an Vorgesetzten - $prsn = new person(); - - $vorgesetzter = $ma->getVorgesetzte($uid); - if($vorgesetzter) - { - $to=''; - $fullName =''; - foreach($ma->vorgesetzte as $vg) - { - if($to!='') - { - $to.=', '.$vg.'@'.DOMAIN; - $name = $prsn->getFullNameFromBenutzer($vg); - $fullName.=', '.$name; - } - else - { - $to.=$vg.'@'.DOMAIN; - $name = $prsn->getFullNameFromBenutzer($vg); - $fullName.=$name; - } - } - - $benutzer = new benutzer(); - $benutzer->load($uid); - $message = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\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); - if($mail->send()) - { - $vgmail="".$p->t('urlaubstool/VorgesetzteInformiert',array($fullName)).""; - } - else - { - $vgmail="
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName))."!"; - } - } - else - { - $vgmail="
".$p->t('urlaubstool/konnteKeinFreigabemailVersendetWerden').""; - } -} - - -//Eintragung löschen -if((isset($_GET['delete']) || isset($_POST['delete']))) +if(isset($_GET['delete'])) { $zeitsperre = new zeitsperre(); + $zeitsperre->load($_GET['delete']); + + $vondatum = $zeitsperre->getVonDatum(); + $bisdatum = $zeitsperre->getBisDatum(); + $vondatum = $datum_obj->formatDatum($vondatum, 'd.m.Y'); + $bisdatum = $datum_obj->formatDatum($bisdatum, 'd.m.Y'); + if(!$zeitsperre->delete($_GET['delete'])) + { echo $zeitsperre->errormsg; + } + else + { + //Mail an Vorgesetzten + $prsn = new person(); + + $vorgesetzter = $ma->getVorgesetzte($uid); + if($vorgesetzter) + { + $to=''; + $fullName =''; + foreach($ma->vorgesetzte as $vg) + { + if($to!='') + { + $to.=', '.$vg.'@'.DOMAIN; + $name = $prsn->getFullNameFromBenutzer($vg); + $fullName.=', '.$name; + } + else + { + $to.=$vg.'@'.DOMAIN; + $name = $prsn->getFullNameFromBenutzer($vg); + $fullName.=$name; + } + } + + $benutzer = new benutzer(); + $benutzer->load($uid); + + //new sanchomail + $nameMitarbeiter = $benutzer->vorname. " ". $benutzer->nachname; + $beschreibung = $zeitsperre->bezeichnung; + $subject = "Urlaub wurde gelöscht"; + $mailvorlage = 'Sancho_Mail_Urlaub_Loeschen'; + + $from='vilesci@'.DOMAIN; + + //Sanchomail mit Vorlage Sancho Mail Urlaub + $template_data = array( + 'vorgesetzter' => $fullName, + 'nameMitarbeiter' => $nameMitarbeiter, + 'beschreibung' =>$beschreibung, + 'vonDatum' => $vondatum, + 'bisDatum' => $bisdatum + ); + + if (sendSanchoMail($mailvorlage, $template_data, $to, $subject)) + { + $vgmail="".$p->t('urlaubstool/VorgesetzteInformiert', array($fullName)).""; + } + else + { + $vgmail="
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten', array($fullName))."!"; + } + } + } } //Eintragung speichern @@ -255,10 +262,10 @@ if(isset($_GET['speichern']) && isset($_GET['wtag'])) $wtag=$_GET['wtag']; $akette[0]=$wtag[0]; $ekette[0]=$wtag[0]; - for($i=1,$j=0;$iformat("Y-m-d"); - } - } - - foreach ($daysToCheck AS $date) { - $zeitsperre->getSperreByDate($uid, $date, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN); + $daysToCheck[] = $date->format("Y-m-d"); + } + } - foreach ($zeitsperre->result as $z) + foreach ($daysToCheck as $date) + { + $zeitsperre->getSperreByDate($uid, $date, null, zeitsperre::NUR_BLOCKIERENDE_ZEITSPERREN); + + foreach ($zeitsperre->result as $z) + { + if ($z->zeitsperretyp_kurzbz) { - if ($z->zeitsperretyp_kurzbz) - { - $error = true; + $error = true; - $z->zeitsperretyp_kurzbz == 'Urlaub' ? - $vgmail.='
'.$p->t('zeitsperre/urlaubBereitsEingetragen').'' : - $vgmail .= '
'.$p->t('zeitsperre/zeitsperreEingetragen',[$date, $z->zeitsperretyp_kurzbz]). ''; + $z->zeitsperretyp_kurzbz == 'Urlaub' ? + $vgmail.='
'.$p->t('zeitsperre/urlaubBereitsEingetragen').'' : + $vgmail .= '
'.$p->t('zeitsperre/zeitsperreEingetragen', [$date, $z->zeitsperretyp_kurzbz]). ''; - break; - } + break; } } + } } if(!$error) { - for($i=0;$ierrormsg; } - } if(!$error) { //Mail an Vorgesetzten - $prsn = new person(); + $prsn = new person(); $vorgesetzter = $ma->getVorgesetzte($uid); if($vorgesetzter) @@ -384,31 +389,67 @@ if(isset($_GET['speichern']) && isset($_GET['wtag'])) $benutzer = new benutzer(); $benutzer->load($uid); - $message = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\n". - $p->t('urlaubstool/xHatNeuenUrlaubEingetragen',array($benutzer->nachname,$benutzer->vorname)).":\n"; - for($i=0;$ivorname. " ". $benutzer->nachname; + $beschreibung = (!empty($zeitsperre->bezeichnung) ? $zeitsperre->bezeichnung : $zeitsperre->beschreibung); + + // $message = $p->t('urlaubstool/diesIstEineAutomatischeMail')."\n". + // $p->t('urlaubstool/xHatNeuenUrlaubEingetragen',array($benutzer->nachname,$benutzer->vorname)).":\n"; + + for($i=0; $it('urlaubstool/von')." ".date("d.m.Y", strtotime($akette[$i]))." ".$p->t('urlaubstool/bis')." ".date("d.m.Y", strtotime($ekette[$i]))."\n"; + $von = date("d.m.Y", strtotime($akette[$i])); + $bis = date("d.m.Y", strtotime($ekette[$i])); } + //Ab September wird das neue Jahr uebergeben - if(date("m",strtotime($akette[0]))>=9) - $jahr = date("Y", strtotime($akette[0]))+1; - else - $jahr = date("Y", strtotime($akette[0])); + if(date("m", strtotime($akette[0]))>=9) + $jahr = date("Y", strtotime($akette[0]))+1; + else + $jahr = date("Y", strtotime($akette[0])); - $message.="\n".$p->t('urlaubstool/sieKoennenDiesenUnterFolgenderAdresseFreigeben').":\n". - APP_ROOT."cis/private/profile/urlaubsfreigabe.php?uid=$uid&year=".$jahr; + $link = " Link Urlaubstool "; - $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigabeansuchenUrlaub'), $message); - if($mail->send()) + $subject = "Freigabeansuchen Urlaub"; + $mailvorlage = 'Sancho_Mail_Urlaub_Neu'; + + $from='vilesci@'.DOMAIN; + + // Überprüfen, ob addon casetime aktiv ist + $addon_obj = new addon(); + $addoncasetime = $addon_obj->checkActiveAddon("casetime"); + $urlaubssaldo = ""; + if($addoncasetime) { - $vgmail="".$p->t('urlaubstool/freigabemailWurdeVersandt',array($fullName)).""; + require_once('../../../addons/casetime/config.inc.php'); + require_once('../../../addons/casetime/include/functions.inc.php'); + $urlaubssaldo = getCastTimeUrlaubssaldo($uid); + $urlaubssaldo = $urlaubssaldo->{'AktuellerStand'}; + } + + //Sanchomail mit Vorlage Sancho Mail Urlaub Neu + $template_data = array( + 'vorgesetzter' => $fullName, + 'nameMitarbeiter' => $nameMitarbeiter, + 'beschreibung' =>$beschreibung, + 'vonDatum' => $von, + 'bisDatum' => $bis, + 'Link'=> $link, + 'urlaubssaldo' => $urlaubssaldo + ); + + + if (sendSanchoMail($mailvorlage, $template_data, $to, $subject)) + + // $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigabeansuchenUrlaub'), $message); + //if($mail->send()) + { + $vgmail="".$p->t('urlaubstool/freigabemailWurdeVersandt', array($fullName)).""; } else { - $vgmail="
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($to))."!"; + $vgmail="
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten', array($to))."!"; } } else @@ -422,14 +463,13 @@ if(isset($_GET['speichern']) && isset($_GET['wtag'])) } } } - } //Eintragungen laden -if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr))) +if ((isset($wmonat) || isset($wmonat)) && (isset($wjahr) || isset($wjahr))) { //Urlaubstageage markieren - $mbeginn=mktime(0, 0, 0, ($wmonat+1) , 1, $jahre[$wjahr]); + $mbeginn=mktime(0, 0, 0, ($wmonat+1), 1, $jahre[$wjahr]); $ttt=getdate($mbeginn); $wotag="$ttt[wday]"; if ($wotag==0) @@ -447,22 +487,22 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr))) } //$wvon=date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , 1, $jahre[$wjahr])); //$wbis=date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $mende, $jahre[$wjahr])); - $ttt=getdate(mktime(0, 0, 0, ($wmonat+1) , $mende, $jahre[$wjahr])); + $ttt=getdate(mktime(0, 0, 0, ($wmonat+1), $mende, $jahre[$wjahr])); if($wmonat==0) { - $wvon=date("Y-m-d",mktime(0, 0, 0, 12 , $mendev-($wotag-1), ($jahre[$wjahr])-1)); + $wvon=date("Y-m-d", mktime(0, 0, 0, 12, $mendev-($wotag-1), ($jahre[$wjahr])-1)); } else { - $wvon=date("Y-m-d",mktime(0, 0, 0, ($wmonat) , $mendev-($wotag-1), ($jahre[$wjahr]))); + $wvon=date("Y-m-d", mktime(0, 0, 0, ($wmonat), $mendev-($wotag-1), ($jahre[$wjahr]))); } if($wmonat==11) { - $wbis=date("Y-m-d",mktime(0, 0, 0, 1 , (7-($ttt['wday']==0?7:$ttt['wday'])), $jahre[$wjahr]+1)); + $wbis=date("Y-m-d", mktime(0, 0, 0, 1, (7-($ttt['wday']==0?7:$ttt['wday'])), $jahre[$wjahr]+1)); } else { - $wbis=date("Y-m-d",mktime(0, 0, 0, ($wmonat+2) , (7-($ttt['wday']==0?7:$ttt['wday'])), $jahre[$wjahr])); + $wbis=date("Y-m-d", mktime(0, 0, 0, ($wmonat+2), (7-($ttt['wday']==0?7:$ttt['wday'])), $jahre[$wjahr])); } $qry="SELECT * FROM campus.tbl_zeitsperre WHERE zeitsperretyp_kurzbz='Urlaub' @@ -477,19 +517,19 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr))) { //echo " ".$row->vondatum; //echo "-".$row->bisdatum; - for($i=1;$i<=$mende+($wotag-1)+(7-($ttt['wday']==0?7:$ttt['wday']));$i++) + for($i=1; $i<=$mende+($wotag-1)+(7-($ttt['wday']==0?7:$ttt['wday'])); $i++) { - if(date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $i-$wotag+1, $jahre[$wjahr]))>=$row->vondatum - && date("Y-m-d",mktime(0, 0, 0, ($wmonat+1) , $i-$wotag+1, $jahre[$wjahr]))<=$row->bisdatum) + if(date("Y-m-d", mktime(0, 0, 0, ($wmonat+1), $i-$wotag+1, $jahre[$wjahr]))>=$row->vondatum + && date("Y-m-d", mktime(0, 0, 0, ($wmonat+1), $i-$wotag+1, $jahre[$wjahr]))<=$row->bisdatum) { - if($row->freigabevon!='' && $row->vondatum<=date("Y-m-d",time())) + if($row->freigabevon!='' && $row->vondatum<=date("Y-m-d", time())) { $hgfarbe[$i]='#bbb'; } - elseif ($row->freigabevon!='' && $row->vondatum>date("Y-m-d",time())) - { + elseif ($row->freigabevon!='' && $row->vondatum>date("Y-m-d", time())) + { $hgfarbe[$i]='#CDDDEE'; - } + } else { $hgfarbe[$i]='#FFFC7F'; @@ -513,7 +553,7 @@ if ((isset($wmonat) || isset($wmonat))&&(isset($wjahr) || isset($wjahr))) } } } - for($i=$mende+$wotag+(7-($ttt['wday']==0?7:$ttt['wday']));$i<44;$i++) + for($i=$mende+$wotag+(7-($ttt['wday']==0?7:$ttt['wday'])); $i<44; $i++) { $hgfarbe[$i]='#E9ECEE'; $datensatz[$i]=0; @@ -567,58 +607,60 @@ echo ' } }); '; -?> - - - <?php echo $p->t('urlaubstool/urlaubstool');?> - + }, + select: function(event, ui) + { + //Ausgeaehlte Ressource zuweisen und Textfeld wieder leeren + $("#vertretung").val(ui.item.uid); + } + }); +}) + + +<?php echo $p->t('urlaubstool/urlaubstool');?> + ".$p->t('urlaubstool/urlaubstool')." (".$uid.")"; + //Anzeige Resturlaubsberechnung echo ''; echo ''; -for($i=1;$i<=7;$i++) +for($i=1; $i<=7; $i++) echo "\n".''; echo ''; -for ($i=0;$i<6;$i++) +for ($i=0; $i<6; $i++) { echo "\n".''; - for ($j=1;$j<8;$j++) + for ($j=1; $j<8; $j++) { echo "\n"; - if(strlen(stristr($tage[$j+7*$i],"."))>0) + if(strlen(stristr($tage[$j+7*$i], "."))>0) { if($j%6==0 || $j==7) { @@ -822,7 +864,7 @@ for ($i=0;$i<6;$i++) } if($tage[$j+7*$i]!='') { - if($hgfarbe[$j+7*$i]=='#FFFC7F' )//|| $hgfarbe[$j+7*$i]=='#CDDDEE') + if($hgfarbe[$j+7*$i]=='#FFFC7F')//|| $hgfarbe[$j+7*$i]=='#CDDDEE') { echo 't('urlaubstool/erreichbar').': '.$erreichbarkeit_kurzbz[$j+7*$i].'">'.$tage[$j+7*$i].'
';; $k=$j+7*$i; @@ -832,16 +874,16 @@ for ($i=0;$i<6;$i++) elseif($hgfarbe[$j+7*$i]=='#E9ECEE') { echo ''.$tage[$j+7*$i].'
'; - if(strlen(stristr($tage[$j+7*$i],"."))>0) + if(strlen(stristr($tage[$j+7*$i], "."))>0) { echo ''; + value="'.date("Y-m-d", mktime(0, 0, 0, substr($tage[$j+7*$i], 3, 2), substr($tage[$j+7*$i], 0, 2), substr($tage[$j+7*$i], 6, 4))).'" + id="'.date("d.m.Y", mktime(0, 0, 0, substr($tage[$j+7*$i], 3, 2), substr($tage[$j+7*$i], 0, 2), substr($tage[$j+7*$i], 6, 4))).'">'; } else { - echo ''; + echo ''; } } else @@ -853,12 +895,12 @@ for ($i=0;$i<6;$i++) } elseif(isset($freigabeamum[$j+7*$i])) { - echo 'freigegeben '; + echo 'freigegeben '; if($hgfarbe[$j+7*$i]=='#CDDDEE') { $k=$j+7*$i; - echo ""; - echo 'loeschen'; + echo ""; + echo 'loeschen'; } } else diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php index 16ed393f9..46d342971 100644 --- a/cis/private/profile/zeitsperre_resturlaub.php +++ b/cis/private/profile/zeitsperre_resturlaub.php @@ -31,6 +31,7 @@ require_once('../../../include/person.class.php'); require_once('../../../include/benutzer.class.php'); require_once('../../../include/mitarbeiter.class.php'); require_once('../../../include/mail.class.php'); +require_once('../../../include/sancho.inc.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/zeitaufzeichnung.class.php'); @@ -65,6 +66,7 @@ if(isset($_GET['uid'])) die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); } } + $datum_obj = new datum(); $ma= new mitarbeiter(); @@ -100,6 +102,7 @@ $num_rows_stunde=$db->db_num_rows($result_stunde); loadAddons(); @@ -109,6 +112,9 @@ foreach($addon_obj->result as $addon) echo ''; } +// Überprüfen, ob addon casetime aktiv ist +$addoncasetime = $addon_obj->checkActiveAddon("casetime"); + // Wenn Seite fertig geladen ist Addons aufrufen echo ' '; ?> @@ -316,6 +324,10 @@ function showHideStudeDropDown() { document.getElementById('vonStd').style.visibility = 'hidden'; document.getElementById('bisStd').style.visibility = 'hidden'; + + // Stunde entfernen + document.getElementById('vonstunde').selectedIndex = 0; + document.getElementById('bisstunde').selectedIndex = 0; } else { @@ -339,6 +351,17 @@ function showHideStudeDropDown() {'AktuellerStand'}; +} //Zeitsperre Speichern if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_sperre')) @@ -502,17 +525,24 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $zeitsperre->updateamum = date('Y-m-d H:i:s'); $zeitsperre->updatevon = $uid; + // Zeitsperretyp Beschreibung + $zeitsperre->loadZeitsperretyp($zeitsperre->zeitsperretyp_kurzbz); + $zeitsperre->beschreibung = $zeitsperre->result[0]->beschreibung; + if($zeitsperre->save()) { echo "

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

"; if(URLAUB_TOOLS) { - if($zeitsperre->new && $zeitsperre->zeitsperretyp_kurzbz=='Urlaub') + //Beim Anlegen von neuen Urlauben oder neuem Zeitausgleich wird ein Mail an den Vorgesetzten versendet + if($zeitsperre->new && ($zeitsperre->zeitsperretyp_kurzbz=='Urlaub' || $zeitsperre->zeitsperretyp_kurzbz == 'ZA') + || !$zeitsperre->new && $zeitsperre->zeitsperretyp_kurzbz == 'ZA') { //Beim Anlegen von neuen Urlauben wird ein Mail an den Vorgesetzten versendet um diesen Freizugeben $prsn = new person(); - $vorgesetzter = $ma->getVorgesetzte($uid); + $vorgesetzter = $ma->getVorgesetzte($uid); + if($vorgesetzter) { $to=''; @@ -531,21 +561,75 @@ if(isset($_GET['type']) && ($_GET['type']=='edit_sperre' || $_GET['type']=='new_ $benutzer = new benutzer(); $benutzer->load($uid); + $nameMitarbeiter = $benutzer->vorname. " ". $benutzer->nachname; + $beschreibung = (!empty($zeitsperre->bezeichnung) ? $zeitsperre->bezeichnung : $zeitsperre->beschreibung); + 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()) + $von = $datum_obj->formatDatum($zeitsperre->vondatum,'d.m.Y'); + $bis = $datum_obj->formatDatum($zeitsperre->bisdatum,'d.m.Y'); + + // Wenn ein neuer Urlaub eingetragen wurde, Freigabemail-Text + if ($zeitsperre->zeitsperretyp_kurzbz=='Urlaub') { - echo "
".$p->t('urlaubstool/freigabemailWurdeVersandt',array($fullName)).""; + $link = " Link Urlaubstool "; + + $subject = "Freigabeansuchen Urlaub"; + $mailvorlage = 'Sancho_Mail_Urlaub_Neu'; + + $template_data = array( + 'vorgesetzter' => $fullName, + 'nameMitarbeiter' => $nameMitarbeiter, + 'beschreibung' =>$beschreibung, + 'vonDatum' => $von, + 'bisDatum' => $bis, + 'Link'=> $link, + 'urlaubssaldo' => $urlaubssaldo + ); + } + + // Wenn ein Zeitausgleich eingetragen wurde... + if ($zeitsperre->zeitsperretyp_kurzbz == 'ZA') + { + // ...Mail-Text für neuen Zeitausgleich + if ($zeitsperre->new) + { + $subject = $p->t('urlaubstool/zeitausgleichNeu'); + $mailvorlage = 'Sancho_Content_Zeitausgleich'; + } + // ...Mail-Text für geaenderten Zeitausgleich + else + { + $subject = $subject = $p->t('urlaubstool/zeitausgleichGeaendert'); + $mailvorlage = 'Sancho_Content_ZA_Aendern'; + } + $template_data = array( + 'vorgesetzter' => $fullName, + 'nameMitarbeiter' => $nameMitarbeiter, + 'beschreibung' =>$beschreibung, + 'vonDatum' => $von, + 'bisDatum' => $bis, + 'Saldo'=> $zeitsaldo + ); + } + + $from='vilesci@'.DOMAIN; + + //Sanchomail mit Vorlage Sancho Mail Zeitausgleich + if (sendSanchoMail($mailvorlage, $template_data, $to, $subject)) + { + if ($zeitsperre->zeitsperretyp_kurzbz=='Urlaub') + { + echo "
". $p->t('urlaubstool/freigabemailWurdeVersandt', array($fullName)). ""; + } + + if ($zeitsperre->zeitsperretyp_kurzbz == 'ZA') + { + echo "
". $p->t('urlaubstool/VorgesetzteInformiert', array($fullName)). ""; + } } else { @@ -572,8 +656,15 @@ if((isset($_GET['type']) && $_GET['type']=='delete_sperre' && isset($_GET['infor $zeitsperre = new zeitsperre(); $zeitsperre->load($_GET['id']); - $vondatum = $zeitsperre->getVonDatum(); - $bisdatum = $zeitsperre->getBisDatum(); + $zeitsperre->loadZeitsperretyp($zeitsperre->zeitsperretyp_kurzbz); + $zeitsperre->beschreibung = $zeitsperre->result[0]->beschreibung; + + $vonDatum = $zeitsperre->getVonDatum(); + $bisDatum = $zeitsperre->getBisDatum(); + + $vonDatum = $datum_obj->formatDatum($vonDatum ,'d.m.Y'); + $bisDatum = $datum_obj->formatDatum($bisDatum,'d.m.Y'); + if(!$zeitsperre->delete($_GET['id'])) echo $zeitsperre->errormsg; @@ -604,16 +695,32 @@ 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"; + $nameMitarbeiter = $benutzer->vorname. " ". $benutzer->nachname; + $beschreibung = (!empty($zeitsperre->bezeichnung) ? $zeitsperre->bezeichnung : $zeitsperre->beschreibung); + if ($zeitsperre->zeitsperretyp_kurzbz == 'Urlaub') + { + $subject = $p->t('urlaubstool/UrlaubGeloescht'); + $mailvorlage = 'Sancho_Mail_Urlaub_Loeschen'; + } - $message.= $p->t('urlaubstool/von')." ".date("d.m.Y", strtotime($vondatum))." ".$p->t('urlaubstool/bis')." ".date("d.m.Y", strtotime($bisdatum))."\n"; + if ($zeitsperre->zeitsperretyp_kurzbz == 'ZA') + { + $subject = $p->t('urlaubstool/zeitausgleichGeloescht'); + $mailvorlage = 'Sancho_Mail_ZA_loeschen'; + } + $template_data = array( + 'vorgesetzter' => $fullName, + 'nameMitarbeiter' => $nameMitarbeiter, + 'beschreibung' =>$beschreibung, + 'vonDatum' => $vonDatum, + 'bisDatum' => $bisDatum + ); - $mail = new mail($to, 'vilesci@'.DOMAIN,$p->t('urlaubstool/freigegebenerUrlaubGeloescht'), $message); - if($mail->send()) + if (sendSanchoMail($mailvorlage, $template_data, $to, $subject)) { + echo "" . $p->t('global/erfolgreichgelöscht') . '
'; echo "
".$p->t('urlaubstool/VorgesetzteInformiert',array($fullName)).""; } else @@ -621,6 +728,7 @@ if((isset($_GET['type']) && $_GET['type']=='delete_sperre' && isset($_GET['infor echo "
".$p->t('urlaubstool/fehlerBeimSendenAufgetreten',array($fullName))."!"; } } + else { $vgmail="
".$p->t('urlaubstool/konnteKeinFreigabemailVersendetWerden').""; @@ -632,6 +740,7 @@ if(isset($_GET['type']) && $_GET['type']=='delete_sperre' && !isset($_GET['infor { $zeit = new zeitsperre(); $zeit->load($_GET['id']); + //pruefen ob die person die den datensatz loeschen will auch der //besitzer dieses datensatzes ist if($zeit->mitarbeiter_uid==$uid) @@ -698,7 +807,7 @@ if(count($zeit->result)>0) $content_table.=""; 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') + else if($row->vondatum>=date("Y-m-d",time()) && ($row->zeitsperretyp_kurzbz=='Urlaub' || $row->zeitsperretyp_kurzbz == 'ZA')) { $content_table.="\n"; } @@ -779,7 +888,7 @@ $content_form.= '"; $content_form.= ''; +//$content_form.= ' +//'; + + $content_form.= "'; + + $content_form.= '
'; @@ -664,7 +706,7 @@ echo ' style="vertical-align: middle;" alt="links">  \n"; echo ' '; echo ' '; //Tage -$mbeginn=mktime(0, 0, 0, ($wmonat+1) , 1, $jahre[$wjahr]); +$mbeginn=mktime(0, 0, 0, ($wmonat+1), 1, $jahre[$wjahr]); $ttt=getdate($mbeginn); $wotag="$ttt[wday]"; if ($wotag==0) @@ -742,9 +784,9 @@ else { $mendev = cal_days_in_month(CAL_GREGORIAN, ($wmonat), $jahre[$wjahr]); } -$ttt=getdate(mktime(0, 0, 0, ($wmonat+1) , $mende, $jahre[$wjahr])); +$ttt=getdate(mktime(0, 0, 0, ($wmonat+1), $mende, $jahre[$wjahr])); //echo "monatsende:".$mende; -for($i=1;$i<43;$i++) +for($i=1; $i<43; $i++) { if($i>=$wotag && $zaehl<=$mende) { @@ -755,22 +797,22 @@ for($i=1;$i<43;$i++) { if($wmonat==0) { - $tage[$i]=date("d.m.Y", mktime(0, 0, 0, 12 , $mendev+$i-($wotag-1), $jahre[$wjahr]-1)); + $tage[$i]=date("d.m.Y", mktime(0, 0, 0, 12, $mendev+$i-($wotag-1), $jahre[$wjahr]-1)); } else { - $tage[$i]=date("d.m.Y", mktime(0, 0, 0, ($wmonat) , $mendev+$i-($wotag-1), $jahre[$wjahr])); + $tage[$i]=date("d.m.Y", mktime(0, 0, 0, ($wmonat), $mendev+$i-($wotag-1), $jahre[$wjahr])); } } elseif ($i>$mende && $i<=$mende+($wotag-1)+(7-($ttt['wday']==0?7:$ttt['wday']))) { if($wmonat==11) { - $tage[$i]=date("d.m.Y", mktime(0, 0, 0, 1 , $i-$mende-$wotag+1, $jahre[$wjahr+1])); + $tage[$i]=date("d.m.Y", mktime(0, 0, 0, 1, $i-$mende-$wotag+1, $jahre[$wjahr+1])); } else { - $tage[$i]=date("d.m.Y", mktime(0, 0, 0, ($wmonat+2) , $i-$mende-$wotag+1, $jahre[$wjahr])); + $tage[$i]=date("d.m.Y", mktime(0, 0, 0, ($wmonat+2), $i-$mende-$wotag+1, $jahre[$wjahr])); } } else @@ -788,17 +830,17 @@ echo '
'.$tagbez[$lang->index][$i].'
".$p->t('zeitsperre/edit')." ".$p->t('zeitsperre/loeschen')."
'.$p->t('global/von').'\n"; +$content_form.= "
'.$p->t('global/bis').' '; //dropdown fuer bisstunde $content_form.= $p->t('zeitsperre/stundeInklusive'); -$content_form.= " \n"; if($zeitsperre->bisstunde=='') $content_form.= "\n"; @@ -836,6 +945,10 @@ if($result = $db->db_query($qry)) } $content_form.= '
'.$p->t('global/bezeichnung').'
".$p->t('urlaubstool/erreichbarkeit')."'; + + if(isset($_GET['type']) && $_GET['type']=='edit') $content_form.= ""; @@ -875,6 +992,7 @@ echo '
'; ?> + showHideStudeDropDown();'; ?> diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index ff8e863e2..773582177 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -605,9 +605,14 @@ echo ' { projphasenhtml += "'; + echo ''; } echo ''; } @@ -1379,7 +1393,27 @@ if ($projekt->getProjekteMitarbeiter($user, true)) } } echo ''; - echo '

'; + echo '
'; + + if (defined('DEFAULT_ALLIN_DIENSTVERTRAG') && DEFAULT_ALLIN_DIENSTVERTRAG != '') + { + $bisver = new bisverwendung(); + $bisver->getLastVerwendung($user); + // $ba1code = $bisver->ba1code; + $ba1code = null; + + if (in_array($bisver->ba1code, DEFAULT_ALLIN_DIENSTVERTRAG)) + { + echo '

'; + } + else + echo '
'; + } + else + echo '
'; + + + if (!$adminView) { diff --git a/cis/private/tools/zeitaufzeichnung_projektphasen.php b/cis/private/tools/zeitaufzeichnung_projektphasen.php index 053f38b91..05df74443 100644 --- a/cis/private/tools/zeitaufzeichnung_projektphasen.php +++ b/cis/private/tools/zeitaufzeichnung_projektphasen.php @@ -86,6 +86,7 @@ if (isset($_GET['projekt_kurzbz'])) $item['bezeichnung'] = $row->bezeichnung; $item['start'] = $datum_obj->formatDatum($row->start, 'd.m.Y'); $item['ende'] = $datum_obj->formatDatum($row->ende, 'd.m.Y'); + $item['zeitaufzeichnung_erlaubt'] = $row->zeitaufzeichnung; $result_obj[] = $item; } } diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index 66d855b61..027af9504 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -259,4 +259,11 @@ define('CIS_ZEITWUNSCH_GD', false); // Covid-Status anzeigen define('CIS_SHOW_COVID_STATUS', false); + +//Vertrag Allin +define ('DEFAULT_ALLIN_DIENSTVERTRAG',[111]); + +//Echter Dienstvertrag +define ('DEFAULT_ECHTER_DIENSTVERTRAG',[103,111]); + ?> diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index 2227916a9..17f668b90 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -268,4 +268,7 @@ define('ZEUGNISNOTE_NICHT_ANZEIGEN',serialize(array('iar', 'nz'))); //Default Lehrmodus define ('DEFAULT_LEHRMODUS','regulaer'); + +//Echter Dienstvertrag +define ('DEFAULT_ECHTER_DIENSTVERTRAG',[103,110]); ?> diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 9827dec4f..da64a6619 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -65,6 +65,13 @@ $data = ''; $error = false; $warnung = false; +//Default BA1Codes für echte Dienstverträge aus Config Laden +$arrEchterDV = [103]; +if (defined('DEFAULT_ECHTER_DIENSTVERTRAG') && DEFAULT_ECHTER_DIENSTVERTRAG != '') +{ + $arrEchterDV = DEFAULT_ECHTER_DIENSTVERTRAG; +} + loadVariables($user); //Berechtigungen laden @@ -560,10 +567,12 @@ if(!$error) { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) + + if ((in_array($row_verwendung->ba1code, $arrEchterDV)) && $row_verwendung->inkludierte_lehre == -1) { $fixangestellt = true; $lem->stundensatz = ''; + break; } } @@ -1567,9 +1576,10 @@ if(!$error) foreach($bisverwendung->result as $row_verwendung) { + // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) + if ((in_array($row_verwendung->ba1code, $arrEchterDV)) && $row_verwendung->inkludierte_lehre == -1) { $data = ''; break; diff --git a/include/addon.class.php b/include/addon.class.php index a45046356..25f7cd849 100644 --- a/include/addon.class.php +++ b/include/addon.class.php @@ -30,7 +30,7 @@ class addon extends basis_db public $fhcomplete_target_version; public $aktive_addons=array(); - + /** * Konstruktor */ @@ -38,12 +38,12 @@ class addon extends basis_db { parent::__construct(); $this->aktive_addons = array_filter(array_map('trim', explode(";", ACTIVE_ADDONS))); - + } /** * Liefert alle aktivierten Addons - */ + */ public function loadAddons() { @@ -55,7 +55,7 @@ class addon extends basis_db $fhcomplete_target_version=''; include(dirname(__FILE__).'/../addons/'.$addon.'/version.php'); - + $obj = new stdClass(); $obj->kurzbz = $addon; $obj->addon_name = $addon_name; @@ -63,7 +63,7 @@ class addon extends basis_db $obj->addon_description = $addon_description; $obj->fhcomplete_target_version = $fhcomplete_target_version; - + $this->result[] = $obj; } return true; @@ -87,5 +87,21 @@ class addon extends basis_db $this->fhcomplete_target_version = $fhcomplete_target_version; } + + /** + * Prüfen, ob ein bestimmtes Addon aktivierten ist + * @param $addon_kurzbz (fhtw,casetime, wawi..) + * @return true wenn addon aktiv, sonst false + */ + public function checkActiveAddon($addon_kurzbz) + { + $addonIsActive = false; + foreach($this->aktive_addons as $addon) + { + if ($addon == $addon_kurzbz) + $addonIsActive = true; + } + return $addonIsActive; + } } ?> diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index ce6a557b1..e5314963b 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -865,5 +865,64 @@ class bisverwendung extends basis_db return false; } } + + /** + * Lädt die letzte zeitaufzeichnungspflichtige Bisverwendung + * @param $uid UID des Mitarbeiters + * @return true wenn ok, false wenn Fehler + */ + public function getLastBisZAPflicht($uid) + { + $qry = ' + SELECT + * + FROM + bis.tbl_bisverwendung + WHERE + mitarbeiter_uid = '. $this->db_add_param($uid).' + AND + zeitaufzeichnungspflichtig = true + ORDER BY ende DESC NULLS FIRST LIMIT 1 + '; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + + $obj = new bisverwendung(); + + $obj->bisverwendung_id = $row->bisverwendung_id; + $obj->ba1code = $row->ba1code; + $obj->ba2code = $row->ba2code; + $obj->beschausmasscode = $row->beschausmasscode; + $obj->verwendung_code = $row->verwendung_code; + $obj->hauptberufcode = $row->hauptberufcode; + $obj->hauptberuflich = $row->hauptberuflich; + $obj->habilitation = $row->habilitation; + $obj->beginn = $row->beginn; + $obj->ende = $row->ende; + $obj->updatevon = $row->updatevon; + $obj->updateamum = $row->updateamum; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->vertragsstunden = $row->vertragsstunden; + $obj->dv_art = $row->dv_art; + $obj->inkludierte_lehre = $row->inkludierte_lehre; + $obj->azgrelevant = $row->azgrelevant; + $obj->homeoffice = $row->homeoffice; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler bei der Datenbankabfrage'; + return false; + } + } + + } ?> diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index df5557454..db8998379 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1113,6 +1113,50 @@ class mitarbeiter extends benutzer return $return; } + /** + * Gibt ein Array mit den UIDs der Vorgesetzten zum Zeitpunkt des korrespondierenden Timesheets zurück + * @return uid + */ + public function getVorgesetzteMonatTimesheet($uid, $timesheetDate) + { + $return=false; + + $qry = "SELECT + uid as vorgesetzter + FROM + public.tbl_benutzerfunktion + WHERE + funktion_kurzbz='Leitung' AND + (datum_von is null OR datum_von<=".$this->db_add_param($timesheetDate).") AND + (datum_bis is null OR datum_bis>=".$this->db_add_param($timesheetDate).") AND + oe_kurzbz in (SELECT oe_kurzbz + FROM public.tbl_benutzerfunktion + WHERE + funktion_kurzbz='oezuordnung' AND uid=".$this->db_add_param($uid)." AND + (datum_von is null OR (datum_von<= ".$this->db_add_param($timesheetDate).")) AND + (datum_bis is null OR (datum_bis>=".$this->db_add_param($timesheetDate).")) + );"; + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + if ($row->vorgesetzter!='') + { + $this->vorgesetzte[]=$row->vorgesetzter; + $return=true; + } + } + + $this->vorgesetzte = array_unique($this->vorgesetzte); + } + else + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage!'; + } + return $return; + } + /** * Gibt UID des letzten Vorgesetzten zurück * @param string $uid Mitarbeiter. diff --git a/include/projektphase.class.php b/include/projektphase.class.php index 19bd85d6d..4e3c38b7c 100644 --- a/include/projektphase.class.php +++ b/include/projektphase.class.php @@ -829,5 +829,39 @@ class projektphase extends basis_db return false; } } + + /** + * Gibt zurück, ob für eine Projektphase Zeitaufzeichnungsbuchung erlaubt ist + * @param $projektphase_id die zu überprüfende Projektphase + * @return boolean true, wenn Buchung erlaubt + */ + public function getPhasenZA($projektphase_id) + { + $qry = " + SELECT + fue.tbl_projektphase.zeitaufzeichnung + FROM + fue.tbl_projektphase + WHERE + tbl_projektphase.projektphase_id = ".$this->db_add_param($projektphase_id); + + if ($this->db_query($qry)) + { + if ($row = $this->db_fetch_object()) + { + return $row->zeitaufzeichnung; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } } ?> diff --git a/include/zeitaufzeichnung_import.class.php b/include/zeitaufzeichnung_import.class.php index e8e6a8b15..2d2109b2f 100644 --- a/include/zeitaufzeichnung_import.class.php +++ b/include/zeitaufzeichnung_import.class.php @@ -21,7 +21,7 @@ class zeitaufzeichnung_import { protected $project; protected $phase; protected $limitdate; - + protected $zeit; @@ -42,7 +42,7 @@ class zeitaufzeichnung_import { $this->zeit = new zeitaufzeichnung(); } - + /** * @return boolean @@ -64,7 +64,7 @@ class zeitaufzeichnung_import { public function hasInfos() { return !empty($this->infos); } - + /** * @return string */ @@ -96,15 +96,15 @@ class zeitaufzeichnung_import { $html .= '' . $msg . '
' . "\n"; } return $html; - } - + } + /** * @return string */ public function OutputToHTML() { return $this->InfosToHTML() . $this->WarningsToHTML() . $this->ErrorsToHTML(); - } - + } + /** * @param string $msg * @return void @@ -112,7 +112,7 @@ class zeitaufzeichnung_import { protected function addError($msg) { $this->errors[] = $msg; } - + /** * @param string $msg * @return void @@ -120,7 +120,7 @@ class zeitaufzeichnung_import { protected function addWarning($msg) { $this->warnings[] = $msg; } - + /** * @param string $msg * @return void @@ -134,7 +134,7 @@ class zeitaufzeichnung_import { * @param string $uid The user id * @param string $day "Y-m-d" formatted datestring * @return void - * + * * @throws Exception */ protected function checkZeitsperren($uid, $day) { @@ -150,25 +150,25 @@ class zeitaufzeichnung_import { throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ": " . $this->p->t("zeitaufzeichnung/zeitsperreVorhanden", [$zsdate, $zs->result[0]->zeitsperretyp_kurzbz])); } } - + /** * @param string $date datetimestring * @return void - * + * * @throws Exception */ protected function checkLimitdatum($date) { if ($this->datum->formatDatum($date, 'Y-m-d H:i:s') > $this->limitdate) { throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich da (' . $date . ') zu weit in der Zukunft liegt.'); - } + } } - + /** * @param string $start datestring * @param string $end datestring * @param string $aktivitaet_kurzbz * @return void - * + * * @throws Exception */ protected function checkDienstreise($start, $end, $aktivitaet_kurzbz) { @@ -179,11 +179,11 @@ class zeitaufzeichnung_import { .': Eingabe nicht möglich, da keine Zeitaufzeichnung über mehrere Tage erlaubt ist (ausgenommen Dienstreisen).'); } } - + /** * @param string $end timestring * @return void - * + * * @throws Exception */ protected function checkTagesgenau($end) { @@ -193,13 +193,13 @@ class zeitaufzeichnung_import { .': Bitte Arbeitszeiten gemäß Arbeitsaufzeichnung Leitfaden tagesgenau abgrenzen: Nur Eingaben von 00:00 bis 23:59 erlaubt!'); } } - + /** * @param string $projekt_kurzbz * @param string $start datestring * @param string $end datestring * @return void - * + * * @throws Exception */ protected function checkProjectInterval($projekt_kurzbz, $start, $end) { @@ -207,13 +207,13 @@ class zeitaufzeichnung_import { throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Eingabe nicht möglich, da angegebenes Anfangs und Enddatum nicht in den Projektzeitrahmen fällt: (' . $start . ') (' . $end . ')'); } } - + /** * @param string $phase The Projektphase ID * @param string $start datestring * @param string $end datestring * @return void - * + * * @throws Exception */ protected function checkPhaseInterval($phase, $start, $end) { @@ -222,4 +222,36 @@ class zeitaufzeichnung_import { } } + /** + * @param string $phase The Projektphase ID + * @return void + * + * @throws Exception + */ +protected function checkPhaseBebuchbar($phase) +{ + if ($this->phase->getPhasenZA($phase) == 'f') + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Dieses Arbeitspaket darf nicht bebucht werden!'); + } +} + +/** +* @param string $phase The Projektphase ID +* @return void +* +* @throws Exception +*/ +protected function checkIfArbeitspaketZuWaehlen($projekt_kurzbz, $phase) +{ + if ($projekt_kurzbz != '') + { + $this->project->load($projekt_kurzbz); + if (!$this->project->zeitaufzeichnung && !$phase) + { + throw new Exception($this->p->t("global/fehlerBeimSpeichernDerDaten") . ': Bitte ein Arbeitspaket wählen!'); + } + } +} + } diff --git a/include/zeitaufzeichnung_import_csv.class.php b/include/zeitaufzeichnung_import_csv.class.php index 27a240e45..8a8e8bb2f 100644 --- a/include/zeitaufzeichnung_import_csv.class.php +++ b/include/zeitaufzeichnung_import_csv.class.php @@ -163,7 +163,8 @@ class zeitaufzeichnung_import_csv extends zeitaufzeichnung_import { $this->initData($data); $this->checkProject($data[self::PROJEKT], $data[self::PHASE]); $this->checkPhase($data[self::PHASE]); - + $this->checkPhaseBebuchbar($data[self::PHASE]); + $this->checkIfArbeitspaketZuWaehlen($data[self::PROJEKT], $data[self::PHASE]); $this->checkZeitsperren($this->user, $this->datum->formatDatum($data[self::STARTDT], 'Y-m-d')); $this->checkSperrdatum($data[self::STARTDT]); $this->checkLimitdatum($data[self::STARTDT]); diff --git a/include/zeitaufzeichnung_import_post.class.php b/include/zeitaufzeichnung_import_post.class.php index a6a59376e..ded9344fb 100644 --- a/include/zeitaufzeichnung_import_post.class.php +++ b/include/zeitaufzeichnung_import_post.class.php @@ -72,6 +72,8 @@ class zeitaufzeichnung_import_post extends zeitaufzeichnung_import { $this->checkDienstreise($this->data['von'], $this->data['bis'], $this->data['aktivitaet_kurzbz']); $this->checkTagesgenau($this->data['bis']); $this->processPause($this->data['von_pause'], $this->data['bis_pause']); + $this->checkPhaseBebuchbar($this->data['projektphase_id']); + $this->checkIfArbeitspaketZuWaehlen($this->data['projekt_kurzbz'], $this->data['projektphase_id']); $this->saveZeit(); } catch (Exception $ex) { $this->addError($ex->getMessage()); diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php index 0e737eaf0..efae1c91d 100644 --- a/include/zeitsperre.class.php +++ b/include/zeitsperre.class.php @@ -551,13 +551,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 +592,46 @@ class zeitsperre extends basis_db return true; } } + + /** + * Laedt einen Zeitsperretyp. + * + * @param $zeitsperretyp_kurzbz + * @return Gibt Zeitsperretyp als Objekt zurück. True wenn ok, false im Fehlerfall. + */ + public function loadZeitsperretyp($zeitsperretyp_kurzbz) + { + if(!is_string($zeitsperretyp_kurzbz)) + { + $this->errormsg = 'zeitsperretyp muß ein String sein'; + return false; + } + + $qry = "SELECT * FROM campus.tbl_zeitsperretyp WHERE zeitsperretyp_kurzbz = ". $this->db_add_param($zeitsperretyp_kurzbz); + + if(!$this->db_query($qry)) + { + $this->errormsg = 'Fehler beim Laden des Datensatzes'; + return false; + } + + if($row = $this->db_fetch_object()) + { + $obj = new StdClass(); + $obj->zeitsperretyp_kurzbz = $row->zeitsperretyp_kurzbz; + $obj->beschreibung = $row->beschreibung; + $obj->farbe = $row->farbe; + + $this->result[]= $obj; + } + else + { + $this->errormsg = 'Zeitsperretyp konnte nicht geladen werden'; + return false; + } + + return true; + } + } ?> diff --git a/locale/de-AT/urlaubstool.php b/locale/de-AT/urlaubstool.php index 6d6edde09..5001ed725 100644 --- a/locale/de-AT/urlaubstool.php +++ b/locale/de-AT/urlaubstool.php @@ -37,9 +37,14 @@ $this->phrasen['urlaubstool/sieKoennenDiesenUnterFolgenderAdresseFreigeben']='Si $this->phrasen['urlaubstool/freigabeansuchenUrlaub']='Freigabeansuchen Urlaub'; $this->phrasen['urlaubstool/freigabeFehlt']='Urlaub wurde noch nicht freigegeben'; $this->phrasen['urlaubstool/freigegebenerUrlaubGeloescht']='Bereits Freigegebener Urlaub wurde gelöscht'; +$this->phrasen['urlaubstool/UrlaubGeloescht']='Urlaub wurde gelöscht'; +$this->phrasen['urlaubstool/zeitausgleichNeu']='Zeitausgleich wurde neu eingetragen'; +$this->phrasen['urlaubstool/zeitausgleichGeaendert']='Zeitausgleich wurde geändert'; +$this->phrasen['urlaubstool/zeitausgleichGeloescht']='Zeitausgleich wurde gelöscht'; +$this->phrasen['urlaubstool/xHatZeitausgleichGeloescht']='%s %s hat einen eingetragenen Zeitausgleich gelöscht'; $this->phrasen['urlaubstool/VorgesetzteInformiert']='Email wurde an %s versandt'; $this->phrasen['urlaubstool/konnteKeinInformationsemailVersendetWerden']='Es konnte kein Email versendet werden, da kein Vorgesetzter eingetragen ist!'; -$this->phrasen['urlaubstool/xHatUrlaubGeloescht']='%s %s hat bereits freigegebenen Urlaub gelöscht'; +$this->phrasen['urlaubstool/xHatUrlaubGeloescht']='%s %s hat Urlaub gelöscht'; $this->phrasen['urlaubstool/urlaubsfreigabe']='Freigabe Urlaub: '; $this->phrasen['urlaubstool/bestaetigungsmailWurdeVersandt']='Bestätigungsmail an %s versandt'; $this->phrasen['urlaubstool/urlaubVon']='Ihr angefragter Urlaub von'; diff --git a/locale/en-US/urlaubstool.php b/locale/en-US/urlaubstool.php index 697117c34..17a31c986 100644 --- a/locale/en-US/urlaubstool.php +++ b/locale/en-US/urlaubstool.php @@ -36,6 +36,13 @@ $this->phrasen['urlaubstool/meineZeitsperren']='My Planned Absences'; $this->phrasen['urlaubstool/sieKoennenDiesenUnterFolgenderAdresseFreigeben']='Sie können diesen unter folgender Adresse freigeben'; //Nur übersetzen, wenn die eMail in der eingestellten Sprache versandt werden soll $this->phrasen['urlaubstool/freigabeansuchenUrlaub']='Freigabeansuchen Urlaub'; //Nur übersetzen, wenn die eMail in der eingestellten Sprache versandt werden soll $this->phrasen['urlaubstool/freigabeFehlt']='Vacation has not been approved yet'; +$this->phrasen['urlaubstool/zeitausgleichNeu']='Compensatory time was entered'; +$this->phrasen['urlaubstool/zeitausgleichGeaendert']='Compensatory time was changed'; +$this->phrasen['urlaubstool/zeitausgleichGeloescht']='Compensatory time was deleted'; +$this->phrasen['urlaubstool/xHatZeitausgleichGeloescht']='Compensatory time was deleted by %s %s'; +$this->phrasen['urlaubstool/xHatUrlaubGeloescht']='Vacation was deleted by %s %s'; +$this->phrasen['urlaubstool/UrlaubGeloescht']='Urlaub wurde gelöscht'; +$this->phrasen['urlaubstool/freigegebenerUrlaubGeloescht']='Approved Vacation was deleted by %s %s'; $this->phrasen['urlaubstool/urlaubsfreigabe']='Vacation approval: '; $this->phrasen['urlaubstool/bestaetigungsmailWurdeVersandt']='Confirmation mail to %s sent'; $this->phrasen['urlaubstool/urlaubVon']='Ihr angefragter Urlaub von'; //Nur übersetzen, wenn die eMail in der eingestellten Sprache versandt werden soll diff --git a/vilesci/bis/checkverwendung.php b/vilesci/bis/checkverwendung.php index 9c474ee50..0659dd01b 100644 --- a/vilesci/bis/checkverwendung.php +++ b/vilesci/bis/checkverwendung.php @@ -450,6 +450,13 @@ if($resultall = $db->db_query($qryall)) } //**** Echter Dienstvertrag ohne Vertragsstunden +$arrayEchterDV= array(103, 110); +if (defined('DEFAULT_ECHTER_DIENSTVERTRAG') && DEFAULT_ECHTER_DIENSTVERTRAG != '') +{ + $arrayEchterDV = DEFAULT_ECHTER_DIENSTVERTRAG; +} +$str_ba1codein = trim(array_reduce($arrayEchterDV, function($c, $i) { global $db; return $c .= $db->db_add_param($i, FHC_INTEGER) . ','; }), ','); + $qryall=" SELECT distinct mitarbeiter_uid as uid, vorname, nachname @@ -461,7 +468,7 @@ $qryall=" WHERE (beginn is null or beginn<".$db->db_add_param($bismeldedatum_ende).") and (ende is null or ende>=".$db->db_add_param($bismeldedatum_start).") - and ba1code=103 + and ba1code IN (" . $str_ba1codein . ") and vertragsstunden is null and beschausmasscode!=5 ORDER by nachname, vorname, mitarbeiter_uid;"; diff --git a/vilesci/lehre/lehreinheiten_vorrueckung.php b/vilesci/lehre/lehreinheiten_vorrueckung.php index 23533cd91..344fd135a 100644 --- a/vilesci/lehre/lehreinheiten_vorrueckung.php +++ b/vilesci/lehre/lehreinheiten_vorrueckung.php @@ -54,6 +54,13 @@ foreach ($stg_obj->result as $stg) $stg_arr[$stg->studiengang_kz] = $stg->kuerzel; } +//Default BA1Codes für echte Dienstverträge aus Config Laden +$arrEchterDV = [103, 110]; +if (defined('DEFAULT_ECHTER_DIENSTVERTRAG') && DEFAULT_ECHTER_DIENSTVERTRAG != '') +{ + $arrEchterDV = DEFAULT_ECHTER_DIENSTVERTRAG; +} + $studiengang_kz = (isset($_GET['studiengang_kz'])?$_GET['studiengang_kz']:''); $semester = (isset($_GET['semester'])?$_GET['semester']:''); $stsem_von = (isset($_GET['stsem_von'])?$_GET['stsem_von']:''); @@ -359,7 +366,7 @@ if ($studiengang_kz != '' && $stsem_von != '' && $stsem_nach != '') { // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz // geliefert da dies im Vertrag inkludiert ist. - if ($row_verwendung->ba1code == 103 && $row_verwendung->inkludierte_lehre == -1) + if ((in_array($row_verwendung->ba1code, $arrEchterDV)) && $row_verwendung->inkludierte_lehre == -1) { $lem_obj->stundensatz = ''; break; diff --git a/vilesci/personen/urlaubsverwaltung.php b/vilesci/personen/urlaubsverwaltung.php index 9291837ad..f631aa081 100644 --- a/vilesci/personen/urlaubsverwaltung.php +++ b/vilesci/personen/urlaubsverwaltung.php @@ -32,6 +32,7 @@ require_once('../../include/benutzer.class.php'); require_once('../../include/mitarbeiter.class.php'); require_once('../../include/datum.class.php'); require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/addon.class.php'); if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -59,6 +60,15 @@ $alle = (isset($_GET['alle'])?true:false); $errormsg=''; $message=''; $error=false; +$mlAbgeschickt = ''; + +//prüfen, ob addon casetime aktiviert ist +$addon_obj = new addon(); +$addoncasetime = $addon_obj->checkActiveAddon("casetime"); +if ($addoncasetime) +{ + require_once('../../addons/casetime/include/functions.inc.php'); +} //Kopfzeile echo ' @@ -78,6 +88,10 @@ echo '