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 .= ''.($rows['doctype_actionmenuname']!=""?$rows['doctype_actionmenuname']:$rows['name']).' ';
- }
- }
-
- /**
- * @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(
- ' ',
- $id
- );
- } else {
- $message = sprintf(
- '',
- $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 .= ''.($rows['doctype_actionmenuname']!=""?$rows['doctype_actionmenuname']:$rows['name']).' ';
+ }
+ }
+
+ /**
+ * @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(
+ ' ',
+ $id
+ );
+ } else {
+ $message = sprintf(
+ '',
+ $existingNewReport->getId()
+ );
+ }
+
+ $this->app->Tpl->Add('MESSAGE', $message);
+ }
+}
+