From 2b18be33af117f79722873bb78f6c80838b8c7db Mon Sep 17 00:00:00 2001 From: raab Date: Thu, 24 Oct 2019 17:31:25 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Button=20zur=20Best=C3=A4tigung=20nur=20meh?= =?UTF-8?q?r=20unterhalb=20des=20Textes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/ampelverwaltung.php | 133 +++++++++++++------------- 1 file changed, 65 insertions(+), 68 deletions(-) diff --git a/cis/private/tools/ampelverwaltung.php b/cis/private/tools/ampelverwaltung.php index 893ac8764..96a92d2bb 100644 --- a/cis/private/tools/ampelverwaltung.php +++ b/cis/private/tools/ampelverwaltung.php @@ -37,8 +37,8 @@ $person = new person(); $person->getPersonFromBenutzer($user); -$show = (isset($_POST['show']) ? $_POST['show'] : 'aktuell'); //show: alle / aktuell -$is_popup = (isset($_GET['verpflichtend']) && $_GET['verpflichtend'] == true) ? true : false; +$show = (isset($_POST['show']) ? $_POST['show'] : 'aktuell'); //show: alle / aktuell +$is_popup = (isset($_GET['verpflichtend']) && $_GET['verpflichtend'] == true) ? true : false; //Leiter OEs holen $benutzerfunktion = new benutzerfunktion(); $benutzerfunktion->getBenutzerFunktionen('Leitung', '', '', $user); @@ -80,7 +80,7 @@ if($type=='bestaetigen' && is_numeric($ampel_id)) $message=''; if($ampel->load($ampel_id)) { - if($ampel->isZugeteilt($user, $ampel->benutzer_select)) + if($ampel->isZugeteilt($user, $ampel->benutzer_select)) { if(!$ampel->isBestaetigt($user, $ampel_id)) { @@ -88,7 +88,7 @@ if($type=='bestaetigen' && is_numeric($ampel_id)) { echo ''; header('Refresh:0'); - exit; + exit; } else $message = ''.$ampel->errormsg.''; @@ -99,7 +99,7 @@ if($type=='bestaetigen' && is_numeric($ampel_id)) } else $message = ''.$p->t('tools/ampelNichtGefunden').''; - + if ($message != '') echo ''; } @@ -107,7 +107,7 @@ if($type=='bestaetigen' && is_numeric($ampel_id)) //get all user ampeln list( - $user_ampel_arr, + $user_ampel_arr, $cnt_ueberfaellig) = //counts overdue ampeln (not expired) getUserAmpelData($user); @@ -118,7 +118,7 @@ if (!empty($user_ampel_arr)) } //filter ampeln for popup (if at least one mandatory, which is neither expired nor before vorlaufzeit) -if ($is_popup) +if ($is_popup) { list( $user_ampel_arr, @@ -135,14 +135,14 @@ if (!$is_popup && $show == 'aktuell') function getUserAmpelData($user) { $cnt_ueberfaellig = 0; - + $ampel = new ampel(); $ampel->loadUserAmpel($user, true); $user_ampel_arr = array(); - + $datum = new datum(); $now = $datum->mktime_fromdate(date('Y-m-d')); - + foreach($ampel->result as $row) { $deadline = $datum->mktime_fromdate($row->deadline); @@ -150,23 +150,23 @@ function getUserAmpelData($user) $verfallszeit = $row->verfallszeit; $bestaetigt = $ampel->isBestaetigt($user, $row->ampel_id); $verpflichtend = $row->verpflichtend; // 't'/'f' - + $datum_liegt_vor_vorlaufzeit = false; $datum_liegt_nach_verfallszeit = false; - + if (!is_null($vorlaufzeit)) - $datum_liegt_vor_vorlaufzeit = $now < strtotime('-' . $vorlaufzeit . ' day', $deadline); - + $datum_liegt_vor_vorlaufzeit = $now < strtotime('-' . $vorlaufzeit . ' day', $deadline); + if (!is_null($verfallszeit)) $datum_liegt_nach_verfallszeit = $now > strtotime('+' . $verfallszeit . ' day', $deadline); //default $show_ampel = true; //true while actual date is not before vorlaufzeit $abgelaufen = false; //false while actual date is not after verfallszeit - $active = true; //true while not confirmed or expired + $active = true; //true while not confirmed or expired $status = 'gelb'; //yellow while not overdue (red) or confirmed (green) $status_ampel = ''; //ampel image - + if ($bestaetigt) $status = 'gruen'; @@ -174,21 +174,21 @@ function getUserAmpelData($user) if ($datum_liegt_vor_vorlaufzeit) $show_ampel = false; - + if ($datum_liegt_nach_verfallszeit) $abgelaufen = true; - if ($now >= $deadline && !$bestaetigt) + if ($now >= $deadline && !$bestaetigt) { if (!$abgelaufen) $cnt_ueberfaellig++; $status = 'rot'; } - + if ($bestaetigt || $abgelaufen) $active = false; - + //assign png-image to ampelstatus switch($status) { @@ -205,7 +205,7 @@ function getUserAmpelData($user) $status_ampel= ''; break; } - + $user_ampel_arr[] = array( 'ampel_id' => $row->ampel_id, 'kurzbz' => $row->kurzbz, @@ -216,23 +216,23 @@ function getUserAmpelData($user) 'bestaetigt' => $bestaetigt, 'deadline' => $row->deadline, 'vorlaufzeit' => $row->vorlaufzeit, - 'verfallszeit' => $row->verfallszeit, + 'verfallszeit' => $row->verfallszeit, 'beschreibung' => $row->beschreibung, 'abgelaufen' => $abgelaufen, 'active' => $active); } - + return array($user_ampel_arr, $cnt_ueberfaellig); } function sortUserAmpelData($user_ampel_arr) { //first: sort deadline $deadline_arr = array(); - foreach ($user_ampel_arr as $key => $val) + foreach ($user_ampel_arr as $key => $val) { $deadline_arr[$key] = $val['deadline']; } - + array_multisort($deadline_arr, SORT_DESC, $user_ampel_arr); //second: sort inactive after active @@ -247,7 +247,7 @@ function sortUserAmpelData($user_ampel_arr) else { $inactive_ampel_arr[] = $user_ampel; - } + } } return $user_ampel_arr = array_merge($active_ampel_arr, $inactive_ampel_arr); } @@ -292,7 +292,7 @@ function getActualUserAmpelData($user_ampel_arr, $semester_start) @@ -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.';