, * Andreas Oesterreicher and * Rudolf Hangl * Karl Burkhart * Manfred Kindl * Gerald Raab * Alexei Karpenko * Manuela Thamer */ require_once('../../../config/cis.config.inc.php'); require_once('../../../include/functions.inc.php'); require_once('../../../include/person.class.php'); require_once('../../../include/benutzer.class.php'); require_once('../../../include/studiengang.class.php'); require_once('../../../include/fachbereich.class.php'); require_once('../../../include/zeitaufzeichnung.class.php'); require_once('../../../include/zeitsperre.class.php'); require_once('../../../include/datum.class.php'); require_once('../../../include/projekt.class.php'); require_once('../../../include/projektphase.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/organisationseinheit.class.php'); require_once('../../../include/service.class.php'); require_once('../../../include/mitarbeiter.class.php'); require_once('../../../include/betriebsmittelperson.class.php'); require_once('../../../include/globals.inc.php'); require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/zeitaufzeichnung_import_csv.class.php'); require_once('../../../include/zeitaufzeichnung_import_post.class.php'); require_once('../../../include/vertragsbestandteil.class.php'); $sprache = getSprache(); $p=new phrasen($sprache); $sprache_obj = new sprache(); $sprache_obj->load($sprache); $sprache_index=$sprache_obj->index; if (!$db = new basis_db()) die($p->t("global/fehlerBeimOeffnenDerDatenbankverbindung")); $user = get_uid(); $passuid = false; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); $mas = new mitarbeiter(); $mas->getUntergebene($user, true); $untergebenen_arr = array(); $untergebenen_arr = $mas->untergebene; $adminView = false; //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung //des uebergebenen Users anzeigen if(isset($_GET['uid'])) { if ($rechte->isBerechtigt('admin') || $rechte->isBerechtigt('mitarbeiter/urlaube', null, 'suid') || (in_array($_GET['uid'], $untergebenen_arr))) { $user = $_GET['uid']; $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); $passuid = true; $adminView = true; } else { die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); } } if($rechte->isBerechtigt('addon/casetimeGenerateXLS')) $export_xls = 'true'; else { $export_xls = 'false'; } $datum = new datum(); $fieldheadings = array( 'id' => $p->t("zeitaufzeichnung/id"), 'user' => $p->t("zeitaufzeichnung/user"), 'projekt' => $p->t("zeitaufzeichnung/projekt"), 'ap' => $p->t("zeitaufzeichnung/projektphase"), 'oe1' => $p->t("zeitaufzeichnung/oe"), 'oe2' => $p->t("zeitaufzeichnung/oe").'2', 'aktivitaet' => $p->t("zeitaufzeichnung/aktivitaet"), 'service' => $p->t("zeitaufzeichnung/service"), 'start' => $p->t("zeitaufzeichnung/start"), 'ende' => $p->t("zeitaufzeichnung/ende"), 'dauer' => $p->t("zeitaufzeichnung/dauer"), 'kunde' => $p->t("zeitaufzeichnung/kunde"), 'beschreibung' => $p->t("global/beschreibung"), 'aktion' => $p->t("global/aktion"), 'datum' => $p->t("global/datum"),'homeoffice' => $p->t("zeitaufzeichnung/homeoffice") ); if ($rechte->isBerechtigt('basis/servicezeitaufzeichnung')) { $za_simple = 0; $activities = array('Design', 'Operativ', 'Betrieb', 'Pause', 'FuE','FuEallg', 'Lehre', 'Arztbesuch', 'DienstreiseMT', 'Behoerde', 'Ersatzruhe', 'Weiterbildung', 'LVEntwicklung'); } else { $za_simple = 1; $activities = array('Admin', 'FuE','FuEallg','Lehre', 'Pause', 'Arztbesuch', 'DienstreiseMT', 'Behoerde', 'Ersatzruhe', 'Weiterbildung', 'LVEntwicklung'); } $activities_str = "'".implode("','", $activities)."'"; // definiert bis zu welchem Datum die Eintragung nicht mehr möglich ist $zasperre = new zeitaufzeichnung(); if ($sperrdat = $zasperre->getEintragungGesperrtBisForUser($user)) $gesperrt_bis = $sperrdat; else if (defined('CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS') && CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS != '') $gesperrt_bis = CIS_ZEITAUFZEICHNUNG_GESPERRT_BIS; else $gesperrt_bis = '2015-08-31'; $sperrdatum = date('c', strtotime($gesperrt_bis)); // Uses urlencode to avoid XSS issues $zeitaufzeichnung_id = urlencode(isset($_GET['zeitaufzeichnung_id'])?$_GET['zeitaufzeichnung_id']:''); $projekt_kurzbz = (isset($_POST['projekt'])?$_POST['projekt']:''); $projektphase_id = (isset($_POST['projektphase'])?$_POST['projektphase']:''); $oe_kurzbz_1 = (isset($_POST['oe_kurzbz_1'])?$_POST['oe_kurzbz_1']:''); $oe_kurzbz_2 = (isset($_POST['oe_kurzbz_2'])?$_POST['oe_kurzbz_2']:''); $aktivitaet_kurzbz = (isset($_POST['aktivitaet'])?$_POST['aktivitaet']:''); $von_datum = (isset($_REQUEST['von_datum'])?$_REQUEST['von_datum']:date('d.m.Y')); $von_uhrzeit = (isset($_POST['von_uhrzeit'])?$_POST['von_uhrzeit']:date('H:i')); $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; $homeoffice = (isset($_POST['homeoffice'])?true:false); $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; $homeofficeChecked = ''; //$reload = false; $beschreibung = (isset($_POST['beschreibung'])?$_POST['beschreibung']:''); $service_id = (isset($_POST['service_id'])?$_POST['service_id']:''); $kunde_uid = (isset($_POST['kunde_uid'])?$_POST['kunde_uid']:''); $kartennummer = (isset($_POST['kartennummer'])?$_POST['kartennummer']:''); $filter = (isset($_GET['filter'])?$_GET['filter']:'foo'); $alle = (isset($_GET['alle'])?(isset($_GET['normal'])?false:true):false); $angezeigte_tage = '50'; $zs = new zeitsperre(); if ($alle) $zs->getZeitsperrenForZeitaufzeichnung($user,'360'); else $zs->getZeitsperrenForZeitaufzeichnung($user,$angezeigte_tage); $zeitsperren = $zs->result; $bn = new benutzer(); if(!$bn->load($user)) die($p->t("zeitaufzeichnung/benutzerWurdeNichtGefunden",array($user))); //CSV export - Konflikt mit normalen HTML headern deshalb weiter vorne if(isset($_POST['export'])) { if(isset($_POST['exp_von_datum']) && isset($_POST['exp_bis_datum'])) { $datevon = $datum->formatDatum($_POST['exp_von_datum'], 'Y-m-d'); $datebis = $datum->formatDatum($_POST['exp_bis_datum'], 'Y-m-d'); $ztauf = getZeitaufzeichnung( $user, $datevon, $datebis); exportAsCSV($ztauf->result, ',', $fieldheadings, $za_simple, $user); } } //CSV export für Übersicht zugeteilter Projekte - Konflikt mit normalen HTML headern deshalb weiter vorne if(isset($_GET['projektübersichtexport'])) { exportProjectOverviewAsCSV($user, ','); } echo ' '.$p->t("zeitaufzeichnung/zeitaufzeichnung").' '; // ADDONS laden $addon_obj = new addon(); $addon_obj->loadAddons(); foreach($addon_obj->result as $addon) { if(file_exists('../../../addons/'.$addon->kurzbz.'/cis/init.js.php')) echo ''; } // Wenn Seite fertig geladen ist Addons aufrufen echo ' '; echo << $(document).ready(function() { const scrollDiv = document.createElement('div'); scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'; document.body.appendChild(scrollDiv); const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); var marginright = Math.max((20 - scrollbarWidth), 0); document.body.style.setProperty('width', 'calc(100% - ' + marginright + 'px)'); }); EOSBJS; echo ' '; echo '

