From 3dc55afd691692677b295f848b2c447ca8022a47 Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Mon, 30 May 2022 16:02:15 +0200 Subject: [PATCH] Bugfix zeiterfassung --- www/lib/class.erpapi.php | 5 +- www/pages/zeiterfassung.php | 3907 ++++++++++++++++++----------------- 2 files changed, 1962 insertions(+), 1950 deletions(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index f5ead488..6c7f8d01 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -34526,10 +34526,11 @@ function Firmendaten($field,$projekt="") if(!$preis) { - $stundensatz = (float)$this->app->DB->Select("SELECT stundensatz +/* $stundensatz = (float)$this->app->DB->Select("SELECT stundensatz FROM `zeiterfassung_kosten` WHERE adresse = '$adr_id' AND (gueltig_ab <= curdate() OR gueltig_ab = '0000-00-00') - ORDER BY gueltig_ab DESC LIMIT 1"); + ORDER BY gueltig_ab DESC LIMIT 1");*/ + if($stundensatz)$this->app->DB->Update("UPDATE zeiterfassung SET stundensatz = '$stundensatz' WHERE id = '$ret' LIMIT 1"); } return $ret; diff --git a/www/pages/zeiterfassung.php b/www/pages/zeiterfassung.php index 66471527..8ee0e441 100644 --- a/www/pages/zeiterfassung.php +++ b/www/pages/zeiterfassung.php @@ -1,1951 +1,1962 @@ -app->Tpl->Add('JQUERYREADY', "$('#offen').click( function() { fnFilterColumn1( 0 ); } );"); - - //$this->app->Tpl->Add('JQUERYREADY',"$('#abrechnung').click( function() { fnFilterColumn2( 0 ); } );"); - for ($r = 1;$r < 2;$r++) { - $this->app->Tpl->Add('JAVASCRIPT', ' - function fnFilterColumn' . $r . ' ( i ) - { - if(oMoreData' . $r . $name . '==1) - oMoreData' . $r . $name . ' = 0; - else - oMoreData' . $r . $name . ' = 1; - - $(\'#' . $name . '\').dataTable().fnFilter( - \'\', - i, - 0,0 - ); - } - '); - } - - // ENDE EXTRA checkboxen - - // headings - - - //$heading = array('','A','Datum','Von','Bis','Dauer','Mitarbeiter','Art','Tätigkeit','Projekt','Menü'); - - $heading = array('', 'Datum', 'Von', 'Bis', 'Dauer', 'Mitarbeiter','Art', 'Tätigkeit', 'Abr.','Projekt', 'Menü'); - - //$width = array('1%','1%','1%','1%','1%','5%','20%','40%','10%','1%'); - $width = array('1%', '1%', '1%', '1%', '5%', '20%','5%', '40%', '5%','5%', '1%'); - - //$findcols = array('open','Auswahl','z.von','von','bis','Dauer','Mitarbeiter','id'); - $findcols = array('open', 'z.von', 'von', 'bis', 'Dauer', 'Mitarbeiter','z.art','z.aufgabe','z.abrechnen','p.abkuerzung','id'); - $searchsql = array('z.id', 'z.bis', 'z.aufgabe', 'a.name','z.art', "if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
',z.aufgabe),z.aufgabe)", "p.abkuerzung"); - $defaultorder = 2; - $defaultorderdesc = 1; - $menu = '
'. - "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . - "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">" . - " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . - '
'; - - //CONCAT('') as auswahl, - - //$menucol=9; - - $menucol = 10; - $alignright = array(5); - $sumcol = 5; - - //CONCAT(LPAD(HOUR(TIMEDIFF(z.bis, z.von)),2,'0'),':',LPAD(MINUTE(TIMEDIFF(z.bis, z.von)),2,'0')) AS Dauer, - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, - 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, - DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR')) AS Datum, - DATE_FORMAT(z.von,'%H:%i') as von, DATE_FORMAT(z.bis,'%H:%i') as bis, - format((HOUR(TIMEDIFF(z.bis, z.von))) + MINUTE(TIMEDIFF(z.bis, z.von))/60,2) AS Dauer, - a.name as Mitarbeiter,z.art, - if(z.art='Pause','Pause',if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
',z.aufgabe),z.aufgabe)) as Taetigkeit, - if(z.abrechnen > 0,'(A)',''), - p.abkuerzung, - z.id - FROM zeiterfassung z - LEFT JOIN adresse a ON a.id=z.adresse - LEFT JOIN adresse b ON b.id=z.adresse_abrechnung - LEFT JOIN projekt p ON p.id=z.projekt - LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id"; - - // Fester filter - - // START EXTRA more - - $more_data1 = $this->app->Secure->GetGET('more_data1'); - - if ($more_data1 == 1) { - $subwhere[] = " z.abrechnen='1' AND z.abgerechnet!='1' "; - } - - // $more_data2 = $this->app->Secure->GetGET("more_data2"); if($more_data2==1) $subwhere[] = " a.datum=CURDATE() AND a.status='freigegeben'"; - - $von = $this->app->User->GetParameter('zeiterfassung_listuser_von'); - if($von!='') { - $subwhere[] = " DATE_FORMAT(z.von,'%Y-%m-%d') >= '".$this->app->String->Convert($von,'%3.%2.%1','%1-%2-%3')."'"; - } - - $bis = $this->app->User->GetParameter('zeiterfassung_listuser_bis'); - if($bis!='') { - $subwhere[] = " DATE_FORMAT(z.bis,'%Y-%m-%d') <= '".$this->app->String->Convert($bis,'%3.%2.%1','%1-%2-%3')."'"; - } - - $tmp = ''; - $csubwhere = !empty($subwhere)?count($subwhere):0; - for ($j = 0;$j < $csubwhere;$j++) { - $tmp.= ' AND ' . $subwhere[$j]; - } - - $where = " z.id!='' AND z.adresse='" . $this->app->User->GetAdresse() . "' $tmp"; - $count = "SELECT COUNT(z.id) FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse - LEFT JOIN adresse b ON b.id=z.adresse_abrechnung - LEFT JOIN projekt p ON p.id=z.projekt - LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id WHERE $where "; - $moreinfo = true; - break; - case 'zeiterfassung': - $allowed['zeiterfassung'] = array('list'); - - - // START EXTRA checkboxen - $this->app->Tpl->Add('JQUERYREADY', "$('#offen').click( function() { fnFilterColumn10( 0 ); } );"); - for ($r = 10;$r < 12;$r++) { - $this->app->Tpl->Add('JAVASCRIPT', ' - function fnFilterColumn' . $r . ' ( i ) - { - if(oMoreData' . $r . $name . '==1) - oMoreData' . $r . $name . ' = 0; - else - oMoreData' . $r . $name . ' = 1; - - $(\'#' . $name . '\').dataTable().fnFilter( - \'\', - i, - 0,0 - ); - } - '); - } - - // ENDE EXTRA checkboxen - - // headings - - - //$heading = array('','A','Datum','Von','Bis','Dauer','Mitarbeiter','Art','Aufabe','Projekt','Menü'); - - $heading = array('', 'Datum', 'Von', 'Bis', 'Dauer', 'Mitarbeiter','Art', 'Aufgabe', 'Abr.','Projekt', 'Menü'); - - //$width = array('1%','1%','1%','1%','1%','5%','20%','40%','10%','1%'); - $width = array('1%', '1%', '1%', '1%', '5%', '20%','5%', '40%','5%','5%', '1%'); - - //$findcols = array('open','Auswahl','z.von','von','bis','Dauer','Mitarbeiter','id'); - $findcols = array('open', "z.von", 'z.von', 'z.bis', '(HOUR(TIMEDIFF(z.bis, z.von))) + MINUTE(TIMEDIFF(z.bis, z.von))/60', 'a.name','z.art',"if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
',z.aufgabe),z.aufgabe)", "if(z.abrechnen > 0,'(A)','')",'p.abkuerzung', 'z.id'); - $searchsql = array('z.id', 'z.von', 'z.bis', $this->app->erp->FormatPreis('(HOUR(TIMEDIFF(z.bis, z.von))) + MINUTE(TIMEDIFF(z.bis, z.von))/60',2), 'a.name','z.art', 'a.name', 'z.art', "if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
',z.aufgabe),z.aufgabe)", "if(z.abrechnen > 0,'(A)','')", 'p.abkuerzung', "DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR'))",'b.name','b.kundennummer', ); - $defaultorder = 2; - $defaultorderdesc = 1; - $menu = "
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " 
"; - - //CONCAT('') as auswahl, - - $datecols = array(1); - $numbercols = array(4); - - //$menucol=9; - $sumcol = 5; - $alignright = array(5); - $menucol = 10; - //CONCAT(LPAD(HOUR(TIMEDIFF(z.bis, z.von)),2,'0'),':',LPAD(MINUTE(TIMEDIFF(z.bis, z.von)),2,'0')) AS Dauer, - // SQL statement - $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, - 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, - - CONCAT('',DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR'))) AS Datum, - DATE_FORMAT(z.von,'%H:%i') as von, DATE_FORMAT(z.bis,'%H:%i') as bis, - round(HOUR(TIMEDIFF(z.bis, z.von)) + MINUTE(TIMEDIFF(z.bis, z.von))/60,2) AS Dauer, - - a.name as Mitarbeiter,z.art, - if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
',z.aufgabe),z.aufgabe) as Taetigkeit, - if(z.abrechnen > 0,'(A)',''), - p.abkuerzung, - z.id - - FROM zeiterfassung z - LEFT JOIN adresse a ON a.id=z.adresse - LEFT JOIN adresse b ON b.id=z.adresse_abrechnung - LEFT JOIN projekt p ON p.id=z.projekt - LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id"; - - // Fester filter - - // START EXTRA more - - $fvon = $this->app->YUI->TableSearchFilter($name, 2, 'von', $this->app->User->GetParameter('zeiterfassung_von')); - $fbis = $this->app->YUI->TableSearchFilter($name, 3, 'bis', $this->app->User->GetParameter('zeiterfassung_bis')); - $fprojekt = reset(explode(' ',trim($this->app->YUI->TableSearchFilter($name, 4, 'projekt', $this->app->User->GetParameter('zeiterfassung_projekt'))))); - $fmitarbeiter = reset(explode(' ',trim($this->app->YUI->TableSearchFilter($name, 5, 'mitarbeiter', $this->app->User->GetParameter('zeiterfassung_projekt'))))); - if($fvon) - { - if(strpos($fvon, '.') !== false){ - $fvon = $this->app->String->Convert($fvon, '%1.%2.%3', '%3-%2-%1'); - } - } - if($fbis) - { - if(strpos($fbis, '.') !== false){ - $fbis = $this->app->String->Convert($fbis, '%1.%2.%3', '%3-%2-%1'); - } - } - if($fprojekt){ - $fprojekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$fprojekt' AND geloescht != 1 LIMIT 1"); - } - if($fmitarbeiter){ - $fmitarbeiter = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer = '$fmitarbeiter' AND geloescht != 1 LIMIT 1"); - } - - $more_data1 = $this->app->Secure->GetGET('more_data10'); - - if ($more_data1 == 1) { - $subwhere[] = " z.abrechnen='1' AND z.abgerechnet!='1' "; - } - if ($fprojekt){ - $subwhere[] = " z.projekt = '$fprojekt' "; - } - if ($fmitarbeiter){ - $subwhere[] = " z.adresse = '$fmitarbeiter' "; - } - if ($fvon){ - $subwhere[] = " DATE_FORMAT(z.bis,'%Y-%m-%d') >= '$fvon' "; - } - if ($fbis){ - $subwhere[] = " DATE_FORMAT(z.von,'%Y-%m-%d') <= '$fbis' "; - } - $tmp = ''; - $csubwhere = !empty($subwhere)?count($subwhere):0; - for ($j = 0;$j < $csubwhere;$j++) { - $tmp.= ' AND ' . $subwhere[$j]; - } - $where = " z.id!='' $tmp"; - - // gesamt anzahl - $count = 'SELECT COUNT(z.id) FROM zeiterfassung z'; - $moreinfo = true; - - break; - case 'zeiterfassungkundenoffen': - $allowed['zeiterfassung'] = array('list'); - - - $this->app->Tpl->Add('JQUERYREADY',"$('#kunden').click( function() { fnFilterColumn1( 0 ); } );"); - - - - for($r=1;$r<2;$r++) - { - $this->app->Tpl->Add('JAVASCRIPT',' - function fnFilterColumn'.$r.' ( i ) - { - if(oMoreData'.$r.$name.'==1) - oMoreData'.$r.$name.' = 0; - else - oMoreData'.$r.$name.' = 1; - - $(\'#'.$name.'\').dataTable().fnFilter( - \'\', - i, - 0,0 - ); - } - '); - } - - - $heading = array('Kunde', 'Kundennr', 'Offen Abr.', 'Offen ohne Abr.','Menü'); - $alignright = array(3,4); - - $width = array('10%', '5%', '15%', '15%','1%'); - - $findcols = array('a.name', 'a.kundennummer', '(SELECT SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von))) FROM zeiterfassung z2 WHERE z2.adresse_abrechnung=a.id AND z2.abrechnen=1 AND z2.abgerechnet!=1)','(SELECT SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von))) FROM zeiterfassung z2 WHERE z2.adresse_abrechnung=a.id AND z2.abrechnen!=1 AND z2.abgerechnet!=1)', 'z.id'); - $searchsql = array('a.name','a.kundennummer'); - $defaultorder = 4; - $defaultorderdesc = 1; - $menu = "
app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ' 
'; - - $numbercols = array(3,4); - - if($this->app->Secure->GetGET('more_data1')=='1') - { - $subwhere = ' AND z.aufgabe_id <=0 AND z.auftrag <=0 AND z.produktion <=0 AND z.arbeitsanweisung <=0 AND z.projekt <=0 '; - $subwhere2 = ' AND z2.aufgabe_id <=0 AND z2.auftrag <=0 AND z2.produktion <=0 AND z2.arbeitsanweisung <=0 AND z2.projekt <=0 '; - }else{ - $subwhere = ''; - $subwhere2 = ''; - } - - - $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, - a.name,a.kundennummer, - (SELECT ".$this->app->erp->FormatMenge("SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von)))/3600")." FROM zeiterfassung z2 LEFT JOIN projekt p2 ON z2.projekt = p2.id WHERE (z2.adresse_abrechnung = a.id OR p2.kunde = a.id) AND z2.abrechnen=1 AND z2.abgerechnet!=1 $subwhere2) as offen, - (SELECT ".$this->app->erp->FormatMenge("SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von)))/3600")." FROM zeiterfassung z2 LEFT JOIN projekt p2 ON z2.projekt = p2.id WHERE (z2.adresse_abrechnung = a.id OR p2.kunde = a.id) AND z2.abrechnen!=1 AND z2.abgerechnet!=1 $subwhere2) as offen2, - a.id - FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse_abrechnung "; - $where = ' z.abgerechnet!=1 AND a.id > 0 '.$subwhere; - $groupby = ' GROUP by z.adresse_abrechnung '; - - // gesamt anzahl - $count = 'SELECT COUNT(distinct z.adresse_abrechnung) FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse_abrechnung WHERE z.abgerechnet!=1 AND a.id > 0 '.$subwhere; - break; - } - $erg = []; - foreach($erlaubtevars as $k => $v) - { - if(isset($$v)) - { - $erg[$v] = $$v; - } - } - return $erg; -} - - /** - * Zeiterfassung constructor. - * - * @param Application $app - * @param bool $intern - */ - public function __construct($app, $intern = false) { - $this->app=$app; - if($intern){ - return; - } - $this->app->ActionHandlerInit($this); - - $this->app->ActionHandler("create","ZeiterfassungCreate"); - $this->app->ActionHandler("edit","ZeiterfassungEdit"); - $this->app->ActionHandler("list","ZeiterfassungList"); - $this->app->ActionHandler("listuser","ZeiterfassungListUser"); - $this->app->ActionHandler("delete","ZeiterfassungDelete"); - $this->app->ActionHandler("arbeitspaket","ArbeitspaketDetails"); - $this->app->ActionHandler("details","ZeiterfassungDetails"); - $this->app->ActionHandler("minidetail","ZeiterfassungMinidetail"); - $this->app->ActionHandler("abrechnenpdf","ZeiterfassungAbrechnenpdf"); - $this->app->ActionHandler("dokuarbeitszeitpdf","ZeiterfassungDokuArbeitszeit"); - $this->app->ActionHandler("bearbeitenerlauben","ZeiterfassungBearbeitenerlauben"); - - $this->app->erp->Headlines('Zeiterfassung'); - - $this->app->ActionHandlerListen($app); - - } - - public function ZeiterfassungBearbeitenerlauben() - { - //Rechte - } - - public function ZeiterfassungMinidetail() - { - $id = $this->app->Secure->GetGET('id'); - - $tmp = $this->app->DB->SelectRow("SELECT * FROM zeiterfassung WHERE id='$id'"); - $teilprojekt = $this->app->DB->Select("SELECT aufgabe FROM arbeitspaket WHERE id='".$tmp['arbeitspaket']."'"); - - echo ''; - echo ''; - echo ''; - echo "'; - echo '"; - echo ''; - echo ''; - if($tmp['gps']!='') { - $tmpgps = explode(';',$tmp['gps']); - $link = 'Google Maps'; - } - echo '"; - echo '
Ort:'.$tmp['ort'].'
Tätigkeit:'.$tmp['aufgabe'].'
Beschreibung:".nl2br($tmp['beschreibung']).'
Teilprojekt:'.$teilprojekt."
Kostenstelle:'.$tmp['kostenstelle'].'
Verrechnungsart:'.$tmp['verrechnungsart'].'
GPS Koordinaten:'.$tmp['gps']." $link
'; - $this->app->ExitXentral(); - } - - public function ZeiterfassungAbrechnenpdf() - { - //Create a new PDF file - $pdf=new FPDF(); - $pdf->AddPage(); - - $pdf->SetFontClassic('Arial','B',11); - - //Create lines (boxes) for each ROW (Product) - //If you don't use the following code, you don't create the lines separating each row - $tmp = $this->app->DB->SelectArr("SELECT a.kundennummer as kundennummer, a.name as name, z.aufgabe, SUM((UNIX_TIMESTAMP(z.bis)-UNIX_TIMESTAMP(z.von))/3600.0) as stunden - FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse_abrechnung WHERE z.abrechnen='1' AND (z.ist_abgerechnet IS NULL OR z.ist_abgerechnet='0') AND z.adresse_abrechnung > 0 GROUP BY 1"); - // Colors, line width and bold font - $pdf->SetFillColor(255,255,255); - $pdf->SetTextColor(0); - $pdf->SetDrawColor(0,0,0); - $pdf->SetLineWidth(.3); - //$pdf->SetFontClassic('','B'); - // Header - - $header = array('Kundennr.','Name','Stunden','OK'); - $w = array(30,130,20,10); - $pdf->Cell($w[0],7,$header[0],1,0,'L',true); - $pdf->Cell($w[1],7,$header[1],1,0,'L',true); - $pdf->Cell($w[2],7,$header[2],1,0,'C',true); - $pdf->Cell($w[3],7,$header[3],1,0,'C',true); - $pdf->Ln(); - $pdf->SetFontClassic('Arial','',11); - // Color and font restoration - - // Data - $fill = false; - for($i=0;$iCell($w[0],6,$tmp[$i]["kundennummer"],'LRTB',0,'L',$fill); - $pdf->Cell($w[1],6,$this->app->erp->ReadyForPDF($tmp[$i]["name"]),'LRTB',0,'L',$fill); - $pdf->Cell($w[2],6,round($tmp[$i]["stunden"],2),'LRTB',0,'C',$fill); - $pdf->Cell($w[3],6,"",'LRTB',0,'C',$fill); - $pdf->Ln(); - $fill = !$fill; - } - $pdf->Ln(); - $pdf->SetFontClassic('Arial','',8); - $name=preg_replace('/[^a-zA-Z0-9_]/' , '' , $this->app->User->GetName()); - $name = strtoupper($name); - - $pdf->Cell(array_sum($w),0,date('Ymd').'_'.$name.'_ABRECHNEN.pdf','',0,'R'); - - $pdf->Output(date('Ymd').'_'.$name.'_ABRECHNEN.pdf','D'); - $this->app->ExitXentral(); - } - - public function ZeiterfassungCreate() - { - $cmd=$this->app->Secure->GetGET('cmd'); - $back=$this->app->Secure->GetGET('back'); - $msg=$this->app->Secure->GetGET('msg'); - - - if($cmd=='data' || $cmd=='getzeiterfassung' || $cmd=='updatezeiterfassung' || $cmd=='savezeiterfassung' || $cmd=='kalenderansicht' || $cmd=='formularansicht' || $cmd=='delzeiterfassung' || $cmd=='mitarbeiteransichtdata' || $cmd=='copyzeiterfassung') - { - $start_datum = date('Y-m-d', $this->app->Secure->GetGET('start')); - $end_datum = date('Y-m-d', $this->app->Secure->GetGET('end')); - switch($cmd) - { - case 'formularansicht': - $this->app->User->SetParameter('zeiterfassung_buchen_formularansicht',1); - header('Location: index.php?module=zeiterfassung&action=create'); - exit; - break; - case 'kalenderansicht': - $this->app->User->SetParameter('zeiterfassung_buchen_formularansicht',0); - header('Location: index.php?module=zeiterfassung&action=create'); - exit; - break; - case 'mitarbeiteransichtdata': - case 'data': - if($this->app->User->GetParameter('zeiterfassung_buchen_termine')=='1' && $cmd!='mitarbeiteransichtdata') { - if($nurmeine > 0) - { - $data = $this->app->DB->SelectArr("SELECT DISTINCT ke.id, ort,beschreibung, bezeichnung AS title, von AS start, bis AS end, allDay, color, public,erinnerung,adresse,adresseintern,projekt - FROM kalender_event AS ke - LEFT JOIN kalender_user AS ku ON ke.id=ku.event - WHERE (ku.userid='$user') AND (ke.von < '$end' AND (ke.bis >= '$start' OR ke.bis='0000-00-00 00:00:00') ) GROUP by ke.id ORDER by start"); - } else { - $data = $this->app->DB->SelectArr("SELECT DISTINCT ke.id, ort,beschreibung, ke.bezeichnung AS title, von AS start, bis AS end, allDay, color, public,erinnerung,adresse,adresseintern,projekt,kg.farbe - FROM kalender_event AS ke - LEFT JOIN kalender_user ku ON ke.id=ku.event - LEFT JOIN kalender_gruppen kg ON kg.id=ku.gruppe - WHERE (ke.von < '$end_datum' AND (ke.bis >= '$start_datum' OR (ke.bis='0000-00-00 00:00:00' AND ke.von!='0000-00-00 00:00:00') AND NOT (ke.von < '$start_datum' AND ke.bis='0000-00-00 00:00:00')) ) $subwhere GROUP by ke.id ORDER by start"); - } - $cdata = !empty($data)?count($data):0; - for($i=0;$i<$cdata;$i++) - { - $data[$i]['allDay'] = (($data[$i]['allDay']=='1')?true:false); - $data[$i]['public'] = (($data[$i]['public']=='1')?true:false); - $data[$i]['erinnerung'] = (($data[$i]['erinnerung']=='1')?true:false); - $data[$i]['title'] = $this->app->erp->ReadyForPDF($data[$i]['title']); - $data[$i]['ort'] = $this->app->erp->ReadyForPDF($data[$i]['ort']); - $data[$i]['adresse'] = $this->app->erp->ReadyForPDF($data[$i]['adresse']); - $data[$i]['adresseintern'] = $this->app->erp->ReadyForPDF($data[$i]['adresseintern']); - $data[$i]['projekt'] = $this->app->erp->ReadyForPDF($data[$i]['adresseintern']); - $data[$i]['beschreibung'] = $this->app->erp->ReadyForPDF($data[$i]['projekt']); - //if($data[$i]['farbe']!="") - $data[$i]['color'] = '#999';//$data[$i]['farbe']; - $data[$i]['task'] = 0;//$data[$i]['farbe']; - $data[$i]['id'] = 'kalender_'.$data[$i]['id']; - } - } - - if($cmd=='mitarbeiteransichtdata') - { - $tmpadresse = $this->app->User->GetParameter('zeiterfassung_list_mitarbeiterkalenderansicht'); - } - else { - $tmpadresse = $this->app->User->GetAdresse(); - } - - $result = $this->app->DB->SelectArr("SELECT * FROM zeiterfassung WHERE adresse='".$tmpadresse."' - AND DATE_FORMAT(von,'%Y-%m-%d') BETWEEN '$start_datum' AND '$end_datum' "); - $cresult = !empty($result)?count($result):0; - for($i=0;$i<$cresult;$i++) - { - - if($result[$i]['art']=='Arbeit') { - $color='var(--sidebar-background)'; - } else { - $color='#333'; - } - $data[] = array('id' => $result[$i]['id'], - 'title'=>$result[$i]['aufgabe'], - 'start'=> $result[$i]['von'], - 'end'=> $result[$i]['bis'], - 'allDay'=>false, - 'color'=>$color, - 'public'=>'', - 'task'=>1); - } - //background - if($this->app->User->GetParameter('zeiterfassung_buchen_stechuhr')=='1') { - - $stechuhr = $this->app->DB->SelectArr("SELECT *, datum as start, - DATE_ADD(datum, INTERVAL 30 MINUTE) as end FROM stechuhr WHERE adresse='".$tmpadresse."' - AND DATE_FORMAT(datum,'%Y-%m-%d') between '$start_datum' AND '$end_datum'"); - $cstechuhr = !empty($stechuhr)?count($stechuhr):0; - for($si=0; $si<$cstechuhr;$si++) - { - $data[] = array( - 'title'=> $stechuhr[$si]['status'], - 'start'=> $stechuhr[$si]['start'], - 'end'=> $stechuhr[$si]['end'], - 'color'=>'#f90000', - 'allDay'=>false); -// 'rendering'=>'background'); - } - } - - break; - case 'getzeiterfassung': - $id=$this->app->Secure->GetGET('id'); - $result = $this->app->DB->SelectArr("SELECT *,DATE_FORMAT(von,'%d.%m.%Y') as datum, - DATE_FORMAT(von,'%H:%i') as vonzeit, DATE_FORMAT(bis,'%H:%i') as biszeit - FROM zeiterfassung WHERE adresse='".$this->app->User->GetAdresse()."' AND id='$id' LIMIT 1"); - $result = reset($result); - - $data['id']=$result['id']; - $data['aufgabe']=$result['aufgabe']; - $data['beschreibung']=$result['beschreibung']; - $data['datum']=$result['datum']; - $data['vonzeit']=$result['vonzeit']; - $data['biszeit']=$result['biszeit']; - $data['ort']=$result['ort']; - $data['art']=$result['art']; - $data['internerkommentar']=$result['internerkommentar']; - $data['projekt_manuell']=$this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='".$result['projekt']."' LIMIT 1"); - $data['serviceauftrag'] = $this->app->DB->Select("SELECT belegnr FROM serviceauftrag WHERE id='".$result["serviceauftrag"]."' LIMIT 1"); - $data['adresse_abrechnung'] = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) FROM adresse WHERE id='".$result["adresse_abrechnung"]."'"); - $data['auftragpositionid']=$this->app->DB->Select("SELECT CONCAT(a.belegnr,'-',ap.sort,' ',a.name,' ',DATE_FORMAT(a.datum,'%d.%m.%Y'),' ',ap.bezeichnung) FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE ap.id='".$result["auftragpositionid"]."'"); - $data['produktion']=$this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM produktion WHERE id='".$result["produktion"]."'"); - - $data['auftrag'] = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM auftrag WHERE id='".$result["auftrag"]."'"); - $data['arbeitspaket'] = $this->app->DB->Select("SELECT CONCAT(ap.id,' ',p.abkuerzung,' ',ap.aufgabe) as name2 FROM arbeitspaket ap LEFT JOIN projekt p ON p.id=ap.projekt WHERE ap.id='".$result["arbeitspaket"]."' LIMIT 1"); - $data['abrechnen'] = $result['abrechnen']; -/* - $adresse_abrechnung_komplett = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) FROM adresse WHERE id='".$tmp[0]["adresse_abrechnung"]."'"); - if($tmp[0]["adresse_abrechnung"]<=0) $adresse_abrechnung_komplett=""; - - $mitarbeiter_komplett = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$tmp[0]["adresse"]."'"); - $kostenstelle_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM kostenstellen WHERE nummer='".$tmp[0]["kostenstelle"]."'"); - $verrechnungsart_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM verrechnungsart WHERE nummer='".$tmp[0]["verrechnungsart"]."'"); - $auftragpositionid_komplett = $this->app->DB->Select("SELECT CONCAT(a.belegnr,'-',ap.sort,' ',a.name,' ',DATE_FORMAT(a.datum,'%d.%m.%Y'),' ',ap.bezeichnung) FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE ap.id='".$tmp[0]["auftragpositionid"]."'"); - $produktion_komplett = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM produktion WHERE id='".$tmp[0]["produktion"]."'"); - -*/ - - - $data['write']=1; // nur schreiben erlaubt wenn nicht zu alt bzw. gibt es eine Einstelloption in den Firmendaten TODO - break; - - case 'copyzeiterfassung': - $id = $this->app->Secure->GetPOST('id'); - $zeiterfassungData = $this->app->DB->SelectRow("SELECT * FROM zeiterfassung WHERE id = '$id' LIMIT 1"); - $datum = explode(' ', $zeiterfassungData['von']); - $datum = $datum[0]; - $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($datum); - - if($id > 0 && $checkzeit){ - $this->app->erp->AddArbeitszeit($this->app->User->GetAdresse(), $zeiterfassungData['von'], $zeiterfassungData['bis'], - $zeiterfassungData['aufgabe'], $zeiterfassungData['beschreibung'],$zeiterfassungData['ort'], $zeiterfassungData['projekt'], - $zeiterfassungData['arbeitspaket'],$zeiterfassungData['art'],$zeiterfassungData['adresse_abrechnung'],$zeiterfassungData['abrechnen'],'', - '',0,'',0,$zeiterfassungData['internerkommentar'],$zeiterfassungData['auftrag'],$zeiterfassungData['produktion'],0, - $zeiterfassungData['auftragpositionid'],$zeiterfassungData['serviceauftrag']); - - $status['status']=1; - $status['statusText']=''; - }else{ - $status['status']=0; - $status['statusText'] = 'Die Zeiterfassung konnte nicht kopiert werden, da das Datum im Zeitbereich liegt der bereits geschlossen ist.'; - } - - echo json_encode($status); - $this->app->ExitXentral(); - break; - - case 'delzeiterfassung': - $id=$this->app->Secure->GetPOST('id'); - $check = $this->app->DB->Select("SELECT id FROM zeiterfassung WHERE adresse='".$this->app->User->GetAdresse()."' AND id='$id' AND id>0 LIMIT 1"); - $checkdatum = $this->app->DB->Select("SELECT DATE_FORMAT(von,'%Y-%m-%d') FROM zeiterfassung WHERE adresse='".$this->app->User->GetAdresse()."' AND id='$id' AND id>0 LIMIT 1"); - - $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($checkdatum); - - if($check == $id && $check > 0 && $checkzeit) - { - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='$check' LIMIT 1"); - $status['status']=1; - $status['statusText']=''; - - } else if ($checkzeit==false) - { - $status['status']=0; - $status['statusText']='Die Zeit ist zu alt und darf daher nicht mehr bearbeitet werden!'; - } - else { - $status['status']=0; - $status['statusText']='Diese Zeiterfassung konnte nicht gelöscht werden (fehlende Rechte)'; - } - echo json_encode($status); - exit; - break; - - case 'savezeiterfassung': - $id=$this->app->Secure->GetPOST('id'); - $start=$this->app->Secure->GetPOST('start'); - $end=$this->app->Secure->GetPOST('end'); - $datum=$this->app->Secure->GetPOST('datum'); - $aufgabe=$this->app->Secure->GetPOST('aufgabe'); - $beschreibung=$this->app->Secure->GetPOST('beschreibung'); - $internerkommentar=$this->app->Secure->GetPOST('internerkommentar'); - $ort=$this->app->Secure->GetPOST('ort'); - $art=$this->app->Secure->GetPOST('art'); - - $checkvon = (int)str_replace(':','',$this->app->Secure->GetPOST('start')); - $checkbis = (int)str_replace(':','',$this->app->Secure->GetPOST('end')); - if ($checkbis <= $checkvon) { - $status['status']=0; - $status['statusText']='Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!'; - header('Content-Type: application/json'); - echo json_encode($status); - $this->app->ExitXentral(); - } - - $projekt_manuell=$this->app->Secure->GetPOST('projekt_manuell'); - $arbeitspaket=$this->app->Secure->GetPOST('arbeitspaket'); - $adresse_abrechnung=$this->app->Secure->GetPOST('adresse_abrechnung'); - $auftragpositionid=$this->app->Secure->GetPOST('auftragpositionid'); - $auftrag=$this->app->Secure->GetPOST('auftrag'); - $produktion=$this->app->Secure->GetPOST('produktion'); - $serviceauftrag=$this->app->Secure->GetPOST('serviceauftrag'); - $abrechnen=$this->app->Secure->GetPOST('abrechnen'); - - $datum = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1'); - - $adresse_abrechnung = trim ($adresse_abrechnung); - $adresse_abrechnung = substr ($adresse_abrechnung , 0 , (strpos ($adresse_abrechnung , ' '))); - $adresse_abrechnung = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$adresse_abrechnung' AND kundennummer!='' LIMIT 1"); - - $auftrag = trim ($auftrag); - $auftrag = substr ($auftrag , 0 , (strpos ($auftrag , ' '))); - $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$auftrag' AND belegnr!='' LIMIT 1"); - - $string = $auftragpositionid; - $string = trim ($string); - $string = substr ($string , 0 , (strpos ($string , ' '))); - $tmpauftrag = substr ($string , 0 , (strrpos ($string , '-'))); - $tmpauftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$tmpauftrag' AND belegnr!='' LIMIT 1"); - $auftragpositionsort = substr ($string , (strrpos ($string , '-')+1),strlen($string)); - $auftragpositionid = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag='$tmpauftrag' AND sort='$auftragpositionsort' LIMIT 1"); - - $string = $produktion; - $string = trim ($string); - $produktion = substr ($string , 0 , (strpos ($string , ' '))); - $produktion = $this->app->DB->Select("SELECT id FROM produktion WHERE belegnr='$produktion' AND belegnr!='' LIMIT 1"); - - $arbeitspaket = strstr($arbeitspaket, ' ', true); - $arbeitspaket = $this->app->DB->Select("SELECT id FROM arbeitspaket WHERE id='".$arbeitspaket."' LIMIT 1"); - - $serviceauftrag = reset(explode(' ',$serviceauftrag)); - $serviceauftrag = $this->app->DB->Select("SELECT id FROM serviceauftrag WHERE belegnr='".$serviceauftrag."' LIMIT 1"); - - // Projekt grabben und notfalls wieder anzeigen - $projekt_kennung = reset(explode(' ',$projekt_manuell)); - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$projekt_kennung."' LIMIT 1"); - - $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($datum); - - if($checkzeit) - { - if($id > 0) - { - $this->app->DB->Update("UPDATE zeiterfassung SET aufgabe='$aufgabe',beschreibung='$beschreibung',ort='$ort',internerkommentar='$internerkommentar',art='$art',adresse_abrechnung='$adresse_abrechnung',von='".$datum." ".$start."',bis='".$datum." ".$end."', - abrechnen='$abrechnen',arbeitspaket='$arbeitspaket',auftrag='$auftrag',produktion='$produktion',auftragpositionid='$auftragpositionid',projekt='$projekt',serviceauftrag='$serviceauftrag' WHERE id='$id' LIMIT 1"); - } - else { - $this->app->erp->AddArbeitszeit($this->app->User->GetAdresse(), $datum.' '.$start, $datum.' '.$end, $aufgabe, $beschreibung,$ort, $projekt, $arbeitspaket,$art,$adresse_abrechnung,$abrechnen,'', - '',0,'',0,$internerkommentar,$auftrag,$produktion,0,$auftragpositionid,$serviceauftrag); - //$this->app->erp->AddArbeitszeit($adr_id, $start, $end, $aufgabe, $beschreibung,$ort, $projekt, $paketauswahl,$art,$kunde="",$abrechnen="",$verrechnungsart="",$kostenstelle="",$abgerechnet="0",$gps="",$aufgabeid=0,$internerkommentar="",$auftrag=0,$produktion=0, $preis = 0,$auftragpositionid=""); - } - $status['status']=1; - $status['statusText']=''; - } else { - $status['status']=0; - $status['statusText']='Die Zeiterfassung konnte nicht angelegt werden da das Datum im Zeitbereich liegt der bereits geschlossen ist.'; - } - echo json_encode($status); - exit; - break; - case 'updatezeiterfassung': - $eid=$this->app->Secure->GetGET('eid'); - $start=$this->app->Secure->GetGET('start'); - $end=$this->app->Secure->GetGET('end'); - - $datum = strstr($start, ' ', true); - $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($datum); - if($eid > 0 && $checkzeit) - { - $this->app->DB->Update("UPDATE zeiterfassung SET von='$start', bis='$end' WHERE id='$eid' LIMIT 1"); - } - else if(!$checkzeit) - { - $status['status']=0; - $status['statusText']='Die Zeiterfassung konnte nicht angelegt werden da das Datum im Zeitbereich liegt der bereits geschlossen ist.'; - echo json_encode($status); - exit; - } - break; - - } - - header('Content-type: application/json'); - echo json_encode($data); - exit; - } - - - $id=$this->app->Secure->GetGET('id'); - if($msg=='' && $id <=0){ - $this->app->User->SetParameter('zeiterfassung_create_datumzeiterfassung', ''); - } - - - // $this->app->erp->MenuEintrag("index.php?module=zeiterfassung&action=list","Übersicht"); - // $this->app->erp->MenuEintrag("index.php?module=zeiterfassung&action=create","Neue Zeiterfassung"); - - if($back=='zeiterfassung' || $cmd=='extern'){ - $this->ZeiterfassungMenu(); - } - else { - $this->app->erp->StartseiteMenu(); - // $this->app->Tpl->Add(KURZUEBERSCHRIFT,"Zeiterfassung"); - } - - $id = $this->app->User->GetId(); - if(is_numeric($id)){ - $adr_id = $this->app->DB->Select("SELECT adresse FROM user WHERE id='$id'"); - } - - - if($this->app->erp->Firmendaten('zeiterfassung_abrechnenvorausgewaehlt')=='1' && $this->app->Secure->GetGET('id') <=0) - { - $this->app->Tpl->Set('ABRECHNEN','checked'); - } - - - $this->ZeiterfassungManuell($adr_id); - //$this->app->Tpl->Parse(PAGE,"zeiterfassung_create.tpl"); - } - - public function ZeiterfassungListUser() - { - //$this->app->Tpl->Add(KURZUEBERSCHRIFT,"Zeiterfassung"); - $this->app->Tpl->Set('UEBERSCHRIFT','Zeiterfassung'); - $this->app->erp->StartseiteMenu(); - - if($this->app->Secure->GetGET('do')=='stornieren'){ - $lid = $this->app->Secure->GetGET('lid'); - $back = $this->app->Secure->GetGET('back'); - if($lid!='') - { - if($back=='zeiterfassung') { - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); - header('Location: index.php?module=zeiterfassung&action=list'); - } - else if($back=='zeiterfassungmitarbeiter') { - $id = $this->app->Secure->GetGET('id'); - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); - header("Location: index.php?module=adresse&action=zeiterfassung&id=$id"); - } - else if($back=='service') { - $id = $this->app->Secure->GetGET('id'); - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); - header("Location: index.php?module=service&action=list"); - } - else if($back=='aufgabe') { - $id = $this->app->Secure->GetGET('id'); - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); - header("Location: index.php?module=aufgaben&action=list"); - } - - else if($back=='zeiterfassunguser') - { - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."' AND gebucht_von_user='".$this->app->User->GetID()."'"); - header('Location: index.php?module=zeiterfassung&action=listuser'); - } - else if ($back=='projekt') - { - $back_id = $this->app->Secure->GetGET('back_id'); - $back_sid = $this->app->Secure->GetGET('back_sid'); - header("Location: index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"); - } - else if ($back=='lohnabrechnung') - { - header('Location: index.php?module=lohnabrechnung&action=list'); - } - else if ($back=='adresse') - { - $back_id = $this->app->Secure->GetGET('back_id'); - header("Location: index.php?module=adresse&action=abrechnungzeit&id=$back_id"); - } - else{ - header('Location: index.php?module=zeiterfassung&action=create#tabs-1'); - } - exit; - } - } - - $this->ZeiteerfassungEigeneUebersicht(); - $this->app->YUI->TableSearch('TAB1','zeiterfassunguser', 'show','','',basename(__FILE__), __CLASS__); - - //TODO wenn man das Recht hat - /*if(0) - { - $this->app->Tpl->Add('TAB1', - "
 ". - " ". - " 
