Secure->GetGET('id'); $arr = $this->app->DB->SelectRow('SELECT * FROM berichte WHERE id = '.$id); $spaltenausrichtung = explode(';',rtrim($this->app->erp->ReadyForPDF($arr['spaltenausrichtung']),';')); foreach($spaltenausrichtung as $k => $v) { if($v === 'R') { $alignright[] = ($k+1); } elseif($v === 'C'){ $aligncenter[] = ($k+1); } } $spaltennamen = rtrim($arr['spaltennamen'],';'); $spaltennamen = explode(';', $spaltennamen); foreach($spaltennamen as $key=>$value){ $heading[] = $value; $findcols[] = 'berichtelive.tab'.$key; $findcols2[] = 'tab'.$key; $dummy[] = "'' as tab".$key; $weitereswhere[] = 'tab'.$key."!=''"; } $heading[] = ''; $summenspalten = rtrim($arr['sumcols'],';'); $summenspalten = explode(';', $summenspalten); foreach($summenspalten as $k => $v) { $v = (int)$v; if($v <= 0) { unset($summenspalten[$k]); }else{ $summenspalten[$k] = $v; } } if(!empty($summenspalten)) { $sumcol = $summenspalten; } $spaltenbreite = rtrim($arr['spaltenbreite'],';'); $spaltenbreite = explode(';', $spaltenbreite); foreach($spaltenbreite as $key=>$value){ $width[] = $value.'%'; } $width[] = '1%'; $struktur = $arr['struktur']; $variablen = $arr['variablen']; if($variablen != ''){ $variablen = explode(';', trim($variablen)); foreach($variablen as $key=>$value){ if($value != ''){ $wert = explode('=', trim($value)); if(trim($wert[0]) != ''){ $struktur = str_replace(trim($wert[0]), trim($wert[1]), $struktur); } } } } $struktur = rtrim($struktur, ';'); $struktur = str_replace(''',"'",$struktur); $sql = 'SELECT SQL_CALC_FOUND_ROWS '.$findcols[0].','.implode(',',$findcols2).",".$findcols[0]." FROM ((SELECT ".implode(',', $dummy)." LIMIT 0) UNION ALL ($struktur)) as berichtelive"; $findcols[] = $findcols[0]; $searchsql = $findcols; $defaultorder = 1; $defaultorderdesc = 0; $where = '('.implode(' OR ',$weitereswhere).')'; $app->DB->Query($sql .' WHERE '.$where); if($app->DB->error()) { $sql = 'SELECT SQL_CALC_FOUND_ROWS '.$findcols[0].','.implode(',',$findcols2).",".$findcols[0]." FROM ((SELECT ".implode(',', $dummy)." LIMIT 0) UNION ALL $struktur) as berichtelive"; } if(!$this->sqlok($sql.' WHERE '.$where)) { $sql = ''; $struktur = ''; $where = ''; } $app->DB->Query($sql .' WHERE '.$where); if($app->DB->error()) { $query = $app->DB->Query($struktur); $fields = $app->DB->Fetch_Fields($query); if(!empty($fields)) { $findcols = array(); $searchsql = array(); $pos2 = 0; foreach($fields as $v) { $findcols[] = '`'.trim($v->name,'`').'`'; if($pos2 !== false){ $pos2 = strpos($struktur, $v->name, $pos2) + strlen($v->name); } if(!empty($v->table) && !empty($v->orgname)) { $searchsql[] = $v->table.'.'.$v->orgname; } } //$searchsql = $findcols; $findcols[] = '`' . trim($fields[0]->name, '`') . '`'; if($pos2 !== false){ $pos2 = stripos($struktur,'FROM',$pos2); if($pos2 !== false){ $struktur = substr($struktur,0,$pos2).', 0 '.substr($struktur,$pos2); if(stripos($struktur, 'SQL_CALC_FOUND_ROWS') === false){ $pos1 = stripos($struktur, 'SELECT'); if($pos1 !== false){ $struktur = substr($struktur, 0, $pos1) . ' SELECT SQL_CALC_FOUND_ROWS 0, ' . substr($struktur, $pos1 + 6); } } } $sql = $struktur; $where = ''; $posorder = strripos($sql, 'ORDER'); if($posorder !== false){ $posby = stripos($sql, 'BY', $posorder-1); if($posby !== false) { $orderby = substr($sql, $posorder); $sql = substr($sql,0, $posorder); } } $app->DB->Query($sql.' WHERE 1'); if($app->DB->error()) { $posgroup = strripos($sql, 'GROUP'); if($posgroup !== false){ $posby = stripos($sql, 'BY', $posgroup-1); if($posby === false) { $posgroup = false; } } $poswhere = strripos($sql, 'WHERE'); if($posgroup !== false && $posgroup > (int)$poswhere) { $groupby = substr($sql, $posgroup); $sql = substr($sql,0, $posgroup); if($poswhere) { $app->DB->Query($sql.' WHERE 1'); } } if($poswhere && $app->DB->error()) { $where = substr($sql, $poswhere+6); $sql = substr($sql,0, $poswhere); } } } } } break; } $erg = array(); foreach($erlaubtevars as $k => $v) { if(isset($$v)){ $erg[$v] = $$v; } } return $erg; } /** * Berichte 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","BerichteCreate"); $this->app->ActionHandler("edit","BerichteEdit"); $this->app->ActionHandler("list","BerichteList"); $this->app->ActionHandler("delete","BerichteDelete"); $this->app->ActionHandler("pdf","BerichtePDF"); $this->app->ActionHandler("csv","BerichteCSV"); $this->app->ActionHandler("live","BerichteLive"); $this->app->ActionHandler("convert","BerichteToReport"); $this->app->ActionHandlerListen($app); } public function Install(){ $this->app->erp->RegisterHook('Angebot_Aktion_option', 'berichte', 'BerichtZuBelegAktionOption'); $this->app->erp->RegisterHook('Angebot_Aktion_case', 'berichte', 'BerichtZuBelegAktionCase'); $this->app->erp->RegisterHook('Auftrag_Aktion_option', 'berichte', 'BerichtZuBelegAktionOption'); $this->app->erp->RegisterHook('Auftrag_Aktion_case', 'berichte', 'BerichtZuBelegAktionCase'); $this->app->erp->RegisterHook('Gutschrift_Aktion_option', 'berichte', 'BerichtZuBelegAktionOption'); $this->app->erp->RegisterHook('Gutschrift_Aktion_case', 'berichte', 'BerichtZuBelegAktionCase'); $this->app->erp->RegisterHook('Rechnung_Aktion_option', 'berichte', 'BerichtZuBelegAktionOption'); $this->app->erp->RegisterHook('Rechnung_Aktion_case', 'berichte', 'BerichtZuBelegAktionCase'); $this->app->erp->RegisterHook('Lieferschein_Aktion_option', 'berichte', 'BerichtZuBelegAktionOption'); $this->app->erp->RegisterHook('Lieferschein_Aktion_case', 'berichte', 'BerichtZuBelegAktionCase'); $this->app->erp->RegisterHook('Bestellung_Aktion_option', 'berichte', 'BerichtZuBelegAktionOption'); $this->app->erp->RegisterHook('Bestellung_Aktion_case', 'berichte', 'BerichtZuBelegAktionCase'); $this->app->erp->RegisterHook('Produktion_Aktion_option', 'berichte', 'BerichtZuBelegAktionOption'); $this->app->erp->RegisterHook('Produktion_Aktion_case', 'berichte', 'BerichtZuBelegAktionCase'); } /** * @param $id * @param $projectStatus * @param $option */ public function BerichtZuBelegAktionOption($id, $projectStatus, &$option) { if(!$this->app->erp->RechteVorhanden('berichte','csv') && !$this->app->erp->RechteVorhanden('berichte','pdf')){ return; } $module = $this->app->Secure->GetGET("module"); $data = $this->app->DB->SelectArr(sprintf("SELECT b.name,b.doctype_actionmenuname,b.doctype_actionmenufiletype,b.id FROM berichte AS b WHERE b.doctype_actionmenu=1 AND b.doctype='%s' ".$this->app->erp->ProjektRechte('b.project'),$module)); if(empty($data)) { return; } foreach($data as $rows) { $option .= ''; } } /** * @param $id * @param $projectStatus * @param $case */ public function BerichtZuBelegAktionCase($id, $projectStatus, &$case) { if(!$this->app->erp->RechteVorhanden('berichte','csv') && !$this->app->erp->RechteVorhanden('berichte','pdf')){ return; } $module = $this->app->Secure->GetGET('module'); $data = $this->app->DB->SelectArr( sprintf( "SELECT b.name,b.doctype_actionmenuname,b.doctype_actionmenufiletype,b.id FROM berichte AS b WHERE b.doctype_actionmenu=1 AND b.doctype='%s' ". $this->app->erp->ProjektRechte('b.project'), $module)); if(empty($data)) { return; } foreach($data as $rows) { $case .= "case 'berichte_".$rows['id']."': window.location.href='index.php?module=berichte&action=".$rows['doctype_actionmenufiletype']."&id=".$rows['id']."&var1=%value%'; break;"; } } public function BerichteCreate() { $this->BerichteMenu(); parent::BerichteCreate(); } public function BerichteDelete() { $id = $this->app->Secure->GetGET('id'); if(is_numeric($id) && $id > 0) { $this->app->DB->Delete('DELETE FROM berichte WHERE id='.$id); } $this->BerichteList(); } public function sqlok($sql) { if(preg_match_all('/(.*)SELECT(.*)INTO(.*)/i',$sql, $result)){ return false; } if(preg_match_all("/(.*)INSERT(\W+)(.*)INTO(.*)/i",$sql, $result)){ return false; } if(preg_match_all('/(.*)DELETE(.*)FROM(.*)/i',$sql, $result)){ return false; } if(preg_match_all("/(.*)UPDATE(\W+)(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)LOAD(\W+)DATA(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)LOAD(\W+)XML(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)DROP(\W+)(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)CREATE(\W+)(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)RENAME(\W+)(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)TRUNCATE(\W+)(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)ALTER(\W+)(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(\W*)SHOW(\W+)(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)SHOW(\W+)CREATE(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)SHOW(\W+)DATABASES(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)SHOW(\W+)TABLES(.*)/i",$sql, $result)){ return false; } if(preg_match_all("/(.*)USE(\W+)DATABASES(.*)/i",$sql, $result)){ return false; } //if(preg_match_all("/(.*)REPLACE(\W+)(.*)/i",$sql, $result))return false; return true; } public function BerichteCSV($id='',$cronjob=false) { if(!$cronjob) { $id = $this->app->Secure->GetGET('id'); } if($id > 0){ $berichteArr = $this->app->DB->SelectRow("SELECT * FROM berichte WHERE id = $id LIMIT 1"); } if(empty($berichteArr)) { if($cronjob) { return; } $this->app->Location->execute('index.php?module=berichte&action=edit&id='.$id); } $struktur = $berichteArr['struktur']; if(!$this->sqlok($struktur)) { if($cronjob) { return; } $this->app->Location->execute('index.php?module=berichte&action=edit&id='.$id); } $variablen = $berichteArr['variablen']; if($variablen != ''){ $variablen = explode(';', trim($variablen)); $varindex = 1; foreach($variablen as $key=>$value){ if($value != ''){ $wert = explode('=', trim($value)); $varfromget = $this->app->Secure->GetGET("var".$varindex); if($varfromget!="") $wert[1] = $varfromget; if(trim($wert[0]) != ''){ $struktur = str_replace(trim($wert[0]), trim($wert[1]), $struktur); } } $varindex++; } } $name = $this->app->erp->ReadyForPDF(str_replace(' ','',($this->app->DB->Select("SELECT name FROM berichte WHERE id='$id' LIMIT 1")))); if($name == ''){ $name = '_Id_' . $id; } $spaltenbreite = $this->app->erp->ReadyForPDF($berichteArr['spaltenbreite']); $spaltennamen = $this->app->erp->ReadyForPDF($berichteArr['spaltennamen']); $spaltenausrichtung = $this->app->erp->ReadyForPDF($berichteArr['spaltenausrichtung']); $sumcols = $this->app->erp->ReadyForPDF($berichteArr['sumcols']); $sumcolsa = explode(';',$sumcols); foreach($sumcolsa as $k => $v) { $v = (int)$v; if($v <= 0) { unset($sumcolsa[$k]); }else{ $sumcolsa[$k] = $v; } } $struktur = str_replace(''',"'",$struktur); if(!$this->sqlok($struktur)) { $struktur = ''; } $arr =empty($struktur)?null: $this->app->DB->Query($struktur); $header = explode(';',$spaltennamen); $w = explode(';',$spaltenbreite); $ausrichtung = explode(';',$spaltenausrichtung); $filenameftp = $berichteArr['ftpnamealternativ']; if($filenameftp != ''){ $filenameftp = str_replace('{BERICHTNAME}', $name, $filenameftp); $filenameftp = str_replace('{TIMESTAMP}', date('YmdHis'), $filenameftp); $filenameftp = str_replace('{DATUM}', date('Ymd'), $filenameftp); } $filenameemail = $berichteArr['emailnamealternativ']; if($filenameemail != ''){ $filenameemail = str_replace('{BERICHTNAME}', $name, $filenameemail); $filenameemail = str_replace('{TIMESTAMP}', date('YmdHis'), $filenameemail); $filenameemail = str_replace('{DATUM}', date('Ymd'), $filenameemail); } //header('Content-Encoding: UTF-8'); //header('Content-type: text/csv; charset=UTF-8'); $filename = date('Ymd').'_Bericht_'.$name.'.csv'; if(!$cronjob) { header('Content-Disposition: attachment; filename=' . $filename); header('Pragma: no-cache'); header('Expires: 0'); } $csv = ''; //spaltennamen $countcolumns = 0; if(count($header) > count($w)) { $countcolumns = count($header); } else { $countcolumns = count($w); } $cheader = count($header); for($i=0;$i<$cheader;$i++) { if(!isset($header[$i])) { $header[$i]=''; } $csv .= '"'.html_entity_decode($header[$i]).'";'; } $csv .= "\r\n"; while($row = $this->app->DB->Fetch_Row($arr)) { $colcounter = 0; foreach($row as $key=>$value){ $csv .= '"'.html_entity_decode($value).'";'; if(!empty($sumcolsa) && in_array($key+1,$sumcolsa)) { if(empty($sums[$key])){ $sums[$key] = 0; } $sums[$key] += $this->app->erp->ReplaceBetrag(1, $value); } } $csv .= "\r\n"; } if(!empty($sums)) { for($colcounter = 0;$colcounter<$cheader;$colcounter++) { $csv .= '"'.html_entity_decode(isset($sums[$colcounter])?$this->app->erp->ReadyForPDF(number_format($sums[$colcounter],2,',','.')):'').'";'; } $csv .= "\r\n"; } if(!$cronjob) { echo $csv; } else { $data['filename'] = $filename; $data['filenameftp'] = $filenameftp; $data['filenameemail'] = $filenameemail; $data['csv'] = $csv; return $data; } $this->app->ExitXentral(); } public function BerichtePDF() { $id = (int)$this->app->Secure->GetGET('id'); if($id > 0){ $berichteArr = $this->app->DB->SelectRow("SELECT * FROM berichte WHERE id = $id LIMIT 1"); } if(empty($berichteArr)) { $this->app->Location->execute('index.php?module=berichte&action=edit&id='.$id); } $struktur = $berichteArr['struktur']; if(!$this->sqlok($struktur)) { $this->app->Location->execute('index.php?module=berichte&action=edit&id='.$id); } $variablen = $berichteArr['variablen']; if($variablen != ''){ $variablen = explode(';', trim($variablen)); foreach($variablen as $key=>$value){ if($value != ''){ $wert = explode('=', trim($value)); if(trim($wert[0]) != ''){ $struktur = str_replace(trim($wert[0]), trim($wert[1]), $struktur); } } } } $name = $this->app->erp->ReadyForPDF(str_replace(' ','',$berichteArr['name'])); $nameaufpdf = $this->app->erp->ReadyForPDF($berichteArr['name']); $spaltenbreite = $this->app->erp->ReadyForPDF($berichteArr['spaltenbreite']); $spaltennamen = $this->app->erp->ReadyForPDF($berichteArr['spaltennamen']); $spaltenausrichtung = $this->app->erp->ReadyForPDF($berichteArr['spaltenausrichtung']); $sumcols = $this->app->erp->ReadyForPDF($berichteArr['sumcols']); $sumcolsa = explode(';',$sumcols); foreach($sumcolsa as $k => $v) { $v = (int)$v; if($v <= 0) { unset($sumcolsa[$k]); }else{ $sumcolsa[$k] = $v; } } $struktur = str_replace(''',"'",$struktur); if(!$this->sqlok($struktur)) { $struktur = ''; } $arr = empty($struktur)?null: $this->app->DB->Query($struktur); define('FPDF_FONTPATH2','lib/pdf/font2'); require dirname(__DIR__).'/lib/pdf/fpdf_org.php'; $w = explode(';',$spaltenbreite); $pdf=new SuperFPDF(); $pdf->AddPage(); $pdf->SetFillColor(255,255,255); $pdf->SetTextColor(0); $pdf->SetDrawColor(0,0,0); $pdf->SetLineWidth(.3); $pdf->SetFont('Arial','B',10); $pdf->Cell(array_sum($w),7,"Bericht: $nameaufpdf (Ausdruck vom ".date("d.m.Y").")",1,0,'L',true); $pdf->Ln(); $pdf->SetFont('Arial','',8); $header = explode(';',$spaltennamen); $ausrichtung = explode(';',$spaltenausrichtung); $cw = count($w); for($i=0;$i<$cw;$i++) { $pdf->Cell($w[$i], 7, $header[$i], 1, 0, $ausrichtung[$i], true); } $pdf->Ln(); $sums = []; while($row = $this->app->DB->Fetch_Row($arr)) { $colcounter = 0; foreach($row as $key=>$value){ $pdf->Cell($w[$colcounter],6,$this->app->erp->ReadyForPDF($value),'LRTB',0,$ausrichtung[$colcounter],true); if(!empty($sumcolsa) && in_array($key+1,$sumcolsa)) { if(empty($sums[$key])){ $sums[$key] = 0; } $sums[$key] += $this->app->erp->ReplaceBetrag(1, $value); } $colcounter++; } for($colcounter;$colcounter<$cw;$colcounter++) { $pdf->Cell($w[$colcounter], 6, '', 'LRTB', 0, $ausrichtung[$colcounter], true); } $pdf->Ln(); } if(!empty($sums)) { $pdf->Ln(); for($colcounter = 0;$colcounter<$cw;$colcounter++) { $pdf->Cell($w[$colcounter], 6, isset($sums[$colcounter])?$this->app->erp->ReadyForPDF(number_format($sums[$colcounter],2,',','.')):'', 'LRTB', 0, $ausrichtung[$colcounter], true); } } //$pdf->Cell($w[1],6,$this->app->erp->LimitChar($name_de,30),'LRTB',0,'L',$fill); $pdf->SetFont('Arial','',8); $pdf->Output(date('Ymd').'_BR_'.$name.'.pdf','D'); $this->app->ExitXentral(); } public function BerichteList() { $this->app->erp->Headlines('Berichte'); //$id = $this->app->Secure->GetGET("id"); $this->app->erp->MenuEintrag('index.php?module=berichte&action=create','Neuen Bericht anlegen'); $this->app->erp->MenuEintrag('index.php?module=berichte&action=list','Übersicht'); $this->showNewAppHint(); $this->app->erp->checkActiveCronjob('berichte_ftp_uebertragen'); $this->app->YUI->TableSearch('TAB1','berichte'); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function BerichteMenu() { $this->app->erp->Headlines('Berichte'); $id = $this->app->Secure->GetGET('id'); $this->app->erp->MenuEintrag('index.php?module=berichte&action=create','Berichte Neu'); $this->app->erp->MenuEintrag('index.php?module=berichte&action=live&id='.$id, 'Übersicht'); $this->app->erp->MenuEintrag('index.php?module=berichte&action=pdf&id='.$id,'als PDF anzeigen'); $this->app->erp->MenuEintrag('index.php?module=berichte&action=csv&id='.$id,'als CSV anzeigen'); $this->app->erp->MenuEintrag('index.php?module=berichte&action=edit&id='.$id,'Einstellungen'); } public function BerichteEdit() { $this->BerichteMenu(); $this->showHintTransferToNewApp(); parent::BerichteEdit(); } public function BerichteLive(){ $id = $this->app->Secure->GetGET('id'); $this->BerichteMenu(); $struktur = $this->app->DB->Select("SELECT struktur FROM berichte WHERE id='$id' LIMIT 1"); if(!$this->sqlok($struktur)) { $this->app->Location->execute('Location: index.php?module=berichte&action=edit&id='.$id); } $this->app->YUI->TableSearch('TAB4', 'berichte_live', 'show', '', '', basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', 'berichte_live.tpl'); } public function BerichteToReport() { $berichtId = (int)$this->app->Secure->GetPOST('bericht_id'); if (!$this->app->Container->has('ReportLegacyConverterService')) { $redirect = RedirectResponse::createFromUrl( sprintf('index.php?module=berichte&action=edit&id=%s', $berichtId) ); $redirect->send(); $this->app->ExitXentral(); } try { /** @var ReportLegacyConverterService $converter */ $converter = $this->app->Container->get('ReportLegacyConverterService'); $newId = $converter->convertLegacyReport($berichtId); $redirect = RedirectResponse::createFromUrl(sprintf('index.php?module=report&action=edit&id=%s', $newId)); $redirect->send(); $this->app->ExitXentral(); } catch (Exception $e) { $redirect = RedirectResponse::createFromUrl( sprintf('index.php?module=berichte&action=edit&id=%s', $berichtId) ); $redirect->send(); $this->app->ExitXentral(); } } protected function showNewAppHint() { /** @var Report $reportModule */ $reportModule = $this->app->erp->LoadModul('Report'); if ($reportModule === null || !$reportModule->isUpdateMessageNeedet()) { return; } $this->app->Tpl->Add( 'MESSAGE', '
Es gibt eine neue Berichte App. Sie können jetzt Ihre Berichte zur neuen App übertragen um die neuen Features für Ihre Berichte zu nutzen. Sie können im Bericht den Button "Jetzt übertragen" klicken um den Berich zu übernehmen.
' ); } protected function showHintTransferToNewApp() { if ( !$this->app->Container->has('ReportGateway') || !$this->app->Container->has('ReportLegacyConverterService') ) { return; } $id = (int)$this->app->Secure->GetGET('id'); if ($id === 0) { return; } /** @var ReportGateway $gateway */ $gateway = $this->app->Container->get('ReportGateway'); //check if a report with this name already exists $sql = sprintf('SELECT name FROM `berichte` WHERE id = %s LIMIT 1', $id); $reportName = $this->app->DB->Select($sql); if (empty($reportName)) { return; } $existingNewReport = $gateway->findReportByName($reportName); if ($existingNewReport === null) { $message = sprintf( '
Sie können diesen Bericht jetzt in die neue Berichte App übertragen.
', $id ); } else { $message = sprintf( '
Dieser Bericht wurde bereits in die neue App übertragen. Bericht in der neuen App ansehen.
', $existingNewReport->getId() ); } $this->app->Tpl->Add('MESSAGE', $message); } }