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))