From f1cda20c859aca93de5b240763f9df3aa750f5af Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 4 Dec 2024 21:00:29 +0100 Subject: [PATCH 1/6] bugix erechnung -> xmlrechnung --- www/lib/dokumente/class.rechnung.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/lib/dokumente/class.rechnung.php b/www/lib/dokumente/class.rechnung.php index de7d019d..a410f565 100644 --- a/www/lib/dokumente/class.rechnung.php +++ b/www/lib/dokumente/class.rechnung.php @@ -78,12 +78,12 @@ class RechnungPDF extends BriefpapierCustom { DATE_FORMAT(DATE_ADD(r.datum, INTERVAL r.zahlungszieltageskonto DAY),'%d.%m.%Y') AS zahlungszielskontodatum, r.abweichendebezeichnung AS rechnungersatz, r.kundennummer, r.sprache, r.schreibschutz, r.soll AS gesamtsumme, - DATE_FORMAT(r.datum,'%Y%m%d') as datum2, r.telefon, r.email, r.erechnung + DATE_FORMAT(r.datum,'%Y%m%d') as datum2, r.telefon, r.email, r.xmlrechnung FROM rechnung r LEFT JOIN auftrag a ON a.id=r.auftragid WHERE r.id='$id' LIMIT 1" ); - if ($data['erechnung']) { + if ($data['xmlrechnung']) { exit(); } From be33ed6b6f20b2405baedef8ef4ce8114be6891c Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 4 Dec 2024 21:29:44 +0100 Subject: [PATCH 2/6] bugfix yui erechnung --- phpwf/plugins/class.yui.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index 08f75a06..eae058dc 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -6844,7 +6844,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise, as fehlt, if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status ".(!empty($zusatzcols)?','.implode(', ',$zusatzcols):'').", - IF(r.erechnung, + IF(r.xmlrechnung, CONCAT('app->Conf->WFconf['defaulttheme']."/images/xml.svg\" border=\"0\">'), CONCAT('app->Conf->WFconf['defaulttheme']."/images/pdf.svg\" border=\"0\">') ), From 11ad10424240261efa1278ca7d79e145fb447b19 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 5 Dec 2024 10:07:01 +0100 Subject: [PATCH 3/6] xmlrechnung archivieren WIP --- www/pages/rechnung.php | 155 +++++++++++++++++++++++++---------------- 1 file changed, 94 insertions(+), 61 deletions(-) diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php index c214525f..367b983d 100644 --- a/www/pages/rechnung.php +++ b/www/pages/rechnung.php @@ -76,6 +76,7 @@ class Rechnung extends GenRechnung $this->app->ActionHandler("dateien","RechnungDateien"); $this->app->ActionHandler("pdffromarchive","RechnungPDFfromArchiv"); $this->app->ActionHandler("archivierepdf","RechnungArchivierePDF"); + $this->app->ActionHandler("archivierexml","RechnungArchiviereXML"); $this->app->ActionHandler("summe","RechnungSumme"); // nur fuer rechte $this->app->ActionHandler("belegnredit","belegnredit"); // nur fuer rechte @@ -201,7 +202,30 @@ class Rechnung extends GenRechnung $this->app->ExitXentral(); } + function RechnungArchiviereXML() { + $id = (int)$this->app->Secure->GetGET('id'); + $result = $this->RechnungSmarty(json: false, returnvalue: true); + if ($result['success']) { + $this->app->erp->CreateDateiWithStichwort( + name: $result['filename'].'.xml', + titel: $result['title'], + beschreibung: '', + nummer: '', + datei: $result['xml'], + ersteller: $this->app->User->GetName(), + subjekt: 'rechnung', + objekt: 'rechnung', + parameter: $id + ); + } else { + throw new exception("XML Rechnung fehlgeschlagen!"); + } + + $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1' WHERE id='$id'"); + $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); + } + function RechnungArchivierePDF() { $id = (int)$this->app->Secure->GetGET('id'); @@ -1284,9 +1308,10 @@ class Rechnung extends GenRechnung } } - function RechnungSmarty($json = false) { + function RechnungSmarty($json = false, $returnvalue = false) { $id = $this->app->Secure->GetGET('id'); $result = Array(); + $success = true; $result['rechnungssteller']['name'] = $this->app->erp->Firmendaten('name'); $result['rechnungssteller']['strasse'] = $this->app->erp->Firmendaten('strasse'); @@ -1334,32 +1359,44 @@ class Rechnung extends GenRechnung $this->remove_html_entities_from_array($result); $this->remove_CDATA_fragments_from_array($result); - if ($json) { - header('Content-type:text/plain'); - header('Content-Disposition: attachment;filename='.$filename.'.json'); - echo(json_encode($result,JSON_PRETTY_PRINT)); + if ($json) { + $headers[] = 'Content-type:text/plain'; + $headers[] = 'Content-Disposition: attachment;filename='.$filename.'.json'; + $output = json_encode($result,JSON_PRETTY_PRINT); } else { + $headers[] = 'Content-type:text/xml'; + $headers[] = 'Content-Disposition: attachment;filename='.$filename.'.xml'; $template_id = $this->GetXMLSmartyTemplate($id); - if(empty($template_id)) { - header('Content-type:text/xml'); - header('Content-Disposition: attachment;filename='.$filename.'.xml'); - echo(' + if(empty($template_id)) { + $output = ' Kein Smarty Template an der Addresse hinterlegt! -'); +'; + $success = false; } else { $template = $this->app->DB->Select("SELECT template from smarty_templates WHERE id = '$template_id' LIMIT 1"); $smarty = new Smarty; $directory = $this->app->erp->GetTMP().'/smarty/templates'; $smarty->setCompileDir($directory); - $smarty->assign('rechnung', $result); - $html = $smarty->fetch('string:'.$template); - header('Content-type:application/xml'); - header('Content-Disposition: attachment;filename='.$filename.'.xml'); - echo($html); - } + $smarty->assign('rechnung', $output); + $output = $smarty->fetch('string:'.$template); + } } - $this->app->ExitXentral(); + + if ($returnvalue) { + return(Array( + 'success' => $success, + 'title' => 'Rechnung '.$result['kopf']['belegnr'], + 'filename' => $filename, + 'xml' => $output + )); + } else { + foreach ($headers as $header) { + header($header); + } + echo($output); + $this->app->ExitXentral(); + } } function RechnungSuche() @@ -1732,38 +1769,6 @@ class Rechnung extends GenRechnung $this->app->erp->CheckBearbeiter($id,'rechnung'); $this->app->erp->CheckBuchhaltung($id,'rechnung'); - $invoiceArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,zahlungsstatus,schreibschutz FROM rechnung WHERE id= %d LIMIT 1', - (int)$id - ) - ); - $zahlungsweise= $invoiceArr['zahlungsweise']; - $zahlungszieltage= $invoiceArr['zahlungszieltage']; - $zahlungsstatus= $invoiceArr['zahlungsstatus']; - if($zahlungsweise==='rechnung' && $zahlungszieltage<1) - { - $this->app->Tpl->Add('MESSAGE',"
Hinweis: Fälligkeit auf \"sofort\", da Zahlungsziel in Tagen auf 0 Tage gesetzt ist!
"); - } - - $status= $invoiceArr['status']; - $schreibschutz= $invoiceArr['schreibschutz']; - if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') - { - $Brief = new Briefpapier($this->app); - if($Brief->zuArchivieren($id, "rechnung")) - { - $this->app->Tpl->Add('MESSAGE',"
Die Rechnung ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
"); - }elseif(!$this->app->DB->Select("SELECT versendet FROM rechnung WHERE id = '$id' LIMIT 1")) - { - $this->app->Tpl->Add('MESSAGE',"
Die Rechnung wurde noch nicht versendet!
"); - } - } - $this->app->erp->RechnungNeuberechnen($id); //BENE - - $this->RechnungMiniDetail('MINIDETAIL',false); //BENE - $this->app->Tpl->Set('ICONMENU',$this->RechnungIconMenu($id)); - $this->app->Tpl->Set('ICONMENU2',$this->RechnungIconMenu($id,2)); if($id > 0){ $rechnungarr = $this->app->DB->SelectRow("SELECT * FROM rechnung WHERE id='$id' LIMIT 1"); } @@ -1775,18 +1780,46 @@ class Rechnung extends GenRechnung $soll = 0; $projekt = 0; if(!empty($rechnungarr)){ - $nummer = $rechnungarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$id' LIMIT 1"); - $kundennummer = $rechnungarr['kundennummer'];//$this->app->DB->Select("SELECT kundennummer FROM rechnung WHERE id='$id' LIMIT 1"); - $adresse = $rechnungarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); - $punkte = $rechnungarr['punkte'];//$this->app->DB->Select("SELECT punkte FROM rechnung WHERE id='$id' LIMIT 1"); - $bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1"); - $soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); - $projekt = $rechnungarr['projekt']; - - $skontosoll = $this->app->DB->Select("SELECT TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll FROM rechnung where id = '".$id."' LIMIT 1"); - - $xmlrechnung = $rechnungarr['xmlrechnung']; + $nummer = $rechnungarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$id' LIMIT 1"); + $kundennummer = $rechnungarr['kundennummer'];//$this->app->DB->Select("SELECT kundennummer FROM rechnung WHERE id='$id' LIMIT 1"); + $adresse = $rechnungarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); + $punkte = $rechnungarr['punkte'];//$this->app->DB->Select("SELECT punkte FROM rechnung WHERE id='$id' LIMIT 1"); + $bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1"); + $soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); + $projekt = $rechnungarr['projekt']; + $skontosoll = $this->app->DB->Select("SELECT TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll FROM rechnung where id = '".$id."' LIMIT 1"); + $xmlrechnung = $rechnungarr['xmlrechnung']; + $zahlungsweise= $rechnungarr['zahlungsweise']; + $zahlungszieltage= $rechnungarr['zahlungszieltage']; + $zahlungsstatus= $rechnungarr['zahlungsstatus']; + if($zahlungsweise==='rechnung' && $zahlungszieltage<1) + { + $this->app->Tpl->Add('MESSAGE',"
Hinweis: Fälligkeit auf \"sofort\", da Zahlungsziel in Tagen auf 0 Tage gesetzt ist!
"); + } + $status= $rechnungarr['status']; + $schreibschutz= $rechnungarr['schreibschutz']; } + if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') + { + $Brief = new Briefpapier($this->app); + if($Brief->zuArchivieren($id, "rechnung")) + { + if ($xmlrechnung) { + $archiviere = "archivierexml"; + } else { + $archiviere = "archivierepdf"; + } + $this->app->Tpl->Add('MESSAGE',"
Die Rechnung ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
"); + }elseif(!$this->app->DB->Select("SELECT versendet FROM rechnung WHERE id = '$id' LIMIT 1")) + { + $this->app->Tpl->Add('MESSAGE',"
Die Rechnung wurde noch nicht versendet!
"); + } + } + $this->app->erp->RechnungNeuberechnen($id); //BENE + + $this->RechnungMiniDetail('MINIDETAIL',false); //BENE + $this->app->Tpl->Set('ICONMENU',$this->RechnungIconMenu($id)); + $this->app->Tpl->Set('ICONMENU2',$this->RechnungIconMenu($id,2)); $this->app->Tpl->Set('PUNKTE',""); $this->app->Tpl->Set('BONUSPUNKTE',""); @@ -2157,7 +2190,7 @@ class Rechnung extends GenRechnung ' überein ' ); } - + parent::RechnungEdit(); if($id > 0 && $this->app->DB->Select( sprintf( From bbe92dce2adb46fdf429f3ed7b8ec54e1d028d21 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 5 Dec 2024 10:57:38 +0100 Subject: [PATCH 4/6] rechnung archive XML and PDF separated --- www/lib/class.erpapi.php | 16 +++++++-- www/pages/rechnung.php | 71 +++++++++++++++++----------------------- 2 files changed, 44 insertions(+), 43 deletions(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 8041d826..11ffc712 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -2199,6 +2199,18 @@ public function NavigationHooks(&$menu) return false; } + // Rechnung special treatment because of XML + function RechnungArchivieren($id) { + $sql = "SELECT xmlrechnung FROM rechnung WHERE id = '".$id."' LIMIT 1"; + $xmlrechnung = $this->app->DB->Select($sql); + if ($xmlrechnung) { + $rechnungsmodul = $this->app->loadModule('rechnung', false); + return($rechnungsmodul->RechnungArchiviereXML($id)); + } else { + $this->PDFArchivieren('rechnung',$id,true); + } + } + // @refactor in Location Klasse function UrlOrigin($s, $use_forwarded_host=false) { @@ -3267,7 +3279,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu ); $this->app->erp->ANABREGSNeuberechnen($invoice['id'], 'rechnung'); if($invoice['schreibschutz']) { - $this->app->erp->PDFArchivieren('rechunng', $invoice['id'], true); + $this->app->erp->RechnungArchivieren($invoice['id']); } } } @@ -15241,7 +15253,7 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0) return; } if(!empty($rechnungarr['schreibschutz']) && !empty($rechnungarr['zuarchivieren'])) { - $this->app->erp->PDFArchivieren('rechnung', $id, true); + $this->app->erp->RechnungArchivieren($id); } $adresse = $rechnungarr['adresse']; $to = $rechnungarr['email']; diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php index 367b983d..e97f6fc5 100644 --- a/www/pages/rechnung.php +++ b/www/pages/rechnung.php @@ -202,9 +202,11 @@ class Rechnung extends GenRechnung $this->app->ExitXentral(); } - function RechnungArchiviereXML() { - $id = (int)$this->app->Secure->GetGET('id'); - $result = $this->RechnungSmarty(json: false, returnvalue: true); + function RechnungArchiviereXML($id = null) { + if ($id === null) { + $id = (int)$this->app->Secure->GetGET('id'); + } + $result = $this->RechnungSmarty(id: $id, json: false, returnvalue: true); if ($result['success']) { $this->app->erp->CreateDateiWithStichwort( @@ -222,36 +224,14 @@ class Rechnung extends GenRechnung throw new exception("XML Rechnung fehlgeschlagen!"); } - $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1' WHERE id='$id'"); + $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1', zuarchivieren = '0' WHERE id='$id'"); $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); } function RechnungArchivierePDF() { $id = (int)$this->app->Secure->GetGET('id'); - $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id = '$id' LIMIT 1"); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(1); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(1); - + $this->app->erp->PDFArchivieren('rechnung', $id, true); $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1' WHERE id='$id'"); $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); } @@ -1258,7 +1238,7 @@ class Rechnung extends GenRechnung $doppel = $this->app->Secure->GetGET('doppel'); $invoiceArr = $this->app->DB->SelectRow("SELECT schreibschutz, projekt, zuarchivieren FROM rechnung WHERE id='$id' LIMIT 1"); if(!empty($invoiceArr['schreibschutz']) && !empty($invoiceArr['zuarchivieren'])) { - $this->app->erp->PDFArchivieren('rechnung', $id, true); + $this->app->erp->RechnungArchivieren($id); } $projekt = $invoiceArr['projekt']; $schreibschutz = $invoiceArr['schreibschutz']; @@ -1283,7 +1263,7 @@ class Rechnung extends GenRechnung // Print PHP array for SmartyXML function RechnungJSON() { - $this->RechnungSmarty(true); + $this->RechnungSmarty(json: true); } function remove_html_entities_from_array(&$array) { @@ -1308,8 +1288,10 @@ class Rechnung extends GenRechnung } } - function RechnungSmarty($json = false, $returnvalue = false) { - $id = $this->app->Secure->GetGET('id'); + function RechnungSmarty($id = null, $json = false, $returnvalue = false) { + if ($id === null) { + $id = $this->app->Secure->GetGET('id'); + } $result = Array(); $success = true; @@ -2199,7 +2181,7 @@ class Rechnung extends GenRechnung ) ) ) { - $this->app->erp->PDFArchivieren('rechnung', $id, true); + $this->app->erp->RechnungArchivieren($id); } $this->app->erp->MessageHandlerStandardForm(); @@ -2288,7 +2270,7 @@ class Rechnung extends GenRechnung $invoiceId ) ); - $this->app->erp->PDFArchivieren('rechnung', $invoiceId, true); + $this->app->erp->RechnungArchivieren($invoiceId); if(class_exists('RechnungPDFCustom')) { $Brief = new RechnungPDFCustom($this->app,$projekt); } @@ -2344,13 +2326,15 @@ class Rechnung extends GenRechnung if(!$v) { continue; } + $xmlrechnung = $this->app->DB->Select("SELECT xmlrechnung FROM rechnung WHERE id=$v LIMIT 1"); $checkpapier = $this->app->DB->Select( "SELECT a.rechnung_papier FROM rechnung AS r LEFT JOIN adresse AS a ON r.adresse=a.id WHERE r.id='$v' LIMIT 1" ); - if($checkpapier!=1 && + + if((($checkpapier !=1) || $erechnung) && $this->app->DB->Select( "SELECT r.id FROM rechnung AS r @@ -2359,11 +2343,11 @@ class Rechnung extends GenRechnung LIMIT 1" ) ) { - $this->app->erp->PDFArchivieren('rechnung', $v, true); + $this->app->erp->RechnungArchivieren($v); $this->app->erp->Rechnungsmail($v); } - else if($checkpapier && $drucker) { - $this->app->erp->PDFArchivieren('rechnung', $v, true); + else if($checkpapier && $drucker && !$erechnung) { + $this->app->erp->RechnungArchivieren($v); $projekt = $this->app->DB->Select( "SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1" ); @@ -2417,12 +2401,13 @@ class Rechnung extends GenRechnung $reArr = $this->app->DB->SelectRow( sprintf( "SELECT projekt,belegnr,status,usereditid,adresse, - DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` + DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open`, + xmlrechnung FROM rechnung WHERE id=%d LIMIT 1", $v ) ); - if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) { + if($reArr['belegnr'] === '' || $reArr['xmlrechnung'] || ($reArr['open'] && $reArr['status'] === 'freigegeben')) { continue; } if($reArr['status'] === 'freigegeben') { @@ -2432,7 +2417,7 @@ class Rechnung extends GenRechnung $this->app->erp->RechnungProtokoll($v,'Rechnung gedruckt'); $this->app->DB->Update("UPDATE rechnung SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1"); $this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE id = '$v' AND status!='storniert' LIMIT 1"); - $this->app->erp->PDFArchivieren('rechnung', $v, true); + $this->app->erp->RechnungArchivieren($v); if(class_exists('RechnungPDFCustom')) { $Brief = new RechnungPDFCustom($this->app,$projekt); } @@ -2452,7 +2437,11 @@ class Rechnung extends GenRechnung case 'pdf': $tmpfile = []; foreach($auswahl as $v) { - $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1"); + $xmlrechnung = $this->app->DB->Select("SELECT xmlrechnung FROM rechnung WHERE id=$v LIMIT 1"); + if ($xmlrechnung) { + continue; + } + $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1"); if(class_exists('RechnungPDFCustom')) { $Brief = new RechnungPDFCustom($this->app,$projekt); } From dc53b0462c5312645ccd8b7feadb4b76fca4fbb7 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 5 Dec 2024 14:31:20 +0100 Subject: [PATCH 5/6] xml rechnung sendmail add file version --- www/lib/class.erpapi.php | 145 ++++++++++++++++++++++----------------- www/pages/auftrag.php | 5 +- www/pages/rechnung.php | 135 ++++++++++++++++++++---------------- 3 files changed, 158 insertions(+), 127 deletions(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 11ffc712..02d59d24 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -15246,7 +15246,7 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0) } $rechnungarr = $this->app->DB->SelectRow( - "SELECT adresse, email, name,belegnr,projekt,sprache,schreibschutz,zuarchivieren + "SELECT adresse, email, name,belegnr,projekt,sprache,schreibschutz,zuarchivieren,xmlrechnung FROM rechnung WHERE id='$id' LIMIT 1" ); if(empty($rechnungarr)) { @@ -15260,6 +15260,7 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0) $to_name = $rechnungarr['name']; $belegnr = $rechnungarr['belegnr']; $projekt = $rechnungarr['projekt']; + $xmlrechnung = $rechnungarr['xmlrechnung']; $sprache = $rechnungarr['sprache']; if($sprache=='' && $adresse > 0) { @@ -15284,21 +15285,27 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0) $betreff = $this->ParseUserVars('rechnung',$id,$betreff); // 19.01.2018 eingefuegt BW if($id > 0) { - $this->app->erp->BriefpapierHintergrunddisable = false; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - $arrtmpfile[] = $Brief->displayTMP(); - if(!$Brief->DocumentArchiviert()) { - $Brief->ArchiviereDocument(true, true); + if (!$xmlrechnung) { + $this->app->erp->BriefpapierHintergrunddisable = false; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($id); + $arrtmpfile[] = $Brief->displayTMP(); + + if(!$Brief->DocumentArchiviert()) { + $Brief->ArchiviereDocument(true, true); + } + $md5arr[] = @md5_file($arrtmpfile[(!empty($arrtmpfile)?count($arrtmpfile):0)-1]); + } else { + $arrtmpfile = Array(); + $md5arr = Array(); } - $md5arr[] = @md5_file($arrtmpfile[(!empty($arrtmpfile)?count($arrtmpfile):0)-1]); // anhaenge automatisch mitversenden $resultdateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE objekt LIKE 'Rechnung' AND parameter='$id'"); $cResultdateien = !empty($resultdateien)?count($resultdateien):0; @@ -23489,54 +23496,63 @@ function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert, if($typ=="rechnung") { // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetRechnung($id); + $xmlrechnug = $this->app->DB->Select("SELECT xmlrechnung FROM rechnung WHERE id ='".$id."' LIMIT 1"); + if ($xmlrechnung) { + $xmlrechnungresult = $this->app->erp->GetXMLRechnung($id); + if ($xmlrechnungresult['success']) { + $tmpfile = $xmlrechnungresult['xml']; + } else { + throw new exception("XML Rechnung fehlgeschlagen!"); + } + } else { + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetRechnung($id); - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } - //$Brief->ArchiviereDocument(); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RechnungPDF($this->app,$projektbriefpapier); + //$Brief->ArchiviereDocument(); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetRechnung($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetRechnung($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } } - $Brief->GetRechnung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetRechnung($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - //$Brief->ArchiviereDocument(); } @@ -29231,7 +29247,6 @@ function Firmendaten($field,$projekt="") function SetXMLRechnung($id) { - /** @var Preisanfrage $obj */ $obj = $this->app->erp->LoadModul('rechnung'); if(!empty($obj) && method_exists($obj,'SetXMLRechnung')) { return $obj->SetXMLRechnung($id); @@ -29239,6 +29254,15 @@ function Firmendaten($field,$projekt="") return 0; } + function GetXMLRechnung($id) + { + $obj = $this->app->erp->LoadModul('rechnung'); + if(!empty($obj) && method_exists($obj,'RechnungSmarty')) { + return $obj->RechnungSmarty(id: $id, returnvalue: true); + } + return 0; + } + function BelegFreigabe($beleg,$id) { if($id <= 0 || empty($beleg)) { @@ -33055,7 +33079,6 @@ function Firmendaten($field,$projekt="") } } - function DeleteBestellung($id) { /** @var Bestellung $obj */ @@ -33066,7 +33089,6 @@ function Firmendaten($field,$projekt="") } } - function CreateRechnung($adresse="") { /** @var Rechnung $obj */ @@ -33076,7 +33098,6 @@ function Firmendaten($field,$projekt="") } } - public function GetStandardWaehrung($projekt=0) { if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['waehrung'])) { diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php index 27d0e000..ee22925e 100644 --- a/www/pages/auftrag.php +++ b/www/pages/auftrag.php @@ -5717,7 +5717,7 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. $this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung"); $this->app->erp->rechnung_zahlstatus_berechnen($id); - $this->app->erp->PDFArchivieren("rechnung",$rechnung); + $this->app->erp->RechnungArchivieren($rechnung); } } // auftrag_position geliefert_menge und geliefert anpassen @@ -6129,15 +6129,12 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. } unlink($tmpfile); } - // Send the invoice as last step if($autodruckrechnungstufe1mail && $rechnung > 0) { $this->app->erp->Rechnungsmail($rechnung); } - $this->app->erp->RunHook('auftrag_versand_ende', 1, $id); - // wenn per URL aufgerufen if($internmodus!='1') { diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php index e97f6fc5..e2b6354b 100644 --- a/www/pages/rechnung.php +++ b/www/pages/rechnung.php @@ -205,27 +205,52 @@ class Rechnung extends GenRechnung function RechnungArchiviereXML($id = null) { if ($id === null) { $id = (int)$this->app->Secure->GetGET('id'); + $redirect = true; } $result = $this->RechnungSmarty(id: $id, json: false, returnvalue: true); - + if ($result['success']) { - $this->app->erp->CreateDateiWithStichwort( - name: $result['filename'].'.xml', - titel: $result['title'], - beschreibung: '', - nummer: '', - datei: $result['xml'], - ersteller: $this->app->User->GetName(), - subjekt: 'rechnung', - objekt: 'rechnung', - parameter: $id - ); + + // Check for old files + $existing = false; + $existing_ids = $this->app->erp->GetDateiSubjektObjekt('rechnung','rechnung',$id); + foreach ($existing_ids as $existing_id) { + if($this->app->erp->GetDateiEndung($existing_id) == 'xml') { + $existing = true; + break; + } + } + + if ($existing) { + $this->app->erp->AddDateiVersion( + id: $existing_id, + ersteller: $this->app->User->GetName(), + dateiname: $result['filename'].'.xml', + bemerkung: '', + datei: $result['xml'], + path: "" + ); + } else { + $this->app->erp->CreateDateiWithStichwort( + name: $result['filename'].'.xml', + titel: $result['title'], + beschreibung: '', + nummer: '', + datei: $result['xml'], + ersteller: $this->app->User->GetName(), + subjekt: 'rechnung', + objekt: 'rechnung', + parameter: $id + ); + } } else { throw new exception("XML Rechnung fehlgeschlagen!"); } $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1', zuarchivieren = '0' WHERE id='$id'"); - $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); + if ($redirect) { + $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); + } } function RechnungArchivierePDF() @@ -1300,7 +1325,7 @@ class Rechnung extends GenRechnung $result['rechnungssteller']['ort'] = $this->app->erp->Firmendaten('ort'); $result['rechnungssteller']['plz'] = $this->app->erp->Firmendaten('plz'); $result['rechnungssteller']['land'] = $this->app->erp->Firmendaten('land'); - $result['rechnungssteller']['steuernummer'] = $this->app->erp->Firmendaten('steuernummer'); + $result['rechnungssteller']['steuernummer'] = $this->app->erp->Firmendaten('steuernummer'); $rechnung = $this->app->DB->SelectRow(" SELECT * FROM rechnung WHERE id = $id LIMIT 1 @@ -1321,13 +1346,13 @@ class Rechnung extends GenRechnung throw new exception("Rechnung enthält keine Positionen!"); } - $steuern = Array(); - foreach ($positionen as $key => $position) { + $steuern = Array(); + foreach ($positionen as $key => $position) { $this->app->erp->GetSteuerPosition('rechnung', $position['id'], $steuersatz, $steuertext, $erloes); $positionen[$key]['steuersatz'] = $steuersatz; $positionen[$key]['steuertext'] = $steuertext; $positionen[$key]['erloese'] = $erloes; - + $steuern[$steuersatz]['umsatz_netto'] += $position['umsatz_netto_gesamt']; $steuern[$steuersatz]['umsatz_brutto'] += $position['umsatz_brutto_gesamt']; $steuern[$steuersatz]['prozent'] = $steuersatz; @@ -1341,15 +1366,15 @@ class Rechnung extends GenRechnung $this->remove_html_entities_from_array($result); $this->remove_CDATA_fragments_from_array($result); - if ($json) { + if ($json) { $headers[] = 'Content-type:text/plain'; - $headers[] = 'Content-Disposition: attachment;filename='.$filename.'.json'; + $headers[] = 'Content-Disposition: attachment;filename='.$filename.'.json'; $output = json_encode($result,JSON_PRETTY_PRINT); } else { $headers[] = 'Content-type:text/xml'; $headers[] = 'Content-Disposition: attachment;filename='.$filename.'.xml'; $template_id = $this->GetXMLSmartyTemplate($id); - if(empty($template_id)) { + if(empty($template_id)) { $output = ' Kein Smarty Template an der Addresse hinterlegt! @@ -1357,12 +1382,12 @@ class Rechnung extends GenRechnung $success = false; } else { $template = $this->app->DB->Select("SELECT template from smarty_templates WHERE id = '$template_id' LIMIT 1"); - $smarty = new Smarty; - $directory = $this->app->erp->GetTMP().'/smarty/templates'; - $smarty->setCompileDir($directory); - $smarty->assign('rechnung', $output); + $smarty = new Smarty; + $directory = $this->app->erp->GetTMP().'/smarty/templates'; + $smarty->setCompileDir($directory); + $smarty->assign('rechnung', $output); $output = $smarty->fetch('string:'.$template); - } + } } if ($returnvalue) { @@ -1482,7 +1507,7 @@ class Rechnung extends GenRechnung public function CopyRechnungPosition() { $this->app->YUI->SortListEvent('copy','rechnung_position','rechnung'); - $this->RechnungPositionen(); + $this->RechnungPositionen(); } public function DelRechnungPosition() @@ -1768,7 +1793,7 @@ class Rechnung extends GenRechnung $punkte = $rechnungarr['punkte'];//$this->app->DB->Select("SELECT punkte FROM rechnung WHERE id='$id' LIMIT 1"); $bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1"); $soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); - $projekt = $rechnungarr['projekt']; + $projekt = $rechnungarr['projekt']; $skontosoll = $this->app->DB->Select("SELECT TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll FROM rechnung where id = '".$id."' LIMIT 1"); $xmlrechnung = $rechnungarr['xmlrechnung']; $zahlungsweise= $rechnungarr['zahlungsweise']; @@ -1817,7 +1842,7 @@ class Rechnung extends GenRechnung if($nummer!='') { - $this->app->Tpl->Set('NUMMER',$nummer); + $this->app->Tpl->Set('NUMMER',$nummer); if (($schreibschutz!='1') && $this->app->erp->RechteVorhanden('rechnung','belegnredit')){ $this->app->Tpl->Set('BELEGNRHIDDEN','hidden'); @@ -1926,7 +1951,7 @@ class Rechnung extends GenRechnung $this->app->erp->RemoveReadonly('ist'); - if($this->app->erp->Firmendaten('mahnwesenmitkontoabgleich')!='1' || $this->app->DB->Select("SELECT mahnwesenfestsetzen FROM rechnung WHERE id='$id' LIMIT 1")==1) + if($this->app->erp->Firmendaten('mahnwesenmitkontoabgleich')!='1' || $this->app->DB->Select("SELECT mahnwesenfestsetzen FROM rechnung WHERE id='$id' LIMIT 1")==1) $this->app->erp->RemoveReadonly('ist');*/ //$auftrag= $this->app->DB->Select("SELECT auftrag FROM rechnung WHERE id='$id' LIMIT 1"); @@ -2009,7 +2034,7 @@ class Rechnung extends GenRechnung $this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden'); } - $saldo = $this->app->erp->GetSaldoDokument($id,'rechnung'); + $saldo = $this->app->erp->GetSaldoDokument($id,'rechnung'); if (empty($saldo)) { $this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden'); $this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden'); @@ -2025,7 +2050,7 @@ class Rechnung extends GenRechnung if (!empty($rechnung_schnelleingabe_konto)) { $this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden'); - if ($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','manuellbezahltmarkiert') && !empty($zahlbetrag)) { + if ($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','manuellbezahltmarkiert') && !empty($zahlbetrag)) { if ($bezahlt_am == '0000-00-00') { $bezahlt_am = date('Y-m-d'); } @@ -2054,7 +2079,7 @@ class Rechnung extends GenRechnung $this->app->DB->Insert($sql); $kontoauszug = $this->app->DB->GetInsertID(); $this->app->erp->fibu_buchungen_buchen("kontoauszuege",$kontoauszug, "rechnung", $id, -$zahlbetrag, 'EUR', $bezahlt_am, "Rechnung ".$nummer." Schnelleingabe"); - $this->rechnung_zahlstatus_berechnen($id); + $this->rechnung_zahlstatus_berechnen($id); } } else { $this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden'); @@ -2271,24 +2296,13 @@ class Rechnung extends GenRechnung ) ); $this->app->erp->RechnungArchivieren($invoiceId); - if(class_exists('RechnungPDFCustom')) { - $Brief = new RechnungPDFCustom($this->app,$projekt); - } - else { - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($invoiceId); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(); - @unlink($tmpfile); - return true; } public function RechnungList() { - $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen' WHERE zahlungsstatus=''"); + $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen' WHERE zahlungsstatus=''"); if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) { @@ -2322,6 +2336,7 @@ class Rechnung extends GenRechnung implode(', ', $auswahl) ) ); + foreach($auswahl as $v) { if(!$v) { continue; @@ -2441,7 +2456,7 @@ class Rechnung extends GenRechnung if ($xmlrechnung) { continue; } - $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1"); if(class_exists('RechnungPDFCustom')) { $Brief = new RechnungPDFCustom($this->app,$projekt); } @@ -2643,7 +2658,7 @@ class Rechnung extends GenRechnung $zahlungszieltageskonto = 0; $zahlungszielskonto = 0; } - + $this->app->DB->Insert("INSERT INTO rechnung ( id, datum, @@ -2662,8 +2677,7 @@ class Rechnung extends GenRechnung ohne_briefpapier, angelegtam, usereditid, - abweichendebezeichnung, - xmlrechnung + abweichendebezeichnung ) VALUES ( '', @@ -2683,8 +2697,7 @@ class Rechnung extends GenRechnung '".$ohnebriefpapier."', NOW(), '$usereditid', - '$abweichendebezeichnung', - '$xmlrechnung' + '$abweichendebezeichnung' )" ); @@ -2701,8 +2714,8 @@ class Rechnung extends GenRechnung $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); $this->app->DB->Update("UPDATE rechnung SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); } + $this->SetXMLRechnung($id); $this->app->erp->SchnellFreigabe('rechnung',$id); - $this->app->erp->LoadSteuersaetzeWaehrung($id,'rechnung',$projekt); $this->app->erp->EventAPIAdd('EventRechnungCreate',$id,'rechnung','create'); @@ -3013,7 +3026,7 @@ class Rechnung extends GenRechnung foreach ($zahlungen as $zahlung) { $row = array( $zahlung['datum'], - "
+ " ".ucfirst($zahlung['doc_typ'])." ".$zahlung['doc_info']." ", @@ -3024,7 +3037,7 @@ class Rechnung extends GenRechnung } $salden = $this->app->erp->GetSaldenDokument($id,'rechnung'); - foreach ($salden as $saldo) { + foreach ($salden as $saldo) { $row = array( '', 'Saldo', @@ -3033,7 +3046,7 @@ class Rechnung extends GenRechnung ); $et->AddRow($row); } - return($et->DisplayNew('return',"")); + return($et->DisplayNew('return',"")); } } @@ -3055,8 +3068,8 @@ class Rechnung extends GenRechnung waehrung, datum, zahlungszieltage, - DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as zieldatum, - CURRENT_DATE > DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as faellig, + DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as zieldatum, + CURRENT_DATE > DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as faellig, zahlungszielskonto, TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll, zahlungszieltageskonto, @@ -3071,7 +3084,7 @@ class Rechnung extends GenRechnung $saldo = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung'); if (!empty($saldo)) { if ($saldo['waehrung'] == $offene_rechnung['waehrung']) { - $offene_rechnung['ist'] = $offene_rechnung['soll']+$saldo['betrag']; + $offene_rechnung['ist'] = $offene_rechnung['soll']+$saldo['betrag']; // Check for skonto $skontorelevante_zahlungen = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung','zubuchung',$offene_rechnung['zieldatumskonto'])['betrag']; $zielkonforme_zahlungen = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung','zubuchung',$offene_rechnung['zieldatum'])['betrag']; @@ -3081,7 +3094,7 @@ class Rechnung extends GenRechnung } else if (abs($skontorelevante_zahlungen-$offene_rechnung['skontosoll']) <= 0.01) { // Skonto ok -> book difference $sachkonto = $this->app->erp->Firmendaten('rechnung_skonto_kontorahmen'); - if (!empty($sachkonto)) { + if (!empty($sachkonto)) { $this->app->erp->fibu_buchungen_buchen('rechnung',$offene_rechnung['id'],'kontorahmen',$sachkonto,$offene_rechnung['soll']-$skontorelevante_zahlungen,$offene_rechnung['waehrung'],date('Y-m-d'),''); $offene_rechnung['ist'] = $offene_rechnung['soll']; $saldo['betrag'] = 0; @@ -3098,16 +3111,16 @@ class Rechnung extends GenRechnung SET ist = ".$saldo['betrag']."+soll, zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen') - WHERE id=".$offene_rechnung['id']; + WHERE id=".$offene_rechnung['id']; $this->app->DB->Update($sql); } } else { - $this->app->DB->Update("UPDATE rechnung SET ist = null WHERE id=".$offene_rechnung['id']); + $this->app->DB->Update("UPDATE rechnung SET ist = null WHERE id=".$offene_rechnung['id']); } } $this->app->erp->fibu_rebuild_tables(); - // END RECALCULATE + // END RECALCULATE } } From c71eb50b7407ba510cc524eef7608b64075718a4 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 5 Dec 2024 16:08:16 +0100 Subject: [PATCH 6/6] XML rechnung icons and links for auftrag & lieferschein --- phpwf/plugins/class.yui.php | 25 +++++++++++++++++++++---- www/pages/auftrag.php | 34 +++++++++++++++++++--------------- www/pages/lieferschein.php | 22 ++++++++-------------- www/pages/rechnung.php | 10 +--------- 4 files changed, 49 insertions(+), 42 deletions(-) diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index eae058dc..8b9a07ea 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -6844,10 +6844,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise, as fehlt, if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status ".(!empty($zusatzcols)?','.implode(', ',$zusatzcols):'').", - IF(r.xmlrechnung, - CONCAT('app->Conf->WFconf['defaulttheme']."/images/xml.svg\" border=\"0\">'), - CONCAT('app->Conf->WFconf['defaulttheme']."/images/pdf.svg\" border=\"0\">') - ), + ".$this->GetRechnungFileDownloadLinkIconSQL().", r.id FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid "; if(isset($parameter['artikel']) && !empty($parameter['artikel'])) { @@ -15941,4 +15938,24 @@ function IframeDialog($width, $height, $src = "") { return 'convert(cast(convert('.$field.' using latin1) as binary) using utf8)'; //return $field.' COLLATE utf8_general_ci'; ersetzt Original } + + public function GetRechnungFileDownloadLinkIconSQL($tablename = 'r') { + return( + "IF(".$tablename.".xmlrechnung, + CONCAT('app->Conf->WFconf['defaulttheme']."/images/xml.svg\" border=\"0\">'), + CONCAT('app->Conf->WFconf['defaulttheme']."/images/pdf.svg\" border=\"0\">') + )" + ); + } + + public function GetRechnungFileDownloadLinkIcon($id) { + $xmlrechnung = $this->app->DB->SelectRow("SELECT belegnr, xmlrechnung FROM rechnung WHERE id = '".$id."' LIMIT 1"); + if ($xmlrechnung['belegnr'] == '') { + return(''); + } else if ($xmlrechnung['xmlrechnung']) { + return(""); + } else { + return(""); + } + } } diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php index ee22925e..fdcecd1a 100644 --- a/www/pages/auftrag.php +++ b/www/pages/auftrag.php @@ -1640,6 +1640,7 @@ class Auftrag extends GenAuftrag * * @return string */ +/* XENTRAL Legacy public function AuftragTrackingTabelle($id) { $table = new EasyTable($this->app); @@ -1676,6 +1677,7 @@ class Auftrag extends GenAuftrag return $result; } +*/ function AuftragPDFfromArchiv() { @@ -2117,26 +2119,28 @@ class Auftrag extends GenAuftrag /* rechnungen */ + $link_zur_rechnung = "CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),' ',".$this->app->YUI->GetRechnungFileDownloadLinkIconSQL().",'  ')"; + $sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1"); if($sammelrechnungcheck) { $rechnung = $this->app->DB->SelectPairs( "SELECT - r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   - ') as rechnung + r.id, + ".$link_zur_rechnung." as rechnung FROM rechnung r WHERE r.auftragid='$id' union SELECT - r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   - ') as rechnung + r.id, + ".$link_zur_rechnung." as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag='$id' union SELECT - r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   - ') as rechnung + r.id, + ".$link_zur_rechnung." as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id @@ -2158,9 +2162,8 @@ class Auftrag extends GenAuftrag else{ $rechnung = $this->app->DB->SelectPairs( "SELECT - r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   - ' - ) as rechnung + r.id, + ".$link_zur_rechnung." as rechnung FROM rechnung r WHERE r.auftragid='$id'" ); @@ -2176,10 +2179,9 @@ class Auftrag extends GenAuftrag if(!$rechnung) { $rechnung = $this->app->DB->SelectPairs( "SELECT - r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),'   - ' - ) as rechnung - FROM rechnung r + r.id, + ".$link_zur_rechnung." as rechnung + FROM rechnung r INNER JOIN auftrag a ON a.rechnungid = r.id WHERE a.id='$id' "); @@ -5071,7 +5073,7 @@ class Auftrag extends GenAuftrag foreach($lieferscheine as $deliveryNoteId => $deliveryNoteNumber) { $optional .= " "; } } @@ -5084,7 +5086,7 @@ class Auftrag extends GenAuftrag foreach($rechnungen as $invoiceId => $invoiceNumber) { $optional .= " "; } } @@ -5260,11 +5262,13 @@ class Auftrag extends GenAuftrag $this->app->Tpl->Add('AUFTRAGSDOKUMENTE',""); } +/* XENTRAL Legacy //suche alle LS zu diesem Auftrag if($auftragsnummer>0) { $trackingInfo = $this->AuftragTrackingTabelle(empty($deliveryNoteIds)?0: $id); $this->app->Tpl->Set('VERSAND', $trackingInfo); } +*/ // UST $ust_ok = $orderRow['ust_ok'];//$this->app->DB->Select("SELECT ust_ok FROM auftrag WHERE id='$id' LIMIT 1"); diff --git a/www/pages/lieferschein.php b/www/pages/lieferschein.php index cfe08757..4b80a518 100644 --- a/www/pages/lieferschein.php +++ b/www/pages/lieferschein.php @@ -876,22 +876,19 @@ class Lieferschein extends GenLieferschein $this->app->Tpl->Set('AUFTRAG','-'); } + $link_zur_rechnung = "CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','',''),' ',".$this->app->YUI->GetRechnungFileDownloadLinkIconSQL().",'  ')"; + if($auftragArr[0]['auftragid'] > 0){ $rechnung = $this->app->DB->SelectArr( ($auftragArr[0]['auftragid']? "SELECT - CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'   - ') as rechnung - FROM rechnung r WHERE r.auftragid='".$auftragArr[0]['auftragid']."' AND r.auftragid <> '0' + ".$link_zur_rechnung." as rechnung FROM rechnung r WHERE r.auftragid='".$auftragArr[0]['auftragid']."' AND r.auftragid <> '0' union SELECT - CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'   - ') as rechnung - FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag='".$auftragArr[0]['auftragid']."' + ".$link_zur_rechnung." as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag='".$auftragArr[0]['auftragid']."' union ":"")." SELECT - CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'   - ') as rechnung + ".$link_zur_rechnung." as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id WHERE lp.lieferschein='$id' @@ -903,14 +900,11 @@ class Lieferschein extends GenLieferschein if($auftragArr[0]['rechnungid'] > 0){ $rechnung = $this->app->DB->SelectArr("SELECT - CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'   - ') as rechnung + ".$link_zur_rechnung." as rechnung FROM rechnung r WHERE r.id='".$auftragArr[0]['rechnungid']."' AND r.id <> '0' - union - + union SELECT - CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'   - ') as rechnung + ".$link_zur_rechnung." as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id WHERE lp.lieferschein='$id' diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php index e2b6354b..86fc9c41 100644 --- a/www/pages/rechnung.php +++ b/www/pages/rechnung.php @@ -577,15 +577,7 @@ class Rechnung extends GenRechnung   "; - if (!empty($rechnungarr['belegnr'])) { - if ($rechnungarr['xmlrechnung']) { - $downloadicon = ""; - } else { - $downloadicon = ""; - } - } else { - $downloadicon = ''; - } + $downloadicon = $this->app->YUI->GetRechnungFileDownloadLinkIcon($id); $menu .= $downloadicon;