"); - }*/ - - $von = $this->app->User->GetParameter('zeiterfassung_listuser_von'); - if($von!='') { - $this->app->Tpl->Set('VON',$von); - } - - $bis = $this->app->User->GetParameter('zeiterfassung_listuser_bis'); - if($bis!='') { - $this->app->Tpl->Set('BIS',$bis); - } - - - - $this->app->YUI->DatePicker('von'); - $this->app->YUI->DatePicker('bis'); - - $this->app->YUI->AutoSaveUserParameter('von','zeiterfassung_listuser_von',"var oTable = $('#zeiterfassunguser').DataTable( );oTable.ajax.reload();"); - $this->app->YUI->AutoSaveUserParameter('bis','zeiterfassung_listuser_bis',"var oTable = $('#zeiterfassunguser').DataTable( );oTable.ajax.reload();"); - - $this->app->Tpl->Parse('PAGE','zeiterfassunguseruebersicht.tpl'); - } - - function ZeiteerfassungEigeneUebersicht() - { - $datumzeiterfassung = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); - if($this->app->erp->CheckDateValidate($datumzeiterfassung)){ - $datum = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); - } - else{ - $datum = date('Y-m-d', time()); - } - - /*if(0){ - $heute = (int)$this->app->erp->ZeitGesamtArbeit($this->app->User->GetAdresse(),$datum).":".round(fmod($this->app->erp->ZeitGesamtArbeit($this->app->User->GetAdresse(),$datum),1)*60);//Alternative Zeitangabe - $pause =(int)$this->app->erp->ZeitGesamtPause($this->app->User->GetAdresse(),$datum).":".round(fmod($this->app->erp->ZeitGesamtPause($this->app->User->GetAdresse(),"","",$datum),1)*60); - $wocheist = (int)$this->app->erp->ZeitGesamtWocheIst($this->app->User->GetAdresse(),"","",$datum).":".round(fmod($this->app->erp->ZeitGesamtWocheIst($this->app->User->GetAdresse(),"","",$datum),1)*60); - $monatist = (int)$this->app->erp->ZeitGesamtMonatIst($this->app->User->GetAdresse(),"","",$datum).":".round(fmod($this->app->erp->ZeitGesamtMonatIst($this->app->User->GetAdresse(),"","",$datum),1)*60); - $monatsoll = (int)$this->app->erp->ZeitGesamtMonatSoll($this->app->User->GetAdresse(),"","",$datum).":".round(fmod($this->app->erp->ZeitGesamtMonatSoll($this->app->User->GetAdresse(),"","",$datum),1)*60); - }else{*/ - $heute = number_format($this->app->erp->ZeitGesamtArbeit($this->app->User->GetAdresse(),$datum),2,",",""); - $pause = number_format($this->app->erp->ZeitGesamtPause($this->app->User->GetAdresse(),$datum),2,",",""); - $wocheist = number_format($this->app->erp->ZeitGesamtWocheIst($this->app->User->GetAdresse(),"","",$datum),2,",",""); - $monatist = number_format($this->app->erp->ZeitGesamtMonatIst($this->app->User->GetAdresse(),"","",$datum),2,",",""); - $monatsoll = number_format($this->app->erp->ZeitGesamtMonatSoll($this->app->User->GetAdresse(),"","",$datum),2,",",""); - //} - $this->app->Tpl->Set('HEUTE',$heute); - $this->app->Tpl->Set('PAUSE',$pause); - $this->app->Tpl->Set('WOCHEIST',$wocheist); - $this->app->Tpl->Set('MONATIST',$monatist); - $this->app->Tpl->Set('MONATSOLL',$monatsoll); - - $offen = $this->app->erp->ZeitGesamtWocheOffen($this->app->User->GetAdresse()); - if($offen > 0) - { - $this->app->Tpl->Set('WOCHESOLL',number_format($this->app->erp->ZeitGesamtWocheSoll($this->app->User->GetAdresse(),"","",$datum),2,",","")); - $this->app->Tpl->Set('OFFEN',"".number_format($offen,2,",","").""); - } else if ($offen < 0) - { - $this->app->Tpl->Set('WOCHESOLL','-'); - $this->app->Tpl->Set('OFFEN','-'); - } - else { - $this->app->Tpl->Set('WOCHESOLL',number_format($this->app->erp->ZeitGesamtWocheSoll($this->app->User->GetAdresse(),"","",$datum),2,",","")); - $this->app->Tpl->Set('OFFEN',number_format($offen,2,",","")); - } - - $this->app->Tpl->Set('URLAUBOFFEN',number_format($this->app->erp->ZeitUrlaubOffen($this->app->User->GetAdresse(), $datum),2,",","")); - $this->app->Tpl->Set('URLAUBGENOMMEN',number_format($this->app->erp->ZeitUrlaubGenommen($this->app->User->GetAdresse(), $datum),2,",","")); - - } - - - - function ZeiterfassungList() - { - // $this->app->Tpl->Set(UEBERSCHRIFT,"Zeiterfassung"); - $this->ZeiterfassungMenu(); - - if($this->app->Secure->GetGET('do')=='stornieren'){ - $lid = $this->app->Secure->GetGET('lid'); - $back = $this->app->Secure->GetGET('back'); - if($lid!='') - { - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id=$lid"); - - if($back=='zeiterfassung') - header('Location: index.php?module=zeiterfassung&action=list'); - else if($back=='zeiterfassunguser') - header('Location: index.php?module=zeiterfassung&action=listuser'); - else if($back=='service') - header('Location: index.php?module=service&action=list'); - else if($back=='aufgabe') - header('Location: index.php?module=aufgaben&action=list'); - else if($back=='zeiterfassungmitarbeiter') - { - $sid = $this->app->Secure->GetGET('sid'); - header('Location: index.php?module=adresse&action=zeiterfassung&id=$sid'); - } - else if ($back=='projekt') - { - $back_id = $this->app->Secure->GetGET('back_id'); - $back_sid = $this->app->Secure->GetGET('back_sid'); - header("Location: index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"); - } - else if ($back=='lohnabrechnung') - { - header('Location: index.php?module=lohnabrechnung&action=list'); - } - else if ($back=='adresse') - { - $back_id = $this->app->Secure->GetGET('back_id'); - header("Location: index.php?module=adresse&action=abrechnungzeit&id=$back_id"); - } - else - header('Location: index.php?module=zeiterfassung&action=create#tabs-1'); - exit; - } - } - - $this->app->YUI->DatePicker('von'); - $this->app->YUI->DatePicker('bis'); - $this->app->YUI->AutoComplete('projekt','projektname'); - $this->app->YUI->AutoComplete('mitarbeiter','mitarbeiter'); - $this->app->YUI->AutoComplete('mitarbeiterkalenderansicht','mitarbeiter'); - - $this->app->YUI->TableSearch('TAB1','zeiterfassung', 'show','','',basename(__FILE__), __CLASS__); - $this->app->YUI->TableSearch('TAB2','zeiterfassungkundenoffen', 'show','','',basename(__FILE__), __CLASS__); - //$this->app->YUI->TableSearch('TAB3',"zeiterfassungprojektoffen"); - - $mitarbeiterkalenderansicht = $this->app->Secure->GetPOST('mitarbeiterkalenderansicht'); - if($mitarbeiterkalenderansicht!='') - { - $tmpmitarbeiter = strtok($mitarbeiterkalenderansicht, ' '); - $mitarbeiterid = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer='$tmpmitarbeiter' AND mitarbeiternummer!='' LIMIT 1"); - $this->app->User->SetParameter('zeiterfassung_list_mitarbeiterkalenderansicht',$mitarbeiterid); - } - - $mitarbeiterid = $this->app->User->GetParameter('zeiterfassung_list_mitarbeiterkalenderansicht'); - $mitarbeiterkalenderansicht = $this->app->DB->Select("SELECT concat(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$mitarbeiterid."'"); - $this->app->Tpl->Set('MITARBEITERKALENDERANSICHT',$mitarbeiterkalenderansicht); - - //TODO wenn man das Recht hat - /*if(0) - { - $this->app->Tpl->Add('TAB1', - "
 ". - " ". - " 