'.$p->t("zeitaufzeichnung/zeitaufzeichnungVon").' '.$db->convert_html_chars($bn->vorname).' '.$db->convert_html_chars($bn->nachname).'

'; // Wenn Kartennummer übergeben wurde dann hole uid von Karteninhaber if($kartennummer != '') { $betriebsmittel = new betriebsmittelperson(); if(!$betriebsmittel->getKartenzuordnung($kartennummer)) die($betriebsmittel->errormsg); $kunde_uid = $betriebsmittel->uid; } //Speichern der Daten if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { $projektph_of_user = new projektphase(); $projektphasen = $projektph_of_user->getProjectphaseForMitarbeiter($user); $phaseBebuchbar = $projektph_of_user->getPhasenZA($projektphase_id); $projekt = new projekt(); $projekt->load($projekt_kurzbz); if ($_FILES['csv']['error'] == 0 && isset($_POST['import'])) { $zeit_csv_import = new zeitaufzeichnung_import_csv($p, $user, $sperrdatum, $_FILES['csv']['tmp_name']); $zeit_csv_import->import(); echo $zeit_csv_import->OutputToHTML(); } else if ($datum->formatDatum($von, $format='Y-m-d H:i:s') < $sperrdatum) echo '' .$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; // NOTE(chris): Save else if (isset($_POST['save']) || isset($_POST['edit'])) { $zeit_post_import = new zeitaufzeichnung_import_post($p, $user, isset($_POST['edit']), [ 'aktivitaet_kurzbz' => $aktivitaet_kurzbz, 'beschreibung' => $beschreibung, 'bis' => $bis, 'bis_pause' => $bis_pause, 'homeoffice' => $homeoffice, 'kunde_uid' => $kunde_uid, 'oe_kurzbz_1' => $oe_kurzbz_1, 'oe_kurzbz_2' => $oe_kurzbz_2, 'projekt_kurzbz' => $projekt_kurzbz, 'projektphase_id' => $projektphase_id, 'service_id' => $service_id, 'von' => $von, 'von_pause' => $von_pause, 'zeitaufzeichnung_id' => $zeitaufzeichnung_id, ]); $zeit_post_import->import(); echo $zeit_post_import->OutputToHTML(); if (!$zeit_post_import->hasErrors() && !$zeit_post_import->hasWarnings()) { // Nach dem Speichern in den neu Modus springen und als Von Zeit // das Ende des letzten Eintrages eintragen $zeitaufzeichnung_id = ''; $uid = $user; $aktivitaet_kurzbz = ''; $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))); $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format = 'Y-m-d H:i:s'))+3600); $beschreibung = ''; $oe_kurzbz_1 = ''; $oe_kurzbz_2 = ''; $projekt_kurzbz = ''; $projektphase_id = ''; $service_id = ''; $kunde_uid = ''; } } } //Datensatz loeschen if(isset($_GET['type']) && $_GET['type']=='delete') { $zeit = new zeitaufzeichnung(); if($zeit->load($zeitaufzeichnung_id)) { if ($zeit->start < $sperrdatum) echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': Eingabe nicht möglich da vor dem Sperrdatum'; else { if($zeit->uid==$user) { if($zeit->delete($zeitaufzeichnung_id)) { $zeitaufzeichnung_id = ''; echo ''.$p->t("global/eintragWurdeGeloescht").''; } else echo ''.$p->t("global/fehlerBeimLoeschenDesEintrags").''; } else echo ''.$p->t("global/keineBerechtigung").'!'; } } else echo ''.$p->t("global/datensatzWurdeNichtGefunden").''; } else echo ' '; //Laden der Daten zum aendern if (isset($_GET['type']) && $_GET['type'] == 'edit') { $zeit = new zeitaufzeichnung(); if ($zeit->load($zeitaufzeichnung_id)) { if ($zeit->uid == $user) { $uid = $zeit->uid; $aktivitaet_kurzbz = $zeit->aktivitaet_kurzbz; $von = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->start)); $bis = date('d.m.Y H:i', $datum->mktime_fromtimestamp($zeit->ende)); $beschreibung = $zeit->beschreibung; $oe_kurzbz_1 = $zeit->oe_kurzbz_1; $oe_kurzbz_2 = $zeit->oe_kurzbz_2; $projekt_kurzbz = $zeit->projekt_kurzbz; $projektphase_id = $zeit->projektphase_id; $homeoffice = $zeit->homeoffice; $homeoffice[0] == 't' ? $homeofficeChecked = 'checked' : $homeofficeChecked = ''; $service_id = $zeit->service_id; $kunde_uid = $zeit->kunde_uid; $projektphase = new projektphase(); $projektphasen = array(); if ($projektphase->getProjectphaseForMitarbeiterByKurzBz($uid, $projekt_kurzbz)) { foreach ($projektphase->result as $row) { $projektphasen[] = $row; } } } else { echo "".$p->t("global/keineBerechtigungZumAendernDesDatensatzes").""; $zeitaufzeichnung_id = ''; } } } //Projekte holen zu denen der Benutzer zugeteilt ist $projekt = new projekt(); if ($projekt->getProjekteMitarbeiter($user, true)) { //if(count($projekt->result)>0) //{ $anzprojekte = count($projekt->result); echo "
".$p->t("zeitaufzeichnung/neu")." | "; if (!$adminView) { echo " CSV Import | CSV Export | "; } echo " Projektübersichtexport"; if($anzprojekte > 0) echo " | ".$p->t("zeitaufzeichnung/projektexport").""; echo "
'; echo ''; echo ''; echo '
'; echo ''; if (isset($_GET['projektexport'])) { $projektexpurl = dirname($_SERVER["PHP_SELF"]) .'/zeitaufzeichnung_projektliste.php'; $aktjahr = intval(date("Y")); $aktmonat = intval(date("m")) - 1; $jahreanz = 3; echo ''; echo ''; echo ''; echo ''; echo ''; if ($passuid) echo ''; echo ''; echo ''; echo ''; } //Formular echo '
'; if (isset($_GET['csvimport'])) { echo ''; echo ''; echo ''; echo ''; } else echo ''; if (isset($_GET['csvexport'])) { echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } if (isset($_GET['projektübersichtexport'])) { echo ''; echo ''; echo ''; echo ''; echo ''; } //Aktivitaet echo ''; echo ''; if($za_simple >= 0) { $oestyle = ''; if($za_simple == 0) $oestyle = 'style="width:200px;"'; //OE_KURZBZ_1 echo ''; } //Projekte werden nicht angezeigt wenn es keine gibt if($anzprojekte > 0) { //Projekt echo ''; } if ($za_simple == 0) { // Service echo ''; // person für Kundenvoransicht laden $kunde_name = ''; if($kunde_uid != '') { $user_kunde = new benutzer(); if($user_kunde->load($kunde_uid)) $kunde_name=$user_kunde->vorname.' '.$user_kunde->nachname; } echo ' '; echo ''; } //Start/Ende $von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); $diff = $bis_ts - $von_ts; echo ' '; if ($za_simple == 0 || $anzprojekte > 0) { echo ' '; } else { echo ''; } echo ' '; echo ' '; //Homeoffice Checkbox echo ' '; if (!$adminView) { //Beschreibung echo ''; echo ''; else { echo ''; echo '  '; echo ''; } } echo '

