';
$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 '
';
$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;$i<(!empty($tmp)?count($tmp):0);$i++)
{
if($tmp[$i]["prio"]==0) $prio="";
else if($tmp[$i]["prio"]==1) $prio="Ja";
$pdf->Cell($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',
"
');
}
//$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,
// "
");
$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');
}
}