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(