From 086251579982a913f69ddc137409840011bc3d47 Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Mon, 30 May 2022 15:01:35 +0200 Subject: [PATCH] Bugfix berichte --- www/pages/berichte.php | 1590 ++++++++++++++++++++-------------------- 1 file changed, 797 insertions(+), 793 deletions(-) diff --git a/www/pages/berichte.php b/www/pages/berichte.php index 687b73fa..ed40b451 100644 --- a/www/pages/berichte.php +++ b/www/pages/berichte.php @@ -1,796 +1,800 @@ -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); - } -} - +Secure->GetGET('id'); + + if (is_null($id)) { + return; + } + + $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(intval($w[$i],10), 7, intval($header[$i]), 1, 0, intval($ausrichtung[$i],10), true); + } + $pdf->Ln(); + $sums = []; + while($row = $this->app->DB->Fetch_Row($arr)) + { + $colcounter = 0; + foreach($row as $key=>$value){ + $pdf->Cell(intval($w[$colcounter],10),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); + } +} +