'.$p->t('zeitaufzeichnung/projektexport').''.$p->t('zeitaufzeichnung/monat').' '.$p->t('zeitaufzeichnung/jahr').'


CSV-Import
Informationen zum Format der CSV-Datei s. Leitfaden Arbeitszeitaufzeichnung


CSV-Export'.$p->t('zeitaufzeichnung/startdatum').' '.$p->t('zeitaufzeichnung/enddatum').'


CSV-Export

'.$p->t("zeitaufzeichnung/aktivitaet").''; $qry = "SELECT * FROM fue.tbl_aktivitaet where aktivitaet_kurzbz in (".$activities_str.") ORDER by sort,beschreibung"; if($result = $db->db_query($qry)) { echo ''; } echo '
'.$p->t("zeitaufzeichnung/organisationseinheiten").'      '; if($za_simple == 0) { //OE_KURZBZ_2 echo ''; } echo '
'.$p->t("zeitaufzeichnung/projekt").' '; //Projektphase $showprojphases = isset($projektphasen) && is_array($projektphasen) && count($projektphasen) > 0 && $projektfound; $hiddentext = $showprojphases ? "" : " style='display:none'"; echo '    '. $p->t("zeitaufzeichnung/projektphase").' '; echo '
'.$p->t('zeitaufzeichnung/service').'
'.$p->t("zeitaufzeichnung/kunde").' '.$p->t("zeitaufzeichnung/oderKartennummerOptional").'
 
 

