diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index e9f34ea68..680a79ac7 100755 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -415,76 +415,89 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { if (mb_detect_encoding(fgets($handle), 'UTF-8', true)) { - set_time_limit(0); - $anzahl = 0; - $importtage_array = array(); - $ende_vorher = date('Y-m-d H:i:s'); - while(($data = fgetcsv($handle, 1000, ';', '"')) !== FALSE) - { - if($data[0] == $user) + set_time_limit(0); + $anzahl = 0; + $importtage_array = array(); + $ende_vorher = date('Y-m-d H:i:s'); + while(($data = fgetcsv($handle, 1000, ';', '"')) !== FALSE) { - if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
'; - else - { - $zeit->new = true; - $zeit->insertamum = date('Y-m-d H:i:s'); - $zeit->updateamum = date('Y-m-d H:i:s'); - $zeit->updatevon = $user; - $zeit->insertvon = $user; - $zeit->uid = $data[0]; - $zeit->aktivitaet_kurzbz = $data[1]; - $zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s'); - $zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s'); - $zeit->beschreibung = $data[4]; - $tag = $datum->formatDatum($data[2], $format='Y-m-d'); - - - if(!in_array($tag, $importtage_array)) - { - $importtage_array[] = $tag; - $zeit->deleteEntriesForUser($user, $tag); - $tag_aktuell = $tag; - } - else - { - if ($ende_vorher < $zeit->start) + if($data[0] == $user) + { + if ($datum->formatDatum($data[2], $format='Y-m-d H:i:s') < $sperrdatum) + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum ('.$data[2].')
'; + else + { + $zeit->new = true; + $zeit->insertamum = date('Y-m-d H:i:s'); + $zeit->updateamum = date('Y-m-d H:i:s'); + $zeit->updatevon = $user; + $zeit->insertvon = $user; + $zeit->uid = $data[0]; + $zeit->aktivitaet_kurzbz = $data[1]; + $zeit->start = $datum->formatDatum($data[2], $format='Y-m-d H:i:s'); + $zeit->ende = $datum->formatDatum($data[3], $format='Y-m-d H:i:s'); + $zeit->beschreibung = $data[4]; + $tag = $datum->formatDatum($data[2], $format='Y-m-d'); + + + + if(!in_array($tag, $importtage_array)) { - $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 = $ende_vorher; - $pause->ende = $zeit->start; - $zeit->beschreibung = ''; - if(!$pause->save()) + $importtage_array[] = $tag; + $zeit->deleteEntriesForUser($user, $tag); + $tag_aktuell = $tag; + } + else + { + if ($ende_vorher < $zeit->start) { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.''; + $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 = $ende_vorher; + $pause->ende = $zeit->start; + $zeit->beschreibung = ''; + if(!$pause->save()) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.''; + } } } - } - - if($data[2] != $data[3]) - { - if(!$zeit->save()) - { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'('.$zeit->start.')'; + + $ende_vorher = $zeit->ende; + if($data[2] != $data[3]) + { + if ($data[1] == 'LehreExtern') + { + $zeit->start = date('Y-m-d H:i:s', strtotime('+2 seconds', strtotime($data[2]))); + $zeit->ende = date('Y-m-d H:i:s', strtotime('-2 seconds', strtotime($data[3]))); + } + if(!$zeit->save()) + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$zeit->errormsg.'('.$zeit->start.')'; + } + else + $anzahl++; } else - $anzahl++; + $anzahl++; + } - else - $anzahl++; - $ende_vorher = $zeit->ende; } } - } - if($anzahl>0) - echo ''.$p->t("global/datenWurdenGespeichert").' ('.$anzahl.')'; + if($anzahl>0) + { + echo ''.$p->t("global/datenWurdenGespeichert").' ('.$anzahl.')'; + foreach ($importtage_array as $ptag) + { + $zeit->cleanPausenForUser($user, $ptag); + } + } } else echo 'Datei konnte nicht importiert werden. Encoding ist nicht UTF-8!'; diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index 7bca0a777..b036ec3ee 100755 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -439,6 +439,40 @@ class zeitaufzeichnung extends basis_db } } + /** + * Löscht Pauseneinträge eines Users für einen Tag, die außerhalb der Arbeitszeit liegen + * Löscht Pauseneinträge an Tagen ohne Arbeitszeit + * @param string $user + * @param string $tag Y-m-d + */ + public function cleanPausenForUser($user, $tag) + { + $where = "uid=".$this->db_add_param($user); + + $qry = " + delete from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz = 'Pause' and start::date = '$tag' and $where and +( +start::time >= +(SELECT max(ende::time) as endzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') +or +ende::time<= +(SELECT min(start::time) as startzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') +or not exists +(select 1 from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz != 'LehreExtern' and aktivitaet_kurzbz != 'Pause' and start::date = '$tag' and $where ) +) + "; + + if($result = $this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + /** * Holt alle ZA-Einträge Typ LehreIntern und LehreExtern eines Users * für das laufende Studienjahr und gibt die Summen in einem Array zurück @@ -470,7 +504,7 @@ class zeitaufzeichnung extends basis_db $where = "mitarbeiter_uid=".$this->db_add_param($user); $where_sem = "l.studiensemester_kurzbz=".$this->db_add_param($sem); $qry = " - select sum(m.semesterstunden) from lehre.tbl_lehreinheitmitarbeiter m, lehre.tbl_lehreinheit l where $where and $where_sem and l.lehreinheit_id = m.lehreinheit_id + select sum(m.semesterstunden) from lehre.tbl_lehreinheitmitarbeiter m, lehre.tbl_lehreinheit l where $where and $where_sem and l.lehreinheit_id = m.lehreinheit_id and m.stundensatz*m.semesterstunden > 0 "; if($result = $this->db_query($qry))