"); - }*/ - - - $this->app->Tpl->Parse('PAGE','zeiterfassunguebersicht.tpl'); - } - - - function ZeiterfassungMenu() - { - $this->app->erp->Headlines('Zeiterfassung'); - $this->app->erp->MenuEintrag('index.php?module=zeiterfassung&action=list','Übersicht'); - $this->app->erp->MenuEintrag('index.php?module=zeiterfassung&action=create&cmd=extern','Neue Zeiterfassung'); - } - - - public function ZeiterfassungEdit() - { - $back = $this->app->Secure->GetGET('back'); - if($back=='zeiterfassung'){ - $this->ZeiterfassungMenu(); - } - else{ - $this->app->erp->StartseiteMenu(); - } - - $this->ZeiterfassungManuell($adr_id,true); - - //parent::ZeiterfassungEdit(); - } - - function ArbeitspaketReadDetails($index,&$ref) - { - $pakete = $ref->app->DB->SelectArr("SELECT * FROM arbeitspakete WHERE id='$index'"); - $myArr = $pakete[0]; - - $ref->app->Tpl->Set('AUFGABE', $myArr['aufgabe']); - $ref->app->Tpl->Set('PROJEKT', $myArr['projekt']); - $this->app->Tpl->Set('BESCHREIBUNG', $myArr['beschreibung']); - $this->app->Tpl->Set('ZEITGEPLANT', $myArr['zeit_geplant']); - $this->app->Tpl->Set('KOSTENSTELLE', $myArr['kostenstelle']); - $this->app->Tpl->Set('STATUS', $myArr['status']); - } - - public function ArbeitspaketDetails() - { - $this->app->Tpl->Set('HEADING','Details zum Arbeitspaket'); - - $this->app->Tpl->Set('SUBSUBHEADING', 'Details'); - $this->app->Tpl->Set('DATUM', date('d.m.Y', time())); - - $this->app->Tpl->Add('TABS', - '
  • Zeiterfassung

  • '); - - $this->app->Tpl->Add('TABS', - "
  • Zurück zur Übersicht
  • "); - - // Adress-ID mit USER-ID abfragen - $id = $this->app->User->GetId(); - if($id!=''){ - $adr_id = $this->app->DB->Select("SELECT adresse FROM user WHERE id=$id"); - } - - $ap_id = $this->app->Secure->GetGET('lid'); - - $pakete = $this->app->DB->SelectArr('SELECT * FROM arbeitspaket WHERE id='.$ap_id.' AND adresse='.$adr_id); - $myArr = $pakete[0]; - - $this->app->Tpl->Set('AUFGABE', $myArr['aufgabe']); - $this->app->Tpl->Set('PROJEKT', $myArr['projekt']); - $this->app->Tpl->Set('BESCHREIBUNG', $myArr['beschreibung']); - $this->app->Tpl->Set('ZEITGEPLANT', $myArr['zeit_geplant']); - $this->app->Tpl->Set('KOSTENSTELLE', $myArr['kostenstelle']); - $this->app->Tpl->Set('STATUS', $myArr['status']); - - if($myArr['abgabe'] == 'abgegeben'){ - $this->app->Tpl->Set('ABGABE', 'fertig'); - } - else{ - $this->app->Tpl->Set('ABGABE', ''); - } - - if($this->app->Secure->GetPOST("abgabefeld") == 'nicht abgegeben'){ - $this->app->DB->Update('UPDATE arbeitspakete SET abgabe="abgegeben", abgabedatum="'.date('Y-m-d').'" WHERE id='.$myArr['id']); - $myArr['abgabe'] = 'abgegeben'; - } - $this->app->Tpl->Parse('INHALT', 'arbeitspaket_details.tpl'); - $this->app->Tpl->Parse('PAGE','rahmen_submit_extend.tpl'); - } - - - function ZeiterfassungManuell($adr_id) - { - $this->app->Tpl->Set('HEADING','Zeiterfassung (Übersicht)'); - - $this->app->Tpl->Set('SUBSUBHEADING', 'Zeit erfassen'); - - $datumzeiterfassung = $this->app->Secure->GetPOST('datumzeiterfassung'); - $datumzeiterfassung = $this->app->String->Convert($datumzeiterfassung ,'%1.%2.%3','%3-%2-%1'); - - if($this->app->erp->CheckDateValidate($datumzeiterfassung)) { - $this->app->User->SetParameter('zeiterfassung_create_datumzeiterfassung',$datumzeiterfassung); - } - - $datumzeiterfassung = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); - - if(!$this->app->erp->CheckDateValidate($datumzeiterfassung)) { - $datumzeiterfassung = date('Y-m-d'); - } - - $this->app->Tpl->Set('ZURUECKDATUM',$this->app->DB->Select("SELECT DATE_FORMAT(DATE_SUB('$datumzeiterfassung',INTERVAL 1 DAY),'%d.%m.%Y')")); - $this->app->Tpl->Set('VORWAERTSDATUM',$this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datumzeiterfassung',INTERVAL 1 DAY),'%d.%m.%Y')")); - - - $this->app->Tpl->Set('DATUMZEITERFASSUNG',$this->app->String->Convert($datumzeiterfassung,'%3-%2-%1','%1.%2.%3')); - if($datumzeiterfassung!=date('Y-m-d')){ - $this->app->Tpl->Set('ANZEIGEDATUMZEITERFASSUNG', $this->app->String->Convert($datumzeiterfassung, '%3-%2-%1', '%1.%2.%3')); - } - else{ - $this->app->Tpl->Set('ANZEIGEDATUMZEITERFASSUNG', 'heute'); - } - - - if($this->app->erp->ModulVorhanden('fahrtenbuch')) - { - $spalte = "if((SELECT f.id FROM fahrtenbuch_fahrten f WHERE f.zeiterfassung=z.id) > 0,'ja','-') as Fahrt,"; - } else { - $spalte=''; - } - - //DATE_FORMAT(z.bis, '%d.%m.') AS Datum, - $table = new EasyTable($this->app); - $table->Query("SELECT - if(z.adresse_abrechnung > 0, CONCAT('Kunde: ', a.name, ' (', a.kundennummer,')
    ', z.aufgabe), z.aufgabe) as Taetigkeit, - DATE_FORMAT(z.von,'%H:%i') AS Von, - CONCAT(TIME_FORMAT(TIMEDIFF(z.bis, z.von),'%H:%i'),IF(z.abrechnen=1,' (A)','')) AS Dauer, - p.abkuerzung as Projekt, - $spalte - - CONCAT('  ') - FROM zeiterfassung z LEFT JOIN adresse a ON z.adresse_abrechnung = a.id LEFT JOIN projekt p ON p.id=z.projekt LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id - WHERE z.gebucht_von_user=".$this->app->User->GetID()." AND DATE_FORMAT(z.von, '%Y-%m-%d') = '$datumzeiterfassung' - ORDER BY z.von - "); - $table->DisplayNew('BUCHUNGEN','Aktion','noAction','false',0,0,false); - $this->app->YUI->DatePicker('datumzeiterfassung'); - - - //wenn id und kein post einmalig aus db holen - $id = $this->app->Secure->GetGET('id'); - $id_old = $id; - $copyid = $this->app->Secure->GetGET('copyid'); - if(empty($id) && !empty($copyid)) - { - $id = $copyid; - } - $projektabgeschlossen = false; - if($id!='' && $this->app->Secure->GetPOST('art')=='') - { - $tmp = $this->app->DB->SelectArr("SELECT *,DATE_FORMAT(von,'%H:%i') as von, if(bis!='0000-00-00 00:00:00',DATE_FORMAT(bis,'%H:%i'),'') as bis, DATE_FORMAT(von,'%d.%m.%Y') as datum FROM zeiterfassung WHERE id='$id' LIMIT 1"); - $aufgabe = $tmp[0]['aufgabe']; - $art = $tmp[0]['art']; - $ort = $tmp[0]['ort']; - $gps = $tmp[0]['gps']; - $beschreibung = $tmp[0]['beschreibung']; - $internerkommentar = $tmp[0]['internerkommentar']; - $paketauswahl = $tmp[0]['arbeitspaket']; - $abrechnen = $tmp[0]['abrechnen']; - $abgerechnet = $tmp[0]['abgerechnet']; - - - $this->app->User->SetParameter('teilprojekt_filter',$tmp[0]['projekt']); - - // if($paketauswahl > 0){ - // $this->app->Tpl->Set(PROJEKTROW,"none"); - // } - - if($tmp[0]['adresse']!=$this->app->User->GetAdresse()) - { - $this->app->Tpl->Set('ANDERERMITARBEITER','checked'); - $this->app->Tpl->Set('DISPLAYANDERERMITARBEITER',''); - } else { - $this->app->Tpl->Set('DISPLAYANDERERMITARBEITER','none'); - } - - $mitarbeiter = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$tmp[0]['adresse']."'"); - $adresse_abrechnung = $tmp[0]['adresse_abrechnung']; - $projektabgeschlossen = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$tmp[0]['projekt']."' AND status = 'abgeschlossen' LIMIT 1"); - $projekt_komplett = $this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='".$tmp[0]['projekt']."'"); - $serviceauftrag_anzeige = $this->app->DB->Select("SELECT belegnr FROM serviceauftrag WHERE id='".$tmp[0]['serviceauftrag']."' LIMIT 1"); - $adresse_abrechnung_komplett = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) FROM adresse WHERE id='".$tmp[0]['adresse_abrechnung']."'"); - - if($tmp[0]['adresse_abrechnung']<=0){ - $adresse_abrechnung_komplett = ''; - } - - $mitarbeiter_komplett = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$tmp[0]['adresse']."'"); - $kostenstelle_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM kostenstellen WHERE nummer='".$tmp[0]['kostenstelle']."'"); - $verrechnungsart_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM verrechnungsart WHERE nummer='".$tmp[0]['verrechnungsart']."'"); - $auftrag_komplett = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM auftrag WHERE id='".$tmp[0]['auftrag']."'"); - $auftragpositionid_komplett = $this->app->DB->Select("SELECT CONCAT(a.belegnr,'-',ap.sort,' ',a.name,' ',DATE_FORMAT(a.datum,'%d.%m.%Y'),' ',ap.bezeichnung) FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE ap.id='".$tmp[0]['auftragpositionid']."'"); - $produktion_komplett = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM produktion WHERE id='".$tmp[0]['produktion']."'"); - - $vonZeit = $tmp[0]['von']; - $bisZeit = $tmp[0]['bis']; - $datum = $tmp[0]['datum']; - } else { - if($this->app->Secure->GetPOST('datum')=='') { - $datumzeiterfassung = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); - if($this->app->erp->CheckDateValidate($datumzeiterfassung)){ - $datum = $this->app->String->Convert($this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'), '%3-%2-%1', '%1.%2.%3'); - } - else{ - $datum = date('d.m.Y', time()); - } - } - else { - $datum = $this->app->Secure->GetPOST('datum'); - $this->app->User->SetParameter('zeiterfassung_create_datumzeiterfassung',$this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1')); - } - - $aufgabe = $this->app->Secure->GetPOST('aufgabe'); - - - - $art= $this->app->Secure->GetPOST('art'); - - $vonZeit = $this->app->Secure->GetPOST('vonZeit'); - $bisZeit = $this->app->Secure->GetPOST('bisZeit'); - - $beschreibung = $this->app->Secure->GetPOST('beschreibung'); - $internerkommentar = $this->app->Secure->GetPOST('internerkommentar'); - $projekt = $this->app->Secure->GetPOST('projekt_manuell'); - $serviceauftrag = $this->app->Secure->GetPOST('serviceauftrag'); - $paketauswahl = $this->app->Secure->GetPOST('arbeitspaket'); - $abrechnen = $this->app->Secure->GetPOST('abrechnen'); - $abgerechnet = $this->app->Secure->GetPOST('abgerechnet'); - - $auftrag = $this->app->Secure->GetPOST('auftrag'); - $produktion = $this->app->Secure->GetPOST('produktion'); - $auftragpositionid = $this->app->Secure->GetPOST('auftragpositionid'); - - $mitarbeiter = $this->app->Secure->GetPOST('mitarbeiter'); - $kostenstelle = $this->app->Secure->GetPOST('kostenstelle'); - $verrechnungsart = $this->app->Secure->GetPOST('verrechnungsart'); - - - $ort = $this->app->Secure->GetPOST('ort'); - $gps = $this->app->Secure->GetPOST('gps'); - $adresse_abrechnung = $this->app->Secure->GetPOST('adresse_abrechnung'); - - $mitarbeiter_komplett = $mitarbeiter; - $kostenstelle_komplett = $kostenstellen; - $verrechnungsart_komplett = $verrechnungsart; - $auftrag_komplett = $verrechnungsart; - $produktion_komplett = $verrechnungsart; - - $projekt_komplett = $projekt; - $serviceauftrag_anzeige = $this->app->Secure->GetPOST('serviceauftrag'); - $adresse_abrechnung_komplett = $adresse_abrechnung; - - // Projekt grabben und notfalls wieder anzeigen - $paketauswahl = strstr($paketauswahl, ' ', true); - $paketauswahl = $this->app->DB->Select("SELECT id FROM arbeitspaket WHERE id='".$paketauswahl."' LIMIT 1"); - - - // if($paketauswahl > 0) - // $this->app->Tpl->Set(PROJEKTROW,'none'); - - if($mitarbeiter!=''){ - $this->app->Tpl->Set('ANDERERMITARBEITER','checked'); - } - else { - $this->app->Tpl->Set('DISPLAYANDERERMITARBEITER','none'); - } - } - $id = $id_old; - $datum_db = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1'); - $zeiteedit = $this->app->erp->ZeiterfassungAllowEdit($datum_db); - - $string = $mitarbeiter; - $string = trim ($string); - $mitarbeiter = substr ($string , 0 , strpos ($string , ' ')); - - $string = $kostenstelle; - $string = trim ($string); - $kostenstelle = substr ($string , 0 , strpos ($string , ' ')); - - $string = $verrechnungsart; - $string = trim ($string); - $verrechnungsart = substr ($string , 0 , strpos ($string , ' ')); - - $string = $auftrag; - $string = trim ($string); - $auftrag = substr ($string , 0 , strpos ($string , ' ')); - $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$auftrag' AND belegnr!='' LIMIT 1"); - - $string = $auftragpositionid; - $string = trim ($string); - $string = substr ($string , 0 , strpos ($string , ' ')); - $tmpauftrag = substr ($string , 0 , (strrpos ($string , '-'))); - $tmpauftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$tmpauftrag' AND belegnr!='' LIMIT 1"); - $auftragpositionsort = substr ($string , strrpos ($string , '-')+1,strlen($string)); - $auftragpositionid = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag='$tmpauftrag' AND sort='$auftragpositionsort' LIMIT 1"); - - $string = $produktion; - $string = trim ($string); - $produktion = substr ($string , 0 , (strpos ($string , ' '))); - $produktion = $this->app->DB->Select("SELECT id FROM produktion WHERE belegnr='$produktion' AND belegnr!='' LIMIT 1"); - - - - if($mitarbeiter!=''){ - $adr_id = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer='$mitarbeiter' LIMIT 1"); - } - - $this->app->YUI->AutoSaveUserParameter('projekt_manuell','teilprojekt_filter'); - $this->app->YUI->AutoSaveUserParameter('projekt_manuell2','teilprojekt_filter'); - $this->app->YUI->AutoComplete('arbeitspaket','arbeitspaket'); - $this->app->YUI->AutoComplete('arbeitspaket2', 'arbeitspaket'); - $this->app->YUI->AutoComplete('schnell_teilprojekt','arbeitspaket'); - $this->app->YUI->AutoComplete('adresse_abrechnung','kunde'); - $this->app->YUI->AutoComplete('adresse_abrechnung2', 'kunde'); - $this->app->YUI->AutoComplete('schnell_kunde','kunde'); - - $checkvorlage = $this->app->DB->Select("SELECT COUNT(id) FROM zeiterfassungvorlage WHERE ausblenden!=1"); - - if($checkvorlage >= 1) - { -// $this->app->YUI->AutoComplete('aufgabe','zeiterfassungvorlage'); -// $this->app->YUI->AutoComplete('aufgabe2','zeiterfassungvorlage'); - $this->app->YUI->AutoComplete('schnell_beschreibung','zeiterfassungvorlage'); - $this->app->YUI->AutoComplete('schnell_kundebeschreibung','zeiterfassungvorlage'); - } - - $this->app->YUI->AutoComplete('mitarbeiter','mitarbeiter'); - - $this->app->YUI->AutoComplete('kostenstelle','kostenstelle'); - $this->app->YUI->AutoComplete('verrechnungsart','verrechnungsart'); - - $this->app->YUI->AutoComplete('auftrag','auftrag'); - $this->app->YUI->AutoComplete('auftragpositionid','alle_auftrag_positionen'); - $this->app->YUI->AutoComplete('produktion','produktion'); - - if($id=='' && $this->app->Secure->GetPOST('vonZeit')=='') - { - if($datumzeiterfassung=='') { - $datumzeiterfassung = date('Y-m-d'); - } - $vonZeit = $this->app->DB->Select("SELECT DATE_FORMAT(MAX(bis),'%H:%i') FROM zeiterfassung - WHERE adresse='$adr_id' AND DATE_FORMAT(bis,'%Y-%m-%d')=DATE_FORMAT('$datumzeiterfassung','%Y-%m-%d')"); - - if($this->app->erp->ModulVorhanden('mitarbeiterzeiterfassung')) - { - if(!$vonZeit){ - $vonZeit = $this->app->DB->Select("SELECT date_format(standardstartzeit,'%H:%i') FROM mitarbeiterzeiterfassung_einstellungen WHERE adresse = '".$this->app->User->GetAdresse()."' ORDER by id DESC LIMIT 1"); - } - } - } - - - $this->app->Tpl->Set('VONZEIT',!empty($vonZeit)?$vonZeit:'09:00'); - - if($vonZeit==$bisZeit) { - $bisZeit=''; - } - $this->app->Tpl->Set('BISZEIT',$bisZeit?$bisZeit:''); - $serviceauftrag = $this->app->Secure->GetPOST('serviceauftrag'); - $serviceauftrag = reset(explode(' ',$serviceauftrag)); - $serviceauftrag = $this->app->DB->Select("SELECT id FROM serviceauftrag WHERE belegnr='".$serviceauftrag."' LIMIT 1"); - - // Projekt grabben und notfalls wieder anzeigen - $projekt_kennung = reset(explode(' ',$projekt)); - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$projekt_kennung."' LIMIT 1"); - - // Kunde - $adresse_abrechnung = strstr($adresse_abrechnung, ' ', true); - if($adresse_abrechnung!=''){ - $adresse_kunde = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$adresse_abrechnung."' LIMIT 1"); - } - else{ - $adresse_kunde = 'NULL'; - } - - - - if($abrechnen=='1'){ - $this->app->Tpl->Set('ABRECHNEN', 'checked'); - } - - if($abgerechnet=='1'){ - $this->app->Tpl->Set('ABGERECHNET', 'checked'); - } - - $this->app->Tpl->Set('DATUM', $datum); - $this->app->Tpl->Set('PROJEKT_MANUELL',$projekt_komplett); - $this->app->Tpl->Set('SERVICEAUFTRAG',$serviceauftrag_anzeige); - - $this->app->Tpl->Set('ADRESSE_ABRECHNUNG',$adresse_abrechnung_komplett); - $this->app->Tpl->Set('KOSTENSTELLE',$kostenstelle_komplett); - $this->app->Tpl->Set('VERRECHNUNGSART',$verrechnungsart_komplett); - - $this->app->Tpl->Set('AUFTRAG',$auftrag_komplett); - $this->app->Tpl->Set('AUFTRAGPOSITIONID',$auftragpositionid_komplett); - $this->app->Tpl->Set('PRODUKTION',$produktion_komplett); - - $this->app->Tpl->Set('AUFGABE',str_replace('"', '"', $aufgabe)); - $this->app->Tpl->Set('MITARBEITER',$mitarbeiter_komplett); - $this->app->Tpl->Set('ORT',$ort); - $this->app->Tpl->Set('GPS',$gps); - $this->app->Tpl->Set('BESCHREIBUNG',str_replace('\r\n',"\r\n",$beschreibung)); - $this->app->Tpl->Set('INTERNERKOMMENTAR',str_replace('\r\n',"\r\n",$internerkommentar)); - - if($gps!='') - { - $tmpgps = explode(';',$gps); - $this->app->Tpl->Set('GPSIMAGE',""); - } else { - $this->app->Tpl->Set('GPSBUTTON',''); - } - $this->app->Tpl->Set('ART', $this->app->erp->GetSelect($this->app->erp->GetZeiterfassungArt(),$art)); - - $pakete = $this->app->DB->SelectArr('SELECT id, aufgabe,art,projekt FROM arbeitspaket WHERE (adresse = '.$adr_id.' or (art="teilprojekt" '.$this->app->erp->ProjektRechte("projekt").')) AND abgenommen!=1 AND geloescht!=1 AND status!=\'abgeschlossen\' order by projekt'); - /* - $select = ''; - for($i =0; $iapp->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$myArr["projekt"]."' LIMIT 1"); - if($paketauswahl==$myArr["id"])$checked=" selected"; else $checked =""; - $select = $select.''; - } - */ - if($paketauswahl > 0) { - $tmp = $this->app->DB->Select("SELECT CONCAT(ap.id,' ',p.abkuerzung,' ',ap.aufgabe) as name2 FROM arbeitspaket ap LEFT JOIN projekt p ON p.id=ap.projekt WHERE ap.id='$paketauswahl' LIMIT 1"); - $this->app->Tpl->Set('PAKETAUSWAHL', $tmp); - } - - $checkvon = str_replace(':','',$this->app->Secure->GetPOST('vonZeit')); - $checkbis = str_replace(':','',$this->app->Secure->GetPOST('bisZeit')); - $fehlerangezeigt = false; - - if($this->app->Secure->GetPOST('ok')){ - $vonZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('vonZeit').':00'; - $bisZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('bisZeit').':00'; - - - - if($paketauswahl == 0){ - if(($aufgabe!='') && ($this->app->Secure->GetPOST('vonZeit')!='') && ($this->app->Secure->GetPOST('bisZeit')!='') && ($datum!='') && ($checkbis > $checkvon) && $zeiteedit && !$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")){ - { - // Hier fehlt abrechnen und adresse_abrechnung - $zeitid = $this->app->erp->AddArbeitszeit($adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, - $projekt, 0,$art,$adresse_kunde,$abrechnen,$verrechnungsart,$kostenstelle,$abgrechnet,$gps,0,$internerkommentar,$auftrag,$produktion,"",$auftragpositionid); - $this->app->erp->RunHook('zeiterfassung_create_guihook1',1,$zeitid); - - if($serviceauftrag){ - $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$zeitid' LIMIT 1"); - } - $this->app->Tpl->Set('MESSAGE',"
    Zeit erfolgreich gebucht!
    "); - $msg = $this->app->erp->base64_url_encode("
    Zeit erfolgreich gebucht!
    "); - header("Location: index.php?module=zeiterfassung&action=create&msg=$msg#tabs-1"); - exit; - } - }else{ - if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) - { - $msg = $this->app->erp->base64_url_encode('
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); - $this->app->Tpl->Set('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); - } - elseif(!$zeiteedit) - { - $fehlerangezeigt = true; - $this->app->Tpl->Set('MESSAGE','
    Fehler! Das Anlegen/Editieren von Zeiten älter als '.$this->app->erp->Firmendaten('zeiterfassung_schliessentage').' Tagen ist nicht erlaubt!
    '); - }elseif($checkbis <= $checkvon){ - $this->app->Tpl->Set('MESSAGE', '
    Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!
    '); - } - else{ - $this->app->Tpl->Set('MESSAGE', '
    Fehler! Die Felder "Kurze Beschreibung", am, von, bis müssen korrekt ausgefüllt sein!
    '); - } - // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); - } - }else{ - if(($this->app->Secure->GetPOST('vonZeit')!='') && ($this->app->Secure->GetPOST('bisZeit')!='') && ($datum!='') && $aufgabe!='' && ($checkbis > $checkvon) && $zeiteedit && !$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")){ - //Paketauswahl buchen ... - $projekt = $this->app->DB->Select("SELECT projekt FROM arbeitspaket WHERE id='$paketauswahl' LIMIT 1"); - if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) - { - $this->app->Tpl->Set('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); - }else{ - $kunde = $this->app->DB->Select("SELECT kunde FROM projekt WHERE id='$projekt' LIMIT 1"); - if($adresse_kunde=='') { - $adresse_kunde=$kunde; - } - - - $zeitid = $this->app->erp->AddArbeitszeit($adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, - $projekt, $paketauswahl,$art,$adresse_kunde,$abrechnen,$verrechnungsart,$kostenstelle,$abgerechnet,$gps,0,$internerkommentar,$auftrag,$produktion); - - $this->app->erp->RunHook('zeiterfassung_create_guihook1',1,$zeitid); - - if($serviceauftrag){ - $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$zeitid' LIMIT 1"); - } - $msg = $this->app->erp->base64_url_encode('
    Zeit erfolgreich gebucht!
    '); - header("Location: index.php?module=zeiterfassung&action=create&msg=$msg#tabs-1"); - exit; - } - }else{ - if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) - { - $msg = $this->app->erp->base64_url_encode('
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); - $this->app->Tpl->Add('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); - }elseif(!$zeiteedit) - { - $fehlerangezeigt = true; - $this->app->Tpl->Set('MESSAGE','
    Fehler! Das Anlegen/Editieren von Zeiten kleiner '.$this->app->erp->Firmendaten('zeiterfassung_schliessentage').' Tagen ist nicht erlaubt!
    '); - }elseif($checkbis <= $checkvon){ - $this->app->Tpl->Set('MESSAGE', '
    Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!
    '); - } - else{ - $this->app->Tpl->Set('MESSAGE', '
    Fehler! Die Felder "Kurze Beschreibung", am, von, bis müssen korrekt ausgefüllt sein!
    '); - } - // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); - } - } - - if($id==''){ - $vonZeit = $this->app->DB->Select("SELECT DATE_FORMAT(MAX(bis),'%H:%i') FROM zeiterfassung WHERE adresse='$adr_id' AND DATE_FORMAT(bis,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d')"); - } - - } else { - if($this->app->Secure->GetPOST('update')){ - if(($aufgabe!='') && ($this->app->Secure->GetPOST('vonZeit')!='') && ($this->app->Secure->GetPOST('bisZeit')!='') && ($datum!='') && ($checkbis > $checkvon) && $zeiteedit && !$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")){ - // echo "update"; - //echo $datum; - $vonZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('vonZeit').':00'; - $bisZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('bisZeit').':00'; - - if($paketauswahl == 0) - { - $this->app->erp->UpdateArbeitszeit($id,$adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, - $projekt, $paketauswahl,$art,$adresse_kunde,$abrechnen,$verrechnungsart,$kostenstelle,$abgerechnet,$gps,$internerkommentar,$auftrag,$produktion,"",$auftragpositionid); - - if($serviceauftrag){ - $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$id' LIMIT 1"); - } - } - else - { - $this->app->erp->UpdateArbeitszeit($id,$adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, - $projekt, $paketauswahl,$art,'',$abrechnen,$verrechnungsart,$kostenstelle,$gps,$internerkommentar,$auftrag,$produktion,'',$auftragpositionid); - - if($serviceauftrag){ - $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$id' LIMIT 1"); - } - } - $this->app->erp->RunHook('zeiterfassung_create_guihook1'); - - - $back = $this->app->Secure->GetGET('back'); - if($back=='zeiterfassung'){ - header('Location: index.php?module=zeiterfassung&action=list'); - } - else if($back=='zeiterfassunguser'){ - header('Location: index.php?module=zeiterfassung&action=listuser'); - } - else if($back=='service'){ - header('Location: index.php?module=service&action=list'); - } - else if($back=='aufgabe'){ - header('Location: index.php?module=aufgaben&action=list'); - } - else if($back=='zeiterfassungmitarbeiter') - { - $sid = $this->app->Secure->GetGET('sid'); - header("Location: index.php?module=adresse&action=zeiterfassung&id=$sid"); - } - - - else if ($back=='projekt') - { - $back_id = $this->app->Secure->GetGET('back_id'); - $back_sid = $this->app->Secure->GetGET('back_sid'); - header("Location: index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"); - } - else if ($back=='lohnabrechnung') - { - header('Location: index.php?module=lohnabrechnung&action=list'); - } - else if ($back=='adresse') - { - $back_id = $this->app->Secure->GetGET('back_id'); - header("Location: index.php?module=adresse&action=abrechnungzeit&id=$back_id"); - } - else{ - header('Location: index.php?module=zeiterfassung&action=create#tabs-1'); - } - exit; - - } else { - if(!$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) - { - $this->app->Tpl->Add('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); - }elseif(!$zeiteedit) - { - $fehlerangezeigt = true; - $this->app->Tpl->Set('MESSAGE','
    Fehler! Das Anlegen/Editieren von Zeiten kleiner '.$this->app->erp->Firmendaten('zeiterfassung_schliessentage').' Tagen ist nicht erlaubt!
    '); - }elseif($checkbis <= $checkvon){ - $this->app->Tpl->Set('MESSAGE', '
    Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!
    '); - } - else{ - $this->app->Tpl->Set('MESSAGE', '
    Fehler! Die Felder "Kurze Beschreibung", am, von, bis müssen ausgefüllt sein!
    '); - } - // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); - } - - } - } - - //tabelle mit gebuchten tätigkeiten heute - if($id=='') - { - $table = new EasyTable($this->app); - - $table->Query("SELECT DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR')) AS Datum, - z.aufgabe as Taetigkeit, - - (SELECT name FROM adresse adr WHERE adr.id=z.adresse) as mitarbeiter, - DATE_FORMAT(z.von,'%H:%i') as von, DATE_FORMAT(z.bis,'%H:%i') as bis, - TIMEDIFF(z.bis, z.von) AS Dauer, - - p.abkuerzung as Projekt, - ap.aufgabe as 'Unterprojekt/Arbeitspaket', - - - IF(DATEDIFF(CURDATE(), z.bis)<= 5, - CONCAT('
    Stornieren | Edit'), '') - FROM zeiterfassung z LEFT JOIN projekt p ON p.id=z.projekt LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id - WHERE z.gebucht_von_user=".$this->app->User->GetID()." AND DATE_FORMAT(z.bis,'%Y-%m-%d')= DATE_FORMAT(NOW(),'%Y-%m-%d') - ORDER BY 1 DESC,2 DESC, 3 DESC - "); - $table->DisplayNew('TABELLE','Aktion','noAction'); - $this->app->Tpl->Set('BUTTON',""); - } else { - - $back = $this->app->Secure->GetGET('back'); - - if($back=='zeiterfassung'){ - $link = 'index.php?module=zeiterfassung&action=list'; - } - else if($back=='service'){ - $link = 'index.php?module=service&action=list'; - } - else if($back=='aufgabe'){ - $link = 'index.php?module=aufgaben&action=list'; - } - else if ($back=='projekt') - { - $back_id = $this->app->Secure->GetGET('back_id'); - $back_sid = $this->app->Secure->GetGET('back_sid'); - $link = "index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"; - } - else if ($back=="adresse") - { - $back_id = $this->app->Secure->GetGET("back_id"); - $link = "index.php?module=adresse&action=abrechnungzeit&id=$back_id"; - } - else{ - $link = 'index.php?module=zeiterfassung&action=create#tabs-1'; - } - // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); - if($zeiteedit && !$projektabgeschlossen) - { - $this->app->Tpl->Set('BUTTON'," -   -   - "); - }else{ - if($projektabgeschlossen) - { - $this->app->Tpl->Add('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); - }else{ - if(!$fehlerangezeigt)$this->app->Tpl->Add('MESSAGE',"
    Das Anlegen/Editieren von Zeiten kleiner ".$this->app->erp->Firmendaten('zeiterfassung_schliessentage')." Tagen ist nicht erlaubt!
    "); - } - $this->app->Tpl->Set('BUTTON', - ''." "); - } - } - - - $this->app->YUI->DatePicker('datum'); - //$this->app->YUI->DatePicker('teilprojekt_datum'); - //$this->app->YUI->DatePicker('kunde_datum'); - $this->app->YUI->TimePicker('vonZeit'); - $this->app->YUI->TimePicker('bisZeit'); - - - - if($this->app->erp->Firmendaten('zeiterfassung_anderemitarbeiter')!=1) - { - $this->app->Tpl->Set('STARTANDEREERLAUBEN',''); - } - - if($this->app->erp->Firmendaten('zeiterfassung_erweitert')!=1) - { - $this->app->Tpl->Set('STARTERWEITERT',''); - } - - if($this->app->erp->Firmendaten('zeiterfassung_kommentar')!=1) - { - $this->app->Tpl->Set('STARTKOMMENTAR',''); - } - - if($this->app->erp->Firmendaten('zeiterfassung_ort')!=1) - { - $this->app->Tpl->Set('STARTORT',''); - } - - $this->app->YUI->AutoSaveUserParameter('projekt_manuell','teilprojekt_filter'); - - if($this->app->erp->ModulVorhanden('serviceauftrag')) - { - $this->app->YUI->AutoComplete('serviceauftrag','serviceauftrag'); - }else{ - $this->app->Tpl->Set('VORSERVICEAUFTRAG',''); - } - - $this->ZeiteerfassungEigeneUebersicht(); - - $this->app->erp->RunHook('zeiterfassung_create_guihook1'); - - $this->app->YUI->AutoSaveUserParameter('zeiterfassung_buchen_termine','zeiterfassung_buchen_termine',"$('#calendar').fullCalendar('refetchEvents');"); - $this->app->YUI->AutoSaveUserParameter('zeiterfassung_buchen_stechuhr','zeiterfassung_buchen_stechuhr',"$('#calendar').fullCalendar('refetchEvents');"); - if($this->app->User->GetParameter('zeiterfassung_buchen_termine')=='1') { - $checked='checked'; - } else { - $checked=''; - } - $this->app->Tpl->Set('CHECKEDZEITERFASSUNGBUCHENTERMINE',$checked); - - - if($this->app->User->GetParameter('zeiterfassung_buchen_stechuhr')=='1') { - $checked='checked'; - } else { - $checked=''; - } - $this->app->Tpl->Set('CHECKEDZEITERFASSUNGBUCHENSTECHUHR',$checked); - - - if($this->app->User->GetParameter('zeiterfassung_buchen_formularansicht')=='1') - { - $this->app->Tpl->Set('FORMULARANSICHT',''); - $this->app->Tpl->Set('ZEITERFASSUNGTABS','
  • {|Formular|}
  • {|Kalenderansicht|}
  • '); - } else { - $this->app->Tpl->Set('FORMULARANSICHT',''); - $this->app->Tpl->Set('ZEITERFASSUNGTABS','
  • {|Kalenderansicht|}
  • {|Formular|}
  • '); - } - - //$this->app->Tpl->Set(TABTEXT,'Zeiterfassung'); - $this->app->Tpl->Parse('TAB1', 'zeiterfassung_manuell.tpl'); - $this->app->Tpl->Parse('PAGE', 'zeiterfassung_buchen.tpl'); - } - - - - function ZeiterfassungOffen($adr_id) - { - $this->app->Tpl->Set('SUBSUBHEADING', 'offene Arbeitspakete'); - $this->app->Tpl->Set('INHALT',''); - - $table = new EasyTable($this->app); - $table->Query("SELECT DISTINCT a.aufgabe, a.zeit_geplant as vorgabe, - (SELECT FORMAT(SUM(TIMEDIFF(bis,von)/10000),2) FROM zeiterfassung WHERE arbeitspaket=a.id) as Gebucht, - DATE_FORMAT(a.abgabedatum,'%d.%m.%y') as bis, a.id - FROM arbeitspaket a LEFT JOIN zeiterfassung z ON z.arbeitspaket=a.id - WHERE a.adresse='$adr_id' AND (a.status = 'gestartet' OR a.status = 'besprochen')"); - - $table->DisplayNew('INHALT','[DETAILS%value%]'); - $this->app->YUI->Dialog($table,'DETAILS','Arbeitspaket','aufgabe','arbeitspaket_details.tpl',$this,'ArbeitspaketReadDetails'); - - $this->app->Tpl->Parse('ARBEITSPAKETE','rahmen70.tpl'); - - } - - function ZeiterfassungAbgeschlossen($adr_id) - { - - $monat = $this->app->DB->Select("SELECT DATE_FORMAT(NOW(),'%M')"); - $this->app->Tpl->Set('SUBSUBHEADING', "Zeiterfassung ($monat)"); - $this->app->Tpl->Set('INHALT',''); - $table = new EasyTable($this->app); - - // SELECT SUM(hour(z.bis) - hour(z.von)) AS dauer, a.aufgabe, a.zeit_geplant FROM zeiterfassung AS z, arbeitspakete AS a WHERE z.adresse = 2 AND z.adresse = a.adresse AND z.arbeitspaket = a.id AND a.id = 2 AND (status = "gestartet" OR status = "besprochen") GROUP BY aufgabe - - $table->Query("SELECT DATE_FORMAT(bis, GET_FORMAT(DATE,'EUR')) AS Datum, DATE_FORMAT(von,'%H:%i') as von, DATE_FORMAT(bis,'%H:%i') as bis, - TIMEDIFF(bis, von) AS Dauer, - aufgabe as Taetigkeit, - IF(DATEDIFF(CURDATE(), bis)<= 5, - CONCAT('Stornieren | Edit'), '') - FROM zeiterfassung - WHERE adresse=$adr_id - AND ( - MONTH(bis) = MONTH(NOW()) OR DATEDIFF(CURDATE(), bis)<= 5 - ) - ORDER BY 1 DESC,2 DESC - "); - - $table->DisplayNew('INHALT','Aktion','noAction'); - - - // $this->app->Tpl->Set(INHALT,"Abgschlossen"); - $this->app->Tpl->Parse('ZEITERFASSUNGEN','rahmen70.tpl'); - } - - function AufgabenOffen($adr_id){ - $this->app->Tpl->Set('SUBHEADING', 'offene Aufgaben'); - $this->app->Tpl->Set('INHALT',''); - - // selektierte Aufgabe Updaten - if($this->app->Secure->GetPOST('ok') != ''){ - $aufg_id = $this->app->Secure->GetPOST('aufg_id'); - foreach($aufg_id as $myId){ - $this->app->DB->Update("UPDATE aufgabe SET abgeschlossen_am = CURDATE(), abgeschlossen='1' WHERE id=$myId LIMIT 1"); - // Kopie nach aufgabe_erledigt - $this->app->DB->Insert("INSERT INTO aufgabe_erledigt (adresse, aufgabe, abgeschlossen_am) - VALUES ($adr_id, $myId, CURDATE())"); - } - } - - $table = new EasyTable($this->app); - // Hole einmalige und wiederholende Aufgaben - // bei wiederholenden Aufgaben werden nur die vom heutigen Tag und nach Schema startdatum + (intervall*n) geholt - $table->Query("SELECT - CONCAT(\"\") AS Ok, - IF(intervall_tage=0, DATE_FORMAT(startdatum, '%d.%m.%Y'), - DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL MOD(DATEDIFF(CURDATE(),DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day),'%d.%m.%Y')) AS Datum, - IF(intervall_tage=0, DATEDIFF(CURDATE(), startdatum) ,MOD(DATEDIFF(CURDATE(), startdatum),intervall_tage)) AS Verzug, - IF(intervall_tage=0, 'einmalig', intervall_tage) AS Intervall, - aufgabe, beschreibung - FROM aufgabe - WHERE - (abgeschlossen=0 AND (adresse=$adr_id OR adresse=0)) - OR - (DATE_SUB(CURDATE(), INTERVAL MOD(DATEDIFF(CURDATE(),DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day)=CURDATE() - AND DATE_SUB(CURDATE(), INTERVAL MOD(DATEDIFF(CURDATE(),DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day) != abgeschlossen_am - AND intervall_tage>0 AND (adresse=$adr_id OR adresse=0)) - ORDER BY Datum"); - - $table->DisplayNew('INHALT','Beschreibung','noAction'); - - $this->app->Tpl->Parse('AUFGABEN','rahmen_submit_100.tpl'); - } - - function ZeiterfassungArchiv($adr_id) - { - $this->app->Tpl->Set('SUBHEADING', 'Archiv'); - $this->app->Tpl->Set('INHALT',''); - - $table = new EasyTable($this->app); - $table->Query("SELECT - MONTHNAME(bis) AS Monat, - YEAR(bis) Jahr, - CONCAT(ROUND(SUM(TIME_TO_SEC(TIMEDIFF(bis,von)))/3600,1),' Stunden') AS Arbeitszeit, - CONCAT('Details') - FROM `zeiterfassung` - WHERE adresse=$adr_id - GROUP BY MONTHNAME(bis) - ORDER BY bis DESC"); - - $table->DisplayNew('INHALT','Aktion', 'noAction'); - - $this->app->Tpl->Parse('ARCHIV','rahmen100.tpl'); - } - - public function ZeiterfassungDetails() - { - $monat = $this->app->Secure->GetGET('month'); - $jahr = $this->app->Secure->GetGET('year'); - $frame = $this->app->Secure->GetGET('frame'); - - if($frame=='false') - { - // hier nur fenster größe anpassen - $this->app->YUI->IframeDialog(650,730); - } else { - - $id = $this->app->User->GetId(); - if($id!=''){ - $adr_id = $this->app->DB->Select("SELECT adresse FROM user WHERE id=$id"); - } - - $monatsname = $this->app->DB->Select("SELECT MONTHNAME('$jahr-$monat-01')"); - - $this->app->Tpl->Set('SUBHEADING', "Arbeitszeiten für $monatsname"); - $this->app->Tpl->Set('INHALT',''); - - - // $this->app->Tpl->Add(KURZUEBERSCHRIFT,"Zeiterfassung"); - - //$this->app->Tpl->Add(TABS, - // "
  • Zurück zur Übersicht
  • "); - - $table = new EasyTable($this->app); - $table->Query("SELECT - DATE_FORMAT(bis,'%d.%m.%y') as Datum, - ROUND((TIME_TO_SEC(TIMEDIFF(bis,von))/3600)) AS Dauer, - buchungsart, - aufgabe - FROM zeiterfassung - WHERE adresse=$adr_id - AND MONTH(bis)=$monat - AND YEAR(bis)=$jahr"); - - $table->DisplayNew('INHALT','Tätigkeit', 'noAction'); - //$this->app->Tpl->Set(AKTIV_TAB5,'selected'); - $this->app->Tpl->Parse('PAGE','rahmen.tpl'); - $this->app->BuildNavigation=false; - } - } - - public function ZeiterfassungDokuArbeitszeit() - { - $pdf = new DokuArbeitszeit(); - $filename = $tmp.date('Ymd').'_'.$kundennummer.'_'.$name.'_DOKUARBEITSZEIT.pdf'; - $pdf->Output($filename,'D'); - } -} +app->Tpl->Add('JQUERYREADY', "$('#offen').click( function() { fnFilterColumn1( 0 ); } );"); + + //$this->app->Tpl->Add('JQUERYREADY',"$('#abrechnung').click( function() { fnFilterColumn2( 0 ); } );"); + for ($r = 1;$r < 2;$r++) { + $this->app->Tpl->Add('JAVASCRIPT', ' + function fnFilterColumn' . $r . ' ( i ) + { + if(oMoreData' . $r . $name . '==1) + oMoreData' . $r . $name . ' = 0; + else + oMoreData' . $r . $name . ' = 1; + + $(\'#' . $name . '\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } + + // ENDE EXTRA checkboxen + + // headings + + + //$heading = array('','A','Datum','Von','Bis','Dauer','Mitarbeiter','Art','Tätigkeit','Projekt','Menü'); + + $heading = array('', 'Datum', 'Von', 'Bis', 'Dauer', 'Mitarbeiter','Art', 'Tätigkeit', 'Abr.','Projekt', 'Menü'); + + //$width = array('1%','1%','1%','1%','1%','5%','20%','40%','10%','1%'); + $width = array('1%', '1%', '1%', '1%', '5%', '20%','5%', '40%', '5%','5%', '1%'); + + //$findcols = array('open','Auswahl','z.von','von','bis','Dauer','Mitarbeiter','id'); + $findcols = array('open', 'z.von', 'von', 'bis', 'Dauer', 'Mitarbeiter','z.art','z.aufgabe','z.abrechnen','p.abkuerzung','id'); + $searchsql = array('z.id', 'z.bis', 'z.aufgabe', 'a.name','z.art', "if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
    ',z.aufgabe),z.aufgabe)", "p.abkuerzung"); + $defaultorder = 2; + $defaultorderdesc = 1; + $menu = '
    '. + "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . + "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">" . + " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . + '
    '; + + //CONCAT('') as auswahl, + + //$menucol=9; + + $menucol = 10; + $alignright = array(5); + $sumcol = 5; + + //CONCAT(LPAD(HOUR(TIMEDIFF(z.bis, z.von)),2,'0'),':',LPAD(MINUTE(TIMEDIFF(z.bis, z.von)),2,'0')) AS Dauer, + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, + 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, + DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR')) AS Datum, + DATE_FORMAT(z.von,'%H:%i') as von, DATE_FORMAT(z.bis,'%H:%i') as bis, + format((HOUR(TIMEDIFF(z.bis, z.von))) + MINUTE(TIMEDIFF(z.bis, z.von))/60,2) AS Dauer, + a.name as Mitarbeiter,z.art, + if(z.art='Pause','Pause',if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
    ',z.aufgabe),z.aufgabe)) as Taetigkeit, + if(z.abrechnen > 0,'(A)',''), + p.abkuerzung, + z.id + FROM zeiterfassung z + LEFT JOIN adresse a ON a.id=z.adresse + LEFT JOIN adresse b ON b.id=z.adresse_abrechnung + LEFT JOIN projekt p ON p.id=z.projekt + LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id"; + + // Fester filter + + // START EXTRA more + + $more_data1 = $this->app->Secure->GetGET('more_data1'); + + if ($more_data1 == 1) { + $subwhere[] = " z.abrechnen='1' AND z.abgerechnet!='1' "; + } + + // $more_data2 = $this->app->Secure->GetGET("more_data2"); if($more_data2==1) $subwhere[] = " a.datum=CURDATE() AND a.status='freigegeben'"; + + $von = $this->app->User->GetParameter('zeiterfassung_listuser_von'); + if($von!='') { + $subwhere[] = " DATE_FORMAT(z.von,'%Y-%m-%d') >= '".$this->app->String->Convert($von,'%3.%2.%1','%1-%2-%3')."'"; + } + + $bis = $this->app->User->GetParameter('zeiterfassung_listuser_bis'); + if($bis!='') { + $subwhere[] = " DATE_FORMAT(z.bis,'%Y-%m-%d') <= '".$this->app->String->Convert($bis,'%3.%2.%1','%1-%2-%3')."'"; + } + + $tmp = ''; + $csubwhere = !empty($subwhere)?count($subwhere):0; + for ($j = 0;$j < $csubwhere;$j++) { + $tmp.= ' AND ' . $subwhere[$j]; + } + + $where = " z.id!='' AND z.adresse='" . $this->app->User->GetAdresse() . "' $tmp"; + $count = "SELECT COUNT(z.id) FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse + LEFT JOIN adresse b ON b.id=z.adresse_abrechnung + LEFT JOIN projekt p ON p.id=z.projekt + LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id WHERE $where "; + $moreinfo = true; + break; + case 'zeiterfassung': + $allowed['zeiterfassung'] = array('list'); + + + // START EXTRA checkboxen + $this->app->Tpl->Add('JQUERYREADY', "$('#offen').click( function() { fnFilterColumn10( 0 ); } );"); + for ($r = 10;$r < 12;$r++) { + $this->app->Tpl->Add('JAVASCRIPT', ' + function fnFilterColumn' . $r . ' ( i ) + { + if(oMoreData' . $r . $name . '==1) + oMoreData' . $r . $name . ' = 0; + else + oMoreData' . $r . $name . ' = 1; + + $(\'#' . $name . '\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } + + // ENDE EXTRA checkboxen + + // headings + + + //$heading = array('','A','Datum','Von','Bis','Dauer','Mitarbeiter','Art','Aufabe','Projekt','Menü'); + + $heading = array('', 'Datum', 'Von', 'Bis', 'Dauer', 'Mitarbeiter','Art', 'Aufgabe', 'Abr.','Projekt', 'Menü'); + + //$width = array('1%','1%','1%','1%','1%','5%','20%','40%','10%','1%'); + $width = array('1%', '1%', '1%', '1%', '5%', '20%','5%', '40%','5%','5%', '1%'); + + //$findcols = array('open','Auswahl','z.von','von','bis','Dauer','Mitarbeiter','id'); + $findcols = array('open', "z.von", 'z.von', 'z.bis', '(HOUR(TIMEDIFF(z.bis, z.von))) + MINUTE(TIMEDIFF(z.bis, z.von))/60', 'a.name','z.art',"if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
    ',z.aufgabe),z.aufgabe)", "if(z.abrechnen > 0,'(A)','')",'p.abkuerzung', 'z.id'); + $searchsql = array('z.id', 'z.von', 'z.bis', $this->app->erp->FormatPreis('(HOUR(TIMEDIFF(z.bis, z.von))) + MINUTE(TIMEDIFF(z.bis, z.von))/60',2), 'a.name','z.art', 'a.name', 'z.art', "if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
    ',z.aufgabe),z.aufgabe)", "if(z.abrechnen > 0,'(A)','')", 'p.abkuerzung', "DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR'))",'b.name','b.kundennummer', ); + $defaultorder = 2; + $defaultorderdesc = 1; + $menu = "
    app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " 
    "; + + //CONCAT('') as auswahl, + + $datecols = array(1); + $numbercols = array(4); + + //$menucol=9; + $sumcol = 5; + $alignright = array(5); + $menucol = 10; + //CONCAT(LPAD(HOUR(TIMEDIFF(z.bis, z.von)),2,'0'),':',LPAD(MINUTE(TIMEDIFF(z.bis, z.von)),2,'0')) AS Dauer, + // SQL statement + $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, + 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, + + CONCAT('',DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR'))) AS Datum, + DATE_FORMAT(z.von,'%H:%i') as von, DATE_FORMAT(z.bis,'%H:%i') as bis, + round(HOUR(TIMEDIFF(z.bis, z.von)) + MINUTE(TIMEDIFF(z.bis, z.von))/60,2) AS Dauer, + + a.name as Mitarbeiter,z.art, + if(z.adresse_abrechnung!=0,CONCAT('Kunde: ',b.name,' (',b.kundennummer,')
    ',z.aufgabe),z.aufgabe) as Taetigkeit, + if(z.abrechnen > 0,'(A)',''), + p.abkuerzung, + z.id + + FROM zeiterfassung z + LEFT JOIN adresse a ON a.id=z.adresse + LEFT JOIN adresse b ON b.id=z.adresse_abrechnung + LEFT JOIN projekt p ON p.id=z.projekt + LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id"; + + // Fester filter + + // START EXTRA more + + $fvon = $this->app->YUI->TableSearchFilter($name, 2, 'von', $this->app->User->GetParameter('zeiterfassung_von')); + $fbis = $this->app->YUI->TableSearchFilter($name, 3, 'bis', $this->app->User->GetParameter('zeiterfassung_bis')); + $fprojekt = reset(explode(' ',trim($this->app->YUI->TableSearchFilter($name, 4, 'projekt', $this->app->User->GetParameter('zeiterfassung_projekt'))))); + $fmitarbeiter = reset(explode(' ',trim($this->app->YUI->TableSearchFilter($name, 5, 'mitarbeiter', $this->app->User->GetParameter('zeiterfassung_projekt'))))); + if($fvon) + { + if(strpos($fvon, '.') !== false){ + $fvon = $this->app->String->Convert($fvon, '%1.%2.%3', '%3-%2-%1'); + } + } + if($fbis) + { + if(strpos($fbis, '.') !== false){ + $fbis = $this->app->String->Convert($fbis, '%1.%2.%3', '%3-%2-%1'); + } + } + if($fprojekt){ + $fprojekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$fprojekt' AND geloescht != 1 LIMIT 1"); + } + if($fmitarbeiter){ + $fmitarbeiter = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer = '$fmitarbeiter' AND geloescht != 1 LIMIT 1"); + } + + $more_data1 = $this->app->Secure->GetGET('more_data10'); + + if ($more_data1 == 1) { + $subwhere[] = " z.abrechnen='1' AND z.abgerechnet!='1' "; + } + if ($fprojekt){ + $subwhere[] = " z.projekt = '$fprojekt' "; + } + if ($fmitarbeiter){ + $subwhere[] = " z.adresse = '$fmitarbeiter' "; + } + if ($fvon){ + $subwhere[] = " DATE_FORMAT(z.bis,'%Y-%m-%d') >= '$fvon' "; + } + if ($fbis){ + $subwhere[] = " DATE_FORMAT(z.von,'%Y-%m-%d') <= '$fbis' "; + } + $tmp = ''; + $csubwhere = !empty($subwhere)?count($subwhere):0; + for ($j = 0;$j < $csubwhere;$j++) { + $tmp.= ' AND ' . $subwhere[$j]; + } + $where = " z.id!='' $tmp"; + + // gesamt anzahl + $count = 'SELECT COUNT(z.id) FROM zeiterfassung z'; + $moreinfo = true; + + break; + case 'zeiterfassungkundenoffen': + $allowed['zeiterfassung'] = array('list'); + + + $this->app->Tpl->Add('JQUERYREADY',"$('#kunden').click( function() { fnFilterColumn1( 0 ); } );"); + + + + for($r=1;$r<2;$r++) + { + $this->app->Tpl->Add('JAVASCRIPT',' + function fnFilterColumn'.$r.' ( i ) + { + if(oMoreData'.$r.$name.'==1) + oMoreData'.$r.$name.' = 0; + else + oMoreData'.$r.$name.' = 1; + + $(\'#'.$name.'\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } + + + $heading = array('Kunde', 'Kundennr', 'Offen Abr.', 'Offen ohne Abr.','Menü'); + $alignright = array(3,4); + + $width = array('10%', '5%', '15%', '15%','1%'); + + $findcols = array('a.name', 'a.kundennummer', '(SELECT SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von))) FROM zeiterfassung z2 WHERE z2.adresse_abrechnung=a.id AND z2.abrechnen=1 AND z2.abgerechnet!=1)','(SELECT SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von))) FROM zeiterfassung z2 WHERE z2.adresse_abrechnung=a.id AND z2.abrechnen!=1 AND z2.abgerechnet!=1)', 'z.id'); + $searchsql = array('a.name','a.kundennummer'); + $defaultorder = 4; + $defaultorderdesc = 1; + $menu = "
    app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . ' 
    '; + + $numbercols = array(3,4); + + if($this->app->Secure->GetGET('more_data1')=='1') + { + $subwhere = ' AND z.aufgabe_id <=0 AND z.auftrag <=0 AND z.produktion <=0 AND z.arbeitsanweisung <=0 AND z.projekt <=0 '; + $subwhere2 = ' AND z2.aufgabe_id <=0 AND z2.auftrag <=0 AND z2.produktion <=0 AND z2.arbeitsanweisung <=0 AND z2.projekt <=0 '; + }else{ + $subwhere = ''; + $subwhere2 = ''; + } + + + $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, + a.name,a.kundennummer, + (SELECT ".$this->app->erp->FormatMenge("SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von)))/3600")." FROM zeiterfassung z2 LEFT JOIN projekt p2 ON z2.projekt = p2.id WHERE (z2.adresse_abrechnung = a.id OR p2.kunde = a.id) AND z2.abrechnen=1 AND z2.abgerechnet!=1 $subwhere2) as offen, + (SELECT ".$this->app->erp->FormatMenge("SUM(TIME_TO_SEC(TIMEDIFF(z2.bis, z2.von)))/3600")." FROM zeiterfassung z2 LEFT JOIN projekt p2 ON z2.projekt = p2.id WHERE (z2.adresse_abrechnung = a.id OR p2.kunde = a.id) AND z2.abrechnen!=1 AND z2.abgerechnet!=1 $subwhere2) as offen2, + a.id + FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse_abrechnung "; + $where = ' z.abgerechnet!=1 AND a.id > 0 '.$subwhere; + $groupby = ' GROUP by z.adresse_abrechnung '; + + // gesamt anzahl + $count = 'SELECT COUNT(distinct z.adresse_abrechnung) FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse_abrechnung WHERE z.abgerechnet!=1 AND a.id > 0 '.$subwhere; + break; + } + $erg = []; + foreach($erlaubtevars as $k => $v) + { + if(isset($$v)) + { + $erg[$v] = $$v; + } + } + return $erg; +} + + /** + * Zeiterfassung constructor. + * + * @param Application $app + * @param bool $intern + */ + public function __construct($app, $intern = false) { + $this->app=$app; + if($intern){ + return; + } + $this->app->ActionHandlerInit($this); + + $this->app->ActionHandler("create","ZeiterfassungCreate"); + $this->app->ActionHandler("edit","ZeiterfassungEdit"); + $this->app->ActionHandler("list","ZeiterfassungList"); + $this->app->ActionHandler("listuser","ZeiterfassungListUser"); + $this->app->ActionHandler("delete","ZeiterfassungDelete"); + $this->app->ActionHandler("arbeitspaket","ArbeitspaketDetails"); + $this->app->ActionHandler("details","ZeiterfassungDetails"); + $this->app->ActionHandler("minidetail","ZeiterfassungMinidetail"); + $this->app->ActionHandler("abrechnenpdf","ZeiterfassungAbrechnenpdf"); + $this->app->ActionHandler("dokuarbeitszeitpdf","ZeiterfassungDokuArbeitszeit"); + $this->app->ActionHandler("bearbeitenerlauben","ZeiterfassungBearbeitenerlauben"); + + $this->app->erp->Headlines('Zeiterfassung'); + + $this->app->ActionHandlerListen($app); + + } + + public function ZeiterfassungBearbeitenerlauben() + { + //Rechte + } + + public function ZeiterfassungMinidetail() + { + $id = $this->app->Secure->GetGET('id'); + + $tmp = $this->app->DB->SelectRow("SELECT * FROM zeiterfassung WHERE id='$id'"); + $teilprojekt = $this->app->DB->Select("SELECT aufgabe FROM arbeitspaket WHERE id='".$tmp['arbeitspaket']."'"); + + echo ''; + echo ''; + echo ''; + echo "'; + echo '"; + echo ''; + echo ''; + if($tmp['gps']!='') { + $tmpgps = explode(';',$tmp['gps']); + $link = 'Google Maps'; + } + echo '"; + echo '
    Ort:'.$tmp['ort'].'
    Tätigkeit:'.$tmp['aufgabe'].'
    Beschreibung:".nl2br($tmp['beschreibung']).'
    Teilprojekt:'.$teilprojekt."
    Kostenstelle:'.$tmp['kostenstelle'].'
    Verrechnungsart:'.$tmp['verrechnungsart'].'
    GPS Koordinaten:'.$tmp['gps']." $link
    '; + $this->app->ExitXentral(); + } + + public function ZeiterfassungAbrechnenpdf() + { + //Create a new PDF file + $pdf=new FPDF(); + $pdf->AddPage(); + + $pdf->SetFontClassic('Arial','B',11); + + //Create lines (boxes) for each ROW (Product) + //If you don't use the following code, you don't create the lines separating each row + $tmp = $this->app->DB->SelectArr("SELECT a.kundennummer as kundennummer, a.name as name, z.aufgabe, SUM((UNIX_TIMESTAMP(z.bis)-UNIX_TIMESTAMP(z.von))/3600.0) as stunden + FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse_abrechnung WHERE z.abrechnen='1' AND (z.ist_abgerechnet IS NULL OR z.ist_abgerechnet='0') AND z.adresse_abrechnung > 0 GROUP BY 1"); + // Colors, line width and bold font + $pdf->SetFillColor(255,255,255); + $pdf->SetTextColor(0); + $pdf->SetDrawColor(0,0,0); + $pdf->SetLineWidth(.3); + //$pdf->SetFontClassic('','B'); + // Header + + $header = array('Kundennr.','Name','Stunden','OK'); + $w = array(30,130,20,10); + $pdf->Cell($w[0],7,$header[0],1,0,'L',true); + $pdf->Cell($w[1],7,$header[1],1,0,'L',true); + $pdf->Cell($w[2],7,$header[2],1,0,'C',true); + $pdf->Cell($w[3],7,$header[3],1,0,'C',true); + $pdf->Ln(); + $pdf->SetFontClassic('Arial','',11); + // Color and font restoration + + // Data + $fill = false; + for($i=0;$iCell($w[0],6,$tmp[$i]["kundennummer"],'LRTB',0,'L',$fill); + $pdf->Cell($w[1],6,$this->app->erp->ReadyForPDF($tmp[$i]["name"]),'LRTB',0,'L',$fill); + $pdf->Cell($w[2],6,round($tmp[$i]["stunden"],2),'LRTB',0,'C',$fill); + $pdf->Cell($w[3],6,"",'LRTB',0,'C',$fill); + $pdf->Ln(); + $fill = !$fill; + } + $pdf->Ln(); + $pdf->SetFontClassic('Arial','',8); + $name=preg_replace('/[^a-zA-Z0-9_]/' , '' , $this->app->User->GetName()); + $name = strtoupper($name); + + $pdf->Cell(array_sum($w),0,date('Ymd').'_'.$name.'_ABRECHNEN.pdf','',0,'R'); + + $pdf->Output(date('Ymd').'_'.$name.'_ABRECHNEN.pdf','D'); + $this->app->ExitXentral(); + } + + public function ZeiterfassungCreate() + { + $cmd=$this->app->Secure->GetGET('cmd'); + $back=$this->app->Secure->GetGET('back'); + $msg=$this->app->Secure->GetGET('msg'); + + + if($cmd=='data' || $cmd=='getzeiterfassung' || $cmd=='updatezeiterfassung' || $cmd=='savezeiterfassung' || $cmd=='kalenderansicht' || $cmd=='formularansicht' || $cmd=='delzeiterfassung' || $cmd=='mitarbeiteransichtdata' || $cmd=='copyzeiterfassung') + { + $start_string = $this->app->Secure->GetGET('start'); + if ($start_string != "") { + $start_datum = date('Y-m-d', $this->app->Secure->GetGET('start')); + } + + $end_string = $this->app->Secure->GetGET('end'); + if ($end_string != "") { + $end_datum = date('Y-m-d', $this->app->Secure->GetGET('end')); + } + + switch($cmd) + { + case 'formularansicht': + $this->app->User->SetParameter('zeiterfassung_buchen_formularansicht',1); + header('Location: index.php?module=zeiterfassung&action=create'); + exit; + break; + case 'kalenderansicht': + $this->app->User->SetParameter('zeiterfassung_buchen_formularansicht',0); + header('Location: index.php?module=zeiterfassung&action=create'); + exit; + break; + case 'mitarbeiteransichtdata': + case 'data': + if($this->app->User->GetParameter('zeiterfassung_buchen_termine')=='1' && $cmd!='mitarbeiteransichtdata') { + if($nurmeine > 0) + { + $data = $this->app->DB->SelectArr("SELECT DISTINCT ke.id, ort,beschreibung, bezeichnung AS title, von AS start, bis AS end, allDay, color, public,erinnerung,adresse,adresseintern,projekt + FROM kalender_event AS ke + LEFT JOIN kalender_user AS ku ON ke.id=ku.event + WHERE (ku.userid='$user') AND (ke.von < '$end' AND (ke.bis >= '$start' OR ke.bis='0000-00-00 00:00:00') ) GROUP by ke.id ORDER by start"); + } else { + $data = $this->app->DB->SelectArr("SELECT DISTINCT ke.id, ort,beschreibung, ke.bezeichnung AS title, von AS start, bis AS end, allDay, color, public,erinnerung,adresse,adresseintern,projekt,kg.farbe + FROM kalender_event AS ke + LEFT JOIN kalender_user ku ON ke.id=ku.event + LEFT JOIN kalender_gruppen kg ON kg.id=ku.gruppe + WHERE (ke.von < '$end_datum' AND (ke.bis >= '$start_datum' OR (ke.bis='0000-00-00 00:00:00' AND ke.von!='0000-00-00 00:00:00') AND NOT (ke.von < '$start_datum' AND ke.bis='0000-00-00 00:00:00')) ) $subwhere GROUP by ke.id ORDER by start"); + } + $cdata = !empty($data)?count($data):0; + for($i=0;$i<$cdata;$i++) + { + $data[$i]['allDay'] = (($data[$i]['allDay']=='1')?true:false); + $data[$i]['public'] = (($data[$i]['public']=='1')?true:false); + $data[$i]['erinnerung'] = (($data[$i]['erinnerung']=='1')?true:false); + $data[$i]['title'] = $this->app->erp->ReadyForPDF($data[$i]['title']); + $data[$i]['ort'] = $this->app->erp->ReadyForPDF($data[$i]['ort']); + $data[$i]['adresse'] = $this->app->erp->ReadyForPDF($data[$i]['adresse']); + $data[$i]['adresseintern'] = $this->app->erp->ReadyForPDF($data[$i]['adresseintern']); + $data[$i]['projekt'] = $this->app->erp->ReadyForPDF($data[$i]['adresseintern']); + $data[$i]['beschreibung'] = $this->app->erp->ReadyForPDF($data[$i]['projekt']); + //if($data[$i]['farbe']!="") + $data[$i]['color'] = '#999';//$data[$i]['farbe']; + $data[$i]['task'] = 0;//$data[$i]['farbe']; + $data[$i]['id'] = 'kalender_'.$data[$i]['id']; + } + } + + if($cmd=='mitarbeiteransichtdata') + { + $tmpadresse = $this->app->User->GetParameter('zeiterfassung_list_mitarbeiterkalenderansicht'); + } + else { + $tmpadresse = $this->app->User->GetAdresse(); + } + + $result = $this->app->DB->SelectArr("SELECT * FROM zeiterfassung WHERE adresse='".$tmpadresse."' + AND DATE_FORMAT(von,'%Y-%m-%d') BETWEEN '$start_datum' AND '$end_datum' "); + $cresult = !empty($result)?count($result):0; + for($i=0;$i<$cresult;$i++) + { + + if($result[$i]['art']=='Arbeit') { + $color='var(--sidebar-background)'; + } else { + $color='#333'; + } + $data[] = array('id' => $result[$i]['id'], + 'title'=>$result[$i]['aufgabe'], + 'start'=> $result[$i]['von'], + 'end'=> $result[$i]['bis'], + 'allDay'=>false, + 'color'=>$color, + 'public'=>'', + 'task'=>1); + } + //background + if($this->app->User->GetParameter('zeiterfassung_buchen_stechuhr')=='1') { + + $stechuhr = $this->app->DB->SelectArr("SELECT *, datum as start, + DATE_ADD(datum, INTERVAL 30 MINUTE) as end FROM stechuhr WHERE adresse='".$tmpadresse."' + AND DATE_FORMAT(datum,'%Y-%m-%d') between '$start_datum' AND '$end_datum'"); + $cstechuhr = !empty($stechuhr)?count($stechuhr):0; + for($si=0; $si<$cstechuhr;$si++) + { + $data[] = array( + 'title'=> $stechuhr[$si]['status'], + 'start'=> $stechuhr[$si]['start'], + 'end'=> $stechuhr[$si]['end'], + 'color'=>'#f90000', + 'allDay'=>false); +// 'rendering'=>'background'); + } + } + + break; + case 'getzeiterfassung': + $id=$this->app->Secure->GetGET('id'); + $result = $this->app->DB->SelectArr("SELECT *,DATE_FORMAT(von,'%d.%m.%Y') as datum, + DATE_FORMAT(von,'%H:%i') as vonzeit, DATE_FORMAT(bis,'%H:%i') as biszeit + FROM zeiterfassung WHERE adresse='".$this->app->User->GetAdresse()."' AND id='$id' LIMIT 1"); + $result = reset($result); + + $data['id']=$result['id']; + $data['aufgabe']=$result['aufgabe']; + $data['beschreibung']=$result['beschreibung']; + $data['datum']=$result['datum']; + $data['vonzeit']=$result['vonzeit']; + $data['biszeit']=$result['biszeit']; + $data['ort']=$result['ort']; + $data['art']=$result['art']; + $data['internerkommentar']=$result['internerkommentar']; + $data['projekt_manuell']=$this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='".$result['projekt']."' LIMIT 1"); + // $data['serviceauftrag'] = $this->app->DB->Select("SELECT belegnr FROM serviceauftrag WHERE id='".$result["serviceauftrag"]."' LIMIT 1"); + $data['adresse_abrechnung'] = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) FROM adresse WHERE id='".$result["adresse_abrechnung"]."'"); + $data['auftragpositionid']=$this->app->DB->Select("SELECT CONCAT(a.belegnr,'-',ap.sort,' ',a.name,' ',DATE_FORMAT(a.datum,'%d.%m.%Y'),' ',ap.bezeichnung) FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE ap.id='".$result["auftragpositionid"]."'"); + $data['produktion']=$this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM produktion WHERE id='".$result["produktion"]."'"); + + $data['auftrag'] = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM auftrag WHERE id='".$result["auftrag"]."'"); + $data['arbeitspaket'] = $this->app->DB->Select("SELECT CONCAT(ap.id,' ',p.abkuerzung,' ',ap.aufgabe) as name2 FROM arbeitspaket ap LEFT JOIN projekt p ON p.id=ap.projekt WHERE ap.id='".$result["arbeitspaket"]."' LIMIT 1"); + $data['abrechnen'] = $result['abrechnen']; +/* + $adresse_abrechnung_komplett = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) FROM adresse WHERE id='".$tmp[0]["adresse_abrechnung"]."'"); + if($tmp[0]["adresse_abrechnung"]<=0) $adresse_abrechnung_komplett=""; + + $mitarbeiter_komplett = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$tmp[0]["adresse"]."'"); + $kostenstelle_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM kostenstellen WHERE nummer='".$tmp[0]["kostenstelle"]."'"); + $verrechnungsart_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM verrechnungsart WHERE nummer='".$tmp[0]["verrechnungsart"]."'"); + $auftragpositionid_komplett = $this->app->DB->Select("SELECT CONCAT(a.belegnr,'-',ap.sort,' ',a.name,' ',DATE_FORMAT(a.datum,'%d.%m.%Y'),' ',ap.bezeichnung) FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE ap.id='".$tmp[0]["auftragpositionid"]."'"); + $produktion_komplett = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM produktion WHERE id='".$tmp[0]["produktion"]."'"); + +*/ + + + $data['write']=1; // nur schreiben erlaubt wenn nicht zu alt bzw. gibt es eine Einstelloption in den Firmendaten TODO + break; + + case 'copyzeiterfassung': + $id = $this->app->Secure->GetPOST('id'); + $zeiterfassungData = $this->app->DB->SelectRow("SELECT * FROM zeiterfassung WHERE id = '$id' LIMIT 1"); + $datum = explode(' ', $zeiterfassungData['von']); + $datum = $datum[0]; + $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($datum); + + if($id > 0 && $checkzeit){ + $this->app->erp->AddArbeitszeit($this->app->User->GetAdresse(), $zeiterfassungData['von'], $zeiterfassungData['bis'], + $zeiterfassungData['aufgabe'], $zeiterfassungData['beschreibung'],$zeiterfassungData['ort'], $zeiterfassungData['projekt'], + $zeiterfassungData['arbeitspaket'],$zeiterfassungData['art'],$zeiterfassungData['adresse_abrechnung'],$zeiterfassungData['abrechnen'],'', + '',0,'',0,$zeiterfassungData['internerkommentar'],$zeiterfassungData['auftrag'],$zeiterfassungData['produktion'],0, + $zeiterfassungData['auftragpositionid'],$zeiterfassungData['serviceauftrag']); + + $status['status']=1; + $status['statusText']=''; + }else{ + $status['status']=0; + $status['statusText'] = 'Die Zeiterfassung konnte nicht kopiert werden, da das Datum im Zeitbereich liegt der bereits geschlossen ist.'; + } + + echo json_encode($status); + $this->app->ExitXentral(); + break; + + case 'delzeiterfassung': + $id=$this->app->Secure->GetPOST('id'); + $check = $this->app->DB->Select("SELECT id FROM zeiterfassung WHERE adresse='".$this->app->User->GetAdresse()."' AND id='$id' AND id>0 LIMIT 1"); + $checkdatum = $this->app->DB->Select("SELECT DATE_FORMAT(von,'%Y-%m-%d') FROM zeiterfassung WHERE adresse='".$this->app->User->GetAdresse()."' AND id='$id' AND id>0 LIMIT 1"); + + $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($checkdatum); + + if($check == $id && $check > 0 && $checkzeit) + { + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='$check' LIMIT 1"); + $status['status']=1; + $status['statusText']=''; + + } else if ($checkzeit==false) + { + $status['status']=0; + $status['statusText']='Die Zeit ist zu alt und darf daher nicht mehr bearbeitet werden!'; + } + else { + $status['status']=0; + $status['statusText']='Diese Zeiterfassung konnte nicht gelöscht werden (fehlende Rechte)'; + } + echo json_encode($status); + exit; + break; + + case 'savezeiterfassung': + $id=$this->app->Secure->GetPOST('id'); + $start=$this->app->Secure->GetPOST('start'); + $end=$this->app->Secure->GetPOST('end'); + $datum=$this->app->Secure->GetPOST('datum'); + $aufgabe=$this->app->Secure->GetPOST('aufgabe'); + $beschreibung=$this->app->Secure->GetPOST('beschreibung'); + $internerkommentar=$this->app->Secure->GetPOST('internerkommentar'); + $ort=$this->app->Secure->GetPOST('ort'); + $art=$this->app->Secure->GetPOST('art'); + + $checkvon = (int)str_replace(':','',$this->app->Secure->GetPOST('start')); + $checkbis = (int)str_replace(':','',$this->app->Secure->GetPOST('end')); + if ($checkbis <= $checkvon) { + $status['status']=0; + $status['statusText']='Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!'; + header('Content-Type: application/json'); + echo json_encode($status); + $this->app->ExitXentral(); + } + + $projekt_manuell=$this->app->Secure->GetPOST('projekt_manuell'); + $arbeitspaket=$this->app->Secure->GetPOST('arbeitspaket'); + $adresse_abrechnung=$this->app->Secure->GetPOST('adresse_abrechnung'); + $auftragpositionid=$this->app->Secure->GetPOST('auftragpositionid'); + $auftrag=$this->app->Secure->GetPOST('auftrag'); + $produktion=$this->app->Secure->GetPOST('produktion'); + $serviceauftrag=$this->app->Secure->GetPOST('serviceauftrag'); + $abrechnen=$this->app->Secure->GetPOST('abrechnen'); + + $datum = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1'); + + $adresse_abrechnung = trim ($adresse_abrechnung); + $adresse_abrechnung = substr ($adresse_abrechnung , 0 , (strpos ($adresse_abrechnung , ' '))); + $adresse_abrechnung = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$adresse_abrechnung' AND kundennummer!='' LIMIT 1"); + + $auftrag = trim ($auftrag); + $auftrag = substr ($auftrag , 0 , (strpos ($auftrag , ' '))); + $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$auftrag' AND belegnr!='' LIMIT 1"); + + $string = $auftragpositionid; + $string = trim ($string); + $string = substr ($string , 0 , (strpos ($string , ' '))); + $tmpauftrag = substr ($string , 0 , (strrpos ($string , '-'))); + $tmpauftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$tmpauftrag' AND belegnr!='' LIMIT 1"); + $auftragpositionsort = substr ($string , (strrpos ($string , '-')+1),strlen($string)); + $auftragpositionid = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag='$tmpauftrag' AND sort='$auftragpositionsort' LIMIT 1"); + + $string = $produktion; + $string = trim ($string); + $produktion = substr ($string , 0 , (strpos ($string , ' '))); + $produktion = $this->app->DB->Select("SELECT id FROM produktion WHERE belegnr='$produktion' AND belegnr!='' LIMIT 1"); + + $arbeitspaket = strstr($arbeitspaket, ' ', true); + $arbeitspaket = $this->app->DB->Select("SELECT id FROM arbeitspaket WHERE id='".$arbeitspaket."' LIMIT 1"); + +/* $serviceauftrag = reset(explode(' ',$serviceauftrag)); + $serviceauftrag = $this->app->DB->Select("SELECT id FROM serviceauftrag WHERE belegnr='".$serviceauftrag."' LIMIT 1");*/ + + // Projekt grabben und notfalls wieder anzeigen + $projekt_kennung = reset(explode(' ',$projekt_manuell)); + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$projekt_kennung."' LIMIT 1"); + + $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($datum); + + if($checkzeit) + { + if($id > 0) + { + $this->app->DB->Update("UPDATE zeiterfassung SET aufgabe='$aufgabe',beschreibung='$beschreibung',ort='$ort',internerkommentar='$internerkommentar',art='$art',adresse_abrechnung='$adresse_abrechnung',von='".$datum." ".$start."',bis='".$datum." ".$end."', + abrechnen='$abrechnen',arbeitspaket='$arbeitspaket',auftrag='$auftrag',produktion='$produktion',auftragpositionid='$auftragpositionid',projekt='$projekt',serviceauftrag='$serviceauftrag' WHERE id='$id' LIMIT 1"); + } + else { + $this->app->erp->AddArbeitszeit($this->app->User->GetAdresse(), $datum.' '.$start, $datum.' '.$end, $aufgabe, $beschreibung,$ort, $projekt, $arbeitspaket,$art,$adresse_abrechnung,$abrechnen,'', + '',0,'',0,$internerkommentar,$auftrag,$produktion,0,$auftragpositionid,$serviceauftrag); + //$this->app->erp->AddArbeitszeit($adr_id, $start, $end, $aufgabe, $beschreibung,$ort, $projekt, $paketauswahl,$art,$kunde="",$abrechnen="",$verrechnungsart="",$kostenstelle="",$abgerechnet="0",$gps="",$aufgabeid=0,$internerkommentar="",$auftrag=0,$produktion=0, $preis = 0,$auftragpositionid=""); + } + $status['status']=1; + $status['statusText']=''; + } else { + $status['status']=0; + $status['statusText']='Die Zeiterfassung konnte nicht angelegt werden da das Datum im Zeitbereich liegt der bereits geschlossen ist.'; + } + echo json_encode($status); + exit; + break; + case 'updatezeiterfassung': + $eid=$this->app->Secure->GetGET('eid'); + $start=$this->app->Secure->GetGET('start'); + $end=$this->app->Secure->GetGET('end'); + + $datum = strstr($start, ' ', true); + $checkzeit = $this->app->erp->ZeiterfassungAllowEdit($datum); + if($eid > 0 && $checkzeit) + { + $this->app->DB->Update("UPDATE zeiterfassung SET von='$start', bis='$end' WHERE id='$eid' LIMIT 1"); + } + else if(!$checkzeit) + { + $status['status']=0; + $status['statusText']='Die Zeiterfassung konnte nicht angelegt werden da das Datum im Zeitbereich liegt der bereits geschlossen ist.'; + echo json_encode($status); + exit; + } + break; + + } + + header('Content-type: application/json'); + echo json_encode($data); + exit; + } + + + $id=$this->app->Secure->GetGET('id'); + if($msg=='' && $id <=0){ + $this->app->User->SetParameter('zeiterfassung_create_datumzeiterfassung', ''); + } + + + // $this->app->erp->MenuEintrag("index.php?module=zeiterfassung&action=list","Übersicht"); + // $this->app->erp->MenuEintrag("index.php?module=zeiterfassung&action=create","Neue Zeiterfassung"); + + if($back=='zeiterfassung' || $cmd=='extern'){ + $this->ZeiterfassungMenu(); + } + else { + $this->app->erp->StartseiteMenu(); + // $this->app->Tpl->Add(KURZUEBERSCHRIFT,"Zeiterfassung"); + } + + $id = $this->app->User->GetId(); + if(is_numeric($id)){ + $adr_id = $this->app->DB->Select("SELECT adresse FROM user WHERE id='$id'"); + } + + + if($this->app->erp->Firmendaten('zeiterfassung_abrechnenvorausgewaehlt')=='1' && $this->app->Secure->GetGET('id') <=0) + { + $this->app->Tpl->Set('ABRECHNEN','checked'); + } + + + $this->ZeiterfassungManuell($adr_id); + //$this->app->Tpl->Parse(PAGE,"zeiterfassung_create.tpl"); + } + + public function ZeiterfassungListUser() + { + //$this->app->Tpl->Add(KURZUEBERSCHRIFT,"Zeiterfassung"); + $this->app->Tpl->Set('UEBERSCHRIFT','Zeiterfassung'); + $this->app->erp->StartseiteMenu(); + + if($this->app->Secure->GetGET('do')=='stornieren'){ + $lid = $this->app->Secure->GetGET('lid'); + $back = $this->app->Secure->GetGET('back'); + if($lid!='') + { + if($back=='zeiterfassung') { + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); + header('Location: index.php?module=zeiterfassung&action=list'); + } + else if($back=='zeiterfassungmitarbeiter') { + $id = $this->app->Secure->GetGET('id'); + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); + header("Location: index.php?module=adresse&action=zeiterfassung&id=$id"); + } + else if($back=='service') { + $id = $this->app->Secure->GetGET('id'); + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); + header("Location: index.php?module=service&action=list"); + } + else if($back=='aufgabe') { + $id = $this->app->Secure->GetGET('id'); + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."'"); + header("Location: index.php?module=aufgaben&action=list"); + } + + else if($back=='zeiterfassunguser') + { + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id='".$lid."' AND gebucht_von_user='".$this->app->User->GetID()."'"); + header('Location: index.php?module=zeiterfassung&action=listuser'); + } + else if ($back=='projekt') + { + $back_id = $this->app->Secure->GetGET('back_id'); + $back_sid = $this->app->Secure->GetGET('back_sid'); + header("Location: index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"); + } + else if ($back=='lohnabrechnung') + { + header('Location: index.php?module=lohnabrechnung&action=list'); + } + else if ($back=='adresse') + { + $back_id = $this->app->Secure->GetGET('back_id'); + header("Location: index.php?module=adresse&action=abrechnungzeit&id=$back_id"); + } + else{ + header('Location: index.php?module=zeiterfassung&action=create#tabs-1'); + } + exit; + } + } + + $this->ZeiteerfassungEigeneUebersicht(); + $this->app->YUI->TableSearch('TAB1','zeiterfassunguser', 'show','','',basename(__FILE__), __CLASS__); + + //TODO wenn man das Recht hat + /*if(0) + { + $this->app->Tpl->Add('TAB1', + "
     ". + " ". + " 
    "); + }*/ + + $von = $this->app->User->GetParameter('zeiterfassung_listuser_von'); + if($von!='') { + $this->app->Tpl->Set('VON',$von); + } + + $bis = $this->app->User->GetParameter('zeiterfassung_listuser_bis'); + if($bis!='') { + $this->app->Tpl->Set('BIS',$bis); + } + + + + $this->app->YUI->DatePicker('von'); + $this->app->YUI->DatePicker('bis'); + + $this->app->YUI->AutoSaveUserParameter('von','zeiterfassung_listuser_von',"var oTable = $('#zeiterfassunguser').DataTable( );oTable.ajax.reload();"); + $this->app->YUI->AutoSaveUserParameter('bis','zeiterfassung_listuser_bis',"var oTable = $('#zeiterfassunguser').DataTable( );oTable.ajax.reload();"); + + $this->app->Tpl->Parse('PAGE','zeiterfassunguseruebersicht.tpl'); + } + + function ZeiteerfassungEigeneUebersicht() + { + $datumzeiterfassung = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); + if($this->app->erp->CheckDateValidate($datumzeiterfassung)){ + $datum = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); + } + else{ + $datum = date('Y-m-d', time()); + } + + /*if(0){ + $heute = (int)$this->app->erp->ZeitGesamtArbeit($this->app->User->GetAdresse(),$datum).":".round(fmod($this->app->erp->ZeitGesamtArbeit($this->app->User->GetAdresse(),$datum),1)*60);//Alternative Zeitangabe + $pause =(int)$this->app->erp->ZeitGesamtPause($this->app->User->GetAdresse(),$datum).":".round(fmod($this->app->erp->ZeitGesamtPause($this->app->User->GetAdresse(),"","",$datum),1)*60); + $wocheist = (int)$this->app->erp->ZeitGesamtWocheIst($this->app->User->GetAdresse(),"","",$datum).":".round(fmod($this->app->erp->ZeitGesamtWocheIst($this->app->User->GetAdresse(),"","",$datum),1)*60); + $monatist = (int)$this->app->erp->ZeitGesamtMonatIst($this->app->User->GetAdresse(),"","",$datum).":".round(fmod($this->app->erp->ZeitGesamtMonatIst($this->app->User->GetAdresse(),"","",$datum),1)*60); + $monatsoll = (int)$this->app->erp->ZeitGesamtMonatSoll($this->app->User->GetAdresse(),"","",$datum).":".round(fmod($this->app->erp->ZeitGesamtMonatSoll($this->app->User->GetAdresse(),"","",$datum),1)*60); + }else{*/ + $heute = number_format($this->app->erp->ZeitGesamtArbeit($this->app->User->GetAdresse(),$datum),2,",",""); + $pause = number_format($this->app->erp->ZeitGesamtPause($this->app->User->GetAdresse(),$datum),2,",",""); + $wocheist = number_format($this->app->erp->ZeitGesamtWocheIst($this->app->User->GetAdresse(),"","",$datum),2,",",""); + $monatist = number_format($this->app->erp->ZeitGesamtMonatIst($this->app->User->GetAdresse(),"","",$datum),2,",",""); + $monatsoll = number_format($this->app->erp->ZeitGesamtMonatSoll($this->app->User->GetAdresse(),"","",$datum),2,",",""); + //} + $this->app->Tpl->Set('HEUTE',$heute); + $this->app->Tpl->Set('PAUSE',$pause); + $this->app->Tpl->Set('WOCHEIST',$wocheist); + $this->app->Tpl->Set('MONATIST',$monatist); + $this->app->Tpl->Set('MONATSOLL',$monatsoll); + + $offen = $this->app->erp->ZeitGesamtWocheOffen($this->app->User->GetAdresse()); + if($offen > 0) + { + $this->app->Tpl->Set('WOCHESOLL',number_format($this->app->erp->ZeitGesamtWocheSoll($this->app->User->GetAdresse(),"","",$datum),2,",","")); + $this->app->Tpl->Set('OFFEN',"".number_format($offen,2,",","").""); + } else if ($offen < 0) + { + $this->app->Tpl->Set('WOCHESOLL','-'); + $this->app->Tpl->Set('OFFEN','-'); + } + else { + $this->app->Tpl->Set('WOCHESOLL',number_format($this->app->erp->ZeitGesamtWocheSoll($this->app->User->GetAdresse(),"","",$datum),2,",","")); + $this->app->Tpl->Set('OFFEN',number_format($offen,2,",","")); + } + + $this->app->Tpl->Set('URLAUBOFFEN',number_format($this->app->erp->ZeitUrlaubOffen($this->app->User->GetAdresse(), $datum),2,",","")); + $this->app->Tpl->Set('URLAUBGENOMMEN',number_format($this->app->erp->ZeitUrlaubGenommen($this->app->User->GetAdresse(), $datum),2,",","")); + + } + + + + function ZeiterfassungList() + { + // $this->app->Tpl->Set(UEBERSCHRIFT,"Zeiterfassung"); + $this->ZeiterfassungMenu(); + + if($this->app->Secure->GetGET('do')=='stornieren'){ + $lid = $this->app->Secure->GetGET('lid'); + $back = $this->app->Secure->GetGET('back'); + if($lid!='') + { + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id=$lid"); + + if($back=='zeiterfassung') + header('Location: index.php?module=zeiterfassung&action=list'); + else if($back=='zeiterfassunguser') + header('Location: index.php?module=zeiterfassung&action=listuser'); + else if($back=='service') + header('Location: index.php?module=service&action=list'); + else if($back=='aufgabe') + header('Location: index.php?module=aufgaben&action=list'); + else if($back=='zeiterfassungmitarbeiter') + { + $sid = $this->app->Secure->GetGET('sid'); + header('Location: index.php?module=adresse&action=zeiterfassung&id=$sid'); + } + else if ($back=='projekt') + { + $back_id = $this->app->Secure->GetGET('back_id'); + $back_sid = $this->app->Secure->GetGET('back_sid'); + header("Location: index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"); + } + else if ($back=='lohnabrechnung') + { + header('Location: index.php?module=lohnabrechnung&action=list'); + } + else if ($back=='adresse') + { + $back_id = $this->app->Secure->GetGET('back_id'); + header("Location: index.php?module=adresse&action=abrechnungzeit&id=$back_id"); + } + else + header('Location: index.php?module=zeiterfassung&action=create#tabs-1'); + exit; + } + } + + $this->app->YUI->DatePicker('von'); + $this->app->YUI->DatePicker('bis'); + $this->app->YUI->AutoComplete('projekt','projektname'); + $this->app->YUI->AutoComplete('mitarbeiter','mitarbeiter'); + $this->app->YUI->AutoComplete('mitarbeiterkalenderansicht','mitarbeiter'); + + $this->app->YUI->TableSearch('TAB1','zeiterfassung', 'show','','',basename(__FILE__), __CLASS__); + $this->app->YUI->TableSearch('TAB2','zeiterfassungkundenoffen', 'show','','',basename(__FILE__), __CLASS__); + //$this->app->YUI->TableSearch('TAB3',"zeiterfassungprojektoffen"); + + $mitarbeiterkalenderansicht = $this->app->Secure->GetPOST('mitarbeiterkalenderansicht'); + if($mitarbeiterkalenderansicht!='') + { + $tmpmitarbeiter = strtok($mitarbeiterkalenderansicht, ' '); + $mitarbeiterid = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer='$tmpmitarbeiter' AND mitarbeiternummer!='' LIMIT 1"); + $this->app->User->SetParameter('zeiterfassung_list_mitarbeiterkalenderansicht',$mitarbeiterid); + } + + $mitarbeiterid = $this->app->User->GetParameter('zeiterfassung_list_mitarbeiterkalenderansicht'); + $mitarbeiterkalenderansicht = $this->app->DB->Select("SELECT concat(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$mitarbeiterid."'"); + $this->app->Tpl->Set('MITARBEITERKALENDERANSICHT',$mitarbeiterkalenderansicht); + + //TODO wenn man das Recht hat + /*if(0) + { + $this->app->Tpl->Add('TAB1', + "
     ". + " ". + " 
    "); + }*/ + + + $this->app->Tpl->Parse('PAGE','zeiterfassunguebersicht.tpl'); + } + + + function ZeiterfassungMenu() + { + $this->app->erp->Headlines('Zeiterfassung'); + $this->app->erp->MenuEintrag('index.php?module=zeiterfassung&action=list','Übersicht'); + $this->app->erp->MenuEintrag('index.php?module=zeiterfassung&action=create&cmd=extern','Neue Zeiterfassung'); + } + + + public function ZeiterfassungEdit() + { + $back = $this->app->Secure->GetGET('back'); + if($back=='zeiterfassung'){ + $this->ZeiterfassungMenu(); + } + else{ + $this->app->erp->StartseiteMenu(); + } + + $this->ZeiterfassungManuell($adr_id,true); + + //parent::ZeiterfassungEdit(); + } + + function ArbeitspaketReadDetails($index,&$ref) + { + $pakete = $ref->app->DB->SelectArr("SELECT * FROM arbeitspakete WHERE id='$index'"); + $myArr = $pakete[0]; + + $ref->app->Tpl->Set('AUFGABE', $myArr['aufgabe']); + $ref->app->Tpl->Set('PROJEKT', $myArr['projekt']); + $this->app->Tpl->Set('BESCHREIBUNG', $myArr['beschreibung']); + $this->app->Tpl->Set('ZEITGEPLANT', $myArr['zeit_geplant']); + $this->app->Tpl->Set('KOSTENSTELLE', $myArr['kostenstelle']); + $this->app->Tpl->Set('STATUS', $myArr['status']); + } + + public function ArbeitspaketDetails() + { + $this->app->Tpl->Set('HEADING','Details zum Arbeitspaket'); + + $this->app->Tpl->Set('SUBSUBHEADING', 'Details'); + $this->app->Tpl->Set('DATUM', date('d.m.Y', time())); + + $this->app->Tpl->Add('TABS', + '
  • Zeiterfassung

  • '); + + $this->app->Tpl->Add('TABS', + "
  • Zurück zur Übersicht
  • "); + + // Adress-ID mit USER-ID abfragen + $id = $this->app->User->GetId(); + if($id!=''){ + $adr_id = $this->app->DB->Select("SELECT adresse FROM user WHERE id=$id"); + } + + $ap_id = $this->app->Secure->GetGET('lid'); + + $pakete = $this->app->DB->SelectArr('SELECT * FROM arbeitspaket WHERE id='.$ap_id.' AND adresse='.$adr_id); + $myArr = $pakete[0]; + + $this->app->Tpl->Set('AUFGABE', $myArr['aufgabe']); + $this->app->Tpl->Set('PROJEKT', $myArr['projekt']); + $this->app->Tpl->Set('BESCHREIBUNG', $myArr['beschreibung']); + $this->app->Tpl->Set('ZEITGEPLANT', $myArr['zeit_geplant']); + $this->app->Tpl->Set('KOSTENSTELLE', $myArr['kostenstelle']); + $this->app->Tpl->Set('STATUS', $myArr['status']); + + if($myArr['abgabe'] == 'abgegeben'){ + $this->app->Tpl->Set('ABGABE', 'fertig'); + } + else{ + $this->app->Tpl->Set('ABGABE', ''); + } + + if($this->app->Secure->GetPOST("abgabefeld") == 'nicht abgegeben'){ + $this->app->DB->Update('UPDATE arbeitspakete SET abgabe="abgegeben", abgabedatum="'.date('Y-m-d').'" WHERE id='.$myArr['id']); + $myArr['abgabe'] = 'abgegeben'; + } + $this->app->Tpl->Parse('INHALT', 'arbeitspaket_details.tpl'); + $this->app->Tpl->Parse('PAGE','rahmen_submit_extend.tpl'); + } + + + function ZeiterfassungManuell($adr_id) + { + $this->app->Tpl->Set('HEADING','Zeiterfassung (Übersicht)'); + + $this->app->Tpl->Set('SUBSUBHEADING', 'Zeit erfassen'); + + $datumzeiterfassung = $this->app->Secure->GetPOST('datumzeiterfassung'); + $datumzeiterfassung = $this->app->String->Convert($datumzeiterfassung ,'%1.%2.%3','%3-%2-%1'); + + if($this->app->erp->CheckDateValidate($datumzeiterfassung)) { + $this->app->User->SetParameter('zeiterfassung_create_datumzeiterfassung',$datumzeiterfassung); + } + + $datumzeiterfassung = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); + + if(!$this->app->erp->CheckDateValidate($datumzeiterfassung)) { + $datumzeiterfassung = date('Y-m-d'); + } + + $this->app->Tpl->Set('ZURUECKDATUM',$this->app->DB->Select("SELECT DATE_FORMAT(DATE_SUB('$datumzeiterfassung',INTERVAL 1 DAY),'%d.%m.%Y')")); + $this->app->Tpl->Set('VORWAERTSDATUM',$this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datumzeiterfassung',INTERVAL 1 DAY),'%d.%m.%Y')")); + + + $this->app->Tpl->Set('DATUMZEITERFASSUNG',$this->app->String->Convert($datumzeiterfassung,'%3-%2-%1','%1.%2.%3')); + if($datumzeiterfassung!=date('Y-m-d')){ + $this->app->Tpl->Set('ANZEIGEDATUMZEITERFASSUNG', $this->app->String->Convert($datumzeiterfassung, '%3-%2-%1', '%1.%2.%3')); + } + else{ + $this->app->Tpl->Set('ANZEIGEDATUMZEITERFASSUNG', 'heute'); + } + + + if($this->app->erp->ModulVorhanden('fahrtenbuch')) + { + $spalte = "if((SELECT f.id FROM fahrtenbuch_fahrten f WHERE f.zeiterfassung=z.id) > 0,'ja','-') as Fahrt,"; + } else { + $spalte=''; + } + + //DATE_FORMAT(z.bis, '%d.%m.') AS Datum, + $table = new EasyTable($this->app); + $table->Query("SELECT + if(z.adresse_abrechnung > 0, CONCAT('Kunde: ', a.name, ' (', a.kundennummer,')
    ', z.aufgabe), z.aufgabe) as Taetigkeit, + DATE_FORMAT(z.von,'%H:%i') AS Von, + CONCAT(TIME_FORMAT(TIMEDIFF(z.bis, z.von),'%H:%i'),IF(z.abrechnen=1,' (A)','')) AS Dauer, + p.abkuerzung as Projekt, + $spalte + + CONCAT('  ') + FROM zeiterfassung z LEFT JOIN adresse a ON z.adresse_abrechnung = a.id LEFT JOIN projekt p ON p.id=z.projekt LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id + WHERE z.gebucht_von_user=".$this->app->User->GetID()." AND DATE_FORMAT(z.von, '%Y-%m-%d') = '$datumzeiterfassung' + ORDER BY z.von + "); + $table->DisplayNew('BUCHUNGEN','Aktion','noAction','false',0,0,false); + $this->app->YUI->DatePicker('datumzeiterfassung'); + + + //wenn id und kein post einmalig aus db holen + $id = $this->app->Secure->GetGET('id'); + $id_old = $id; + $copyid = $this->app->Secure->GetGET('copyid'); + if(empty($id) && !empty($copyid)) + { + $id = $copyid; + } + $projektabgeschlossen = false; + if($id!='' && $this->app->Secure->GetPOST('art')=='') + { + $tmp = $this->app->DB->SelectArr("SELECT *,DATE_FORMAT(von,'%H:%i') as von, if(bis!='0000-00-00 00:00:00',DATE_FORMAT(bis,'%H:%i'),'') as bis, DATE_FORMAT(von,'%d.%m.%Y') as datum FROM zeiterfassung WHERE id='$id' LIMIT 1"); + $aufgabe = $tmp[0]['aufgabe']; + $art = $tmp[0]['art']; + $ort = $tmp[0]['ort']; + $gps = $tmp[0]['gps']; + $beschreibung = $tmp[0]['beschreibung']; + $internerkommentar = $tmp[0]['internerkommentar']; + $paketauswahl = $tmp[0]['arbeitspaket']; + $abrechnen = $tmp[0]['abrechnen']; + $abgerechnet = $tmp[0]['abgerechnet']; + + + $this->app->User->SetParameter('teilprojekt_filter',$tmp[0]['projekt']); + + // if($paketauswahl > 0){ + // $this->app->Tpl->Set(PROJEKTROW,"none"); + // } + + if($tmp[0]['adresse']!=$this->app->User->GetAdresse()) + { + $this->app->Tpl->Set('ANDERERMITARBEITER','checked'); + $this->app->Tpl->Set('DISPLAYANDERERMITARBEITER',''); + } else { + $this->app->Tpl->Set('DISPLAYANDERERMITARBEITER','none'); + } + + $mitarbeiter = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$tmp[0]['adresse']."'"); + $adresse_abrechnung = $tmp[0]['adresse_abrechnung']; + $projektabgeschlossen = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$tmp[0]['projekt']."' AND status = 'abgeschlossen' LIMIT 1"); + $projekt_komplett = $this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='".$tmp[0]['projekt']."'"); + $serviceauftrag_anzeige = $this->app->DB->Select("SELECT belegnr FROM serviceauftrag WHERE id='".$tmp[0]['serviceauftrag']."' LIMIT 1"); + $adresse_abrechnung_komplett = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) FROM adresse WHERE id='".$tmp[0]['adresse_abrechnung']."'"); + + if($tmp[0]['adresse_abrechnung']<=0){ + $adresse_abrechnung_komplett = ''; + } + + $mitarbeiter_komplett = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='".$tmp[0]['adresse']."'"); + $kostenstelle_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM kostenstellen WHERE nummer='".$tmp[0]['kostenstelle']."'"); + $verrechnungsart_komplett = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM verrechnungsart WHERE nummer='".$tmp[0]['verrechnungsart']."'"); + $auftrag_komplett = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM auftrag WHERE id='".$tmp[0]['auftrag']."'"); + $auftragpositionid_komplett = $this->app->DB->Select("SELECT CONCAT(a.belegnr,'-',ap.sort,' ',a.name,' ',DATE_FORMAT(a.datum,'%d.%m.%Y'),' ',ap.bezeichnung) FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE ap.id='".$tmp[0]['auftragpositionid']."'"); + $produktion_komplett = $this->app->DB->Select("SELECT CONCAT(belegnr,' ',name,' ', DATE_FORMAT(datum,'%d.%m.%Y')) FROM produktion WHERE id='".$tmp[0]['produktion']."'"); + + $vonZeit = $tmp[0]['von']; + $bisZeit = $tmp[0]['bis']; + $datum = $tmp[0]['datum']; + } else { + if($this->app->Secure->GetPOST('datum')=='') { + $datumzeiterfassung = $this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'); + if($this->app->erp->CheckDateValidate($datumzeiterfassung)){ + $datum = $this->app->String->Convert($this->app->User->GetParameter('zeiterfassung_create_datumzeiterfassung'), '%3-%2-%1', '%1.%2.%3'); + } + else{ + $datum = date('d.m.Y', time()); + } + } + else { + $datum = $this->app->Secure->GetPOST('datum'); + $this->app->User->SetParameter('zeiterfassung_create_datumzeiterfassung',$this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1')); + } + + $aufgabe = $this->app->Secure->GetPOST('aufgabe'); + + + + $art= $this->app->Secure->GetPOST('art'); + + $vonZeit = $this->app->Secure->GetPOST('vonZeit'); + $bisZeit = $this->app->Secure->GetPOST('bisZeit'); + + $beschreibung = $this->app->Secure->GetPOST('beschreibung'); + $internerkommentar = $this->app->Secure->GetPOST('internerkommentar'); + $projekt = $this->app->Secure->GetPOST('projekt_manuell'); + $serviceauftrag = $this->app->Secure->GetPOST('serviceauftrag'); + $paketauswahl = $this->app->Secure->GetPOST('arbeitspaket'); + $abrechnen = $this->app->Secure->GetPOST('abrechnen'); + $abgerechnet = $this->app->Secure->GetPOST('abgerechnet'); + + $auftrag = $this->app->Secure->GetPOST('auftrag'); + $produktion = $this->app->Secure->GetPOST('produktion'); + $auftragpositionid = $this->app->Secure->GetPOST('auftragpositionid'); + + $mitarbeiter = $this->app->Secure->GetPOST('mitarbeiter'); + $kostenstelle = $this->app->Secure->GetPOST('kostenstelle'); + $verrechnungsart = $this->app->Secure->GetPOST('verrechnungsart'); + + + $ort = $this->app->Secure->GetPOST('ort'); + $gps = $this->app->Secure->GetPOST('gps'); + $adresse_abrechnung = $this->app->Secure->GetPOST('adresse_abrechnung'); + + $mitarbeiter_komplett = $mitarbeiter; + $kostenstelle_komplett = $kostenstellen; + $verrechnungsart_komplett = $verrechnungsart; + $auftrag_komplett = $verrechnungsart; + $produktion_komplett = $verrechnungsart; + + $projekt_komplett = $projekt; + $serviceauftrag_anzeige = $this->app->Secure->GetPOST('serviceauftrag'); + $adresse_abrechnung_komplett = $adresse_abrechnung; + + // Projekt grabben und notfalls wieder anzeigen + $paketauswahl = strstr($paketauswahl, ' ', true); + $paketauswahl = $this->app->DB->Select("SELECT id FROM arbeitspaket WHERE id='".$paketauswahl."' LIMIT 1"); + + + // if($paketauswahl > 0) + // $this->app->Tpl->Set(PROJEKTROW,'none'); + + if($mitarbeiter!=''){ + $this->app->Tpl->Set('ANDERERMITARBEITER','checked'); + } + else { + $this->app->Tpl->Set('DISPLAYANDERERMITARBEITER','none'); + } + } + $id = $id_old; + $datum_db = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1'); + $zeiteedit = $this->app->erp->ZeiterfassungAllowEdit($datum_db); + + $string = $mitarbeiter; + $string = trim ($string); + $mitarbeiter = substr ($string , 0 , strpos ($string , ' ')); + + $string = $kostenstelle; + $string = trim ($string); + $kostenstelle = substr ($string , 0 , strpos ($string , ' ')); + + $string = $verrechnungsart; + $string = trim ($string); + $verrechnungsart = substr ($string , 0 , strpos ($string , ' ')); + + $string = $auftrag; + $string = trim ($string); + $auftrag = substr ($string , 0 , strpos ($string , ' ')); + $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$auftrag' AND belegnr!='' LIMIT 1"); + + $string = $auftragpositionid; + $string = trim ($string); + $string = substr ($string , 0 , strpos ($string , ' ')); + $tmpauftrag = substr ($string , 0 , (strrpos ($string , '-'))); + $tmpauftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr='$tmpauftrag' AND belegnr!='' LIMIT 1"); + $auftragpositionsort = substr ($string , strrpos ($string , '-')+1,strlen($string)); + $auftragpositionid = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag='$tmpauftrag' AND sort='$auftragpositionsort' LIMIT 1"); + + $string = $produktion; + $string = trim ($string); + $produktion = substr ($string , 0 , (strpos ($string , ' '))); + $produktion = $this->app->DB->Select("SELECT id FROM produktion WHERE belegnr='$produktion' AND belegnr!='' LIMIT 1"); + + + + if($mitarbeiter!=''){ + $adr_id = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer='$mitarbeiter' LIMIT 1"); + } + + $this->app->YUI->AutoSaveUserParameter('projekt_manuell','teilprojekt_filter'); + $this->app->YUI->AutoSaveUserParameter('projekt_manuell2','teilprojekt_filter'); + $this->app->YUI->AutoComplete('arbeitspaket','arbeitspaket'); + $this->app->YUI->AutoComplete('arbeitspaket2', 'arbeitspaket'); + $this->app->YUI->AutoComplete('schnell_teilprojekt','arbeitspaket'); + $this->app->YUI->AutoComplete('adresse_abrechnung','kunde'); + $this->app->YUI->AutoComplete('adresse_abrechnung2', 'kunde'); + $this->app->YUI->AutoComplete('schnell_kunde','kunde'); + + $checkvorlage = $this->app->DB->Select("SELECT COUNT(id) FROM zeiterfassungvorlage WHERE ausblenden!=1"); + + if($checkvorlage >= 1) + { +// $this->app->YUI->AutoComplete('aufgabe','zeiterfassungvorlage'); +// $this->app->YUI->AutoComplete('aufgabe2','zeiterfassungvorlage'); + $this->app->YUI->AutoComplete('schnell_beschreibung','zeiterfassungvorlage'); + $this->app->YUI->AutoComplete('schnell_kundebeschreibung','zeiterfassungvorlage'); + } + + $this->app->YUI->AutoComplete('mitarbeiter','mitarbeiter'); + + $this->app->YUI->AutoComplete('kostenstelle','kostenstelle'); + $this->app->YUI->AutoComplete('verrechnungsart','verrechnungsart'); + + $this->app->YUI->AutoComplete('auftrag','auftrag'); + $this->app->YUI->AutoComplete('auftragpositionid','alle_auftrag_positionen'); + $this->app->YUI->AutoComplete('produktion','produktion'); + + if($id=='' && $this->app->Secure->GetPOST('vonZeit')=='') + { + if($datumzeiterfassung=='') { + $datumzeiterfassung = date('Y-m-d'); + } + $vonZeit = $this->app->DB->Select("SELECT DATE_FORMAT(MAX(bis),'%H:%i') FROM zeiterfassung + WHERE adresse='$adr_id' AND DATE_FORMAT(bis,'%Y-%m-%d')=DATE_FORMAT('$datumzeiterfassung','%Y-%m-%d')"); + + if($this->app->erp->ModulVorhanden('mitarbeiterzeiterfassung')) + { + if(!$vonZeit){ + $vonZeit = $this->app->DB->Select("SELECT date_format(standardstartzeit,'%H:%i') FROM mitarbeiterzeiterfassung_einstellungen WHERE adresse = '".$this->app->User->GetAdresse()."' ORDER by id DESC LIMIT 1"); + } + } + } + + + $this->app->Tpl->Set('VONZEIT',!empty($vonZeit)?$vonZeit:'09:00'); + + if($vonZeit==$bisZeit) { + $bisZeit=''; + } + $this->app->Tpl->Set('BISZEIT',$bisZeit?$bisZeit:''); + +/* + $serviceauftrag = $this->app->Secure->GetPOST('serviceauftrag'); + $serviceauftrag = reset(explode(' ',$serviceauftrag)); + $serviceauftrag = $this->app->DB->Select("SELECT id FROM serviceauftrag WHERE belegnr='".$serviceauftrag."' LIMIT 1"); +*/ + + // Projekt grabben und notfalls wieder anzeigen + $projekt_kennung = reset(explode(' ',$projekt)); + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$projekt_kennung."' LIMIT 1"); + + // Kunde + $adresse_abrechnung = strstr($adresse_abrechnung, ' ', true); + if($adresse_abrechnung!=''){ + $adresse_kunde = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$adresse_abrechnung."' LIMIT 1"); + } + else{ + $adresse_kunde = 'NULL'; + } + + + + if($abrechnen=='1'){ + $this->app->Tpl->Set('ABRECHNEN', 'checked'); + } + + if($abgerechnet=='1'){ + $this->app->Tpl->Set('ABGERECHNET', 'checked'); + } + + $this->app->Tpl->Set('DATUM', $datum); + $this->app->Tpl->Set('PROJEKT_MANUELL',$projekt_komplett); + $this->app->Tpl->Set('SERVICEAUFTRAG',$serviceauftrag_anzeige); + + $this->app->Tpl->Set('ADRESSE_ABRECHNUNG',$adresse_abrechnung_komplett); + $this->app->Tpl->Set('KOSTENSTELLE',$kostenstelle_komplett); + $this->app->Tpl->Set('VERRECHNUNGSART',$verrechnungsart_komplett); + + $this->app->Tpl->Set('AUFTRAG',$auftrag_komplett); + $this->app->Tpl->Set('AUFTRAGPOSITIONID',$auftragpositionid_komplett); + $this->app->Tpl->Set('PRODUKTION',$produktion_komplett); + + $this->app->Tpl->Set('AUFGABE',str_replace('"', '"', $aufgabe)); + $this->app->Tpl->Set('MITARBEITER',$mitarbeiter_komplett); + $this->app->Tpl->Set('ORT',$ort); + $this->app->Tpl->Set('GPS',$gps); + $this->app->Tpl->Set('BESCHREIBUNG',str_replace('\r\n',"\r\n",$beschreibung)); + $this->app->Tpl->Set('INTERNERKOMMENTAR',str_replace('\r\n',"\r\n",$internerkommentar)); + + if($gps!='') + { + $tmpgps = explode(';',$gps); + $this->app->Tpl->Set('GPSIMAGE',""); + } else { + $this->app->Tpl->Set('GPSBUTTON',''); + } + $this->app->Tpl->Set('ART', $this->app->erp->GetSelect($this->app->erp->GetZeiterfassungArt(),$art)); + + $pakete = $this->app->DB->SelectArr('SELECT id, aufgabe,art,projekt FROM arbeitspaket WHERE (adresse = '.$adr_id.' or (art="teilprojekt" '.$this->app->erp->ProjektRechte("projekt").')) AND abgenommen!=1 AND geloescht!=1 AND status!=\'abgeschlossen\' order by projekt'); + /* + $select = ''; + for($i =0; $iapp->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$myArr["projekt"]."' LIMIT 1"); + if($paketauswahl==$myArr["id"])$checked=" selected"; else $checked =""; + $select = $select.''; + } + */ + if($paketauswahl > 0) { + $tmp = $this->app->DB->Select("SELECT CONCAT(ap.id,' ',p.abkuerzung,' ',ap.aufgabe) as name2 FROM arbeitspaket ap LEFT JOIN projekt p ON p.id=ap.projekt WHERE ap.id='$paketauswahl' LIMIT 1"); + $this->app->Tpl->Set('PAKETAUSWAHL', $tmp); + } + + $checkvon = str_replace(':','',$this->app->Secure->GetPOST('vonZeit')); + $checkbis = str_replace(':','',$this->app->Secure->GetPOST('bisZeit')); + $fehlerangezeigt = false; + + if($this->app->Secure->GetPOST('ok')){ + $vonZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('vonZeit').':00'; + $bisZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('bisZeit').':00'; + + + + if($paketauswahl == 0){ + if(($aufgabe!='') && ($this->app->Secure->GetPOST('vonZeit')!='') && ($this->app->Secure->GetPOST('bisZeit')!='') && ($datum!='') && ($checkbis > $checkvon) && $zeiteedit && !$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")){ + { + // Hier fehlt abrechnen und adresse_abrechnung + $zeitid = $this->app->erp->AddArbeitszeit($adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, + $projekt, 0,$art,$adresse_kunde,$abrechnen,$verrechnungsart,$kostenstelle,$abgrechnet,$gps,0,$internerkommentar,$auftrag,$produktion,"",$auftragpositionid); + $this->app->erp->RunHook('zeiterfassung_create_guihook1',1,$zeitid); + + if($serviceauftrag){ + $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$zeitid' LIMIT 1"); + } + $this->app->Tpl->Set('MESSAGE',"
    Zeit erfolgreich gebucht!
    "); + $msg = $this->app->erp->base64_url_encode("
    Zeit erfolgreich gebucht!
    "); + header("Location: index.php?module=zeiterfassung&action=create&msg=$msg#tabs-1"); + exit; + } + }else{ + if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) + { + $msg = $this->app->erp->base64_url_encode('
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); + $this->app->Tpl->Set('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); + } + elseif(!$zeiteedit) + { + $fehlerangezeigt = true; + $this->app->Tpl->Set('MESSAGE','
    Fehler! Das Anlegen/Editieren von Zeiten älter als '.$this->app->erp->Firmendaten('zeiterfassung_schliessentage').' Tagen ist nicht erlaubt!
    '); + }elseif($checkbis <= $checkvon){ + $this->app->Tpl->Set('MESSAGE', '
    Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!
    '); + } + else{ + $this->app->Tpl->Set('MESSAGE', '
    Fehler! Die Felder "Kurze Beschreibung", am, von, bis müssen korrekt ausgefüllt sein!
    '); + } + // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); + } + }else{ + if(($this->app->Secure->GetPOST('vonZeit')!='') && ($this->app->Secure->GetPOST('bisZeit')!='') && ($datum!='') && $aufgabe!='' && ($checkbis > $checkvon) && $zeiteedit && !$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")){ + //Paketauswahl buchen ... + $projekt = $this->app->DB->Select("SELECT projekt FROM arbeitspaket WHERE id='$paketauswahl' LIMIT 1"); + if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) + { + $this->app->Tpl->Set('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); + }else{ + $kunde = $this->app->DB->Select("SELECT kunde FROM projekt WHERE id='$projekt' LIMIT 1"); + if($adresse_kunde=='') { + $adresse_kunde=$kunde; + } + + + $zeitid = $this->app->erp->AddArbeitszeit($adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, + $projekt, $paketauswahl,$art,$adresse_kunde,$abrechnen,$verrechnungsart,$kostenstelle,$abgerechnet,$gps,0,$internerkommentar,$auftrag,$produktion); + + $this->app->erp->RunHook('zeiterfassung_create_guihook1',1,$zeitid); + + if($serviceauftrag){ + $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$zeitid' LIMIT 1"); + } + $msg = $this->app->erp->base64_url_encode('
    Zeit erfolgreich gebucht!
    '); + header("Location: index.php?module=zeiterfassung&action=create&msg=$msg#tabs-1"); + exit; + } + }else{ + if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) + { + $msg = $this->app->erp->base64_url_encode('
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); + $this->app->Tpl->Add('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); + }elseif(!$zeiteedit) + { + $fehlerangezeigt = true; + $this->app->Tpl->Set('MESSAGE','
    Fehler! Das Anlegen/Editieren von Zeiten kleiner '.$this->app->erp->Firmendaten('zeiterfassung_schliessentage').' Tagen ist nicht erlaubt!
    '); + }elseif($checkbis <= $checkvon){ + $this->app->Tpl->Set('MESSAGE', '
    Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!
    '); + } + else{ + $this->app->Tpl->Set('MESSAGE', '
    Fehler! Die Felder "Kurze Beschreibung", am, von, bis müssen korrekt ausgefüllt sein!
    '); + } + // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); + } + } + + if($id==''){ + $vonZeit = $this->app->DB->Select("SELECT DATE_FORMAT(MAX(bis),'%H:%i') FROM zeiterfassung WHERE adresse='$adr_id' AND DATE_FORMAT(bis,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d')"); + } + + } else { + if($this->app->Secure->GetPOST('update')){ + if(($aufgabe!='') && ($this->app->Secure->GetPOST('vonZeit')!='') && ($this->app->Secure->GetPOST('bisZeit')!='') && ($datum!='') && ($checkbis > $checkvon) && $zeiteedit && !$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")){ + // echo "update"; + //echo $datum; + $vonZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('vonZeit').':00'; + $bisZeit = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1').' '.$this->app->Secure->GetPOST('bisZeit').':00'; + + if($paketauswahl == 0) + { + $this->app->erp->UpdateArbeitszeit($id,$adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, + $projekt, $paketauswahl,$art,$adresse_kunde,$abrechnen,$verrechnungsart,$kostenstelle,$abgerechnet,$gps,$internerkommentar,$auftrag,$produktion,"",$auftragpositionid); + + if($serviceauftrag){ + $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$id' LIMIT 1"); + } + } + else + { + $this->app->erp->UpdateArbeitszeit($id,$adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung, $ort, + $projekt, $paketauswahl,$art,'',$abrechnen,$verrechnungsart,$kostenstelle,$gps,$internerkommentar,$auftrag,$produktion,'',$auftragpositionid); + + if($serviceauftrag){ + $this->app->DB->Update("UPDATE zeiterfassung SET serviceauftrag = '$serviceauftrag' WHERE id = '$id' LIMIT 1"); + } + } + $this->app->erp->RunHook('zeiterfassung_create_guihook1'); + + + $back = $this->app->Secure->GetGET('back'); + if($back=='zeiterfassung'){ + header('Location: index.php?module=zeiterfassung&action=list'); + } + else if($back=='zeiterfassunguser'){ + header('Location: index.php?module=zeiterfassung&action=listuser'); + } + else if($back=='service'){ + header('Location: index.php?module=service&action=list'); + } + else if($back=='aufgabe'){ + header('Location: index.php?module=aufgaben&action=list'); + } + else if($back=='zeiterfassungmitarbeiter') + { + $sid = $this->app->Secure->GetGET('sid'); + header("Location: index.php?module=adresse&action=zeiterfassung&id=$sid"); + } + + + else if ($back=='projekt') + { + $back_id = $this->app->Secure->GetGET('back_id'); + $back_sid = $this->app->Secure->GetGET('back_sid'); + header("Location: index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"); + } + else if ($back=='lohnabrechnung') + { + header('Location: index.php?module=lohnabrechnung&action=list'); + } + else if ($back=='adresse') + { + $back_id = $this->app->Secure->GetGET('back_id'); + header("Location: index.php?module=adresse&action=abrechnungzeit&id=$back_id"); + } + else{ + header('Location: index.php?module=zeiterfassung&action=create#tabs-1'); + } + exit; + + } else { + if(!$this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND status = 'abgeschlossen' LIMIT 1")) + { + $this->app->Tpl->Add('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); + }elseif(!$zeiteedit) + { + $fehlerangezeigt = true; + $this->app->Tpl->Set('MESSAGE','
    Fehler! Das Anlegen/Editieren von Zeiten kleiner '.$this->app->erp->Firmendaten('zeiterfassung_schliessentage').' Tagen ist nicht erlaubt!
    '); + }elseif($checkbis <= $checkvon){ + $this->app->Tpl->Set('MESSAGE', '
    Fehler! Zeit bis ist kleiner bzw gleich als Zeit von!
    '); + } + else{ + $this->app->Tpl->Set('MESSAGE', '
    Fehler! Die Felder "Kurze Beschreibung", am, von, bis müssen ausgefüllt sein!
    '); + } + // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); + } + + } + } + + //tabelle mit gebuchten tätigkeiten heute + if($id=='') + { + $table = new EasyTable($this->app); + + $table->Query("SELECT DATE_FORMAT(z.bis, GET_FORMAT(DATE,'EUR')) AS Datum, + z.aufgabe as Taetigkeit, + + (SELECT name FROM adresse adr WHERE adr.id=z.adresse) as mitarbeiter, + DATE_FORMAT(z.von,'%H:%i') as von, DATE_FORMAT(z.bis,'%H:%i') as bis, + TIMEDIFF(z.bis, z.von) AS Dauer, + + p.abkuerzung as Projekt, + ap.aufgabe as 'Unterprojekt/Arbeitspaket', + + + IF(DATEDIFF(CURDATE(), z.bis)<= 5, + CONCAT('
    Stornieren | Edit'), '') + FROM zeiterfassung z LEFT JOIN projekt p ON p.id=z.projekt LEFT JOIN arbeitspaket ap ON z.arbeitspaket=ap.id + WHERE z.gebucht_von_user=".$this->app->User->GetID()." AND DATE_FORMAT(z.bis,'%Y-%m-%d')= DATE_FORMAT(NOW(),'%Y-%m-%d') + ORDER BY 1 DESC,2 DESC, 3 DESC + "); + $table->DisplayNew('TABELLE','Aktion','noAction'); + $this->app->Tpl->Set('BUTTON',""); + } else { + + $back = $this->app->Secure->GetGET('back'); + + if($back=='zeiterfassung'){ + $link = 'index.php?module=zeiterfassung&action=list'; + } + else if($back=='service'){ + $link = 'index.php?module=service&action=list'; + } + else if($back=='aufgabe'){ + $link = 'index.php?module=aufgaben&action=list'; + } + else if ($back=='projekt') + { + $back_id = $this->app->Secure->GetGET('back_id'); + $back_sid = $this->app->Secure->GetGET('back_sid'); + $link = "index.php?module=projekt&action=zeit&id=$back_id&sid=$back_sid"; + } + else if ($back=="adresse") + { + $back_id = $this->app->Secure->GetGET("back_id"); + $link = "index.php?module=adresse&action=abrechnungzeit&id=$back_id"; + } + else{ + $link = 'index.php?module=zeiterfassung&action=create#tabs-1'; + } + // $this->app->Tpl->Add('JQUERYREADY', '$("#accordion").accordion({ active: 2, event: "click" });'); + if($zeiteedit && !$projektabgeschlossen) + { + $this->app->Tpl->Set('BUTTON'," +   +   + "); + }else{ + if($projektabgeschlossen) + { + $this->app->Tpl->Add('MESSAGE','
    Das Projekt '.$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$projekt' LIMIT 1").' ist bereits abgeschlossen.
    '); + }else{ + if(!$fehlerangezeigt)$this->app->Tpl->Add('MESSAGE',"
    Das Anlegen/Editieren von Zeiten kleiner ".$this->app->erp->Firmendaten('zeiterfassung_schliessentage')." Tagen ist nicht erlaubt!
    "); + } + $this->app->Tpl->Set('BUTTON', + ''." "); + } + } + + + $this->app->YUI->DatePicker('datum'); + //$this->app->YUI->DatePicker('teilprojekt_datum'); + //$this->app->YUI->DatePicker('kunde_datum'); + $this->app->YUI->TimePicker('vonZeit'); + $this->app->YUI->TimePicker('bisZeit'); + + + + if($this->app->erp->Firmendaten('zeiterfassung_anderemitarbeiter')!=1) + { + $this->app->Tpl->Set('STARTANDEREERLAUBEN',''); + } + + if($this->app->erp->Firmendaten('zeiterfassung_erweitert')!=1) + { + $this->app->Tpl->Set('STARTERWEITERT',''); + } + + if($this->app->erp->Firmendaten('zeiterfassung_kommentar')!=1) + { + $this->app->Tpl->Set('STARTKOMMENTAR',''); + } + + if($this->app->erp->Firmendaten('zeiterfassung_ort')!=1) + { + $this->app->Tpl->Set('STARTORT',''); + } + + $this->app->YUI->AutoSaveUserParameter('projekt_manuell','teilprojekt_filter'); + + if($this->app->erp->ModulVorhanden('serviceauftrag')) + { + $this->app->YUI->AutoComplete('serviceauftrag','serviceauftrag'); + }else{ + $this->app->Tpl->Set('VORSERVICEAUFTRAG',''); + } + + $this->ZeiteerfassungEigeneUebersicht(); + + $this->app->erp->RunHook('zeiterfassung_create_guihook1'); + + $this->app->YUI->AutoSaveUserParameter('zeiterfassung_buchen_termine','zeiterfassung_buchen_termine',"$('#calendar').fullCalendar('refetchEvents');"); + $this->app->YUI->AutoSaveUserParameter('zeiterfassung_buchen_stechuhr','zeiterfassung_buchen_stechuhr',"$('#calendar').fullCalendar('refetchEvents');"); + if($this->app->User->GetParameter('zeiterfassung_buchen_termine')=='1') { + $checked='checked'; + } else { + $checked=''; + } + $this->app->Tpl->Set('CHECKEDZEITERFASSUNGBUCHENTERMINE',$checked); + + + if($this->app->User->GetParameter('zeiterfassung_buchen_stechuhr')=='1') { + $checked='checked'; + } else { + $checked=''; + } + $this->app->Tpl->Set('CHECKEDZEITERFASSUNGBUCHENSTECHUHR',$checked); + + + if($this->app->User->GetParameter('zeiterfassung_buchen_formularansicht')=='1') + { + $this->app->Tpl->Set('FORMULARANSICHT',''); + $this->app->Tpl->Set('ZEITERFASSUNGTABS','
  • {|Formular|}
  • {|Kalenderansicht|}
  • '); + } else { + $this->app->Tpl->Set('FORMULARANSICHT',''); + $this->app->Tpl->Set('ZEITERFASSUNGTABS','
  • {|Kalenderansicht|}
  • {|Formular|}
  • '); + } + + //$this->app->Tpl->Set(TABTEXT,'Zeiterfassung'); + $this->app->Tpl->Parse('TAB1', 'zeiterfassung_manuell.tpl'); + $this->app->Tpl->Parse('PAGE', 'zeiterfassung_buchen.tpl'); + } + + + + function ZeiterfassungOffen($adr_id) + { + $this->app->Tpl->Set('SUBSUBHEADING', 'offene Arbeitspakete'); + $this->app->Tpl->Set('INHALT',''); + + $table = new EasyTable($this->app); + $table->Query("SELECT DISTINCT a.aufgabe, a.zeit_geplant as vorgabe, + (SELECT FORMAT(SUM(TIMEDIFF(bis,von)/10000),2) FROM zeiterfassung WHERE arbeitspaket=a.id) as Gebucht, + DATE_FORMAT(a.abgabedatum,'%d.%m.%y') as bis, a.id + FROM arbeitspaket a LEFT JOIN zeiterfassung z ON z.arbeitspaket=a.id + WHERE a.adresse='$adr_id' AND (a.status = 'gestartet' OR a.status = 'besprochen')"); + + $table->DisplayNew('INHALT','[DETAILS%value%]'); + $this->app->YUI->Dialog($table,'DETAILS','Arbeitspaket','aufgabe','arbeitspaket_details.tpl',$this,'ArbeitspaketReadDetails'); + + $this->app->Tpl->Parse('ARBEITSPAKETE','rahmen70.tpl'); + + } + + function ZeiterfassungAbgeschlossen($adr_id) + { + + $monat = $this->app->DB->Select("SELECT DATE_FORMAT(NOW(),'%M')"); + $this->app->Tpl->Set('SUBSUBHEADING', "Zeiterfassung ($monat)"); + $this->app->Tpl->Set('INHALT',''); + $table = new EasyTable($this->app); + + // SELECT SUM(hour(z.bis) - hour(z.von)) AS dauer, a.aufgabe, a.zeit_geplant FROM zeiterfassung AS z, arbeitspakete AS a WHERE z.adresse = 2 AND z.adresse = a.adresse AND z.arbeitspaket = a.id AND a.id = 2 AND (status = "gestartet" OR status = "besprochen") GROUP BY aufgabe + + $table->Query("SELECT DATE_FORMAT(bis, GET_FORMAT(DATE,'EUR')) AS Datum, DATE_FORMAT(von,'%H:%i') as von, DATE_FORMAT(bis,'%H:%i') as bis, + TIMEDIFF(bis, von) AS Dauer, + aufgabe as Taetigkeit, + IF(DATEDIFF(CURDATE(), bis)<= 5, + CONCAT('Stornieren | Edit'), '') + FROM zeiterfassung + WHERE adresse=$adr_id + AND ( + MONTH(bis) = MONTH(NOW()) OR DATEDIFF(CURDATE(), bis)<= 5 + ) + ORDER BY 1 DESC,2 DESC + "); + + $table->DisplayNew('INHALT','Aktion','noAction'); + + + // $this->app->Tpl->Set(INHALT,"Abgschlossen"); + $this->app->Tpl->Parse('ZEITERFASSUNGEN','rahmen70.tpl'); + } + + function AufgabenOffen($adr_id){ + $this->app->Tpl->Set('SUBHEADING', 'offene Aufgaben'); + $this->app->Tpl->Set('INHALT',''); + + // selektierte Aufgabe Updaten + if($this->app->Secure->GetPOST('ok') != ''){ + $aufg_id = $this->app->Secure->GetPOST('aufg_id'); + foreach($aufg_id as $myId){ + $this->app->DB->Update("UPDATE aufgabe SET abgeschlossen_am = CURDATE(), abgeschlossen='1' WHERE id=$myId LIMIT 1"); + // Kopie nach aufgabe_erledigt + $this->app->DB->Insert("INSERT INTO aufgabe_erledigt (adresse, aufgabe, abgeschlossen_am) + VALUES ($adr_id, $myId, CURDATE())"); + } + } + + $table = new EasyTable($this->app); + // Hole einmalige und wiederholende Aufgaben + // bei wiederholenden Aufgaben werden nur die vom heutigen Tag und nach Schema startdatum + (intervall*n) geholt + $table->Query("SELECT + CONCAT(\"\") AS Ok, + IF(intervall_tage=0, DATE_FORMAT(startdatum, '%d.%m.%Y'), + DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL MOD(DATEDIFF(CURDATE(),DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day),'%d.%m.%Y')) AS Datum, + IF(intervall_tage=0, DATEDIFF(CURDATE(), startdatum) ,MOD(DATEDIFF(CURDATE(), startdatum),intervall_tage)) AS Verzug, + IF(intervall_tage=0, 'einmalig', intervall_tage) AS Intervall, + aufgabe, beschreibung + FROM aufgabe + WHERE + (abgeschlossen=0 AND (adresse=$adr_id OR adresse=0)) + OR + (DATE_SUB(CURDATE(), INTERVAL MOD(DATEDIFF(CURDATE(),DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day)=CURDATE() + AND DATE_SUB(CURDATE(), INTERVAL MOD(DATEDIFF(CURDATE(),DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day) != abgeschlossen_am + AND intervall_tage>0 AND (adresse=$adr_id OR adresse=0)) + ORDER BY Datum"); + + $table->DisplayNew('INHALT','Beschreibung','noAction'); + + $this->app->Tpl->Parse('AUFGABEN','rahmen_submit_100.tpl'); + } + + function ZeiterfassungArchiv($adr_id) + { + $this->app->Tpl->Set('SUBHEADING', 'Archiv'); + $this->app->Tpl->Set('INHALT',''); + + $table = new EasyTable($this->app); + $table->Query("SELECT + MONTHNAME(bis) AS Monat, + YEAR(bis) Jahr, + CONCAT(ROUND(SUM(TIME_TO_SEC(TIMEDIFF(bis,von)))/3600,1),' Stunden') AS Arbeitszeit, + CONCAT('Details') + FROM `zeiterfassung` + WHERE adresse=$adr_id + GROUP BY MONTHNAME(bis) + ORDER BY bis DESC"); + + $table->DisplayNew('INHALT','Aktion', 'noAction'); + + $this->app->Tpl->Parse('ARCHIV','rahmen100.tpl'); + } + + public function ZeiterfassungDetails() + { + $monat = $this->app->Secure->GetGET('month'); + $jahr = $this->app->Secure->GetGET('year'); + $frame = $this->app->Secure->GetGET('frame'); + + if($frame=='false') + { + // hier nur fenster größe anpassen + $this->app->YUI->IframeDialog(650,730); + } else { + + $id = $this->app->User->GetId(); + if($id!=''){ + $adr_id = $this->app->DB->Select("SELECT adresse FROM user WHERE id=$id"); + } + + $monatsname = $this->app->DB->Select("SELECT MONTHNAME('$jahr-$monat-01')"); + + $this->app->Tpl->Set('SUBHEADING', "Arbeitszeiten für $monatsname"); + $this->app->Tpl->Set('INHALT',''); + + + // $this->app->Tpl->Add(KURZUEBERSCHRIFT,"Zeiterfassung"); + + //$this->app->Tpl->Add(TABS, + // "
  • Zurück zur Übersicht
  • "); + + $table = new EasyTable($this->app); + $table->Query("SELECT + DATE_FORMAT(bis,'%d.%m.%y') as Datum, + ROUND((TIME_TO_SEC(TIMEDIFF(bis,von))/3600)) AS Dauer, + buchungsart, + aufgabe + FROM zeiterfassung + WHERE adresse=$adr_id + AND MONTH(bis)=$monat + AND YEAR(bis)=$jahr"); + + $table->DisplayNew('INHALT','Tätigkeit', 'noAction'); + //$this->app->Tpl->Set(AKTIV_TAB5,'selected'); + $this->app->Tpl->Parse('PAGE','rahmen.tpl'); + $this->app->BuildNavigation=false; + } + } + + public function ZeiterfassungDokuArbeitszeit() + { + $pdf = new DokuArbeitszeit(); + $filename = $tmp.date('Ymd').'_'.$kundennummer.'_'.$name.'_DOKUARBEITSZEIT.pdf'; + $pdf->Output($filename,'D'); + } +}