'.$p->t("global/von").' - '.$p->t("global/bis").'     + min.    - 
  -
 
'.$p->t("global/beschreibung").'
'; //SpeichernButton if($zeitaufzeichnung_id == '') echo '
'; echo '

'; $vbt = new vertragsbestandteil(); $isAllin = $vbt->isAllin($user); if ($isAllin) { echo '
'; } echo '
'; if (!$adminView) { echo '
'; } echo '
'; echo '
'; echo ''; echo ""; echo '
'; echo '

'.($alle===true?$p->t('zeitaufzeichnung/alleEintraege'):$p->t('zeitaufzeichnung/xTageAnsicht', array($angezeigte_tage))).'

'; if ($alle===true) echo ''; else echo ''; $za = new zeitaufzeichnung(); if(isset($_GET['filter'])) $za->getListeProjekt($_GET['filter']); else { if ($alle==true) $za->getListeUserFull($user, '360'); else $za->getListeUserFull($user, $angezeigte_tage); } $summe=0; $dr = new zeitaufzeichnung(); $dr->getDienstreisenUser($user, 180); $dr_arr = $dr->result; if(count($za->result)>0) { //Uebersichtstabelle $woche=date('W'); $colspan=($za_simple)?12:14; echo ' '; printTableHeadings($fieldheadings, $za_simple); $tag=null; $woche=date('W'); $tagessumme='00:00'; $pausesumme='00:00'; $wochensumme='00:00'; $extlehrearr=array(); $elsumme = '00:00'; $ersumme = '00:00'; $ersumme_woche = '00:00'; $datum_obj = new datum(); $tagesbeginn = ''; $tagesende = ''; $wochensaldo = '00:00'; $pflichtpause = false; foreach($za->result as $row) { $datumtag = $datum_obj->formatDatum($row->datum, 'Y-m-d'); // Nach jedem Tag eine Summenzeile einfuegen if(is_null($tag)) $tag = $datumtag; if($tag!=$datumtag) { if ($datum->formatDatum($tag,'N') == '6' || $datum->formatDatum($tag,'N') == '7') $style = 'style="background-color:#eeeeee; font-size: 8pt;"'; else $style = 'style="background-color:#DCE4EF; font-size: 8pt;"'; // zeitsperren anzeigen if (array_key_exists($datum->formatDatum($tag,'Y-m-d'), $zeitsperren)) { $zeitsperre_text = " -- ".$zeitsperren[$datum->formatDatum($tag,'Y-m-d')]." -- "; $style = 'style="background-color:#cccccc; font-size: 8pt;"'; } else $zeitsperre_text = ''; if (isset($_GET["von_datum"]) && $datum->formatDatum($tag, 'd.m.Y') == $_GET["von_datum"]) $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; list($h1, $m1) = explode(':', $pausesumme); $pausesumme = $h1*3600+$m1*60; $tagessaldo = $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s'))-$datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s'))-3600; foreach($extlehrearr as $el) { if ($el["start"] > $tagesbeginn && $el["ende"] < $tagesende) $elsumme = $datum_obj->sumZeit($elsumme, $el["diff"]); } list($h2, $m2) = explode(':', $elsumme); $elsumme = $h2*3600+$m2*60; if ($datum->formatDatum($tag, 'Y-m-d') >= '2019-11-06') { $pausesumme = $pausesumme; } else if ($tagessaldo > 18000 && $tagessaldo < 19800 && $pflichtpause==false && $elsumme == 0) { $pausesumme = $tagessaldo-18000; } else if ($tagessaldo>18000 && $pflichtpause==false && $elsumme == 0) { $pausesumme = $pausesumme+1800; } if ($elsumme > 0){ $pausesumme = $pausesumme + $elsumme; $pflichtpause = true; } $tagessaldo = $tagessaldo-$pausesumme; // fehlende Pausen berechnen $pausefehlt_str = ''; //Prüfung auf azgrelevant und blockierende Pausenfehler $linkExclamation = APP_ROOT. 'skin/images/exclamation.png'; $linkInformation = APP_ROOT. 'skin/images/information.png'; $za = new zeitaufzeichnung(); if ($za->checkPausenErrors($user, $tag)) { $vbt = new vertragsbestandteil(); $isAzgrelevant = $vbt->isAzgRelevant($user, $tag); if ($isAzgrelevant) { $pausefehlt_str = ' -- Pause fehlt oder zu kurz -- '; } else { $pausefehlt_str = ' -- Pause fehlt --'; } } $tagessaldo = date('H:i', ($tagessaldo)); $colspan = ($za_simple)?6:8; echo ''; $tag=$datumtag; $tagessumme='00:00'; $pausesumme='00:00'; $elsumme='00:00'; $ersumme = '00:00'; $extlehrearr = array(); $tagesbeginn = ''; $tagesende = ''; $pflichtpause = false; $wochensaldo = $datum_obj->sumZeit($wochensaldo,$tagessaldo ); } // Nach jeder Woche eine Summenzeile einfuegen und eine neue Tabelle beginnen $datumwoche = $datum_obj->formatDatum($row->datum, 'W'); if(is_null($woche)) $woche = $datumwoche; if($woche!=$datumwoche) { if ($ersumme_woche != '00:00') $erstr = ' (+ '.$ersumme_woche.')'; else { $erstr = ''; } echo ' '; $colspan=($za_simple)?12:14; echo ' '; printTableHeadings($fieldheadings, $za_simple); $woche=$datumwoche; $wochensumme='00:00'; $tagessumme='00:00'; $pausesumme='00:00'; $wochensaldo = '00:00'; $ersumme = '00:00'; $ersumme_woche = '00:00'; } // Dienstreisen NEU if (array_key_exists($datumtag, $dr_arr)) { $colspan=($za_simple)?6:8; echo ''; echo ''; echo ''; echo '\n"; echo "\n"; echo ''; unset($dr_arr[$datumtag]); } if ($row->uid) { $wochensumme = $datum_obj->sumZeit($wochensumme, $row->diff); if ($row->aktivitaet_kurzbz=='Pause') { $pausesumme = $datum_obj->sumZeit($pausesumme, $row->diff); list($h1, $m1) = explode(':', $row->diff); if ($m1>=30 || $h1>0) { $pflichtpause = true; } } elseif ($row->aktivitaet_kurzbz=='Ersatzruhe') { $ersumme = $datum_obj->sumZeit($ersumme, $row->diff); $ersumme_woche = $datum_obj->sumZeit($ersumme_woche, $row->diff); } else $tagessumme = $datum_obj->sumZeit($tagessumme, $row->diff); $style = ''; if ($row->zeitaufzeichnung_id == $zeitaufzeichnung_id) $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; if ($row->aktivitaet_kurzbz=='Pause' || $row->aktivitaet_kurzbz=='LehreExtern'|| $row->aktivitaet_kurzbz=='Ersatzruhe') $style .= ' style="color: grey;"'; if($db->convert_html_chars($row->homeoffice)=='t') { $homeoffice = " - Homeoffice"; }else $homeoffice=""; $summe = $row->summe; $service = new service(); $service->load($row->service_id); $projektphase = new projektphase($row->projektphase_id); $ap = $projektphase->bezeichnung; echo ''; echo ''; echo ''; if(!$za_simple) { echo ''; } echo ''; if(!$za_simple) { echo ''; } echo '\n"; echo " \n"; echo " \n"; if (($tagesbeginn=='' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesbeginn, $format='Y-m-d H:i:s')) > $datum->mktime_fromtimestamp($datum->formatDatum($row->start, $format='Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe') $tagesbeginn = $row->start; if (($tagesende=='' || $datum->mktime_fromtimestamp($datum->formatDatum($tagesende, $format='Y-m-d H:i:s')) < $datum->mktime_fromtimestamp($datum->formatDatum($row->ende, $format='Y-m-d H:i:s'))) && $row->aktivitaet_kurzbz != 'LehreExtern' && $row->aktivitaet_kurzbz != 'Ersatzruhe') $tagesende = $row->ende; if ($row->aktivitaet_kurzbz == 'LehreExtern') $extlehrearr[] = array("start"=>$row->start, "ende"=>$row->ende, "diff"=>$row->diff); } } echo ''; if ($alle===false) { echo ' '; } } echo '
'.$p->t("eventkalender/kw").' '.$woche.'
'; // Zusaetzlicher span fuer Addon Informationen $lang = getSprache(); if ($lang == 'German') $langindex = 1; else $langindex = 2; 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 { $erstr = ''; } echo ' '.$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)).'
'; if ($tag > $sperrdatum) echo ''; echo '
'.$p->t("zeitaufzeichnung/wochensummeArbeitszeit").': '.$wochensaldo.$erstr.'
 
