diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index acc5f83d0..cd40391e1 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -126,6 +126,12 @@ $von = $von_datum.' '.$von_uhrzeit; $bis_datum = (isset($_REQUEST['bis_datum'])?$_REQUEST['bis_datum']:date('d.m.Y')); $bis_uhrzeit = (isset($_POST['bis_uhrzeit'])?$_POST['bis_uhrzeit']:date('H:i',mktime(date('H'), date('i')+10))); $bis = $bis_datum.' '.$bis_uhrzeit; + +$pause_von = (isset($_POST['pause_von'])?$_POST['pause_von']:date('H:i')); +$pause_bis = (isset($_POST['pause_bis'])?$_POST['pause_bis']:date('H:i')); +$von_pause = $von_datum.' '.$pause_von; +$bis_pause = $bis_datum.' '.$pause_bis; + $beschreibung = (isset($_POST['beschreibung'])?$_POST['beschreibung']:''); $service_id = (isset($_POST['service_id'])?$_POST['service_id']:''); $kunde_uid = (isset($_POST['kunde_uid'])?$_POST['kunde_uid']:''); @@ -233,6 +239,8 @@ echo ' return row[0] + " " + row[1] + " " + row[2]; } + checkPausenblock(); + $("#kunde_name").autocomplete({ source: "zeitaufzeichnung_autocomplete.php?autocomplete=kunde", minLength:2, @@ -539,6 +547,86 @@ echo ' } ); } + + // Pausenblock + + function checkPausenblock() + { + var sel = $("#aktivitaet").val(); + var activities = ["Admin", "Lehre", "FuE", "Operativ", "Betrieb", "Design"]; + if (activities.includes(sel)) + showPausenblock(); + else + hidePausenblock(); + } + + function hidePausenblock() + { + $("#pause_von").val(""); + $("#pause_bis").val(""); + $("#genPause").attr("checked", false); + $("#pausenblock").hide(); + } + function showPausenblock() + { + $("#pausenblock").show(); + } + + function checkPausenzeit() + { + if ($("#genPause").is(":checked")) + { + setPausenzeit(); + } + else + { + clearPausenzeit(); + } + } + + function setPausenzeit() + { + var von_stunden, bis_stunden, von_minuten, bis_minuten, Uhrzeit2, Uhrzeit1, spanne; + Uhrzeit1 = $("#von_uhrzeit").val(); + von_stunden = Uhrzeit1.substring(0,2); + von_minuten = Uhrzeit1.substring(3,5); + Uhrzeit2 = $("#bis_uhrzeit").val(); + bis_stunden = Uhrzeit2.substring(0,2); + bis_minuten = Uhrzeit2.substring(3,5); + spanne = (bis_stunden*60+parseInt(bis_minuten))-(von_stunden*60+parseInt(von_minuten)); + + if (spanne <= 40) + { + alert("'.$p->t("zeitaufzeichnung/zeitraumZuKurz").'"); + $("#genPause").attr("checked", false); + } + else + { + var pausenstart = Math.floor((spanne/2-15)+(von_stunden*60+parseInt(von_minuten))); + var pausenstart_stunde = Math.floor(pausenstart/60); + var pausenstart_minute = pausenstart - pausenstart_stunde*60; + pausenstart_stunde = (pausenstart_stunde < 10 ? "0"+pausenstart_stunde : pausenstart_stunde); + pausenstart_minute = (pausenstart_minute < 10 ? "0"+pausenstart_minute : pausenstart_minute); + var beginn_pause = pausenstart_stunde + ":" + pausenstart_minute; + + var pausenende = pausenstart + parseInt(30); + var pausenende_stunde = Math.floor(pausenende/60); + var pausenende_minute = pausenende - pausenende_stunde*60; + pausenende_stunde = (pausenende_stunde < 10 ? "0"+pausenende_stunde : pausenende_stunde); + pausenende_minute = (pausenende_minute < 10 ? "0"+pausenende_minute : pausenende_minute); + + var ende_pause = pausenende_stunde + ":" + pausenende_minute; + + $("#pause_von").val(beginn_pause); + $("#pause_bis").val(ende_pause); + } + } + + function clearPausenzeit() + { + $("#pause_von").val(""); + $("#pause_bis").val(""); + } @@ -753,12 +841,78 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->projektphase_id = $projektphase_id; $zeit->service_id = $service_id; $zeit->kunde_uid = $kunde_uid; - - if(!$zeit->save()) + $saveerror = 0; + if (isset($_POST['genPause']) && (isset($_POST['save']) || isset($_POST['edit']))) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.''; + + $p_start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); + $p_end = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); + + // checken ob Pause innerhalb der Arbeitszeit ist + if ($zeit->start > $p_start || $zeit->ende < $p_end) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Pause außerhalb der Arbeitszeit
'; + $saveerror = 1; + + } + elseif ($p_start > $p_end) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Fehlerhafte Pausenzeiten
'; + $saveerror = 1; + } + else + { + //Eintrag Arbeit bis zur Pause + $zeit->ende = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); + if(!$zeit->save()) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; + $saveerror = 1; + } + //Eintrag für die Pause + $pause = new zeitaufzeichnung(); + $pause->new = true; + $pause->insertamum = date('Y-m-d H:i:s'); + $pause->updateamum = date('Y-m-d H:i:s'); + $pause->updatevon = $user; + $pause->insertvon = $user; + $pause->uid = $user; + $pause->aktivitaet_kurzbz = 'Pause'; + $pause->start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); + $pause->ende = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); + $pause->beschreibung = ''; + if(!$pause->save()) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; + $saveerror = 1; + } + // Eintrag Arbeit ab der Pause + if ($zeit->new == false) + { + $zeit->new = true; + $zeit->insertamum = date('Y-m-d H:i:s'); + $zeit->insertvon = $user; + } + + $zeit->start = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); + $zeit->ende = $datum->formatDatum($bis, $format='Y-m-d H:i:s'); + if(!$zeit->save()) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'
'; + $saveerror = 1; + } + } } - else + elseif (!isset($_POST['genPause'])) + { + if(!$zeit->save()) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.''; + $saveerror = 1; + } + } + + if ($saveerror == 0) { echo ''.$p->t("global/datenWurdenGespeichert").''; @@ -780,6 +934,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } } + //Datensatz loeschen if(isset($_GET['type']) && $_GET['type']=='delete') { @@ -956,7 +1111,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) // $qry = "SELECT * FROM fue.tbl_aktivitaet where sort != 5 or sort is null ORDER by sort,beschreibung"; if($result = $db->db_query($qry)) { - echo ''; if ($za_simple == 0) echo ''; //else @@ -1173,6 +1328,16 @@ if($projekt->getProjekteMitarbeiter($user, true)) '; + echo ' + +   + + + '.$p->t("zeitaufzeichnung/pauseEinfuegen").' - + + + + '; //Beschreibung echo ''.$p->t("global/beschreibung").''; echo ''; @@ -1327,11 +1492,13 @@ if($projekt->getProjekteMitarbeiter($user, true)) $elsumme = $h2*3600+$m2*60; if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) { - $pausesumme = $tagessaldo-18000; + //$pausesumme = $tagessaldo-18000; + $pausesumme = $pausesumme; } else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) { - $pausesumme = $pausesumme+1800; + //$pausesumme = $pausesumme+1800; + $pausesumme = $pausesumme; } if ($elsumme > 0){ $pausesumme = $pausesumme + $elsumme; @@ -1339,6 +1506,13 @@ if($projekt->getProjekteMitarbeiter($user, true)) } $tagessaldo = $tagessaldo-$pausesumme; + // fehlende Pausen berechnen + $pausefehlt_str = ''; + if ($tagessaldo > 19800 && $pausesumme < 1800) + $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) + $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + $tagessaldo = date('H:i', ($tagessaldo)); $colspan = ($za_simple)?6:8; echo ''; @@ -1350,7 +1524,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) $langindex = 1; else $langindex = 2; - echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').' '.$zeitsperre_text.''; + echo ''.$tagbez[$langindex][$datum->formatDatum($tag,'N')].' '.$datum->formatDatum($tag,'d.m.Y').' '.$zeitsperre_text.''.$pausefehlt_str; if ($ersumme != '00:00') $erstr = ' (+ '.$ersumme.' ER)'; else @@ -1359,8 +1533,8 @@ if($projekt->getProjekteMitarbeiter($user, true)) } echo ' - '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
LehreExtern / - '.$p->t("zeitaufzeichnung/pause").' '.($pflichtpause==false?$p->t("zeitaufzeichnung/inklusivePflichtpause"):'').': + '.$p->t("zeitaufzeichnung/arbeitszeit").': '.$datum->formatDatum($tagesbeginn, $format='H:i').'-'.$datum->formatDatum($tagesende, $format='H:i').' '.$p->t("eventkalender/uhr").'
+ '.$p->t("zeitaufzeichnung/pause").': '.$tagessaldo.$erstr.'
'.date('H:i', ($pausesumme-3600)).' '; diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index c7e0c47af..9b362ed3c 100644 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -172,17 +172,28 @@ class zeitaufzeichnung extends basis_db } } } - if ($this->aktivitaet_kurzbz != 'Ersatzruhe') + if ($this->aktivitaet_kurzbz != 'Ersatzruhe' && $this->aktivitaet_kurzbz != 'DienstreiseMT') { - $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz = 'Ersatzruhe' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; + $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz != 'DienstreiseMT' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; if($this->db_query($check_qry)) { if($row = $this->db_fetch_object()) { - if ($row->count) + if ($this->new) { - $this->errormsg = 'Eintrag darf nicht mit Ersatzruhe Überlappen!'; - return false; + if ($row->count) + { + $this->errormsg = 'Einträge dürfen nicht Überlappen!'; + return false; + } + } + else + { + if ($row->count > 1) + { + $this->errormsg = 'Einträge dürfen nicht Überlappen!'; + return false; + } } } } diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php index c797ddbb3..bd62a5be1 100644 --- a/locale/de-AT/zeitaufzeichnung.php +++ b/locale/de-AT/zeitaufzeichnung.php @@ -60,3 +60,5 @@ $this->phrasen['zeitaufzeichnung/keineprojekte']='keine Projekte vorhanden'; $this->phrasen['zeitaufzeichnung/summe']='Summe:'; $this->phrasen['zeitaufzeichnung/dienstreise']='Dienstreise'; $this->phrasen['zeitaufzeichnung/projektphase']='AP'; +$this->phrasen['zeitaufzeichnung/pauseEinfuegen']='Pause automatisch einfügen'; +$this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Zeitraum zu kurz für automatische Pause'; diff --git a/locale/en-US/zeitaufzeichnung.php b/locale/en-US/zeitaufzeichnung.php index dd50fae9b..8d2c217fa 100644 --- a/locale/en-US/zeitaufzeichnung.php +++ b/locale/en-US/zeitaufzeichnung.php @@ -60,3 +60,5 @@ $this->phrasen['zeitaufzeichnung/keineprojekte']='no projects exist'; $this->phrasen['zeitaufzeichnung/summe']='Sum:'; $this->phrasen['zeitaufzeichnung/dienstreise']='Business Trip'; $this->phrasen['zeitaufzeichnung/projektphase']='WP'; +$this->phrasen['zeitaufzeichnung/pauseEinfuegen']='insert break automatically'; +$this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Timeslot too short for automatic break.';