'.$p->t("eventkalender/kw").' '.$datumwoche.'
'.$p->t('zeitaufzeichnung/dienstreise'); if (array_key_exists('start', $dr_arr[$datumtag]) && !array_key_exists('ende', $dr_arr[$datumtag])) echo ' '.$p->t('global/beginn'); if (array_key_exists('ende', $dr_arr[$datumtag]) && !array_key_exists('start', $dr_arr[$datumtag])) echo ' '.$p->t('global/ende'); echo ''; if (array_key_exists('start', $dr_arr[$datumtag])) echo $dr_arr[$datumtag]['start']; echo ''; if (array_key_exists('ende', $dr_arr[$datumtag])) echo $dr_arr[$datumtag]['ende']; echo ''; echo ""; if(!isset($_GET['filter']) && ($datumtag > $sperrdatum)) echo ''.$p->t("global/loeschen").''; echo "
'.$db->convert_html_chars($row->zeitaufzeichnung_id).' '.$db->convert_html_chars($row->uid).' '.$db->convert_html_chars($row->projekt_kurzbz).' '.$db->convert_html_chars($ap).' '.$db->convert_html_chars($row->oe_kurzbz_1).' '.$db->convert_html_chars($row->oe_kurzbz_2).''.$db->convert_html_chars($row->aktivitaet_kurzbz).($homeoffice).' '.StringCut($db->convert_html_chars($service->bezeichnung),20,null,'...').' '.date('H:i', $datum->mktime_fromtimestamp($row->start)).' '.date('H:i', $datum->mktime_fromtimestamp($row->ende)).' '.$db->convert_html_chars($row->diff).' beschreibung)).'">'.StringCut($db->convert_html_chars($row->beschreibung),20,null,'...').' '; if (!$adminView) { if(!isset($_GET['filter']) && ($row->uid==$user && $row->datum > $sperrdatum)) echo ''.$p->t("global/bearbeiten").''; } echo ""; if (!$adminView) { if(!isset($_GET['filter']) && ($row->uid==$user && $row->start > $sperrdatum)) echo ''.$p->t("global/loeschen").''; } echo "
'.$p->t('zeitaufzeichnung/endeXTageAnsicht', array($angezeigte_tage)).'
'; } else { echo $p->t("zeitaufzeichnung/fehlerBeimErmittelnDerProjekte"); } echo ' '; /** * Gibt Tabellenüberschriften für Übersichtstabelle aus * @param $fieldheadings Namen der Tabellenüberschriften * @param bool $za_simple Zeitaufzeichnung lang (für Infrastrukturmitarbeiter) oder kurz (simple) */ function printTableHeadings($fieldheadings, $za_simple = false){ echo ' '.$fieldheadings['id'].' '.$fieldheadings['user'].' '.$fieldheadings['projekt'].' '.$fieldheadings['ap'].' '.$fieldheadings['oe1'].''; if (!$za_simple) { echo ''.$fieldheadings['oe2'].''; } echo ''.$fieldheadings['aktivitaet'].''; if (!$za_simple) { echo ' '.$fieldheadings['service'].''; } echo ''.$fieldheadings['start'].' '.$fieldheadings['ende'].' '.$fieldheadings['dauer'].' '.$fieldheadings['beschreibung'].' '.$fieldheadings['aktion'].' '; } /** * Exportiert Zeitaufzeichnungsdaten als CSV * @param $data Zeitaufzeichnungsdaten * @param string $delimiter CSV-Trennzeichen * @param $fieldheadings Namen der Spaltenüberschriften * @param bool $za_simple Zeitaufzeichnung lang (für Infrastrukturmitarbeiter) oder kurz (simple) * @param $uid Id des Users für CSV-Filenamen "zeitaufzeichnung_uid" */ function exportAsCSV($data, $delimiter = ',', $fieldheadings, $za_simple = false, $uid) { $filename = "zeitaufzeichnung_".$uid.".csv"; header('Content-type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename='.$filename); $file = fopen('php://output', 'w'); $towrite = getDataForCSV($data, $fieldheadings, $za_simple); foreach ($towrite as $row) { fputcsv($file, $row, $delimiter); } fclose($file); //Abbruch damit HTML markup danach nicht mit exportiert wird exit(); } /** * Liefert Daten für CSV-Export basierend auf erhaltenen Zeitaufzeichnungsdaten * @param $rawdata zu exportierenden Rohdaten aus der Datenbank * @param $fieldheadings Namen der Spaltenüberschriften * @param bool $za_simple Zeitaufzeichnung lang (für Infrastrukturmitarbeiter) oder kurz (simple). Wenn true, werden Spalten wie Service, OE ausgelassen * @return array Daten wie sie als CSV exportiert werden können */ function getDataForCSV($rawdata, $fieldheadings, $za_simple = false) { if(!$za_simple) $service = new service(); $datum = new datum(); $csvData = array(); //headers schreiben $csvData[] = ($za_simple) ? array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['aktivitaet'], $fieldheadings['beschreibung'], $fieldheadings['homeoffice']) : array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['oe2'], $fieldheadings['aktivitaet'], $fieldheadings['service'], $fieldheadings['kunde'], $fieldheadings['beschreibung'], $fieldheadings['homeoffice']); foreach ($rawdata as $zeitauf) { //Newline characters bei Beschreibung ersetzen $beschreibung = str_replace(array("\r\n", "\r", "\n"), " | ", $zeitauf->beschreibung); $hauptdatum = $datum->formatDatum($zeitauf->datum, "d.m.Y"); $bisdatum = $datum->formatDatum($zeitauf->ende, "d.m.Y"); //wenn Zeitspanne länger als ein Tag (kommt selten vor) dann Tag des Bisdatums dazuschreiben $bisdatum = ($hauptdatum == $bisdatum)?$datum->formatDatum($zeitauf->ende, 'H:i'):$datum->formatDatum($zeitauf->ende, 'd.m.Y H:i'); if($za_simple) { $csvData[] = array($zeitauf->uid, $hauptdatum, $datum->formatDatum($zeitauf->start, 'H:i'), $bisdatum, $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->aktivitaet_kurzbz, $beschreibung, $zeitauf->homeoffice); } else { $servicebez = ($service->load($zeitauf->service_id))?$service->bezeichnung:""; $csvData[] = array($zeitauf->uid, $hauptdatum, $datum->formatDatum($zeitauf->start, 'H:i'), $bisdatum, $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->oe_kurzbz_2, $zeitauf->aktivitaet_kurzbz, $servicebez, $zeitauf->kunde_uid, $beschreibung, $zeitauf->homeoffice); } } return $csvData; } /** * Liefert Zeitaufzeichnungsdaten zwischen zwei Datumswerten * @param $user - user für den Zeitaufzeichnungsdaten geholt werden * @param $von - Startdatum * @param $bis - Enddatum * @return zeitaufzeichnung - die Zeitaufzeichnungsdaten */ function getZeitaufzeichnung($user, $von, $bis) { $za = new zeitaufzeichnung(); $za->getListeUserFromTo($user, $von, $bis); return $za; } /** * Exportiert Zeitaufzeichnungsdaten als CSV * @param $data Zeitaufzeichnungsdaten * @param string $delimiter CSV-Trennzeichen */ function exportProjectOverviewAsCSV($user, $delimiter = ',') { $filename = "projektUebersicht_".$user.".csv"; header('Content-type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename='.$filename); $file = fopen('php://output', 'w'); $towrite = getDataForProjectOverviewCSV($user); foreach ($towrite as $row) { fputcsv($file, $row, $delimiter); } fclose($file); //Abbruch damit HTML markup danach nicht mit exportiert wird exit(); } function getDataForProjectOverviewCSV($user) { $db = new basis_db(); $projects_of_user = new projekt(); $projects = $projects_of_user->getProjekteListForMitarbeiter($user); $projektphase = new projektphase(); if($projektphase->getProjectphaseForMitarbeiter($user)) $projektphasen = $projektphase->result; else $projektphasen = array(); $csvData = array(); $exists = @$db->db_query('SELECT 1 FROM sync.tbl_projects_timesheets_project LIMIT 1;'); foreach ($projects as $project) { $titel = $project->titel; $projekt_kurzbz = $project->projekt_kurzbz; $projekt_phase = ''; $projekt_phase_id = ''; $beginn = $project->beginn; $ende = $project->ende; $inhalt = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); if ($exists) { $sap_projekt_id = $project->sap_project_id; $inhalt[] = $sap_projekt_id; } $csvData[] = $inhalt; } foreach ($projektphasen as $prjp) { if (true) { $titel = $prjp->projekttitel; $projekt_kurzbz = $prjp->projekt_kurzbz; $projekt_phase = $prjp->bezeichnung; $projekt_phase_id = $prjp->projektphase_id; $beginn = $prjp->start; $ende = $prjp->ende; $inhalt = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); if ($exists) { $project_task_id = $prjp->project_task_id; $inhalt[] = $project_task_id; } array_push($csvData, $inhalt); } } sort($csvData); //headers schreiben $header = array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE'); if ($exists) $header[] = 'SAP PROJEKTNUMMER'; array_unshift($csvData, $header); return $csvData; } ?>