From 419537d1fdd6ab4e7502282ba4022b47d4fdbe9f Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Mon, 23 May 2022 21:03:20 +0200 Subject: [PATCH] Bugfixes rechnung --- www/lib/class.erpapi.php | 4 +- www/pages/rechnung.php | 5420 ++++++++++++++++--------------- www/widgets/widget.rechnung.php | 18 +- 3 files changed, 2727 insertions(+), 2715 deletions(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 19f0706a..d570a0e0 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -4707,12 +4707,12 @@ title: 'Abschicken', for($i=0;$i<$ctracking;$i++) { $tmptracking[] = $tracking[$i]['tracking']; } - +/* $nve = $this->app->DB->SelectArr("SELECT nve FROM spedition_packstuecke WHERE lieferschein='".$lieferscheine[$li]['id']."' AND nve!='' AND status!='storniert'"); $cnve = !empty($nve)?count($nve):0; for($i=0;$i<$cnve;$i++) { $tmpnve[] = $nve[$i]['nve']; - } + }*/ } $text = str_replace('{TRACKINGNUMMER}',!empty($tmptracking)?implode(", ",$tmptracking):'',$text); $text = str_replace('{NVE}',!empty($tmpnve)?implode(", ",$tmpnve):'',$text); diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php index 43fb1e36..7e3018a5 100644 --- a/www/pages/rechnung.php +++ b/www/pages/rechnung.php @@ -1,2711 +1,2715 @@ -app=$app; - if($intern) - { - return; - } - - $this->app->ActionHandlerInit($this); - $this->app->ActionHandler("list","RechnungList"); - $this->app->ActionHandler("create","RechnungCreate"); - $this->app->ActionHandler("positionen","RechnungPositionen"); - $this->app->ActionHandler("uprechnungposition","UpRechnungPosition"); - $this->app->ActionHandler("delrechnungposition","DelRechnungPosition"); - $this->app->ActionHandler("copyrechnungposition","CopyRechnungPosition"); - $this->app->ActionHandler("downrechnungposition","DownRechnungPosition"); - $this->app->ActionHandler("positioneneditpopup","RechnungPositionenEditPopup"); - $this->app->ActionHandler("search","RechnungSuche"); - $this->app->ActionHandler("mahnwesen","RechnungMahnwesen"); - $this->app->ActionHandler("edit","RechnungEdit"); - $this->app->ActionHandler("delete","RechnungDelete"); - $this->app->ActionHandler("gutschrift","RechnungGutschrift"); - $this->app->ActionHandler("copy","RechnungCopy"); - $this->app->ActionHandler("zertifikate","RechnungZertifikate"); - $this->app->ActionHandler("freigabe","RechnungFreigabe"); - $this->app->ActionHandler("abschicken","RechnungAbschicken"); - $this->app->ActionHandler("pdf","RechnungPDF"); - $this->app->ActionHandler("alternativpdf","RechnungAlternativPDF"); - $this->app->ActionHandler("inlinepdf","RechnungInlinePDF"); - $this->app->ActionHandler("lastschrift","RechnungLastschrift"); - $this->app->ActionHandler("protokoll","RechnungProtokoll"); - $this->app->ActionHandler("zahlungseingang","RechnungZahlungseingang"); - $this->app->ActionHandler("minidetail","RechnungMiniDetail"); - $this->app->ActionHandler("editable","RechnungEditable"); - $this->app->ActionHandler("livetabelle","RechnungLiveTabelle"); - $this->app->ActionHandler("schreibschutz","RechnungSchreibschutz"); - $this->app->ActionHandler("undostorno","RechnungUndostorno"); - $this->app->ActionHandler("manuellbezahltmarkiert","RechnungManuellBezahltMarkiert"); - $this->app->ActionHandler("manuellbezahltentfernen","RechnungManuellBezahltEntfernen"); - $this->app->ActionHandler("zahlungsmahnungswesen","RechnungZahlungMahnungswesen"); - $this->app->ActionHandler("deleterabatte","RechnungDeleteRabatte"); - $this->app->ActionHandler("updateverband","RechnungUpdateVerband"); - $this->app->ActionHandler("lastschriftwdh","RechnungLastschriftWdh"); - $this->app->ActionHandler("dateien","RechnungDateien"); - $this->app->ActionHandler("pdffromarchive","RechnungPDFfromArchiv"); - $this->app->ActionHandler("archivierepdf","RechnungArchivierePDF"); - - $this->app->ActionHandler("summe","RechnungSumme"); // nur fuer rechte - $this->app->ActionHandler("einkaufspreise","RechnungEinkaufspreise"); - $this->app->ActionHandler("steuer","RechnungSteuer"); - $this->app->ActionHandler("formeln","RechnungFormeln"); - - $this->app->DefaultActionHandler("list"); - - $id = $this->app->Secure->GetGET("id"); - $nummer = $this->app->Secure->GetPOST("adresse"); - - if($nummer==''){ - if($id > 0){ - $adresse = $this->app->DB->Select("SELECT a.name FROM rechnung b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); - }else{ - $adresse = ''; - } - } - else{ - $adresse = $nummer; - } - if($id > 0){ - $nummer = $this->app->DB->Select("SELECT b.belegnr FROM rechnung b WHERE b.id='$id' LIMIT 1"); - }else{ - $nummer = ''; - } - if($nummer=="" || $nummer==0) $nummer="ohne Nummer"; - - $this->app->Tpl->Set('UEBERSCHRIFT',"Rechnung: ".$adresse." (".$nummer.")"); - $this->app->Tpl->Set('FARBE',"[FARBE4]"); - - $this->app->erp->Headlines('Rechnung'); - - $this->app->ActionHandlerListen($app); - } - - public function Install() - { - $this->app->erp->RegisterHook('supersearch_detail', 'rechnung', 'RechnungSupersearchDetail'); - } - - /** - * @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery - * @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult - * - * @return void - */ - public function RechnungSupersearchDetail($detailQuery, $detailResult) - { - if ($detailQuery->getGroupKey() !== 'invoices') { - return; - } - - $rechnungId = $detailQuery->getItemIdentifier(); - $sql = sprintf( - "SELECT r.id, r.belegnr, r.datum, r.soll FROM `rechnung` AS `r` WHERE r.id = '%s' LIMIT 1", - $this->app->DB->real_escape_string($rechnungId) - ); - $rechnung = $this->app->DB->SelectRow($sql); - if (empty($rechnung)) { - return; - } - $datum = date('d.m.Y', strtotime($rechnung['datum'])); - $detailResult->setTitle(sprintf('Rechnung %s', $rechnung['belegnr'])); - $detailResult->addButton('Rechnung Details', sprintf('index.php?module=rechnung&action=edit&id=%s', $rechnung['id'])); - $detailResult->setMiniDetailUrl(sprintf('index.php?module=rechnung&action=minidetail&id=%s', $rechnung['id'])); - } - - /** @var Application app */ - - function RechnungFormeln() - { - - } - - /** - * @param string $typ - * - * @return string - */ - function Custom($typ) - { - return ''; - } - - function RechnungSteuer() - { - - } - - function RechnungEinkaufspreise() - { - - } - - function RechnungSumme() - { - } - - - - function RechnungAlternativPDF() - { - $id = (int)$this->app->Secure->GetGET('id'); - $abweichendebezeichnung = $this->app->DB->Select("SELECT abweichendebezeichnung FROM rechnung WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE rechnung SET abweichendebezeichnung=1 WHERE id='$id' LIMIT 1"); - // Rechnungen - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - - if($abweichendebezeichnung!="1") - $this->app->DB->Update("UPDATE rechnung SET abweichendebezeichnung=0 WHERE id='$id' LIMIT 1"); - - $Brief->displayDocument(); - $this->app->ExitXentral(); - } - - - 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->DB->Update("UPDATE rechnung SET schreibschutz='1' WHERE id='$id'"); - $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); - } - - function RechnungUpdateVerband() - { - $id=$this->app->Secure->GetGET('id'); - $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); - $msg = $this->app->erp->base64_url_encode("
Die Verbandsinformation wurde neu geladen!
"); - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); - } - - function RechnungMahnwesen() - { - - - } - - - function RechnungLastschriftWdh() - { - - $id=$this->app->Secure->GetGET('id'); - $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',dta_datei=0 WHERE id='$id' LIMIT 1"); - $msg = $this->app->erp->base64_url_encode("
Die Rechnung kann nochmal eingezogen werden!
"); - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); - } - - function RechnungDateien() - { - $id = $this->app->Secure->GetGET('id'); - $this->RechnungMenu(); - $this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)'); - $this->app->YUI->DateiUpload('PAGE','Rechnung',$id); - } - - function RechnungDeleteRabatte() - { - - $id=$this->app->Secure->GetGET('id'); - $this->app->DB->Update("UPDATE rechnung SET rabatt='',rabatt1='',rabatt2='',rabatt3='',rabatt4='',rabatt5='',realrabatt='' WHERE id='$id' LIMIT 1"); - $msg = $this->app->erp->base64_url_encode("
Die Rabatte wurden entfernt!
"); - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); - } - - - /** - * @param int $invoiceId - * - * @return bool - */ - public function removeManualPayed($invoiceId) - { - if(empty($invoiceId) || !$this->app->DB->Select(sprintf('SELECT id FROM rechnung WHERE id = %d', $invoiceId))) { - return false; - } - $this->app->erp->RechnungProtokoll($invoiceId,'Rechnung manuell als bezahlt entfernt'); - $this->app->DB->Update( - "UPDATE rechnung - SET zahlungsstatus='offen',bezahlt_am = NULL, ist='0', - mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') - WHERE id='$invoiceId'" - ); - - return true; - } - - public function RechnungManuellBezahltEntfernen() - { - $id = $this->app->Secure->GetGET('id'); - - $this->removeManualPayed($id); - - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id"); - } - - public function RechnungUndostorno() - { - $id = $this->app->Secure->GetGET('id'); - $this->app->erp->RechnungProtokoll($id,'Rechnung Stornierung rückgängig gemacht'); - - $this->app->DB->Update("UPDATE rechnung SET status='freigegeben',zahlungsstatus='offen',schreibschutz=0,bezahlt_am = NULL, ist='0',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Rechnung Stornierung rückgängig gemacht ".date('d.m.Y')."') WHERE id='$id'"); - - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id"); - } - - /** - * @param int $innoiceId - * - * @return bool - */ - public function setManualPayed($invoiceId) - { - if(empty($invoiceId) || !$this->app->DB->Select(sprintf('SELECT id FROM rechnung WHERE id = %d', $invoiceId))) { - return false; - } - $this->app->erp->RechnungProtokoll($invoiceId,'Rechnung manuell als bezahlt markiert'); - - $this->app->DB->Update( - "UPDATE rechnung - SET zahlungsstatus='bezahlt',bezahlt_am = now(), ist=soll,mahnwesenfestsetzen='1', - mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') - WHERE id='$invoiceId'" - ); - - return true; - } - - public function RechnungManuellBezahltMarkiert() - { - $id = $this->app->Secure->GetGET('id'); - $this->setManualPayed($id); - $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); - } - - /** - * @param int $invoiceId - */ - public function removeWriteProtection($invoiceId) { - if($invoiceId <= 0) { - return; - } - $this->app->DB->Update( - sprintf( - 'UPDATE rechnung SET zuarchivieren=1, schreibschutz = 0 WHERE id=%d', - $invoiceId - ) - ); - - $this->app->erp->RechnungProtokoll($invoiceId,'Schreibschutz entfernt'); - } - - public function RechnungSchreibschutz() - { - $id = $this->app->Secure->GetGET('id'); - $this->removeWriteProtection($id); - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id"); - } - - - function RechnungCopy() - { - $id = $this->app->Secure->GetGET('id'); - - $newid = $this->CopyRechnung($id); - - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$newid"); - } - - /** - * @param int $invoiceId - */ - public function addZertificates($invoiceId) - { - if($invoiceId <= 0) { - return; - } - $addressId = $this->app->DB->Select( - sprintf( - 'SELECT adresse FROM rechnung WHERE id = %d', - $invoiceId - ) - ); - if($addressId <= 0) { - return; - } - $zertificates = $this->app->DB->SelectArr( - sprintf( - "SELECT ds.datei - FROM datei_stichwoerter ds - INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel' - INNER JOIN rechnung_position ap ON ap.artikel = ds2.parameter AND ap.rechnung = %d - WHERE ds.objekt = 'Adressen' AND ds.parameter = %d - GROUP BY ds.datei", - $invoiceId, $addressId - ) - ); - if(empty($zertificates)) { - return; - } - foreach($zertificates as $zertificate) { - $this->app->erp->AddDateiStichwort($zertificate['datei'],'Sonstige','Rechnung',$invoiceId); - } - } - - function RechnungZertifikate() - { - $id = $this->app->Secure->GetGET('id'); - $this->addZertificates($id); - $this->app->Location->execute("index.php?module=rechnung&action=dateien&id=$id"); - } - - public function RechnungIconMenu($id, $prefix = '') - { - if($id > 0){ - $rechnungarr = $this->app->DB->SelectRow( - "SELECT status,zahlungsstatus FROM rechnung WHERE id='$id' LIMIT 1" - ); - } - $status = ''; - $zahlungsstatus = ''; - if(!empty($rechnungarr)){ - $status = $rechnungarr['status'];//$this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); - $zahlungsstatus = $rechnungarr['zahlungsstatus'];//$this->app->DB->Select("SELECT zahlungsstatus FROM rechnung WHERE id='$id' LIMIT 1"); - } - $freigabe =""; - $storno=""; - $bezahlt=""; - $weiterfuehren=""; - $optionteilstorno = ""; - - $checkifgsexists = $this->app->DB->Select("SELECT id FROM gutschrift WHERE rechnungid='$id' LIMIT 1"); - - if($status==="angelegt" || $status=="") - { - $freigabe = ""; - $storno = ""; - } else { - $weiterfuehren = ""; - } - $casehook = ''; - $optionhook = ''; - $this->app->erp->RunHook('rechnungiconmenu_option', 5, $id, $casehook, $optionhook, $status, $prefix); - - if($this->app->erp->RechteVorhanden("rechnung","undostorno") && !$checkifgsexists) - $undostorno = ""; - - if($this->app->erp->RechteVorhanden("rechnung","manuellbezahltmarkiert") && $zahlungsstatus=="offen") - $bezahlt = ""; - - - if($this->app->erp->RechteVorhanden("rechnung","manuellbezahltentfernen") && $zahlungsstatus=="bezahlt") - $bezahlt = ""; - - $zertifikatoption = ''; - $zertifikatcase = ''; - - $optioncustom = $this->Custom('option'); - $casecustom = $this->Custom('case'); - - $hookoption = ''; - $hookcase = ''; - $this->app->erp->RunHook('Rechnung_Aktion_option',3, $id, $status, $hookoption); - $this->app->erp->RunHook('Rechnung_Aktion_case',3, $id, $status, $hookcase); - - - //TODO das muss dann später in den Hook - $RechnungzuVerbindlichkeitOption = ""; - $RechnungzuVerbindlichkeitCase = "case 'rechnungzuverbindlichkeit': if(!confirm('Wirklich Verbindlichkeit anlegen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=rechnungzuverbindlichkeit&action=create&id=%value%'; break;"; - - - if($this->app->erp->RechteVorhanden('zertifikatgenerator','list')) - { - $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id = '$id' LIMIT 1"); - if($adresse) - { - $zertifikate = $this->app->DB->Select("SELECT ds.datei - FROM datei_stichwoerter ds - INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel' - INNER JOIN rechnung_position ap ON ap.artikel = ds2.parameter AND ap.rechnung = '$id' - WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse' - GROUP BY ds.datei LIMIT 1"); - if($zertifikate) - { - $zertifikatoption = ''; - $zertifikatcase = "case 'zertifikate': if(!confirm('Zertifikate wirklich laden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=rechnung&action=zertifikate&id=%value%'; break; "; - } - } - - } - - if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport')) - { - $casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=rechnung&id=%value%'; break;"; - $optionbelegeimport = ""; - } - - - - if($checkifgsexists>0) $extendtext = "HINWEIS: Es existiert bereits eine Gutschrift zu dieser Rechnung! "; else $extendtext=""; - $menu =" - - - -  Aktion:   - "; - - $menu .= " - - - "; - - //$tracking = $this->AuftragTrackingTabelle($id); - - $menu = str_replace('%value%',$id,$menu); - return $menu; - } - - - function RechnungLiveTabelle() - { - $id = $this->app->Secure->GetGET('id'); - - $table = new EasyTable($this->app); - - $table->Query( - "SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge as Menge - FROM rechnung_position ap, artikel a - WHERE ap.rechnung='$id' AND a.id=ap.artikel" - ); - $artikel = $table->DisplayNew('return','Menge','noAction'); - echo $artikel; - $this->app->ExitXentral(); - } - - public function RechnungEditable() - { - $this->app->YUI->AARLGEditable(); - } - - public function RechnungPDFfromArchiv() - { - $id = $this->app->Secure->GetGET('id'); - $archiv = $this->app->DB->Select("SELECT table_id from pdfarchiv where id = '$id' LIMIT 1"); - if($archiv) { - $projekt = $this->app->DB->Select("SELECT projekt from rechnung where id = '".(int)$archiv."'"); - } - if(class_exists('RechnungPDFCustom')) { - if($archiv) { - $Brief = new RechnungPDFCustom($this->app,$projekt); - } - } - else{ - if($archiv) { - $Brief = new RechnungPDF($this->app,$projekt); - } - } - if($archiv && $content = $Brief->getArchivByID($id)) { - header('Content-type: application/pdf'); - header('Content-Disposition: attachment; filename="'.$content['belegnr'].'.pdf"'); - echo $content['file']; - $this->app->ExitXentral(); - } - header('Content-type: application/pdf'); - header('Content-Disposition: attachment; filename="Fehler.pdf"'); - $this->app->ExitXentral(); - } - - public function RechnungMiniDetail($parsetarget='',$menu=true) - { - $id = $this->app->Secure->GetGET('id'); - - if(!$this->app->DB->Select("SELECT deckungsbeitragcalc FROM rechnung WHERE id='$id' LIMIT 1")) { - $this->app->erp->BerechneDeckungsbeitrag($id,'rechnung'); - } - - $auftragArr = $this->app->DB->SelectArr("SELECT * FROM rechnung WHERE id='$id' LIMIT 1"); - $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='{$auftragArr[0]['adresse']}' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='{$auftragArr[0]['projekt']}' LIMIT 1"); - $kundenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$auftragArr[0]['adresse']}' LIMIT 1"); - - $this->app->Tpl->Set('DECKUNGSBEITRAG',0); - $this->app->Tpl->Set('DBPROZENT',0); - $this->app->Tpl->Set('KUNDE',"".$kundennummer." ".$kundenname); - - if($this->app->erp->RechteVorhanden('projekt','dashboard')){ - $this->app->Tpl->Set('PROJEKT', "$projekt"); - } - else{ - $this->app->Tpl->Set('PROJEKT', $projekt); - } - - $this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']); - $this->app->Tpl->Set('STATUS',($auftragArr[0]['status'] === 'storniert' && $auftragArr[0]['teilstorno'] == 1?'teilstorniert':$auftragArr[0]['status'])); - $this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']); - - $this->app->Tpl->Set('DEBITORENNUMMER', $auftragArr[0]['kundennummer_buchhaltung']); - - if($auftragArr[0]['mahnwesen']=='') { - $auftragArr[0]['mahnwesen']='-'; - } - $this->app->Tpl->Set('MAHNWESEN',$auftragArr[0]['mahnwesen']); - if($auftragArr[0]['mahnwesen_datum']=='0000-00-00') { - $auftragArr[0]['mahnwesen_datum']='-'; - } - - - if(!empty($auftragArr[0]['kundennummer_buchhaltung'])) { - $this->app->Tpl->Set('DEBITORENNUMMER', $auftragArr[0]['kundennummer_buchhaltung']); - } - - $internet = $this->app->DB->Select("SELECT a.internet FROM rechnung r LEFT JOIN auftrag a ON a.id=r.auftragid WHERE r.id='$id' AND r.id > 0 LIMIT 1"); - $this->app->Tpl->Set('INTERNET',$internet); - - - $this->app->Tpl->Set('MAHNWESENDATUM',$this->app->String->Convert($auftragArr[0]['mahnwesen_datum'],"%1-%2-%3","%3.%2.%1")); - - $ab_datum = $this->app->String->Convert($auftragArr[0]['datum'],"%1-%2-%3","%3.%2.%1"); - - - if($auftragArr[0]['auftragid']==0) $auftragArr[0]['auftrag']="kein Auftrag"; - $auftragArr[0]['auftrag'] = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='".$auftragArr[0]['auftragid']."' LIMIT 1"); - - if($auftragArr[0]['auftragid'] > 0) - { - $this->app->Tpl->Set('AUFTRAG',"".$auftragArr[0]['auftrag']."  -   -  "); - }else{ - $this->app->Tpl->Set('AUFTRAG', '-'); - } - $auftraege = $this->app->DB->SelectArr("(SELECT a.belegnr, a.id FROM sammelrechnung_position s - INNER JOIN auftrag_position ap on ap.id = s.auftrag_position_id INNER JOIN auftrag a on a.id = ap.auftrag - WHERE s.rechnung = '".$id."' GROUP BY a.id ORDER BY a.belegnr) - union (SELECT - a.belegnr, a.id FROM sammelrechnung_position s INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id - INNER JOIN auftrag_position ap on ap.id = lp.auftrag_position_id INNER JOIN - auftrag a on a.id = ap.auftrag - WHERE s.rechnung = '".$id."' GROUP BY a.id ORDER BY a.belegnr) - "); - if($auftraege) - { - $this->app->Tpl->Set('AUFTRAG',''); - $first = true; - foreach($auftraege as $k => $v) - { - if(!$first)$this->app->Tpl->Add('AUFTRAG','
'); - if($v['id'] > 0) - { - if(empty($v['belegnr'])) { - $v['belegnr'] = 'ENTWURF'; - } - $this->app->Tpl->Add('AUFTRAG',"".$v['belegnr']."  -   -  "); - } - $first = false; - } - } - - - $gutschrift = $this->app->DB->SelectArr("SELECT - CONCAT('',if(g.belegnr='0' OR g.belegnr='','ENTWURF',g.belegnr),'   - ') as gutschrift - FROM gutschrift g WHERE g.rechnungid='$id'"); - - if(!empty($gutschrift)) - { - $cgutschrift = !empty(count($gutschrift))?:0; - for($li=0;$li<$cgutschrift;$li++) - { - $this->app->Tpl->Add('GUTSCHRIFT',$gutschrift[$li]['gutschrift']); - if($liapp->Tpl->Add('GUTSCHRIFT', "
"); - } - } - } - else{ - $this->app->Tpl->Set('GUTSCHRIFT', "-"); - } - - $returnOrders = (array)$this->app->DB->SelectArr( - sprintf( - 'SELECT ro.id, ro.belegnr, ro.status - FROM `rechnung` AS `i` - INNER JOIN `auftrag` AS `o` ON i.auftragid = o.id OR i.id = o.rechnungid - LEFT JOIN `lieferschein` AS `dn` ON o.id = dn.auftragid - INNER JOIN `retoure` AS `ro` ON o.id = ro.auftragid OR dn.id = ro.lieferscheinid - WHERE i.id = %d - ORDER BY ro.id', - $id - ) - ); - - $returnOrderHtml = []; - foreach($returnOrders as $returnOrderKey => $returnOrder) { - $returnOrderId = $returnOrder['id']; - $returnOrderNumber = $returnOrder['belegnr']; - if(empty($returnOrderNumber)) { - $returnOrderNumber = 'ENTWURF'; - } - $isReturnOrderCanceled = $returnOrder['status'] === 'storniert'; - $returnOrderHtml[] = '' - .($isReturnOrderCanceled?'':'').$returnOrderNumber.($isReturnOrderCanceled?'':'') - .' - Retoure PDF - Retoure bearbeiten'; - } - $this->app->Tpl->Set('RETOURE', implode('
', $returnOrderHtml)); - - $sammelrechnung = false; - if($this->app->DB->Select("SELECT id FROM sammelrechnung_position LIMIT 1"))$sammelrechnung = true; - $gruppenrechnung = false; - if($this->app->DB->Select("SELECT id FROM gruppenrechnung_position LIMIT 1"))$gruppenrechnung = true; - $rechnungid = false; - $this->app->DB->Select("SELECT rechnungid FROM lieferschein LIMIT 1"); - if(!$this->app->DB->error())$rechnungid =true; - - $lieferscheinsql = " - SELECT CONCAT('',if(l.status!='angelegt',l.belegnr,'ENTWURF'),'  -   - ') as LS - FROM lieferschein l - INNER JOIN ( - (SELECT id FROM lieferschein WHERE id = '{$auftragArr[0]['lieferschein']}') - "; - if($rechnungid) - { - $lieferscheinsql .= " - UNION ALL - (SELECT id FROM lieferschein WHERE rechnungid = '$id')"; - } - if($sammelrechnung) - { - $lieferscheinsql .= "UNION ALL - (SELECT l2.id FROM lieferschein l2 INNER JOIN lieferschein_position lp2 ON lp2.lieferschein = l2.id - INNER JOIN sammelrechnung_position s ON lp2.id = s.lieferschein_position_id WHERE s.rechnung = '$id' ) - UNION ALL - - (SELECT l3.id FROM lieferschein l3 INNER JOIN lieferschein_position lp3 ON lp3.lieferschein = l3.id - INNER JOIN auftrag_position ap3 ON ap3.id = lp3.auftrag_position_id - INNER JOIN sammelrechnung_position s3 ON ap3.id = s3.auftrag_position_id WHERE s3.rechnung = '$id' ) - "; - } - if($gruppenrechnung) - { - $lieferscheinsql .= " - UNION ALL - (SELECT l4.id FROM lieferschein l4 INNER JOIN lieferschein_position lp4 ON lp4.lieferschein = l4.id - INNER JOIN gruppenrechnung_position s4 ON lp4.id = s4.lieferschein_position_id WHERE s4.rechnung = '$id' ) - UNION ALL - - (SELECT l5.id FROM lieferschein l5 INNER JOIN lieferschein_position lp5 ON lp5.lieferschein = l5.id - INNER JOIN auftrag_position ap5 ON ap5.id = lp5.auftrag_position_id - INNER JOIN gruppenrechnung_position s5 ON ap5.id = s5.auftrag_position_id WHERE s5.rechnung = '$id' ) - - "; - } - $lieferscheinsql .= " - ) ls ON l.id = ls.id - LEFT JOIN projekt p ON l.projekt = p.id - WHERE 1 ".$this->app->erp->ProjektRechte('p.id'). " GROUP BY l.id "; - - $lieferschein = $this->app->DB->SelectArr($lieferscheinsql); - - if($lieferschein=="") $this->app->Tpl->Set('LIEFERSCHEIN','-'); - else{ - $first = true; - $this->app->Tpl->Set('LIEFERSCHEIN',''); - foreach($lieferschein as $ls) - { - if(!$first)$this->app->Tpl->Add('LIEFERSCHEIN','
'); - $this->app->Tpl->Add('LIEFERSCHEIN',$ls['LS']); - $first = false; - } - - } - - - - if($auftragArr[0]['ust_befreit']==0) - $this->app->Tpl->Set('STEUER',"Inland"); - else if($auftragArr[0]['ust_befreit']==1) - $this->app->Tpl->Set('STEUER',"EU-Lieferung"); - else - $this->app->Tpl->Set('STEUER',"Export"); - $this->app->Tpl->Set('DELIVERYTHRESHOLDVATID',!empty($auftragArr[0]['deliverythresholdvatid'])?$auftragArr[0]['deliverythresholdvatid']:''); - - if($menu) - { - $menu = $this->RechnungIconMenu($id); - $this->app->Tpl->Set('MENU',$menu); - } - // ARTIKEL - - $status = $this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); - - $table = new EasyTable($this->app); - - $table->Query("SELECT if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung) as artikel, CONCAT('', ap.nummer,'') as Nummer, ".$this->app->erp->FormatMenge("ap.menge")." as Menge,".$this->app->erp->FormatPreis("ap.preis*(100-ap.rabatt)/100",2)." as Preis - FROM rechnung_position ap, artikel a WHERE ap.rechnung='$id' AND a.id=ap.artikel ORDER by ap.sort"); - - $table->align = array('left','left','right','right'); - $artikel = $table->DisplayNew("return","Preis","noAction","false",0,0,false); - - $this->app->Tpl->Set('ARTIKEL','
'.$artikel.'
'); - - if($auftragArr[0]['belegnr'] =="0" || $auftragArr[0]['belegnr']=="") $auftragArr[0]['belegnr'] = "ENTWURF"; - $this->app->Tpl->Set('BELEGNR',"".$auftragArr[0]['belegnr'].""); - $this->app->Tpl->Set('RECHNUNGID',$auftragArr[0]['id']); - - - if($auftragArr[0]['status']=="freigegeben") - { - $this->app->Tpl->Set('ANGEBOTFARBE',"orange"); - $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wurde noch nicht als Auftrag weitergeführt!"); - } - else if($auftragArr[0]['status']=="versendet") - { - $this->app->Tpl->Set('ANGEBOTFARBE',"red"); - $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot versendet aber noch kein Auftrag vom Kunden erhalten!"); - } - else if($auftragArr[0]['status']=="beauftragt") - { - $this->app->Tpl->Set('ANGEBOTFARBE',"green"); - $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wurde beauftragt und abgeschlossen!"); - } - else if($auftragArr[0]['status']=="angelegt") - { - $this->app->Tpl->Set('ANGEBOTFARBE',"grey"); - $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wird bearbeitet und wurde noch nicht freigegeben und abgesendet!"); - } - - - $this->app->Tpl->Set('ZAHLUNGEN',"Erst ab Version Enterprise verfügbar
"); - if(count($gutschrift) > 0) - $this->app->Tpl->Add('ZAHLUNGEN',"
Zu dieser Rechnung existiert eine Gutschrift!
"); - else { - - if($auftragArr[0]['zahlungsstatus']!="bezahlt") - $this->app->Tpl->Add('ZAHLUNGEN',"
Diese Rechnung ist noch nicht komplett bezahlt!
"); - else - { - if(!empty($auftragArr[0]['bezahlt_am']) && $auftragArr[0]['bezahlt_am'] != '0000-00-00') - { - $this->app->Tpl->Add('ZAHLUNGEN',"
Diese Rechnung wurde am ".$this->app->String->Convert($auftragArr[0]['bezahlt_am'],"%1-%2-%3","%3.%2.%1")." bezahlt.
"); - }else{ - $this->app->Tpl->Add('ZAHLUNGEN',"
Diese Rechnung ist bezahlt.
"); - } - } - } - - $this->app->Tpl->Set('RECHNUNGADRESSE',$this->Rechnungsadresse($auftragArr[0]['id'])); - - $tmp = new EasyTable($this->app); - $tmp->Query("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit DESC"); - $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); - - - $query = $this->app->DB->SelectArr("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit"); - if($query) - { - $zeit = 0; - foreach($query as $k => $row) - { - if(strpos($row['grund'], 'Zahlungserinnerung') === 0 || strpos($row['grund'], 'Mahnung') === 0 ) - { - if(!$zeit)$zeit = $row['zeit']; - } - } - if($zeit) - { - - $tmp2 = new EasyTable($this->app); - $tmp2->Query("SELECT concat('app->Conf->WFconf[defaulttheme]}/images/pdf.svg\" border=\"0\">') as PDF, Date(zeit) as Datum, bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' AND zeit >= '".$zeit."' ORDER by zeit DESC"); - $tmp2->DisplayNew('MAHNPROTOKOLL',"Protokoll","noAction"); - } - - - } - - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$auftragArr[0]['projekt']); - }else{ - $Brief = new RechnungPDF($this->app,$auftragArr[0]['projekt']); - } - $Dokumentenliste = $Brief->getArchivedFiles($id, 'rechnung'); - if($Dokumentenliste) - { - $tmp3 = new EasyTable($this->app); - $tmp3->headings = array('Datum','Belegnr','Bearbeiter','Menü'); - foreach($Dokumentenliste as $k => $v) - { - if(!$v['erstesoriginal']) - { - $tmpr['datum'] = date('d.m.Y H:i:s',strtotime($v['zeitstempel'])); - $tmpr['belegnr'] = str_replace('.pdf','',$v['file']); - $tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1); - if(isset($v['belegnummer']) && $v['belegnummer'])$tmpr['belegnr'] = $v['belegnummer']; - $tmpr['bearbeiter'] = $v['bearbeiter']; - $tmpr['menu'] = ''; - $tmp3->datasets[] = $tmpr; - } - } - - $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction"); - } - - - if($parsetarget=='') - { - $this->app->Tpl->Output('rechnung_minidetail.tpl'); - $this->app->ExitXentral(); - } - $this->app->Tpl->Parse($parsetarget,'rechnung_minidetail.tpl'); - } - - /** - * @param int $id - * - * @return string - */ - public function Rechnungsadresse($id) - { - $data = $this->app->DB->SelectArr( - "SELECT r.*, a.abweichende_rechnungsadresse - FROM rechnung AS r - INNER JOIN adresse AS a ON r.adresse = a.id - WHERE r.id='$id' - LIMIT 1" - ); - - foreach($data[0] as $key=>$value) - { - if($data[0][$key]!='' && $key!=='abweichendelieferadresse' && $key!=='land' && $key!=='plz' - && $key!=='lieferland' && $key!=='lieferplz') { - $data[0][$key] = $data[0][$key].'
'; - } - } - - $rechnungsadresse = $data[0]['name']."".$data[0]['ansprechpartner']."".$data[0]['abteilung']."".$data[0]['unterabteilung']. - "".$data[0]['strasse']."".$data[0]['adresszusatz']."".$data[0]['land']."-".$data[0]['plz']." ".$data[0]['ort']; - - $isAbweichend = false; - if($data[0]['abweichende_rechnungsadresse']==1){ - $isAbweichend=true; - } - $abweichendString = ($isAbweichend?' (abweichend)':''); - - return " -
Rechnungsadresse".$abweichendString.":

$rechnungsadresse
"; - } - - - function RechnungLastschrift() - { - $this->app->Tpl->Set('UEBERSCHRIFT','Lastschrift / Sammelüberweisung'); - $erzeugen = $this->app->Secure->GetPOST('erzeugen'); - $lastschrift= $this->app->Secure->GetPOST('lastschrift'); - $kontointern=$this->app->Secure->GetPOST('konto'); - $this->app->erp->Headlines('Lastschriften'); - - $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Zur Rechnungsübersicht'); - - if($erzeugen!='') - { - //erzeugen - $rechnung= $this->app->Secure->GetPOST('rechnung'); - $crechnung = !empty($rechnung)?count($rechnung):0; - for($i=0;$i<$crechnung;$i++) - { - - //rechnung auf bezahlt markieren + soll auf ist - $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='abgebucht' WHERE id='{$rechnung[$i]}' AND firma='".$this->app->User->GetFirma()."' LIMIT 1"); - } - } - - - - // offene Rechnungen - $this->app->Tpl->Set('SUB1TABTEXT',"Offene Rechnungen"); - $table = new EasyTable($this->app); - $table->Query("SELECT CONCAT('') as auswahl, DATE_FORMAT(r.datum,'%d.%m.%Y') as vom, if(r.belegnr!='',r.belegnr,'ohne Nummer') as beleg, r.name, p.abkuerzung as projekt, r.soll as betrag, r.ist as ist, r.zahlungsweise, a.bank_inhaber, a.bank_institut, a.bank_blz, a.bank_konto, r.id - FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN zahlungsweisen z ON z.type=r.zahlungsweise LEFT JOIN auftrag a ON a.id=r.auftragid WHERE (r.zahlungsstatus!='bezahlt' AND r.zahlungsstatus!='abgebucht') AND (r.zahlungsweise='lastschrift' OR r.zahlungsweise='einzugsermaechtigung' OR z.verhalten='lastschrift') AND (r.belegnr!='') order by r.datum DESC, r.id DESC"); - $table->DisplayNew('SUB1TAB'," - - - "); - - - $summe = $this->app->DB->Select("SELECT SUM(r.soll) - FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt WHERE (r.zahlungsstatus!='bezahlt' AND r.zahlungsstatus!='abgebucht') AND (r.zahlungsweise='lastschrift' OR r.zahlungsweise='einzug') AND r.belegnr!='' "); - - if($summe <=0) { - $summe = '0,00'; - } - $this->app->Tpl->Set('TAB1',"
Gesamt offen: $summe EUR
"); - - - $this->app->YUI->TableSearch('TAB1',"lastschriften"); - $this->app->Tpl->Add('TAB1',"
-
"); - - $this->app->YUI->TableSearch('TAB2','lastschriftenarchiv'); - - $this->app->Tpl->Parse('PAGE','rechnung_lastschrift.tpl'); - } - - - public function RechnungGutschrift() - { - $id = $this->app->Secure->GetGET('id'); - - $status = $this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); - if($status==='angelegt') - { - $msg = $this->app->erp->base64_url_encode("
Die Rechnung ist noch nicht freigegeben und kann daher nicht storniert werden!
"); - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); - } - $this->app->erp->RechnungProtokoll($id,'Rechnung als Gutschrift weitergeführt'); - $newid = $this->app->erp->WeiterfuehrenRechnungZuGutschrift($id); - - // pruefe obes schon eine gutschrift fuer diese rechnung gibt - $anzahlgutschriften = $this->app->DB->Select("SELECT COUNT(id) FROM gutschrift WHERE rechnungid='$id' - AND rechnungid!=0 AND rechnungid!=''"); - - if($anzahlgutschriften>1){ - $msg = $this->app->erp->base64_url_encode("
Achtung es gibt bereits eine oder mehrer Gutschriften für diese Rechnung!
"); - } - - $this->app->Location->execute("index.php?module=gutschrift&action=edit&id=$newid&msg=$msg"); - } - - - function RechnungFreigabe($id='') - { - if($id=='') - { - $id = $this->app->Secure->GetGET('id'); - $freigabe= $this->app->Secure->GetGET('freigabe'); - $this->app->Tpl->Set('TABTEXT','Freigabe'); - $this->app->erp->RechnungNeuberechnen($id); - } else { - $intern = true; - $freigabe=$intern; - } - $allowedFrm = true; - $showDefault = true; - $this->app->erp->CheckVertrieb($id,'rechnung'); - $this->app->erp->CheckBearbeiter($id,'rechnung'); - $doctype = 'rechnung'; - if(empty($intern)){ - $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault); - } - if($allowedFrm && $freigabe==$id) - { - $belegnr = $this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$id' LIMIT 1"); - - if($belegnr=='') - { - $this->app->erp->BelegFreigabe('rechnung',$id); - if($intern) { - return 1; - } - $msg = $this->app->erp->base64_url_encode("
Die Rechnung wurde freigegeben und kann jetzt versendet werden!
"); - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); - } - if($intern) { - return 0; - } - $msg = $this->app->erp->base64_url_encode("
Die Rechnung wurde bereits freigegeben!
"); - $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); - } - - if($showDefault){ - $name = $this->app->DB->Select("SELECT a.name FROM rechnung b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); - $summe = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM rechnung_position - WHERE rechnung='$id' LIMIT 1"); - - $this->app->Tpl->Set('TAB1', "
Soll die Rechnung an $name im Wert von $summe $waehrung - jetzt freigegeben werden? -
"); - } - - $this->RechnungMenu(); - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - - - function RechnungAbschicken() - { - $this->RechnungMenu(); - $this->app->erp->DokumentAbschicken(); - } - - public function RechnungDelete() - { - $id = $this->app->Secure->GetGET('id'); - $invoiceArr = $this->app->DB->SelectRow("SELECT belegnr, name FROM rechnung WHERE id='$id' LIMIT 1"); - $belegnr = $invoiceArr['belegnr']; - $name = $invoiceArr['name']; - $msg = ''; - if($belegnr=='0' || $belegnr=='') { - $this->app->erp->DeleteRechnung($id); - $belegnr='ENTWURF'; - $msg = $this->app->erp->base64_url_encode("
Die Rechnung \"$belegnr\" von \"$name\" wurde gelöscht!
"); - $this->app->Location->execute('index.php?module=rechnung&action=list&msg='.$msg); - } - - $this->RechnungGutschrift(); - $this->app->Location->execute('index.php?module=rechnung&action=list&msg='.$msg); - } - - function RechnungProtokoll() - { - $this->RechnungMenu(); - $id = $this->app->Secure->GetGET('id'); - - $this->app->Tpl->Set('TABTEXT','Protokoll'); - $tmp = new EasyTable($this->app); - $tmp->Query("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit DESC"); - $tmp->DisplayNew('TAB1','Protokoll','noAction'); - - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - - function RechnungMahnPDF() - { - $id = $this->app->Secure->GetGET('id'); - $invoiceArr = $this->app->DB->SelectRow("SELECT belegnr, mahnwesen, projekt FROM rechnung WHERE id='$id' LIMIT 1"); - $belegnr = $invoiceArr['belegnr']; - $mahnwesen = $invoiceArr['mahnwesen']; - $projekt = $invoiceArr['projekt']; - - - if($belegnr!='' && $belegnr!='0') - { - $Brief = new MahnungPDF($this->app,$projekt); - $Brief->GetRechnung($id,$mahnwesen); - $Brief->displayDocument(); - } - $this->app->ExitXentral(); - } - - function RechnungInlinePDF() - { - $id = $this->app->Secure->GetGET('id'); - $invoiceArr = $this->app->DB->SelectRow("SELECT schreibschutz, projekt FROM rechnung WHERE id='$id' LIMIT 1"); - $schreibschutz = $invoiceArr['schreibschutz']; - if($schreibschutz!='1'){ - $this->app->erp->RechnungNeuberechnen($id); - } - - $frame = $this->app->Secure->GetGET('frame'); - $projekt = $invoiceArr['projekt']; - - if($frame=='') - { - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - $Brief->inlineDocument($schreibschutz); - } else { - $file = urlencode("../../../../index.php?module=rechnung&action=inlinepdf&id=$id"); - echo ""; - $this->app->ExitXentral(); - } - } - - function RechnungPDF() - { - $id = $this->app->Secure->GetGET('id'); - $this->app->erp->RechnungNeuberechnen($id); - $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); - } - $projekt = $invoiceArr['projekt']; - $schreibschutz = $invoiceArr['schreibschutz']; - // if(is_numeric($belegnr) && $belegnr!=0) - // { - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - if($doppel=='1'){ - $Brief->GetRechnung($id, 'doppel'); - } - else{ - $Brief->GetRechnung($id); - } - $Brief->displayDocument($schreibschutz); - - $this->RechnungList(); - } - - function RechnungSuche() - { - $this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen'); - $this->app->erp->Headlines('Rechnungen'); - - $this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen'); - $this->app->Tpl->Set('TABTEXT','Rechnungen'); - - $name = $this->app->Secure->GetPOST('name'); - $plz = $this->app->Secure->GetPOST('plz'); - $auftrag = $this->app->Secure->GetPOST('auftrag'); - $kundennummer = $this->app->Secure->GetPOST('kundennummer'); - $proforma = ''; - - if($name!='' || $plz!='' || $proforma!='' || $kundennummer!='' || $auftrag!='') - { - $table = new EasyTable($this->app); - $this->app->Tpl->Add('ERGEBNISSE',"

Trefferliste:


"); - if($name!="") - $table->Query("SELECT a.name, a.belegnr as rechnung, adr.kundennummer, a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a - LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$name%')"); - else if($plz!="") - $table->Query("SELECT a.name, a.belegnr as rechnung, adr.kundennummer, a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a - LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.plz LIKE '$plz%')"); - else if($kundennummer!="") - $table->Query("SELECT a.name, a.belegnr as rechnung, adr.kundennummer, a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a - LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (adr.kundennummer='$kundennummer')"); - else if($auftrag!="") - $table->Query("SELECT a.name, a.belegnr as rechnung , adr.kundennummer,a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a - LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.belegnr='$auftrag')"); - - // $table->DisplayNew('ERGEBNISSE',"Lesen"); - $table->DisplayNew('ERGEBNISSE'," - - - \"weiterführen - - - - - "); - - } else { - $this->app->Tpl->Add('ERGEBNISSE',"
Rechnungssuche (bitte entsprechende Suchparameter eingeben)
"); - } - - $this->app->Tpl->Parse('INHALT','rechnungssuche.tpl'); - - $this->app->Tpl->Set('AKTIV_TAB1','selected'); - $this->app->Tpl->Parse('TAB1','rahmen77.tpl'); - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - - public function RechnungMenu() - { - $id = $this->app->Secure->GetGET('id'); - $invoiceArr = $this->app->DB->SelectRow("SELECT belegnr, name,status FROM rechnung WHERE id='$id' LIMIT 1"); - $belegnr = $invoiceArr['belegnr']; - $name = $invoiceArr['name']; - - if($belegnr=='0' || $belegnr=='') { - $belegnr ='(Entwurf)'; - } - - $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Rechnung $belegnr"); - - $this->app->erp->RechnungNeuberechnen($id); - - $status = $invoiceArr['status']; - - if ($status==='angelegt') { - $this->app->erp->MenuEintrag("index.php?module=rechnung&action=freigabe&id=$id",'Freigabe'); - } - $this->app->erp->MenuEintrag("index.php?module=rechnung&action=edit&id=$id",'Details'); - - $anzahldateien = $this->app->erp->AnzahlDateien('Rechnung',$id); - if($anzahldateien > 0) { - $anzahldateien = ' ('.$anzahldateien.')'; - } else { - $anzahldateien=''; - } - - $this->app->erp->MenuEintrag("index.php?module=rechnung&action=dateien&id=$id",'Dateien'.$anzahldateien); - - - - $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Zurück zur Übersicht'); - $this->app->erp->RunMenuHook('rechnung'); - } - - public function RechnungPositionen() - { - $id = $this->app->Secure->GetGET('id'); - $this->app->erp->RechnungNeuberechnen($id); - $this->app->YUI->AARLGPositionen(false); - } - - public function CopyRechnungPosition() - { - $this->app->YUI->SortListEvent('copy','rechnung_position','rechnung'); - $this->RechnungPositionen(); - } - - public function DelRechnungPosition() - { - $this->app->YUI->SortListEvent('del','rechnung_position','rechnung'); - $this->RechnungPositionen(); - } - - public function UpRechnungPosition() - { - $this->app->YUI->SortListEvent('up','rechnung_position','rechnung'); - $this->RechnungPositionen(); - } - - public function DownRechnungPosition() - { - $this->app->YUI->SortListEvent('down','rechnung_position','rechnung'); - $this->RechnungPositionen(); - } - - - public function RechnungPositionenEditPopup() - { - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'getopenaccordions') - { - $accordions = $this->app->Secure->GetPOST('accordions'); - $accordions = explode('*|*',$accordions); - foreach($accordions as $k => $v) - { - if(empty($v)) - { - unset($accordions[$k]); - }else{ - $accordions[$k] = 'rechnung_accordion'.$v; - } - } - $ret = []; - if(!empty($accordions)) - { - $accordions = $this->app->User->GetParameter($accordions); - if(!empty($accordions)) - { - foreach($accordions as $v) - { - if(!empty($v['value'])) - { - $ret['accordions'][] = str_replace('rechnung_accordion','',$v['name']); - } - } - } - } - echo json_encode($ret); - $this->app->ExitXentral(); - } - if($cmd === 'setaccordion') - { - $name = $this->app->Secure->GetPOST('name'); - $active = $this->app->Secure->GetPOST('active'); - $this->app->User->SetParameter('rechnung_accordion'.$name, $active); - echo json_encode(array('success'=>1)); - $this->app->ExitXentral(); - } - $id = $this->app->Secure->GetGET('id'); - - $artikel= $this->app->DB->Select("SELECT artikel FROM angebot_position WHERE id='$id' LIMIT 1"); - - // nach page inhalt des dialogs ausgeben - $filename = 'widgets/widget.rechnung_position_custom.php'; - if(is_file($filename)) { - include_once $filename; - $widget = new WidgetRechnung_positionCustom($this->app,'PAGE'); - } - else { - $widget = new WidgetRechnung_position($this->app,'PAGE'); - } - - $sid= $this->app->DB->Select("SELECT rechnung FROM rechnung_position WHERE id='$id' LIMIT 1"); - $widget->form->SpecialActionAfterExecute('close_refresh', - "index.php?module=rechnung&action=positionen&id=$sid"); - $widget->Edit(); - $this->app->BuildNavigation=false; - } - - - - //
  • Vorschau
  • - - /** - * @param int $invoiceId - * @param int $fileKeywordId - * - * @return int - */ - public function moveFileUp($invoiceId, $fileKeywordId) - { - $check = $this->app->DB->SelectRow( - sprintf( - 'SELECT ds.* - FROM datei_stichwoerter ds - INNER JOIN datei d on ds.datei = d.id - WHERE ds.id = %d and d.geloescht <> 1 - LIMIT 1', - $fileKeywordId - ) - ); - if(empty($check)) { - return 0; - } - - $sort = $check['sort']-1; - if($sort <= 0) { - return 0; - } - - $check2 = $this->app->DB->SelectArr( - "SELECT ds.* FROM datei_stichwoerter ds - INNER JOIN datei d on ds.datei = d.id - WHERE ds.objekt like 'rechnung' AND ds.sort = %d AND d.geloescht <> 1 - AND ds.parameter = %d - LIMIT 1", - $sort, $invoiceId - ); - if(empty($check2)) { - return 0; - } - - $this->app->DB->Update( - sprintf( - 'UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = %d LIMIT 1', - $fileKeywordId - ) - ); - $this->app->DB->Update( - sprintf( - 'UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = %d LIMIT 1', - $check2['id'] - ) - ); - - return $check2['id']; - } - - /** - * @param int $invoiceId - * @param int $fileKeywordId - * - * @return int - */ - public function moveFileDown($invoiceId, $fileKeywordId) - { - $check = $this->app->DB->SelectRow( - sprintf( - 'SELECT ds.* - FROM datei_stichwoerter ds - INNER JOIN datei d on ds.datei = d.id - WHERE ds.id = %d and d.geloescht <> 1 - LIMIT 1', - $fileKeywordId - ) - ); - if(empty($check)) { - return 0; - } - - $sort = $check['sort']+1; - if($sort <= 1) { - return 0; - } - - $check2 = $this->app->DB->SelectArr( - "SELECT ds.* FROM datei_stichwoerter ds - INNER JOIN datei d on ds.datei = d.id - WHERE ds.objekt like 'rechnung' AND ds.sort = %d AND d.geloescht <> 1 - AND ds.parameter = %d - LIMIT 1", - $sort, $invoiceId - ); - if(empty($check2)) { - return 0; - } - - $this->app->DB->Update( - sprintf( - 'UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = %d LIMIT 1', - $fileKeywordId - ) - ); - $this->app->DB->Update( - sprintf( - 'UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = %d LIMIT 1', - $check2['id'] - ) - ); - - return $check2['id']; - } - - public function RechnungEdit() - { - $id = $this->app->Secure->GetGET('id'); - // zum aendern vom Vertrieb - $sid = $this->app->Secure->GetGET('sid'); - $cmd = $this->app->Secure->GetGET('cmd'); - if($this->app->Secure->GetPOST('resetextsoll')) { - $this->app->DB->Update( - sprintf( - 'UPDATE rechnung SET extsoll = 0 WHERE id = %d', - $id - ) - ); - $this->app->erp->RechnungNeuberechnen($id); - } - - if($cmd === 'dadown') - { - $erg['status'] = 0; - $daid = $this->app->Secure->GetPOST('da_id'); - $from = $this->moveFileDown($id, $daid); - if($from > 0) { - $erg['status'] = 1; - $erg['from'] =$from; - } - echo json_encode($erg); - $this->app->ExitXentral(); - } - - if($cmd === 'daup') - { - $erg['status'] = 0; - $daid = $this->app->Secure->GetPOST('da_id'); - $from = $this->moveFileUp($id, $daid); - if($from > 0) { - $erg['status'] = 1; - $erg['from'] =$from; - } - - echo json_encode($erg); - $this->app->ExitXentral(); - } - - if($this->app->erp->VertriebAendern('rechnung',$id,$cmd,$sid)){ - return; - } - if($this->app->erp->InnendienstAendern('rechnung',$id,$cmd,$sid)){ - return; - } - - if($this->app->erp->DisableModul('rechnung',$id)) - { - //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht"); - $this->RechnungMenu(); - return; - } - $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); - if($adresse <=0) { - $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });'); - $this->app->Tpl->Set('MESSAGE',"
    Achtung! Dieses Dokument ist mit keiner Kunden-Nr. verlinkt. Bitte geben Sie die Kundennummer an und klicken Sie übernehmen oder Speichern!
    "); - } - $this->app->YUI->AARLGPositionen(); - - $this->app->erp->DisableVerband(); - $this->app->erp->CheckBearbeiter($id,'rechnung'); - $this->app->erp->CheckBuchhaltung($id,'rechnung'); - - $invoiceArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,schreibschutz FROM rechnung WHERE id= %d LIMIT 1', - (int)$id - ) - ); - $zahlungsweise= $invoiceArr['zahlungsweise']; - $zahlungszieltage= $invoiceArr['zahlungszieltage']; - 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"); - } - $nummer = ''; - $kundennummer = ''; - $adresse = 0; - $punkte = null; - $bonuspunkte = null; - $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']; - } - - $this->app->Tpl->Set('PUNKTE',""); - $this->app->Tpl->Set('BONUSPUNKTE',""); - - $this->app->Tpl->Set('SOLL',"$soll".""); - - if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("rechnung","schreibschutz")) - { - $this->app->erp->AnsprechpartnerButton($adresse); - $this->app->erp->LieferadresseButton($adresse); - } - - if($nummer!='') { - $this->app->Tpl->Set('NUMMER',$nummer); - if($this->app->erp->RechteVorhanden('adresse','edit')){ - $this->app->Tpl->Set('KUNDE', "   Kd-Nr. " . $kundennummer . ""); - } - else{ - $this->app->Tpl->Set('KUNDE', "   Kd-Nr. " . $kundennummer); - } - } - $lieferdatum = ''; - $rechnungsdatum = ''; - $lieferscheinid = 0; - if(!empty($rechnungarr)) { - $lieferdatum = $rechnungarr['lieferdatum'];//$this->app->DB->Select("SELECT lieferdatum FROM rechnung WHERE id='$id' LIMIT 1"); - $rechnungsdatum = $rechnungarr['datum'];//$this->app->DB->Select("SELECT datum FROM rechnung WHERE id='$id' LIMIT 1"); - $lieferscheinid = $rechnungarr['lieferschein'];//$this->app->DB->Select("SELECT lieferschein FROM rechnung WHERE id='$id' LIMIT 1"); - } - $lieferscheiniddatum = ''; - if($lieferscheinid > 0){ - $lieferscheiniddatum = $this->app->DB->Select("SELECT datum FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); - } - if($lieferdatum=='0000-00-00' && $schreibschutz!='1') { - if($lieferscheiniddatum!='0000-00-00'){ - $this->app->DB->Update("UPDATE rechnung SET lieferdatum='$lieferscheiniddatum' WHERE id='$id' LIMIT 1"); - } - else{ - $this->app->DB->Update("UPDATE rechnung SET lieferdatum='$rechnungsdatum' WHERE id='$id' LIMIT 1"); - } - } - - if($schreibschutz!='1') { - $this->app->DB->Update("UPDATE rechnung SET auftrag='' WHERE id='$id' AND auftragid<=0 LIMIT 1"); - } - - $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM rechnung WHERE id='$id' LIMIT 1"); - if($this->app->Secure->GetPOST('zahlungsweise')!='') { - $zahlungsweise = $this->app->Secure->GetPOST('zahlungsweise'); - } - $zahlungsweise = strtolower($zahlungsweise); - - $zahlungsweisenmodule = $this->app->DB->SelectArr( - "SELECT id, modul, verhalten - FROM zahlungsweisen - WHERE type = '".$this->app->DB->real_escape_string($zahlungsweise)."' AND - (projekt = '$projekt' OR projekt = 0) - ORDER BY projekt = '$projekt' DESC - LIMIT 1" - ); - - $this->app->Tpl->Set('RECHNUNG','none'); - $this->app->Tpl->Set('KREDITKARTE','none'); - $this->app->Tpl->Set('VORKASSE','none'); - $this->app->Tpl->Set('PAYPAL','none'); - $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG','none'); - if($zahlungsweise==='rechnung' || isset($zahlungsweisenmodule[0]['verhalten']) && $zahlungsweisenmodule[0]['verhalten']==='rechnung') { - $this->app->Tpl->Set('RECHNUNG',""); - } - if($zahlungsweise==='paypal') { - $this->app->Tpl->Set('PAYPAL',''); - } - if($zahlungsweise==='kreditkarte') { - $this->app->Tpl->Set('KREDITKARTE',''); - } - if($zahlungsweise==='einzugsermaechtigung' || $zahlungsweise==='lastschrift') { - $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',''); - } - if($zahlungsweise==='vorkasse' || $zahlungsweise==='kreditkarte' || $zahlungsweise==='paypal' || $zahlungsweise==='bar') { - $this->app->Tpl->Set('VORKASSE',''); - } - - - $saldo=$this->app->DB->Select("SELECT ist-skonto_gegeben FROM rechnung WHERE id='$id'"); - $this->app->Tpl->Set('LIVEIST',"$saldo"); - - if($schreibschutz=="1" && $this->app->erp->RechteVorhanden('rechnung','schreibschutz')) - { - $this->app->Tpl->Set('MESSAGE',"
    Diese Rechnung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
    "); - } - - if($schreibschutz=='1'){ - $this->app->erp->CommonReadonly(); - } - - if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen')) - { - $this->app->erp->RemoveReadonly('mahnwesen_datum'); - $this->app->erp->RemoveReadonly('mahnwesen_gesperrt'); - $this->app->erp->RemoveReadonly('mahnwesen_internebemerkung'); - $this->app->erp->RemoveReadonly('zahlungsstatus'); - $this->app->erp->RemoveReadonly('mahnwesenfestsetzen'); - $this->app->erp->RemoveReadonly('mahnwesen'); - $this->app->erp->RemoveReadonly('bezahlt_am'); - $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) - $this->app->erp->RemoveReadonly('ist'); - - //$auftrag= $this->app->DB->Select("SELECT auftrag FROM rechnung WHERE id='$id' LIMIT 1"); - - $this->app->erp->RemoveReadonly('skonto_gegeben'); - $this->app->erp->RemoveReadonly('internebemerkung'); - - $alle_gutschriften = $this->app->DB->SelectArr("SELECT id,belegnr FROM gutschrift WHERE rechnungid='$id' AND rechnungid>0"); - $cgutschriften = !empty($alle_gutschriften)?count($alle_gutschriften):0; - if($cgutschriften > 1) - { - $gutschriften = ''; - for($agi=0;$agi<$cgutschriften;$agi++) - $gutschriften .= "".$alle_gutschriften[$agi][belegnr]." "; - $this->app->Tpl->Add('MESSAGE',"
    Für die angebene Rechnung gibt es schon folgende Gutschriften: $gutschriften
    "); - } - - $this->app->erp->CommonReadonly(); - } - - $speichern = $this->app->Secure->GetPOST('speichern'); - if($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen')) - { - $mahnwesen_datum = $this->app->Secure->GetPOST('mahnwesen_datum'); - $bezahlt_am = $this->app->Secure->GetPOST('bezahlt_am'); - $mahnwesen_gesperrt = $this->app->Secure->GetPOST('mahnwesen_gesperrt'); - $mahnwesen_internebemerkung = $this->app->Secure->GetPOST('mahnwesen_internebemerkung'); - $zahlungsstatus = $this->app->Secure->GetPOST('zahlungsstatus'); - $mahnwesenfestsetzen = $this->app->Secure->GetPOST('mahnwesenfestsetzen'); - $mahnwesen = $this->app->Secure->GetPOST('mahnwesen'); - $internebemerkung = $this->app->Secure->GetPOST('internebemerkung'); - $ist = str_replace(',','.',$this->app->Secure->GetPOST('ist')); - $skonto_gegeben = str_replace(',','.',$this->app->Secure->GetPOST('skonto_gegeben')); - - if($mahnwesen_gesperrt!='1') { - $mahnwesen_gesperrt='0'; - } - if($mahnwesenfestsetzen!='1') { - $mahnwesenfestsetzen='0'; - } - - $mahnwesen_datum = $this->app->String->Convert($mahnwesen_datum,'%1.%2.%3','%3-%2-%1'); - $bezahlt_am = $this->app->String->Convert($bezahlt_am,'%1.%2.%3','%3-%2-%1'); - - if($bezahlt_am=='--')$bezahlt_am='0000-00-00'; - $alte_mahnstufe = $this->app->DB->Select("SELECT mahnwesen FROM rechnung WHERE id='$id' LIMIT 1"); - if($alte_mahnstufe!=$mahnwesen) $versendet=0; else $versendet=1; - - if($mahnwesenfestsetzen=='1') - { - $this->app->DB->Update("UPDATE rechnung SET mahnwesen_internebemerkung='$mahnwesen_internebemerkung',zahlungsstatus='$zahlungsstatus',versendet_mahnwesen='$versendet', - mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum', mahnwesenfestsetzen='$mahnwesenfestsetzen',internebemerkung='$internebemerkung', - mahnwesen='$mahnwesen',ist='$ist',skonto_gegeben='$skonto_gegeben',bezahlt_am='$bezahlt_am' WHERE id='$id' LIMIT 1"); - } else { - $this->app->DB->Update("UPDATE rechnung SET mahnwesen='$mahnwesen', mahnwesenfestsetzen='$mahnwesenfestsetzen', mahnwesen_internebemerkung='$mahnwesen_internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum' WHERE id='$id' LIMIT 1"); - } - } - - - if($status=='') - $this->app->DB->Update("UPDATE rechnung SET status='angelegt' WHERE id='$id' LIMIT 1"); - - if($schreibschutz != '1'){ - if($this->app->erp->Firmendaten('schnellanlegen') == '1'){ - $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' - '); - }else{ - $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' - - '); - } - } - - // immer wenn sich der lieferant genändert hat standartwerte setzen - if($this->app->Secure->GetPOST('adresse')!='') - { - $tmp = $this->app->Secure->GetPOST('adresse'); - $kundennummer = $this->app->erp->FirstTillSpace($tmp); - - //$name = substr($tmp,6); - $filter_projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id = '$id' LIMIT 1"); - //if($filter_projekt)$filter_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id= '$filter_projekt' and eigenernummernkreis = 1 LIMIT 1"); - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND geloescht=0 ".$this->app->erp->ProjektRechte("projekt", true, 'vertrieb')." ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); - - $uebernehmen =$this->app->Secure->GetPOST('uebernehmen'); - if($uebernehmen=='1' && $schreibschutz != '1') // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!! - { - $this->LoadRechnungStandardwerte($id,$adresse); - $this->app->erp->RechnungNeuberechnen($id); - $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); - } - } - $rechnungarr = null; - if($id > 0) { - $rechnungarr = $this->app->DB->SelectRow("SELECT * FROM rechnung WHERE id='$id' LIMIT 1"); - } - $land = ''; - $ustid = ''; - $ust_befreit = null; - if(!empty($rechnungarr)) { - $land = $rechnungarr['land'];//$this->app->DB->Select("SELECT land FROM rechnung WHERE id='$id' LIMIT 1"); - $ustid = $rechnungarr['ustid'];//$this->app->DB->Select("SELECT ustid FROM rechnung WHERE id='$id' LIMIT 1"); - $ust_befreit = $rechnungarr['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM rechnung WHERE id='$id' LIMIT 1"); - } - if($ust_befreit) { - $this->app->Tpl->Set('USTBEFREIT',"
    EU-Lieferung
    (bereits geprüft!)
    "); - } - else if($land!=='DE' && $ustid!='') { - $this->app->Tpl->Set('USTBEFREIT',"
    EU-Lieferung
    (Fehler bei Prüfung!)
    "); - } - - - // easy table mit arbeitspaketen YUI als template - $table = new EasyTable($this->app); - $table->Query("SELECT bezeichnung as artikel, nummer as Nummer, menge, vpe as VPE, FORMAT(preis,4) as preis - FROM rechnung_position - WHERE rechnung='$id'"); - $table->DisplayNew('POSITIONEN',"Preis","noAction"); - $summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM rechnung_position - WHERE rechnung='$id'"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM rechnung_position - WHERE rechnung='$id' LIMIT 1"); - - $summebrutto = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); - $ust_befreit_check = $this->app->DB->Select("SELECT ust_befreit FROM rechnung WHERE id='$id' LIMIT 1"); - - $tmp = 'Kunde zahlt mit UST'; - if($ust_befreit_check==1) { - $tmp = 'Kunde ist UST befreit'; - } - - if($summe > 0){ - $this->app->Tpl->Add('POSITIONEN', "
    Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($tmp)  "); - } - - $status= $this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); - $this->app->Tpl->Set('STATUS',""); - - $internet = $this->app->DB->Select("SELECT a.internet FROM rechnung r LEFT JOIN auftrag a ON a.id=r.auftragid WHERE r.id='$id' AND r.id > 0 LIMIT 1"); - if($internet!='') { - $this->app->Tpl->Set('INTERNET',"Internet:"); - } - - $this->app->Tpl->Set('AKTIV_TAB1',"selected"); - - $sollExtSoll = $this->app->DB->SelectRow( - sprintf( - "SELECT extsoll, soll - FROM rechnung - WHERE id = %d AND schreibschutz = 0 AND status = 'versendet' AND extsoll <> 0", - $id - ) - ); - if(!empty($sollExtSoll['extsoll']) && $sollExtSoll['extsoll'] == $sollExtSoll['soll']) { - $sollExtSoll['soll'] = $this->app->DB->Select( - sprintf( - 'SELECT ROUND(SUM(`umsatz_brutto_gesamt`),2) FROM `rechnung_position` WHERE `rechnung` = %d ', - $id - ) - ); - } - - if(!empty($sollExtSoll) && $sollExtSoll['soll'] != $sollExtSoll['extsoll']) { - $extsoll = $sollExtSoll['extsoll']; - $this->app->Tpl->Add( - 'MESSAGE','
    - Der Sollbetrag stimmt nicht mehr mit ursprünglich festgelegten Betrag '. - number_format($extsoll,2,',','.'). - ' überein
    ' - ); - } - parent::RechnungEdit(); - if($id > 0 && $this->app->DB->Select( - sprintf( - 'SELECT id FROM rechnung WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d', - $id - ) - ) - ) { - $this->app->erp->PDFArchivieren('rechnung', $id, true); - } - $this->app->erp->MessageHandlerStandardForm(); - - if($this->app->Secure->GetPOST('weiter')!='') - { - $this->app->Location->execute('index.php?module=rechnung&action=positionen&id='.$id); - } - $this->RechnungMenu(); - } - - function RechnungCreate() - { - $anlegen = $this->app->Secure->GetGET('anlegen'); - if($this->app->erp->Firmendaten('schnellanlegen')=='1' && $anlegen!='1') { - $this->app->Location->execute('index.php?module=rechnung&action=create&anlegen=1'); - } - - if($anlegen != '') { - $id = $this->CreateRechnung(); - $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); - } - - $this->app->Tpl->Add('KURZUEBERSCHRIFT','Rechnung'); - $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Zurück zur Übersicht'); - - $this->app->Tpl->Set('MESSAGE',"
    Möchten Sie eine Rechnung jetzt anlegen?   -

    "); - $this->app->Tpl->Set('TAB1'," - - - - -
    -
    Rechnungen in Bearbeitung -
    -
    - Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind. -
    -
    -
    - [AUFTRAGE]"); - - - $this->app->Tpl->Set('AKTIV_TAB1','selected'); - $this->app->YUI->TableSearch('AUFTRAGE','rechnungeninbearbeitung'); - $this->app->Tpl->Set('TABTEXT','Rechnung anlegen'); - $this->app->Tpl->Parse('PAGE','tabview.tpl'); - } - - /** - * @param int $invoiceId - * - * @return bool - */ - public function markInvoiceAsClosed($invoiceId) - { - $reArr = $this->app->DB->SelectRow( - sprintf( - "SELECT projekt,belegnr,status,usereditid, - DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` - FROM rechnung WHERE id=%d LIMIT 1", - $invoiceId - ) - ); - if($reArr['belegnr'] === '') { - return false; - } - if($reArr['status'] === 'freigegeben') { - $this->app->erp->RechnungNeuberechnen($invoiceId); - } - $projekt = $reArr['projekt']; - $this->app->erp->RechnungProtokoll($invoiceId,'Rechnung versendet'); - $this->app->erp->closeInvoice($invoiceId); - $this->app->DB->Update( - sprintf( - 'UPDATE rechnung SET schreibschutz=1, versendet = 1 WHERE id = %d LIMIT 1', - $invoiceId - ) - ); - $this->app->DB->Update( - sprintf( - "UPDATE rechnung - SET status='versendet' - WHERE id = %d AND status!='storniert' - LIMIT 1", - $invoiceId - ) - ); - $this->app->erp->PDFArchivieren('rechnung', $invoiceId, true); - 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=''"); - - if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) - { - $drucker = $this->app->Secure->GetPOST('seldrucker'); - $aktion = $this->app->Secure->GetPOST('sel_aktion'); - $auswahl = $this->app->Secure->GetPOST('auswahl'); - if($drucker > 0) { - $this->app->erp->BriefpapierHintergrundDisable($drucker); - } - if(is_array($auswahl)) { - foreach($auswahl as $auswahlKey => $auswahlValue) { - if((int)$auswahlValue > 0) { - $auswahl[$auswahlKey] = (int)$auswahlValue; - } - else { - unset($auswahl[$auswahlKey]); - } - } - switch($aktion) - { - case 'bezahlt': - $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='bezahlt', bezahlt_am = now(), ist=soll,mahnwesenfestsetzen='1',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); - break; - case 'offen': - $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',bezahlt_am = NULL, ist='0',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); - break; - case 'mail': - $auswahl = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)", - implode(', ', $auswahl) - ) - ); - foreach($auswahl as $v) { - if(!$v) { - continue; - } - $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 && - $this->app->DB->Select( - "SELECT r.id - FROM rechnung AS r - INNER JOIN adresse AS a ON r.adresse = a.id - WHERE r.id = '$v' AND r.email <> '' OR a.email <> '' - LIMIT 1" - ) - ) { - $this->app->erp->PDFArchivieren('rechnung', $v, true); - $this->app->erp->Rechnungsmail($v); - } - else if($checkpapier && $drucker) { - $this->app->erp->PDFArchivieren('rechnung', $v, true); - $projekt = $this->app->DB->Select( - "SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1" - ); - if(class_exists('RechnungPDFCustom')) { - $Brief = new RechnungPDFCustom($this->app,$projekt); - } - else { - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($v); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(); - $this->app->printer->Drucken($drucker,$tmpfile); - unlink($tmpfile); - } - } - break; - case 'versendet': - $auswahl = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)", - implode(', ', $auswahl) - ) - ); - foreach($auswahl as $v) { - if($v) { - $reArr = $this->app->DB->SelectRow( - sprintf( - "SELECT projekt,belegnr,status,usereditid, - DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` - FROM rechnung WHERE id=%d LIMIT 1", - $v - ) - ); - if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) { - continue; - } - $this->markInvoiceAsClosed($v); - } - } - break; - case 'drucken': - if($drucker) { - $auswahl = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)", - implode(', ', $auswahl) - ) - ); - foreach($auswahl as $v) { - $reArr = $this->app->DB->SelectRow( - sprintf( - "SELECT projekt,belegnr,status,usereditid,adresse, - DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` - FROM rechnung WHERE id=%d LIMIT 1", - $v - ) - ); - if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) { - continue; - } - if($reArr['status'] === 'freigegeben') { - $this->app->erp->RechnungNeuberechnen($v); - } - $projekt = $reArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1"); - $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); - if(class_exists('RechnungPDFCustom')) { - $Brief = new RechnungPDFCustom($this->app,$projekt); - } - else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($v); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(); - $this->app->printer->Drucken($drucker,$tmpfile); - $doctype = 'rechnung'; - $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $reArr['adresse'], $aktion); - @unlink($tmpfile); - } - } - break; - case 'pdf': - $tmpfile = []; - foreach($auswahl as $v) { - $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1"); - if(class_exists('RechnungPDFCustom')) { - $Brief = new RechnungPDFCustom($this->app,$projekt); - } - else { - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($v); - $tmpfile[] = $Brief->displayTMP(); - } - - if(count($tmpfile) > 0) { - try { - /** @var PdfMerger $pdfMerger */ - $pdfMerger = $this->app->Container->get('PdfMerger'); - $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf'; - $pdfMerger->merge($tmpfile, $mergeOutputPath); - - foreach($tmpfile as $key=>$value) { - unlink($value); - } - - header('Content-type:application/pdf'); - header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf'); - readfile($mergeOutputPath); - $this->app->ExitXentral(); - } catch (PdfComponentExceptionInterface $exception) { - echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage()); - $this->app->ExitXentral(); - } - } - break; - } - } - } - - $this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen'); - - $backurl = $this->app->Secure->GetGET('backurl'); - $backurl = $this->app->erp->base64_url_decode($backurl); - - $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Übersicht'); - $this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen'); - - if(strlen($backurl)>5){ - $this->app->erp->MenuEintrag("$backurl", 'Zurück'); - } - //else - // $this->app->erp->MenuEintrag("index.php","Zurück zur Übersicht"); - - $zahlungsweisen = $this->app->DB->SelectArr(' - SELECT - zahlungsweise - FROM - rechnung - GROUP BY - zahlungsweise - '); - - $zahlungsweiseStr = ''; - if ($zahlungsweisen) { - foreach ($zahlungsweisen as $zahlungsweise) { - if (empty($zahlungsweise['zahlungsweise'])) { - continue; - } - $zahlungsweiseStr .= ''; - } - } - - $status = $this->app->DB->SelectArr(' - SELECT - status - FROM - rechnung - GROUP BY - status - '); - - $statusStr = ''; - if ($status) { - foreach ($status as $statusE) { - if (empty($statusE['status'])) { - continue; - } - $statusStr .= ''; - } - } - - $versandarten = $this->app->DB->SelectArr(' - SELECT - versandart - FROM - rechnung - GROUP BY - versandart - '); - - $versandartenStr = ''; - if ($versandarten) { - foreach ($versandarten as $versandart) { - if (empty($versandart['versandart'])) { - continue; - } - $versandartenStr .= ''; - } - } - - $laender = $this->app->erp->GetSelectLaenderliste(); - $laenderStr = ''; - foreach ($laender as $landKey => $land) { - $laenderStr .= ''; - } - - - $this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr); - $this->app->Tpl->Add('STATUS',$statusStr); - $this->app->Tpl->Add('VERSANDARTEN',$versandartenStr); - $this->app->Tpl->Add('LAENDER',$laenderStr); - - $this->app->YUI->DatePicker('datumVon'); - $this->app->YUI->DatePicker('datumBis'); - $this->app->YUI->AutoComplete("projekt", "projektname", 1); - $this->app->YUI->AutoComplete("kundennummer", "kunde", 1); - $this->app->YUI->AutoComplete("rechnungsnummer", "rechnung", 1); - $this->app->YUI->AutoComplete("artikel", "artikelnummer", 1); - $this->app->Tpl->Parse('TAB1',"rechnung_table_filter.tpl"); - - $this->app->Tpl->Set('AKTIV_TAB1',"selected"); - $this->app->Tpl->Set('INHALT',''); - - $this->app->YUI->TableSearch('TAB2','rechnungenoffene'); - $this->app->YUI->TableSearch('TAB1','rechnungen'); - $this->app->YUI->TableSearch('TAB3','rechnungeninbearbeitung'); - - if($this->app->erp->RechteVorhanden('rechnung', 'manuellbezahltmarkiert')){ - $this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', ''); - } - - $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))); - - $this->app->Tpl->Parse('PAGE','rechnunguebersicht.tpl'); - } - - /** - * @param string|int $adresse - * - * @return int - */ - public function CreateRechnung($adresse='') - { - $projekt = $this->app->erp->GetCreateProjekt($adresse); - - $belegmax = ''; - $ohnebriefpapier = $this->app->erp->Firmendaten('rechnung_ohnebriefpapier'); - - $usereditid = 0; - if(isset($this->app->User) && $this->app->User && method_exists($this->app->User,'GetID')){ - $usereditid = $this->app->User->GetID(); - } - - if($this->app->erp->StandardZahlungsweise($projekt)==='rechnung') - { - $this->app->DB->Insert("INSERT INTO rechnung (id,datum,bearbeiter,firma,belegnr,zahlungsweise, - zahlungszieltage, - zahlungszieltageskonto, - zahlungszielskonto, - lieferdatum, - status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid) - VALUES ('',NOW(),'','".$this->app->User->GetFirma()."','$belegmax','".$this->app->erp->StandardZahlungsweise($projekt)."', - '".$this->app->erp->ZahlungsZielTage($projekt)."', - '".$this->app->erp->ZahlungsZielTageSkonto($projekt)."', - '".$this->app->erp->ZahlungsZielSkonto($projekt)."',NOW(), - 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid')"); - } else { - $this->app->DB->Insert("INSERT INTO rechnung (id,datum,bearbeiter,firma,belegnr,zahlungsweise, - zahlungszieltage, - zahlungszieltageskonto, - zahlungszielskonto, - lieferdatum, - status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid) - VALUES ('',NOW(),'','".$this->app->User->GetFirma()."','$belegmax','".$this->app->erp->StandardZahlungsweise($projekt)."', - '0', - '0', - '0',NOW(), - 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid')"); - } - - $id = $this->app->DB->GetInsertID(); - $this->app->erp->CheckVertrieb($id,'rechnung'); - $this->app->erp->CheckBearbeiter($id,'rechnung'); - - $this->app->erp->RechnungProtokoll($id,'Rechnung angelegt'); - - $type='rechnung'; - $this->app->erp->ObjektProtokoll($type,$id,$type.'_create',ucfirst($type).' angelegt'); - $deliverythresholdvatid = $this->app->erp->getDeliverythresholdvatid($projekt); - if($id > 0 && !empty($deliverythresholdvatid)){ - $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); - $this->app->DB->Update("UPDATE rechnung SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); - } - $this->app->erp->SchnellFreigabe('rechnung',$id); - - $this->app->erp->LoadSteuersaetzeWaehrung($id,'rechnung',$projekt); - $this->app->erp->EventAPIAdd('EventRechnungCreate',$id,'rechnung','create'); - - return $id; - } - - /** - * @param int $id - * - * @return int - */ - public function CopyRechnung($id) - { - $this->app->DB->Insert("INSERT INTO rechnung (angelegtam) VALUES (NOW())"); - $newid = $this->app->DB->GetInsertID(); - $arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,bearbeiter,zahlungszieltage,zahlungszieltageskonto,zahlungsweise,ohne_artikeltext,ohne_briefpapier,'angelegt' as status, - zahlungszielskonto,ust_befreit,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,typ, - firma,sprache,anzeigesteuer,waehrung,kurs,kostenstelle FROM rechnung WHERE id='$id' LIMIT 1"); - $arr['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '".$arr['adresse']."' LIMIT 1"); - $arr['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM rechnung WHERE id='$id' LIMIT 1"); - $this->app->DB->UpdateArr('rechnung',$newid,'id',$arr, true); - - $pos = $this->app->DB->SelectArr("SELECT * FROM rechnung_position WHERE rechnung='$id'"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++){ - $this->app->DB->Insert("INSERT INTO rechnung_position (rechnung) VALUES($newid)"); - $newposid = $this->app->DB->GetInsertID(); - $pos[$i]['rechnung']=$newid; - $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$pos[$i], true); - if($pos[$i]['steuersatz'] === null){ - $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - $this->app->erp->CheckFreifelder('rechnung',$newid); - $this->app->erp->CopyBelegZwischenpositionen('rechnung',$id,'rechnung',$newid); - $this->app->erp->LoadSteuersaetzeWaehrung($newid,'rechnung'); - $this->app->erp->SchnellFreigabe('rechnung',$newid); - - return $newid; - } - - /** - * @param int $id - * @param int $adresse - */ - public function LoadRechnungStandardwerte($id,$adresse) - { - if($id==0 || $id=='' || $adresse=='' || $adresse=='0'){ - return; - } - $this->app->erp->StartChangeLog('rechnung', $id); - // standard adresse von lieferant - $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,'' as bearbeiter,innendienst as bearbeiterid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - if($arr[0]['bearbeiterid'] <=0 ){ - $arr[0]['bearbeiterid'] = $this->app->User->GetAdresse(); - } - - $arr[0]['gruppe'] = $this->app->erp->GetVerband($adresse); - - $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); - - if($arr[0]['abweichende_rechnungsadresse']=='1') - { - $arr = $this->app->DB->SelectArr("SELECT projekt, rechnung_name as name, - rechnung_abteilung as abteilung, - rechnung_ansprechpartner as ansprechpartner, - rechnung_unterabteilung as unterabteilung, - rechnung_strasse as strasse, - rechnung_adresszusatz as adresszusatz, - rechnung_plz as plz, - rechnung_ort as ort, - rechnung_land as land, - rechnung_telefon as telefon, - rechnung_titel as titel, - rechnung_email as email, - rechnung_telefax as telefax, - rechnung_vorname as vorname, - rechnung_typ as typ, - rechnung_bundesstaat as bundesstaat, - rechnung_gln as gln, - ustid, - kundennummer, - lieferbedingung, - vertrieb as vertriebid, - innendienst as bearbeiterid, - '' as bearbeiter, - rechnung_anschreiben as anschreiben - FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - $arr[0]['gruppe'] = $this->app->erp->GetVerband($adresse); - } - $field = array('gln','anschreiben','name','abteilung','typ','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax','kundennummer','projekt','ust_befreit','gruppe','vertriebid','bearbeiter','ansprechpartner','bearbeiterid','titel','lieferbedingung','bundesstaat'); - - if($rolle_projekt > 0) - { - $arr[0]['projekt'] = $rolle_projekt; - } - - foreach($field as $key=>$value) - { - if($value=="projekt" && $this->app->Secure->POST[$value]!=""&&0) - { - $uparr[$value] = str_replace("'", ''',$this->app->Secure->POST[$value]); - } else { - $this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]); - $uparr[$value] = str_replace("'", ''',$arr[0][$value]); - } - - //$this->app->Secure->POST[$value] = $arr[0][$value]; - //$uparr[$value] = $arr[0][$value]; - } - - $uparr['adresse'] = $adresse; - $uparr['ust_befreit'] = $this->app->erp->AdresseUSTCheck($adresse); - $uparr['zahlungsstatusstatus']='offen'; - - if($this->app->erp->Firmendaten('rechnung_ohnebriefpapier')=='1'){ - $uparr['ohne_briefpapier'] = '1'; - } - - $this->app->DB->UpdateArr('rechnung',$id,'id',$uparr,true); - $uparr=null; - - //liefernantenvorlage - $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); - - if($arr[0]['abweichende_rechnungsadresse']=='1') - { - $arr = $this->app->DB->SelectArr("SELECT projekt, rechnung_name as name, - rechnung_abteilung as abteilung, - rechnung_unterabteilung as unterabteilung, - rechnung_strasse as strasse, - rechnung_adresszusatz as adresszusatz, - rechnung_plz as plz, - rechnung_ort as ort, - rechnung_land as land, - rechnung_telefon as telefon, - rechnung_telefax as telefax, - rechnung_vorname as vorname, - rechnung_typ as typ, - zahlungsweise,zahlungszieltage,zahlungszieltageskonto,zahlungszielskonto,versandart, - rechnung_anschreiben as anschreiben - FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - } - - $field = array('zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart'); - - $this->app->erp->LoadZahlungsweise($adresse,$arr); - - // falls von Benutzer projekt ueberladen werden soll - $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - if($projekt_bevorzugt=="1") - { - $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - $arr[0]['projekt'] = $uparr['projekt']; - $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); - } - if(isset($arr[0]['usereditid'])){ - unset($arr[0]['usereditid']); - } - $this->app->Secure->POST['zahlungsweise'] = strtolower($arr[0]['zahlungsweise']); - $this->app->Secure->POST['zahlungszieltage'] = strtolower($arr[0]['zahlungszieltage']); - $this->app->Secure->POST['zahlungszieltageskonto'] = strtolower($arr[0]['zahlungszieltageskonto']); - $this->app->Secure->POST['zahlungszielskonto'] = strtolower($arr[0]['zahlungszielskonto']); - $this->app->Secure->POST['versandart'] = strtolower($arr[0]['versandart']); - /* - foreach($field as $key=>$value) - { - $uparr[$value] = $arr[0][$value]; - $this->app->Secure->POST[$value] = $arr[0][$value]; - } - */ - $this->app->DB->UpdateArr('rechnung',$id,'id',$arr[0],true); - $this->app->erp->WriteChangeLog(); - $this->app->erp->LoadSteuersaetzeWaehrung($id,'rechnung'); - $this->app->erp->StartChangeLog('rechnung', $id); - $this->app->erp->LoadAdresseStandard('rechnung',$id,$adresse); - $this->app->erp->WriteChangeLog(); - } - - /** - * @param int $id - */ - public function DeleteRechnung($id) - { - if($id <= 0) { - return; - } - $belegnr = $this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$id' LIMIT 1"); - if($belegnr=='' || $belegnr=='0') { - $this->app->DB->Delete("DELETE FROM rechnung_position WHERE rechnung='$id'"); - $this->app->DB->Delete("DELETE FROM rechnung_protokoll WHERE rechnung='$id'"); - $this->app->DB->Delete("DELETE FROM rechnung WHERE id='$id' LIMIT 1"); - } - } - - /** - * @param int $rechnung - * @param int $verkauf - * @param float $menge - * @param string $datum - */ - public function AddRechnungPosition($rechnung, $verkauf,$menge,$datum) - { - $artikel = 0; - $preis = 0; - $projekt = 0; - $waehrung = 0; - $vpe = ''; - if($verkauf){ - $verkaufspreisearr = $this->app->SelectRow("SELECT * FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - } - if(!empty($verkaufspreisearr)) { - $artikel = $verkaufspreisearr['artikel']; - $preis = $verkaufspreisearr['preis']; - $projekt = $verkaufspreisearr['projekt']; - $waehrung = $verkaufspreisearr['waehrung']; - $vpe = $verkaufspreisearr['vpe']; - } - if($artikel > 0){ - $artikelarr = $this->app->SelectRow("SELECT * FROM artikel WHERE id='$artikel' LIMIT 1"); - } - $bezeichnunglieferant = ''; - $umsatzsteuer = ''; - $bestellnummer = ''; - if(!empty($artikelarr)) { - $bezeichnunglieferant = $artikelarr['name_de']; - $umsatzsteuer = $artikelarr['umsatzsteuer']; - $bestellnummer = $artikelarr['nummer']; - } - - $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM rechnung_position WHERE rechnung='$rechnung' LIMIT 1"); - $sort++; - $this->app->DB->Insert("INSERT INTO rechnung_position (rechnung,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) - VALUES ('$rechnung','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); - } - - /** - * @param int $rechnung - * @param int $artikel - * @param float $preis - * @param float $menge - * @param string $bezeichnung - * @param string $beschreibung - * @param string $waehrung - * @param int $rabatt - * - * @return int - */ - public function AddRechnungPositionManuell($rechnung, $artikel,$preis, $menge,$bezeichnung,$beschreibung='',$waehrung='EUR',$rabatt=0) - { - $bezeichnung = $this->app->DB->real_escape_string($bezeichnung); - $beschreibung = $this->app->DB->real_escape_string($beschreibung); - - $bezeichnunglieferant = $bezeichnung; - $artArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT nummer, projekt, umsatzsteuer FROM artikel WHERE id = %d', - $artikel - ) - ); - $bestellnummer = !empty($artArr)?$artArr['nummer']: $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - $projekt = !empty($artArr)?$artArr['projekt']:$this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1"); - - $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); - - if($waehrung!='') { - $this->app->DB->Update("UPDATE rechnung SET waehrung='$waehrung' WHERE id='$rechnung' AND waehrung='' LIMIT 1"); - } - - $keinrabatterlaubt=0; - if($rabatt <> 0) { - $keinrabatterlaubt=1; - } - - //$waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $umsatzsteuer = !empty($artArr)?$artArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); - $umsatzsteuer = $this->app->DB->real_escape_string($umsatzsteuer); - $vpe = ''; - //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM rechnung_position WHERE rechnung='$rechnung' LIMIT 1"); - $sort++; - $this->app->DB->Insert("INSERT INTO rechnung_position (rechnung,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,beschreibung,rabatt,keinrabatterlaubt) - VALUES ('$rechnung','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$beschreibung','$rabatt','$keinrabatterlaubt')"); - - return $this->app->DB->GetInsertID(); - } -} +app=$app; + if($intern) + { + return; + } + + $this->app->ActionHandlerInit($this); + $this->app->ActionHandler("list","RechnungList"); + $this->app->ActionHandler("create","RechnungCreate"); + $this->app->ActionHandler("positionen","RechnungPositionen"); + $this->app->ActionHandler("uprechnungposition","UpRechnungPosition"); + $this->app->ActionHandler("delrechnungposition","DelRechnungPosition"); + $this->app->ActionHandler("copyrechnungposition","CopyRechnungPosition"); + $this->app->ActionHandler("downrechnungposition","DownRechnungPosition"); + $this->app->ActionHandler("positioneneditpopup","RechnungPositionenEditPopup"); + $this->app->ActionHandler("search","RechnungSuche"); + $this->app->ActionHandler("mahnwesen","RechnungMahnwesen"); + $this->app->ActionHandler("edit","RechnungEdit"); + $this->app->ActionHandler("delete","RechnungDelete"); + $this->app->ActionHandler("gutschrift","RechnungGutschrift"); + $this->app->ActionHandler("copy","RechnungCopy"); + $this->app->ActionHandler("zertifikate","RechnungZertifikate"); + $this->app->ActionHandler("freigabe","RechnungFreigabe"); + $this->app->ActionHandler("abschicken","RechnungAbschicken"); + $this->app->ActionHandler("pdf","RechnungPDF"); + $this->app->ActionHandler("alternativpdf","RechnungAlternativPDF"); + $this->app->ActionHandler("inlinepdf","RechnungInlinePDF"); + $this->app->ActionHandler("lastschrift","RechnungLastschrift"); + $this->app->ActionHandler("protokoll","RechnungProtokoll"); + $this->app->ActionHandler("zahlungseingang","RechnungZahlungseingang"); + $this->app->ActionHandler("minidetail","RechnungMiniDetail"); + $this->app->ActionHandler("editable","RechnungEditable"); + $this->app->ActionHandler("livetabelle","RechnungLiveTabelle"); + $this->app->ActionHandler("schreibschutz","RechnungSchreibschutz"); + $this->app->ActionHandler("undostorno","RechnungUndostorno"); + $this->app->ActionHandler("manuellbezahltmarkiert","RechnungManuellBezahltMarkiert"); + $this->app->ActionHandler("manuellbezahltentfernen","RechnungManuellBezahltEntfernen"); + $this->app->ActionHandler("zahlungsmahnungswesen","RechnungZahlungMahnungswesen"); + $this->app->ActionHandler("deleterabatte","RechnungDeleteRabatte"); + $this->app->ActionHandler("updateverband","RechnungUpdateVerband"); + $this->app->ActionHandler("lastschriftwdh","RechnungLastschriftWdh"); + $this->app->ActionHandler("dateien","RechnungDateien"); + $this->app->ActionHandler("pdffromarchive","RechnungPDFfromArchiv"); + $this->app->ActionHandler("archivierepdf","RechnungArchivierePDF"); + + $this->app->ActionHandler("summe","RechnungSumme"); // nur fuer rechte + $this->app->ActionHandler("einkaufspreise","RechnungEinkaufspreise"); + $this->app->ActionHandler("steuer","RechnungSteuer"); + $this->app->ActionHandler("formeln","RechnungFormeln"); + + $this->app->DefaultActionHandler("list"); + + $id = $this->app->Secure->GetGET("id"); + $nummer = $this->app->Secure->GetPOST("adresse"); + + if($nummer==''){ + if($id > 0){ + $adresse = $this->app->DB->Select("SELECT a.name FROM rechnung b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); + }else{ + $adresse = ''; + } + } + else{ + $adresse = $nummer; + } + if($id > 0){ + $nummer = $this->app->DB->Select("SELECT b.belegnr FROM rechnung b WHERE b.id='$id' LIMIT 1"); + }else{ + $nummer = ''; + } + if($nummer=="" || $nummer==0) $nummer="ohne Nummer"; + + $this->app->Tpl->Set('UEBERSCHRIFT',"Rechnung: ".$adresse." (".$nummer.")"); + $this->app->Tpl->Set('FARBE',"[FARBE4]"); + + $this->app->erp->Headlines('Rechnung'); + + $this->app->ActionHandlerListen($app); + } + + public function Install() + { + $this->app->erp->RegisterHook('supersearch_detail', 'rechnung', 'RechnungSupersearchDetail'); + } + + /** + * @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery + * @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult + * + * @return void + */ + public function RechnungSupersearchDetail($detailQuery, $detailResult) + { + if ($detailQuery->getGroupKey() !== 'invoices') { + return; + } + + $rechnungId = $detailQuery->getItemIdentifier(); + $sql = sprintf( + "SELECT r.id, r.belegnr, r.datum, r.soll FROM `rechnung` AS `r` WHERE r.id = '%s' LIMIT 1", + $this->app->DB->real_escape_string($rechnungId) + ); + $rechnung = $this->app->DB->SelectRow($sql); + if (empty($rechnung)) { + return; + } + $datum = date('d.m.Y', strtotime($rechnung['datum'])); + $detailResult->setTitle(sprintf('Rechnung %s', $rechnung['belegnr'])); + $detailResult->addButton('Rechnung Details', sprintf('index.php?module=rechnung&action=edit&id=%s', $rechnung['id'])); + $detailResult->setMiniDetailUrl(sprintf('index.php?module=rechnung&action=minidetail&id=%s', $rechnung['id'])); + } + + /** @var Application app */ + + function RechnungFormeln() + { + + } + + /** + * @param string $typ + * + * @return string + */ + function Custom($typ) + { + return ''; + } + + function RechnungSteuer() + { + + } + + function RechnungEinkaufspreise() + { + + } + + function RechnungSumme() + { + } + + + + function RechnungAlternativPDF() + { + $id = (int)$this->app->Secure->GetGET('id'); + $abweichendebezeichnung = $this->app->DB->Select("SELECT abweichendebezeichnung FROM rechnung WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE rechnung SET abweichendebezeichnung=1 WHERE id='$id' LIMIT 1"); + // Rechnungen + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($id); + + if($abweichendebezeichnung!="1") + $this->app->DB->Update("UPDATE rechnung SET abweichendebezeichnung=0 WHERE id='$id' LIMIT 1"); + + $Brief->displayDocument(); + $this->app->ExitXentral(); + } + + + 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->DB->Update("UPDATE rechnung SET schreibschutz='1' WHERE id='$id'"); + $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); + } + + function RechnungUpdateVerband() + { + $id=$this->app->Secure->GetGET('id'); + $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); + $msg = $this->app->erp->base64_url_encode("
    Die Verbandsinformation wurde neu geladen!
    "); + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); + } + + function RechnungMahnwesen() + { + + + } + + + function RechnungLastschriftWdh() + { + + $id=$this->app->Secure->GetGET('id'); + $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',dta_datei=0 WHERE id='$id' LIMIT 1"); + $msg = $this->app->erp->base64_url_encode("
    Die Rechnung kann nochmal eingezogen werden!
    "); + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); + } + + function RechnungDateien() + { + $id = $this->app->Secure->GetGET('id'); + $this->RechnungMenu(); + $this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)'); + $this->app->YUI->DateiUpload('PAGE','Rechnung',$id); + } + + function RechnungDeleteRabatte() + { + + $id=$this->app->Secure->GetGET('id'); + $this->app->DB->Update("UPDATE rechnung SET rabatt='',rabatt1='',rabatt2='',rabatt3='',rabatt4='',rabatt5='',realrabatt='' WHERE id='$id' LIMIT 1"); + $msg = $this->app->erp->base64_url_encode("
    Die Rabatte wurden entfernt!
    "); + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); + } + + + /** + * @param int $invoiceId + * + * @return bool + */ + public function removeManualPayed($invoiceId) + { + if(empty($invoiceId) || !$this->app->DB->Select(sprintf('SELECT id FROM rechnung WHERE id = %d', $invoiceId))) { + return false; + } + $this->app->erp->RechnungProtokoll($invoiceId,'Rechnung manuell als bezahlt entfernt'); + $this->app->DB->Update( + "UPDATE rechnung + SET zahlungsstatus='offen',bezahlt_am = NULL, ist='0', + mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') + WHERE id='$invoiceId'" + ); + + return true; + } + + public function RechnungManuellBezahltEntfernen() + { + $id = $this->app->Secure->GetGET('id'); + + $this->removeManualPayed($id); + + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id"); + } + + public function RechnungUndostorno() + { + $id = $this->app->Secure->GetGET('id'); + $this->app->erp->RechnungProtokoll($id,'Rechnung Stornierung rückgängig gemacht'); + + $this->app->DB->Update("UPDATE rechnung SET status='freigegeben',zahlungsstatus='offen',schreibschutz=0,bezahlt_am = NULL, ist='0',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Rechnung Stornierung rückgängig gemacht ".date('d.m.Y')."') WHERE id='$id'"); + + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id"); + } + + /** + * @param int $innoiceId + * + * @return bool + */ + public function setManualPayed($invoiceId) + { + if(empty($invoiceId) || !$this->app->DB->Select(sprintf('SELECT id FROM rechnung WHERE id = %d', $invoiceId))) { + return false; + } + $this->app->erp->RechnungProtokoll($invoiceId,'Rechnung manuell als bezahlt markiert'); + + $this->app->DB->Update( + "UPDATE rechnung + SET zahlungsstatus='bezahlt',bezahlt_am = now(), ist=soll,mahnwesenfestsetzen='1', + mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') + WHERE id='$invoiceId'" + ); + + return true; + } + + public function RechnungManuellBezahltMarkiert() + { + $id = $this->app->Secure->GetGET('id'); + $this->setManualPayed($id); + $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); + } + + /** + * @param int $invoiceId + */ + public function removeWriteProtection($invoiceId) { + if($invoiceId <= 0) { + return; + } + $this->app->DB->Update( + sprintf( + 'UPDATE rechnung SET zuarchivieren=1, schreibschutz = 0 WHERE id=%d', + $invoiceId + ) + ); + + $this->app->erp->RechnungProtokoll($invoiceId,'Schreibschutz entfernt'); + } + + public function RechnungSchreibschutz() + { + $id = $this->app->Secure->GetGET('id'); + $this->removeWriteProtection($id); + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id"); + } + + + function RechnungCopy() + { + $id = $this->app->Secure->GetGET('id'); + + $newid = $this->CopyRechnung($id); + + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$newid"); + } + + /** + * @param int $invoiceId + */ + public function addZertificates($invoiceId) + { + if($invoiceId <= 0) { + return; + } + $addressId = $this->app->DB->Select( + sprintf( + 'SELECT adresse FROM rechnung WHERE id = %d', + $invoiceId + ) + ); + if($addressId <= 0) { + return; + } + $zertificates = $this->app->DB->SelectArr( + sprintf( + "SELECT ds.datei + FROM datei_stichwoerter ds + INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel' + INNER JOIN rechnung_position ap ON ap.artikel = ds2.parameter AND ap.rechnung = %d + WHERE ds.objekt = 'Adressen' AND ds.parameter = %d + GROUP BY ds.datei", + $invoiceId, $addressId + ) + ); + if(empty($zertificates)) { + return; + } + foreach($zertificates as $zertificate) { + $this->app->erp->AddDateiStichwort($zertificate['datei'],'Sonstige','Rechnung',$invoiceId); + } + } + + function RechnungZertifikate() + { + $id = $this->app->Secure->GetGET('id'); + $this->addZertificates($id); + $this->app->Location->execute("index.php?module=rechnung&action=dateien&id=$id"); + } + + public function RechnungIconMenu($id, $prefix = '') + { + if($id > 0){ + $rechnungarr = $this->app->DB->SelectRow( + "SELECT status,zahlungsstatus FROM rechnung WHERE id='$id' LIMIT 1" + ); + } + $status = ''; + $zahlungsstatus = ''; + if(!empty($rechnungarr)){ + $status = $rechnungarr['status'];//$this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); + $zahlungsstatus = $rechnungarr['zahlungsstatus'];//$this->app->DB->Select("SELECT zahlungsstatus FROM rechnung WHERE id='$id' LIMIT 1"); + } + $freigabe =""; + $storno=""; + $bezahlt=""; + $weiterfuehren=""; + $optionteilstorno = ""; + + $checkifgsexists = $this->app->DB->Select("SELECT id FROM gutschrift WHERE rechnungid='$id' LIMIT 1"); + + if($status==="angelegt" || $status=="") + { + $freigabe = ""; + $storno = ""; + } else { + $weiterfuehren = ""; + } + $casehook = ''; + $optionhook = ''; + $this->app->erp->RunHook('rechnungiconmenu_option', 5, $id, $casehook, $optionhook, $status, $prefix); + + if($this->app->erp->RechteVorhanden("rechnung","undostorno") && !$checkifgsexists) + $undostorno = ""; + + if($this->app->erp->RechteVorhanden("rechnung","manuellbezahltmarkiert") && $zahlungsstatus=="offen") + $bezahlt = ""; + + + if($this->app->erp->RechteVorhanden("rechnung","manuellbezahltentfernen") && $zahlungsstatus=="bezahlt") + $bezahlt = ""; + + $zertifikatoption = ''; + $zertifikatcase = ''; + + $optioncustom = $this->Custom('option'); + $casecustom = $this->Custom('case'); + + $hookoption = ''; + $hookcase = ''; + $this->app->erp->RunHook('Rechnung_Aktion_option',3, $id, $status, $hookoption); + $this->app->erp->RunHook('Rechnung_Aktion_case',3, $id, $status, $hookcase); + + + //TODO das muss dann später in den Hook + $RechnungzuVerbindlichkeitOption = ""; + $RechnungzuVerbindlichkeitCase = "case 'rechnungzuverbindlichkeit': if(!confirm('Wirklich Verbindlichkeit anlegen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=rechnungzuverbindlichkeit&action=create&id=%value%'; break;"; + + + if($this->app->erp->RechteVorhanden('zertifikatgenerator','list')) + { + $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id = '$id' LIMIT 1"); + if($adresse) + { + $zertifikate = $this->app->DB->Select("SELECT ds.datei + FROM datei_stichwoerter ds + INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel' + INNER JOIN rechnung_position ap ON ap.artikel = ds2.parameter AND ap.rechnung = '$id' + WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse' + GROUP BY ds.datei LIMIT 1"); + if($zertifikate) + { + $zertifikatoption = ''; + $zertifikatcase = "case 'zertifikate': if(!confirm('Zertifikate wirklich laden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=rechnung&action=zertifikate&id=%value%'; break; "; + } + } + + } + + if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport')) + { + $casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=rechnung&id=%value%'; break;"; + $optionbelegeimport = ""; + } + + + + if($checkifgsexists>0) $extendtext = "HINWEIS: Es existiert bereits eine Gutschrift zu dieser Rechnung! "; else $extendtext=""; + $menu =" + + + +  Aktion:   + "; + + $menu .= " + + + "; + + //$tracking = $this->AuftragTrackingTabelle($id); + + $menu = str_replace('%value%',$id,$menu); + return $menu; + } + + + function RechnungLiveTabelle() + { + $id = $this->app->Secure->GetGET('id'); + + $table = new EasyTable($this->app); + + $table->Query( + "SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge as Menge + FROM rechnung_position ap, artikel a + WHERE ap.rechnung='$id' AND a.id=ap.artikel" + ); + $artikel = $table->DisplayNew('return','Menge','noAction'); + echo $artikel; + $this->app->ExitXentral(); + } + + public function RechnungEditable() + { + $this->app->YUI->AARLGEditable(); + } + + public function RechnungPDFfromArchiv() + { + $id = $this->app->Secure->GetGET('id'); + $archiv = $this->app->DB->Select("SELECT table_id from pdfarchiv where id = '$id' LIMIT 1"); + if($archiv) { + $projekt = $this->app->DB->Select("SELECT projekt from rechnung where id = '".(int)$archiv."'"); + } + if(class_exists('RechnungPDFCustom')) { + if($archiv) { + $Brief = new RechnungPDFCustom($this->app,$projekt); + } + } + else{ + if($archiv) { + $Brief = new RechnungPDF($this->app,$projekt); + } + } + if($archiv && $content = $Brief->getArchivByID($id)) { + header('Content-type: application/pdf'); + header('Content-Disposition: attachment; filename="'.$content['belegnr'].'.pdf"'); + echo $content['file']; + $this->app->ExitXentral(); + } + header('Content-type: application/pdf'); + header('Content-Disposition: attachment; filename="Fehler.pdf"'); + $this->app->ExitXentral(); + } + + public function RechnungMiniDetail($parsetarget='',$menu=true) + { + $id = $this->app->Secure->GetGET('id'); + + if(!$this->app->DB->Select("SELECT deckungsbeitragcalc FROM rechnung WHERE id='$id' LIMIT 1")) { + $this->app->erp->BerechneDeckungsbeitrag($id,'rechnung'); + } + + $auftragArr = $this->app->DB->SelectArr("SELECT * FROM rechnung WHERE id='$id' LIMIT 1"); + $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='{$auftragArr[0]['adresse']}' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='{$auftragArr[0]['projekt']}' LIMIT 1"); + $kundenname = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$auftragArr[0]['adresse']}' LIMIT 1"); + + $this->app->Tpl->Set('DECKUNGSBEITRAG',0); + $this->app->Tpl->Set('DBPROZENT',0); + $this->app->Tpl->Set('KUNDE',"".$kundennummer." ".$kundenname); + + if($this->app->erp->RechteVorhanden('projekt','dashboard')){ + $this->app->Tpl->Set('PROJEKT', "$projekt"); + } + else{ + $this->app->Tpl->Set('PROJEKT', $projekt); + } + + $this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']); + $this->app->Tpl->Set('STATUS',($auftragArr[0]['status'] === 'storniert' && $auftragArr[0]['teilstorno'] == 1?'teilstorniert':$auftragArr[0]['status'])); + $this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']); + + $this->app->Tpl->Set('DEBITORENNUMMER', $auftragArr[0]['kundennummer_buchhaltung']); + + if($auftragArr[0]['mahnwesen']=='') { + $auftragArr[0]['mahnwesen']='-'; + } + $this->app->Tpl->Set('MAHNWESEN',$auftragArr[0]['mahnwesen']); + if($auftragArr[0]['mahnwesen_datum']=='0000-00-00') { + $auftragArr[0]['mahnwesen_datum']='-'; + } + + + if(!empty($auftragArr[0]['kundennummer_buchhaltung'])) { + $this->app->Tpl->Set('DEBITORENNUMMER', $auftragArr[0]['kundennummer_buchhaltung']); + } + + $internet = $this->app->DB->Select("SELECT a.internet FROM rechnung r LEFT JOIN auftrag a ON a.id=r.auftragid WHERE r.id='$id' AND r.id > 0 LIMIT 1"); + $this->app->Tpl->Set('INTERNET',$internet); + + + $this->app->Tpl->Set('MAHNWESENDATUM',$this->app->String->Convert($auftragArr[0]['mahnwesen_datum'],"%1-%2-%3","%3.%2.%1")); + + $ab_datum = $this->app->String->Convert($auftragArr[0]['datum'],"%1-%2-%3","%3.%2.%1"); + + + if($auftragArr[0]['auftragid']==0) $auftragArr[0]['auftrag']="kein Auftrag"; + $auftragArr[0]['auftrag'] = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='".$auftragArr[0]['auftragid']."' LIMIT 1"); + + if($auftragArr[0]['auftragid'] > 0) + { + $this->app->Tpl->Set('AUFTRAG',"".$auftragArr[0]['auftrag']."  +   +  "); + }else{ + $this->app->Tpl->Set('AUFTRAG', '-'); + } + $auftraege = $this->app->DB->SelectArr("(SELECT a.belegnr, a.id FROM sammelrechnung_position s + INNER JOIN auftrag_position ap on ap.id = s.auftrag_position_id INNER JOIN auftrag a on a.id = ap.auftrag + WHERE s.rechnung = '".$id."' GROUP BY a.id ORDER BY a.belegnr) + union (SELECT + a.belegnr, a.id FROM sammelrechnung_position s INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id + INNER JOIN auftrag_position ap on ap.id = lp.auftrag_position_id INNER JOIN + auftrag a on a.id = ap.auftrag + WHERE s.rechnung = '".$id."' GROUP BY a.id ORDER BY a.belegnr) + "); + if($auftraege) + { + $this->app->Tpl->Set('AUFTRAG',''); + $first = true; + foreach($auftraege as $k => $v) + { + if(!$first)$this->app->Tpl->Add('AUFTRAG','
    '); + if($v['id'] > 0) + { + if(empty($v['belegnr'])) { + $v['belegnr'] = 'ENTWURF'; + } + $this->app->Tpl->Add('AUFTRAG',"".$v['belegnr']."  +   +  "); + } + $first = false; + } + } + + + $gutschrift = $this->app->DB->SelectArr("SELECT + CONCAT('',if(g.belegnr='0' OR g.belegnr='','ENTWURF',g.belegnr),'   + ') as gutschrift + FROM gutschrift g WHERE g.rechnungid='$id'"); + + if(!empty($gutschrift)) + { + $cgutschrift = !empty(count($gutschrift))?:0; + for($li=0;$li<$cgutschrift;$li++) + { + $this->app->Tpl->Add('GUTSCHRIFT',$gutschrift[$li]['gutschrift']); + if($liapp->Tpl->Add('GUTSCHRIFT', "
    "); + } + } + } + else{ + $this->app->Tpl->Set('GUTSCHRIFT', "-"); + } + + $returnOrders = (array)$this->app->DB->SelectArr( + sprintf( + 'SELECT ro.id, ro.belegnr, ro.status + FROM `rechnung` AS `i` + INNER JOIN `auftrag` AS `o` ON i.auftragid = o.id OR i.id = o.rechnungid + LEFT JOIN `lieferschein` AS `dn` ON o.id = dn.auftragid + INNER JOIN `retoure` AS `ro` ON o.id = ro.auftragid OR dn.id = ro.lieferscheinid + WHERE i.id = %d + ORDER BY ro.id', + $id + ) + ); + + $returnOrderHtml = []; + foreach($returnOrders as $returnOrderKey => $returnOrder) { + $returnOrderId = $returnOrder['id']; + $returnOrderNumber = $returnOrder['belegnr']; + if(empty($returnOrderNumber)) { + $returnOrderNumber = 'ENTWURF'; + } + $isReturnOrderCanceled = $returnOrder['status'] === 'storniert'; + $returnOrderHtml[] = '' + .($isReturnOrderCanceled?'':'').$returnOrderNumber.($isReturnOrderCanceled?'':'') + .' + Retoure PDF + Retoure bearbeiten'; + } + $this->app->Tpl->Set('RETOURE', implode('
    ', $returnOrderHtml)); + + $sammelrechnung = false; + if($this->app->DB->Select("SELECT id FROM sammelrechnung_position LIMIT 1"))$sammelrechnung = true; + $gruppenrechnung = false; +// if($this->app->DB->Select("SELECT id FROM gruppenrechnung_position LIMIT 1"))$gruppenrechnung = true; + $rechnungid = false; + $this->app->DB->Select("SELECT rechnungid FROM lieferschein LIMIT 1"); + if(!$this->app->DB->error())$rechnungid =true; + + $lieferscheinsql = " + SELECT CONCAT('',if(l.status!='angelegt',l.belegnr,'ENTWURF'),'  +   + ') as LS + FROM lieferschein l + INNER JOIN ( + (SELECT id FROM lieferschein WHERE id = '{$auftragArr[0]['lieferschein']}') + "; + if($rechnungid) + { + $lieferscheinsql .= " + UNION ALL + (SELECT id FROM lieferschein WHERE rechnungid = '$id')"; + } + if($sammelrechnung) + { + $lieferscheinsql .= "UNION ALL + (SELECT l2.id FROM lieferschein l2 INNER JOIN lieferschein_position lp2 ON lp2.lieferschein = l2.id + INNER JOIN sammelrechnung_position s ON lp2.id = s.lieferschein_position_id WHERE s.rechnung = '$id' ) + UNION ALL + + (SELECT l3.id FROM lieferschein l3 INNER JOIN lieferschein_position lp3 ON lp3.lieferschein = l3.id + INNER JOIN auftrag_position ap3 ON ap3.id = lp3.auftrag_position_id + INNER JOIN sammelrechnung_position s3 ON ap3.id = s3.auftrag_position_id WHERE s3.rechnung = '$id' ) + "; + } + if($gruppenrechnung) + { + $lieferscheinsql .= " + UNION ALL + (SELECT l4.id FROM lieferschein l4 INNER JOIN lieferschein_position lp4 ON lp4.lieferschein = l4.id + INNER JOIN gruppenrechnung_position s4 ON lp4.id = s4.lieferschein_position_id WHERE s4.rechnung = '$id' ) + UNION ALL + + (SELECT l5.id FROM lieferschein l5 INNER JOIN lieferschein_position lp5 ON lp5.lieferschein = l5.id + INNER JOIN auftrag_position ap5 ON ap5.id = lp5.auftrag_position_id + INNER JOIN gruppenrechnung_position s5 ON ap5.id = s5.auftrag_position_id WHERE s5.rechnung = '$id' ) + + "; + } + $lieferscheinsql .= " + ) ls ON l.id = ls.id + LEFT JOIN projekt p ON l.projekt = p.id + WHERE 1 ".$this->app->erp->ProjektRechte('p.id'). " GROUP BY l.id "; + + $lieferschein = $this->app->DB->SelectArr($lieferscheinsql); + + if($lieferschein=="") $this->app->Tpl->Set('LIEFERSCHEIN','-'); + else{ + $first = true; + $this->app->Tpl->Set('LIEFERSCHEIN',''); + foreach($lieferschein as $ls) + { + if(!$first)$this->app->Tpl->Add('LIEFERSCHEIN','
    '); + $this->app->Tpl->Add('LIEFERSCHEIN',$ls['LS']); + $first = false; + } + + } + + + + if($auftragArr[0]['ust_befreit']==0) + $this->app->Tpl->Set('STEUER',"Inland"); + else if($auftragArr[0]['ust_befreit']==1) + $this->app->Tpl->Set('STEUER',"EU-Lieferung"); + else + $this->app->Tpl->Set('STEUER',"Export"); + $this->app->Tpl->Set('DELIVERYTHRESHOLDVATID',!empty($auftragArr[0]['deliverythresholdvatid'])?$auftragArr[0]['deliverythresholdvatid']:''); + + if($menu) + { + $menu = $this->RechnungIconMenu($id); + $this->app->Tpl->Set('MENU',$menu); + } + // ARTIKEL + + $status = $this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); + + $table = new EasyTable($this->app); + + $table->Query("SELECT if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung) as artikel, CONCAT('', ap.nummer,'') as Nummer, ".$this->app->erp->FormatMenge("ap.menge")." as Menge,".$this->app->erp->FormatPreis("ap.preis*(100-ap.rabatt)/100",2)." as Preis + FROM rechnung_position ap, artikel a WHERE ap.rechnung='$id' AND a.id=ap.artikel ORDER by ap.sort",0,""); + + $table->align = array('left','left','right','right'); + $artikel = $table->DisplayNew("return","Preis","noAction","false",0,0,false); + + $this->app->Tpl->Set('ARTIKEL','
    '.$artikel.'
    '); + + if($auftragArr[0]['belegnr'] =="0" || $auftragArr[0]['belegnr']=="") $auftragArr[0]['belegnr'] = "ENTWURF"; + $this->app->Tpl->Set('BELEGNR',"".$auftragArr[0]['belegnr'].""); + $this->app->Tpl->Set('RECHNUNGID',$auftragArr[0]['id']); + + + if($auftragArr[0]['status']=="freigegeben") + { + $this->app->Tpl->Set('ANGEBOTFARBE',"orange"); + $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wurde noch nicht als Auftrag weitergeführt!"); + } + else if($auftragArr[0]['status']=="versendet") + { + $this->app->Tpl->Set('ANGEBOTFARBE',"red"); + $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot versendet aber noch kein Auftrag vom Kunden erhalten!"); + } + else if($auftragArr[0]['status']=="beauftragt") + { + $this->app->Tpl->Set('ANGEBOTFARBE',"green"); + $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wurde beauftragt und abgeschlossen!"); + } + else if($auftragArr[0]['status']=="angelegt") + { + $this->app->Tpl->Set('ANGEBOTFARBE',"grey"); + $this->app->Tpl->Set('ANGEBOTTEXT',"Das Angebot wird bearbeitet und wurde noch nicht freigegeben und abgesendet!"); + } + + + $this->app->Tpl->Set('ZAHLUNGEN',"Erst ab Version Enterprise verfügbar
    "); + + if (!is_null($gutschrift)) { + + if(count($gutschrift) > 0) + $this->app->Tpl->Add('ZAHLUNGEN',"
    Zu dieser Rechnung existiert eine Gutschrift!
    "); + else { + + if($auftragArr[0]['zahlungsstatus']!="bezahlt") + $this->app->Tpl->Add('ZAHLUNGEN',"
    Diese Rechnung ist noch nicht komplett bezahlt!
    "); + else + { + if(!empty($auftragArr[0]['bezahlt_am']) && $auftragArr[0]['bezahlt_am'] != '0000-00-00') + { + $this->app->Tpl->Add('ZAHLUNGEN',"
    Diese Rechnung wurde am ".$this->app->String->Convert($auftragArr[0]['bezahlt_am'],"%1-%2-%3","%3.%2.%1")." bezahlt.
    "); + }else{ + $this->app->Tpl->Add('ZAHLUNGEN',"
    Diese Rechnung ist bezahlt.
    "); + } + } + } + } + + $this->app->Tpl->Set('RECHNUNGADRESSE',$this->Rechnungsadresse($auftragArr[0]['id'])); + + $tmp = new EasyTable($this->app); + $tmp->Query("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit DESC",0,""); + $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); + + + $query = $this->app->DB->SelectArr("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit"); + if($query) + { + $zeit = 0; + foreach($query as $k => $row) + { + if(strpos($row['grund'], 'Zahlungserinnerung') === 0 || strpos($row['grund'], 'Mahnung') === 0 ) + { + if(!$zeit)$zeit = $row['zeit']; + } + } + if($zeit) + { + + $tmp2 = new EasyTable($this->app); + $tmp2->Query("SELECT concat('app->Conf->WFconf[defaulttheme]}/images/pdf.svg\" border=\"0\">') as PDF, Date(zeit) as Datum, bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' AND zeit >= '".$zeit."' ORDER by zeit DESC"); + $tmp2->DisplayNew('MAHNPROTOKOLL',"Protokoll","noAction"); + } + + + } + + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$auftragArr[0]['projekt']); + }else{ + $Brief = new RechnungPDF($this->app,$auftragArr[0]['projekt']); + } + $Dokumentenliste = $Brief->getArchivedFiles($id, 'rechnung'); + if($Dokumentenliste) + { + $tmp3 = new EasyTable($this->app); + $tmp3->headings = array('Datum','Belegnr','Bearbeiter','Menü'); + foreach($Dokumentenliste as $k => $v) + { + if(!$v['erstesoriginal']) + { + $tmpr['datum'] = date('d.m.Y H:i:s',strtotime($v['zeitstempel'])); + $tmpr['belegnr'] = str_replace('.pdf','',$v['file']); + $tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1); + if(isset($v['belegnummer']) && $v['belegnummer'])$tmpr['belegnr'] = $v['belegnummer']; + $tmpr['bearbeiter'] = $v['bearbeiter']; + $tmpr['menu'] = ''; + $tmp3->datasets[] = $tmpr; + } + } + + $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction"); + } + + + if($parsetarget=='') + { + $this->app->Tpl->Output('rechnung_minidetail.tpl'); + $this->app->ExitXentral(); + } + $this->app->Tpl->Parse($parsetarget,'rechnung_minidetail.tpl'); + } + + /** + * @param int $id + * + * @return string + */ + public function Rechnungsadresse($id) + { + $data = $this->app->DB->SelectArr( + "SELECT r.*, a.abweichende_rechnungsadresse + FROM rechnung AS r + INNER JOIN adresse AS a ON r.adresse = a.id + WHERE r.id='$id' + LIMIT 1" + ); + + foreach($data[0] as $key=>$value) + { + if($data[0][$key]!='' && $key!=='abweichendelieferadresse' && $key!=='land' && $key!=='plz' + && $key!=='lieferland' && $key!=='lieferplz') { + $data[0][$key] = $data[0][$key].'
    '; + } + } + + $rechnungsadresse = $data[0]['name']."".$data[0]['ansprechpartner']."".$data[0]['abteilung']."".$data[0]['unterabteilung']. + "".$data[0]['strasse']."".$data[0]['adresszusatz']."".$data[0]['land']."-".$data[0]['plz']." ".$data[0]['ort']; + + $isAbweichend = false; + if($data[0]['abweichende_rechnungsadresse']==1){ + $isAbweichend=true; + } + $abweichendString = ($isAbweichend?' (abweichend)':''); + + return " +
    Rechnungsadresse".$abweichendString.":

    $rechnungsadresse
    "; + } + + + function RechnungLastschrift() + { + $this->app->Tpl->Set('UEBERSCHRIFT','Lastschrift / Sammelüberweisung'); + $erzeugen = $this->app->Secure->GetPOST('erzeugen'); + $lastschrift= $this->app->Secure->GetPOST('lastschrift'); + $kontointern=$this->app->Secure->GetPOST('konto'); + $this->app->erp->Headlines('Lastschriften'); + + $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Zur Rechnungsübersicht'); + + if($erzeugen!='') + { + //erzeugen + $rechnung= $this->app->Secure->GetPOST('rechnung'); + $crechnung = !empty($rechnung)?count($rechnung):0; + for($i=0;$i<$crechnung;$i++) + { + + //rechnung auf bezahlt markieren + soll auf ist + $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='abgebucht' WHERE id='{$rechnung[$i]}' AND firma='".$this->app->User->GetFirma()."' LIMIT 1"); + } + } + + + + // offene Rechnungen + $this->app->Tpl->Set('SUB1TABTEXT',"Offene Rechnungen"); + $table = new EasyTable($this->app); + $table->Query("SELECT CONCAT('') as auswahl, DATE_FORMAT(r.datum,'%d.%m.%Y') as vom, if(r.belegnr!='',r.belegnr,'ohne Nummer') as beleg, r.name, p.abkuerzung as projekt, r.soll as betrag, r.ist as ist, r.zahlungsweise, a.bank_inhaber, a.bank_institut, a.bank_blz, a.bank_konto, r.id + FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN zahlungsweisen z ON z.type=r.zahlungsweise LEFT JOIN auftrag a ON a.id=r.auftragid WHERE (r.zahlungsstatus!='bezahlt' AND r.zahlungsstatus!='abgebucht') AND (r.zahlungsweise='lastschrift' OR r.zahlungsweise='einzugsermaechtigung' OR z.verhalten='lastschrift') AND (r.belegnr!='') order by r.datum DESC, r.id DESC"); + $table->DisplayNew('SUB1TAB'," + + + "); + + + $summe = $this->app->DB->Select("SELECT SUM(r.soll) + FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt WHERE (r.zahlungsstatus!='bezahlt' AND r.zahlungsstatus!='abgebucht') AND (r.zahlungsweise='lastschrift' OR r.zahlungsweise='einzug') AND r.belegnr!='' "); + + if($summe <=0) { + $summe = '0,00'; + } + $this->app->Tpl->Set('TAB1',"
    Gesamt offen: $summe EUR
    "); + + + $this->app->YUI->TableSearch('TAB1',"lastschriften"); + $this->app->Tpl->Add('TAB1',"
    +
    "); + + $this->app->YUI->TableSearch('TAB2','lastschriftenarchiv'); + + $this->app->Tpl->Parse('PAGE','rechnung_lastschrift.tpl'); + } + + + public function RechnungGutschrift() + { + $id = $this->app->Secure->GetGET('id'); + + $status = $this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); + if($status==='angelegt') + { + $msg = $this->app->erp->base64_url_encode("
    Die Rechnung ist noch nicht freigegeben und kann daher nicht storniert werden!
    "); + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); + } + $this->app->erp->RechnungProtokoll($id,'Rechnung als Gutschrift weitergeführt'); + $newid = $this->app->erp->WeiterfuehrenRechnungZuGutschrift($id); + + // pruefe obes schon eine gutschrift fuer diese rechnung gibt + $anzahlgutschriften = $this->app->DB->Select("SELECT COUNT(id) FROM gutschrift WHERE rechnungid='$id' + AND rechnungid!=0 AND rechnungid!=''"); + + if($anzahlgutschriften>1){ + $msg = $this->app->erp->base64_url_encode("
    Achtung es gibt bereits eine oder mehrer Gutschriften für diese Rechnung!
    "); + } + + $this->app->Location->execute("index.php?module=gutschrift&action=edit&id=$newid&msg=$msg"); + } + + + function RechnungFreigabe($id='') + { + if($id=='') + { + $id = $this->app->Secure->GetGET('id'); + $freigabe= $this->app->Secure->GetGET('freigabe'); + $this->app->Tpl->Set('TABTEXT','Freigabe'); + $this->app->erp->RechnungNeuberechnen($id); + } else { + $intern = true; + $freigabe=$intern; + } + $allowedFrm = true; + $showDefault = true; + $this->app->erp->CheckVertrieb($id,'rechnung'); + $this->app->erp->CheckBearbeiter($id,'rechnung'); + $doctype = 'rechnung'; + if(empty($intern)){ + $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault); + } + if($allowedFrm && $freigabe==$id) + { + $belegnr = $this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$id' LIMIT 1"); + + if($belegnr=='') + { + $this->app->erp->BelegFreigabe('rechnung',$id); + if($intern) { + return 1; + } + $msg = $this->app->erp->base64_url_encode("
    Die Rechnung wurde freigegeben und kann jetzt versendet werden!
    "); + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); + } + if($intern) { + return 0; + } + $msg = $this->app->erp->base64_url_encode("
    Die Rechnung wurde bereits freigegeben!
    "); + $this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg"); + } + + if($showDefault){ + $name = $this->app->DB->Select("SELECT a.name FROM rechnung b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); + $summe = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM rechnung_position + WHERE rechnung='$id' LIMIT 1"); + + $this->app->Tpl->Set('TAB1', "
    Soll die Rechnung an $name im Wert von $summe $waehrung + jetzt freigegeben werden? +
    "); + } + + $this->RechnungMenu(); + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + + + function RechnungAbschicken() + { + $this->RechnungMenu(); + $this->app->erp->DokumentAbschicken(); + } + + public function RechnungDelete() + { + $id = $this->app->Secure->GetGET('id'); + $invoiceArr = $this->app->DB->SelectRow("SELECT belegnr, name FROM rechnung WHERE id='$id' LIMIT 1"); + $belegnr = $invoiceArr['belegnr']; + $name = $invoiceArr['name']; + $msg = ''; + if($belegnr=='0' || $belegnr=='') { + $this->app->erp->DeleteRechnung($id); + $belegnr='ENTWURF'; + $msg = $this->app->erp->base64_url_encode("
    Die Rechnung \"$belegnr\" von \"$name\" wurde gelöscht!
    "); + $this->app->Location->execute('index.php?module=rechnung&action=list&msg='.$msg); + } + + $this->RechnungGutschrift(); + $this->app->Location->execute('index.php?module=rechnung&action=list&msg='.$msg); + } + + function RechnungProtokoll() + { + $this->RechnungMenu(); + $id = $this->app->Secure->GetGET('id'); + + $this->app->Tpl->Set('TABTEXT','Protokoll'); + $tmp = new EasyTable($this->app); + $tmp->Query("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit DESC"); + $tmp->DisplayNew('TAB1','Protokoll','noAction'); + + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + + function RechnungMahnPDF() + { + $id = $this->app->Secure->GetGET('id'); + $invoiceArr = $this->app->DB->SelectRow("SELECT belegnr, mahnwesen, projekt FROM rechnung WHERE id='$id' LIMIT 1"); + $belegnr = $invoiceArr['belegnr']; + $mahnwesen = $invoiceArr['mahnwesen']; + $projekt = $invoiceArr['projekt']; + + + if($belegnr!='' && $belegnr!='0') + { + $Brief = new MahnungPDF($this->app,$projekt); + $Brief->GetRechnung($id,$mahnwesen); + $Brief->displayDocument(); + } + $this->app->ExitXentral(); + } + + function RechnungInlinePDF() + { + $id = $this->app->Secure->GetGET('id'); + $invoiceArr = $this->app->DB->SelectRow("SELECT schreibschutz, projekt FROM rechnung WHERE id='$id' LIMIT 1"); + $schreibschutz = $invoiceArr['schreibschutz']; + if($schreibschutz!='1'){ + $this->app->erp->RechnungNeuberechnen($id); + } + + $frame = $this->app->Secure->GetGET('frame'); + $projekt = $invoiceArr['projekt']; + + if($frame=='') + { + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($id); + $Brief->inlineDocument($schreibschutz); + } else { + $file = urlencode("../../../../index.php?module=rechnung&action=inlinepdf&id=$id"); + echo ""; + $this->app->ExitXentral(); + } + } + + function RechnungPDF() + { + $id = $this->app->Secure->GetGET('id'); + $this->app->erp->RechnungNeuberechnen($id); + $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); + } + $projekt = $invoiceArr['projekt']; + $schreibschutz = $invoiceArr['schreibschutz']; + // if(is_numeric($belegnr) && $belegnr!=0) + // { + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + if($doppel=='1'){ + $Brief->GetRechnung($id, 'doppel'); + } + else{ + $Brief->GetRechnung($id); + } + $Brief->displayDocument($schreibschutz); + + $this->RechnungList(); + } + + function RechnungSuche() + { + $this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen'); + $this->app->erp->Headlines('Rechnungen'); + + $this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen'); + $this->app->Tpl->Set('TABTEXT','Rechnungen'); + + $name = $this->app->Secure->GetPOST('name'); + $plz = $this->app->Secure->GetPOST('plz'); + $auftrag = $this->app->Secure->GetPOST('auftrag'); + $kundennummer = $this->app->Secure->GetPOST('kundennummer'); + $proforma = ''; + + if($name!='' || $plz!='' || $proforma!='' || $kundennummer!='' || $auftrag!='') + { + $table = new EasyTable($this->app); + $this->app->Tpl->Add('ERGEBNISSE',"

    Trefferliste:


    "); + if($name!="") + $table->Query("SELECT a.name, a.belegnr as rechnung, adr.kundennummer, a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a + LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$name%')"); + else if($plz!="") + $table->Query("SELECT a.name, a.belegnr as rechnung, adr.kundennummer, a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a + LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.plz LIKE '$plz%')"); + else if($kundennummer!="") + $table->Query("SELECT a.name, a.belegnr as rechnung, adr.kundennummer, a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a + LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (adr.kundennummer='$kundennummer')"); + else if($auftrag!="") + $table->Query("SELECT a.name, a.belegnr as rechnung , adr.kundennummer,a.plz, a.ort, a.strasse, a.status, a.id FROM rechnung a + LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.belegnr='$auftrag')"); + + // $table->DisplayNew('ERGEBNISSE',"Lesen"); + $table->DisplayNew('ERGEBNISSE'," + + + \"weiterführen + + + + + "); + + } else { + $this->app->Tpl->Add('ERGEBNISSE',"
    Rechnungssuche (bitte entsprechende Suchparameter eingeben)
    "); + } + + $this->app->Tpl->Parse('INHALT','rechnungssuche.tpl'); + + $this->app->Tpl->Set('AKTIV_TAB1','selected'); + $this->app->Tpl->Parse('TAB1','rahmen77.tpl'); + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + + public function RechnungMenu() + { + $id = $this->app->Secure->GetGET('id'); + $invoiceArr = $this->app->DB->SelectRow("SELECT belegnr, name,status FROM rechnung WHERE id='$id' LIMIT 1"); + $belegnr = $invoiceArr['belegnr']; + $name = $invoiceArr['name']; + + if($belegnr=='0' || $belegnr=='') { + $belegnr ='(Entwurf)'; + } + + $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Rechnung $belegnr"); + + $this->app->erp->RechnungNeuberechnen($id); + + $status = $invoiceArr['status']; + + if ($status==='angelegt') { + $this->app->erp->MenuEintrag("index.php?module=rechnung&action=freigabe&id=$id",'Freigabe'); + } + $this->app->erp->MenuEintrag("index.php?module=rechnung&action=edit&id=$id",'Details'); + + $anzahldateien = $this->app->erp->AnzahlDateien('Rechnung',$id); + if($anzahldateien > 0) { + $anzahldateien = ' ('.$anzahldateien.')'; + } else { + $anzahldateien=''; + } + + $this->app->erp->MenuEintrag("index.php?module=rechnung&action=dateien&id=$id",'Dateien'.$anzahldateien); + + + + $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Zurück zur Übersicht'); + $this->app->erp->RunMenuHook('rechnung'); + } + + public function RechnungPositionen() + { + $id = $this->app->Secure->GetGET('id'); + $this->app->erp->RechnungNeuberechnen($id); + $this->app->YUI->AARLGPositionen(false); + } + + public function CopyRechnungPosition() + { + $this->app->YUI->SortListEvent('copy','rechnung_position','rechnung'); + $this->RechnungPositionen(); + } + + public function DelRechnungPosition() + { + $this->app->YUI->SortListEvent('del','rechnung_position','rechnung'); + $this->RechnungPositionen(); + } + + public function UpRechnungPosition() + { + $this->app->YUI->SortListEvent('up','rechnung_position','rechnung'); + $this->RechnungPositionen(); + } + + public function DownRechnungPosition() + { + $this->app->YUI->SortListEvent('down','rechnung_position','rechnung'); + $this->RechnungPositionen(); + } + + + public function RechnungPositionenEditPopup() + { + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'getopenaccordions') + { + $accordions = $this->app->Secure->GetPOST('accordions'); + $accordions = explode('*|*',$accordions); + foreach($accordions as $k => $v) + { + if(empty($v)) + { + unset($accordions[$k]); + }else{ + $accordions[$k] = 'rechnung_accordion'.$v; + } + } + $ret = []; + if(!empty($accordions)) + { + $accordions = $this->app->User->GetParameter($accordions); + if(!empty($accordions)) + { + foreach($accordions as $v) + { + if(!empty($v['value'])) + { + $ret['accordions'][] = str_replace('rechnung_accordion','',$v['name']); + } + } + } + } + echo json_encode($ret); + $this->app->ExitXentral(); + } + if($cmd === 'setaccordion') + { + $name = $this->app->Secure->GetPOST('name'); + $active = $this->app->Secure->GetPOST('active'); + $this->app->User->SetParameter('rechnung_accordion'.$name, $active); + echo json_encode(array('success'=>1)); + $this->app->ExitXentral(); + } + $id = $this->app->Secure->GetGET('id'); + + $artikel= $this->app->DB->Select("SELECT artikel FROM angebot_position WHERE id='$id' LIMIT 1"); + + // nach page inhalt des dialogs ausgeben + $filename = 'widgets/widget.rechnung_position_custom.php'; + if(is_file($filename)) { + include_once $filename; + $widget = new WidgetRechnung_positionCustom($this->app,'PAGE'); + } + else { + $widget = new WidgetRechnung_position($this->app,'PAGE'); + } + + $sid= $this->app->DB->Select("SELECT rechnung FROM rechnung_position WHERE id='$id' LIMIT 1"); + $widget->form->SpecialActionAfterExecute('close_refresh', + "index.php?module=rechnung&action=positionen&id=$sid"); + $widget->Edit(); + $this->app->BuildNavigation=false; + } + + + + //
  • Vorschau
  • + + /** + * @param int $invoiceId + * @param int $fileKeywordId + * + * @return int + */ + public function moveFileUp($invoiceId, $fileKeywordId) + { + $check = $this->app->DB->SelectRow( + sprintf( + 'SELECT ds.* + FROM datei_stichwoerter ds + INNER JOIN datei d on ds.datei = d.id + WHERE ds.id = %d and d.geloescht <> 1 + LIMIT 1', + $fileKeywordId + ) + ); + if(empty($check)) { + return 0; + } + + $sort = $check['sort']-1; + if($sort <= 0) { + return 0; + } + + $check2 = $this->app->DB->SelectArr( + "SELECT ds.* FROM datei_stichwoerter ds + INNER JOIN datei d on ds.datei = d.id + WHERE ds.objekt like 'rechnung' AND ds.sort = %d AND d.geloescht <> 1 + AND ds.parameter = %d + LIMIT 1", + $sort, $invoiceId + ); + if(empty($check2)) { + return 0; + } + + $this->app->DB->Update( + sprintf( + 'UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = %d LIMIT 1', + $fileKeywordId + ) + ); + $this->app->DB->Update( + sprintf( + 'UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = %d LIMIT 1', + $check2['id'] + ) + ); + + return $check2['id']; + } + + /** + * @param int $invoiceId + * @param int $fileKeywordId + * + * @return int + */ + public function moveFileDown($invoiceId, $fileKeywordId) + { + $check = $this->app->DB->SelectRow( + sprintf( + 'SELECT ds.* + FROM datei_stichwoerter ds + INNER JOIN datei d on ds.datei = d.id + WHERE ds.id = %d and d.geloescht <> 1 + LIMIT 1', + $fileKeywordId + ) + ); + if(empty($check)) { + return 0; + } + + $sort = $check['sort']+1; + if($sort <= 1) { + return 0; + } + + $check2 = $this->app->DB->SelectArr( + "SELECT ds.* FROM datei_stichwoerter ds + INNER JOIN datei d on ds.datei = d.id + WHERE ds.objekt like 'rechnung' AND ds.sort = %d AND d.geloescht <> 1 + AND ds.parameter = %d + LIMIT 1", + $sort, $invoiceId + ); + if(empty($check2)) { + return 0; + } + + $this->app->DB->Update( + sprintf( + 'UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = %d LIMIT 1', + $fileKeywordId + ) + ); + $this->app->DB->Update( + sprintf( + 'UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = %d LIMIT 1', + $check2['id'] + ) + ); + + return $check2['id']; + } + + public function RechnungEdit() + { + $id = $this->app->Secure->GetGET('id'); + // zum aendern vom Vertrieb + $sid = $this->app->Secure->GetGET('sid'); + $cmd = $this->app->Secure->GetGET('cmd'); + if($this->app->Secure->GetPOST('resetextsoll')) { + $this->app->DB->Update( + sprintf( + 'UPDATE rechnung SET extsoll = 0 WHERE id = %d', + $id + ) + ); + $this->app->erp->RechnungNeuberechnen($id); + } + + if($cmd === 'dadown') + { + $erg['status'] = 0; + $daid = $this->app->Secure->GetPOST('da_id'); + $from = $this->moveFileDown($id, $daid); + if($from > 0) { + $erg['status'] = 1; + $erg['from'] =$from; + } + echo json_encode($erg); + $this->app->ExitXentral(); + } + + if($cmd === 'daup') + { + $erg['status'] = 0; + $daid = $this->app->Secure->GetPOST('da_id'); + $from = $this->moveFileUp($id, $daid); + if($from > 0) { + $erg['status'] = 1; + $erg['from'] =$from; + } + + echo json_encode($erg); + $this->app->ExitXentral(); + } + + if($this->app->erp->VertriebAendern('rechnung',$id,$cmd,$sid)){ + return; + } + if($this->app->erp->InnendienstAendern('rechnung',$id,$cmd,$sid)){ + return; + } + + if($this->app->erp->DisableModul('rechnung',$id)) + { + //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht"); + $this->RechnungMenu(); + return; + } + $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); + if($adresse <=0) { + $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });'); + $this->app->Tpl->Set('MESSAGE',"
    Achtung! Dieses Dokument ist mit keiner Kunden-Nr. verlinkt. Bitte geben Sie die Kundennummer an und klicken Sie übernehmen oder Speichern!
    "); + } + $this->app->YUI->AARLGPositionen(); + + $this->app->erp->DisableVerband(); + $this->app->erp->CheckBearbeiter($id,'rechnung'); + $this->app->erp->CheckBuchhaltung($id,'rechnung'); + + $invoiceArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,schreibschutz FROM rechnung WHERE id= %d LIMIT 1', + (int)$id + ) + ); + $zahlungsweise= $invoiceArr['zahlungsweise']; + $zahlungszieltage= $invoiceArr['zahlungszieltage']; + 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"); + } + $nummer = ''; + $kundennummer = ''; + $adresse = 0; + $punkte = null; + $bonuspunkte = null; + $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']; + } + + $this->app->Tpl->Set('PUNKTE',""); + $this->app->Tpl->Set('BONUSPUNKTE',""); + + $this->app->Tpl->Set('SOLL',"$soll".""); + + if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("rechnung","schreibschutz")) + { + $this->app->erp->AnsprechpartnerButton($adresse); + $this->app->erp->LieferadresseButton($adresse); + } + + if($nummer!='') { + $this->app->Tpl->Set('NUMMER',$nummer); + if($this->app->erp->RechteVorhanden('adresse','edit')){ + $this->app->Tpl->Set('KUNDE', "   Kd-Nr. " . $kundennummer . ""); + } + else{ + $this->app->Tpl->Set('KUNDE', "   Kd-Nr. " . $kundennummer); + } + } + $lieferdatum = ''; + $rechnungsdatum = ''; + $lieferscheinid = 0; + if(!empty($rechnungarr)) { + $lieferdatum = $rechnungarr['lieferdatum'];//$this->app->DB->Select("SELECT lieferdatum FROM rechnung WHERE id='$id' LIMIT 1"); + $rechnungsdatum = $rechnungarr['datum'];//$this->app->DB->Select("SELECT datum FROM rechnung WHERE id='$id' LIMIT 1"); + $lieferscheinid = $rechnungarr['lieferschein'];//$this->app->DB->Select("SELECT lieferschein FROM rechnung WHERE id='$id' LIMIT 1"); + } + $lieferscheiniddatum = ''; + if($lieferscheinid > 0){ + $lieferscheiniddatum = $this->app->DB->Select("SELECT datum FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); + } + if($lieferdatum=='0000-00-00' && $schreibschutz!='1') { + if($lieferscheiniddatum!='0000-00-00'){ + $this->app->DB->Update("UPDATE rechnung SET lieferdatum='$lieferscheiniddatum' WHERE id='$id' LIMIT 1"); + } + else{ + $this->app->DB->Update("UPDATE rechnung SET lieferdatum='$rechnungsdatum' WHERE id='$id' LIMIT 1"); + } + } + + if($schreibschutz!='1') { + $this->app->DB->Update("UPDATE rechnung SET auftrag='' WHERE id='$id' AND auftragid<=0 LIMIT 1"); + } + + $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM rechnung WHERE id='$id' LIMIT 1"); + if($this->app->Secure->GetPOST('zahlungsweise')!='') { + $zahlungsweise = $this->app->Secure->GetPOST('zahlungsweise'); + } + $zahlungsweise = strtolower($zahlungsweise); + + $zahlungsweisenmodule = $this->app->DB->SelectArr( + "SELECT id, modul, verhalten + FROM zahlungsweisen + WHERE type = '".$this->app->DB->real_escape_string($zahlungsweise)."' AND + (projekt = '$projekt' OR projekt = 0) + ORDER BY projekt = '$projekt' DESC + LIMIT 1" + ); + + $this->app->Tpl->Set('RECHNUNG','none'); + $this->app->Tpl->Set('KREDITKARTE','none'); + $this->app->Tpl->Set('VORKASSE','none'); + $this->app->Tpl->Set('PAYPAL','none'); + $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG','none'); + if($zahlungsweise==='rechnung' || isset($zahlungsweisenmodule[0]['verhalten']) && $zahlungsweisenmodule[0]['verhalten']==='rechnung') { + $this->app->Tpl->Set('RECHNUNG',""); + } + if($zahlungsweise==='paypal') { + $this->app->Tpl->Set('PAYPAL',''); + } + if($zahlungsweise==='kreditkarte') { + $this->app->Tpl->Set('KREDITKARTE',''); + } + if($zahlungsweise==='einzugsermaechtigung' || $zahlungsweise==='lastschrift') { + $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',''); + } + if($zahlungsweise==='vorkasse' || $zahlungsweise==='kreditkarte' || $zahlungsweise==='paypal' || $zahlungsweise==='bar') { + $this->app->Tpl->Set('VORKASSE',''); + } + + + $saldo=$this->app->DB->Select("SELECT ist-skonto_gegeben FROM rechnung WHERE id='$id'"); + $this->app->Tpl->Set('LIVEIST',"$saldo"); + + if($schreibschutz=="1" && $this->app->erp->RechteVorhanden('rechnung','schreibschutz')) + { + $this->app->Tpl->Set('MESSAGE',"
    Diese Rechnung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
    "); + } + + if($schreibschutz=='1'){ + $this->app->erp->CommonReadonly(); + } + + if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen')) + { + $this->app->erp->RemoveReadonly('mahnwesen_datum'); + $this->app->erp->RemoveReadonly('mahnwesen_gesperrt'); + $this->app->erp->RemoveReadonly('mahnwesen_internebemerkung'); + $this->app->erp->RemoveReadonly('zahlungsstatus'); + $this->app->erp->RemoveReadonly('mahnwesenfestsetzen'); + $this->app->erp->RemoveReadonly('mahnwesen'); + $this->app->erp->RemoveReadonly('bezahlt_am'); + $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) + $this->app->erp->RemoveReadonly('ist'); + + //$auftrag= $this->app->DB->Select("SELECT auftrag FROM rechnung WHERE id='$id' LIMIT 1"); + + $this->app->erp->RemoveReadonly('skonto_gegeben'); + $this->app->erp->RemoveReadonly('internebemerkung'); + + $alle_gutschriften = $this->app->DB->SelectArr("SELECT id,belegnr FROM gutschrift WHERE rechnungid='$id' AND rechnungid>0"); + $cgutschriften = !empty($alle_gutschriften)?count($alle_gutschriften):0; + if($cgutschriften > 1) + { + $gutschriften = ''; + for($agi=0;$agi<$cgutschriften;$agi++) + $gutschriften .= "".$alle_gutschriften[$agi][belegnr]." "; + $this->app->Tpl->Add('MESSAGE',"
    Für die angebene Rechnung gibt es schon folgende Gutschriften: $gutschriften
    "); + } + + $this->app->erp->CommonReadonly(); + } + + $speichern = $this->app->Secure->GetPOST('speichern'); + if($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen')) + { + $mahnwesen_datum = $this->app->Secure->GetPOST('mahnwesen_datum'); + $bezahlt_am = $this->app->Secure->GetPOST('bezahlt_am'); + $mahnwesen_gesperrt = $this->app->Secure->GetPOST('mahnwesen_gesperrt'); + $mahnwesen_internebemerkung = $this->app->Secure->GetPOST('mahnwesen_internebemerkung'); + $zahlungsstatus = $this->app->Secure->GetPOST('zahlungsstatus'); + $mahnwesenfestsetzen = $this->app->Secure->GetPOST('mahnwesenfestsetzen'); + $mahnwesen = $this->app->Secure->GetPOST('mahnwesen'); + $internebemerkung = $this->app->Secure->GetPOST('internebemerkung'); + $ist = str_replace(',','.',$this->app->Secure->GetPOST('ist')); + $skonto_gegeben = str_replace(',','.',$this->app->Secure->GetPOST('skonto_gegeben')); + + if($mahnwesen_gesperrt!='1') { + $mahnwesen_gesperrt='0'; + } + if($mahnwesenfestsetzen!='1') { + $mahnwesenfestsetzen='0'; + } + + $mahnwesen_datum = $this->app->String->Convert($mahnwesen_datum,'%1.%2.%3','%3-%2-%1'); + $bezahlt_am = $this->app->String->Convert($bezahlt_am,'%1.%2.%3','%3-%2-%1'); + + if($bezahlt_am=='--')$bezahlt_am='0000-00-00'; + $alte_mahnstufe = $this->app->DB->Select("SELECT mahnwesen FROM rechnung WHERE id='$id' LIMIT 1"); + if($alte_mahnstufe!=$mahnwesen) $versendet=0; else $versendet=1; + + if($mahnwesenfestsetzen=='1') + { + $this->app->DB->Update("UPDATE rechnung SET mahnwesen_internebemerkung='$mahnwesen_internebemerkung',zahlungsstatus='$zahlungsstatus',versendet_mahnwesen='$versendet', + mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum', mahnwesenfestsetzen='$mahnwesenfestsetzen',internebemerkung='$internebemerkung', + mahnwesen='$mahnwesen',ist='$ist',skonto_gegeben='$skonto_gegeben',bezahlt_am='$bezahlt_am' WHERE id='$id' LIMIT 1"); + } else { + $this->app->DB->Update("UPDATE rechnung SET mahnwesen='$mahnwesen', mahnwesenfestsetzen='$mahnwesenfestsetzen', mahnwesen_internebemerkung='$mahnwesen_internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum' WHERE id='$id' LIMIT 1"); + } + } + + + if($status=='') + $this->app->DB->Update("UPDATE rechnung SET status='angelegt' WHERE id='$id' LIMIT 1"); + + if($schreibschutz != '1'){ + if($this->app->erp->Firmendaten('schnellanlegen') == '1'){ + $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' + '); + }else{ + $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' + + '); + } + } + + // immer wenn sich der lieferant genändert hat standartwerte setzen + if($this->app->Secure->GetPOST('adresse')!='') + { + $tmp = $this->app->Secure->GetPOST('adresse'); + $kundennummer = $this->app->erp->FirstTillSpace($tmp); + + //$name = substr($tmp,6); + $filter_projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id = '$id' LIMIT 1"); + //if($filter_projekt)$filter_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id= '$filter_projekt' and eigenernummernkreis = 1 LIMIT 1"); + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND geloescht=0 ".$this->app->erp->ProjektRechte("projekt", true, 'vertrieb')." ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); + + $uebernehmen =$this->app->Secure->GetPOST('uebernehmen'); + if($uebernehmen=='1' && $schreibschutz != '1') // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!! + { + $this->LoadRechnungStandardwerte($id,$adresse); + $this->app->erp->RechnungNeuberechnen($id); + $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); + } + } + $rechnungarr = null; + if($id > 0) { + $rechnungarr = $this->app->DB->SelectRow("SELECT * FROM rechnung WHERE id='$id' LIMIT 1"); + } + $land = ''; + $ustid = ''; + $ust_befreit = null; + if(!empty($rechnungarr)) { + $land = $rechnungarr['land'];//$this->app->DB->Select("SELECT land FROM rechnung WHERE id='$id' LIMIT 1"); + $ustid = $rechnungarr['ustid'];//$this->app->DB->Select("SELECT ustid FROM rechnung WHERE id='$id' LIMIT 1"); + $ust_befreit = $rechnungarr['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM rechnung WHERE id='$id' LIMIT 1"); + } + if($ust_befreit) { + $this->app->Tpl->Set('USTBEFREIT',"
    EU-Lieferung
    (bereits geprüft!)
    "); + } + else if($land!=='DE' && $ustid!='') { + $this->app->Tpl->Set('USTBEFREIT',"
    EU-Lieferung
    (Fehler bei Prüfung!)
    "); + } + + + // easy table mit arbeitspaketen YUI als template + $table = new EasyTable($this->app); + $table->Query("SELECT bezeichnung as artikel, nummer as Nummer, menge, vpe as VPE, FORMAT(preis,4) as preis + FROM rechnung_position + WHERE rechnung='$id'",0,""); + $table->DisplayNew('POSITIONEN',"Preis","noAction"); + $summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM rechnung_position + WHERE rechnung='$id'"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM rechnung_position + WHERE rechnung='$id' LIMIT 1"); + + $summebrutto = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); + $ust_befreit_check = $this->app->DB->Select("SELECT ust_befreit FROM rechnung WHERE id='$id' LIMIT 1"); + + $tmp = 'Kunde zahlt mit UST'; + if($ust_befreit_check==1) { + $tmp = 'Kunde ist UST befreit'; + } + + if($summe > 0){ + $this->app->Tpl->Add('POSITIONEN', "
    Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($tmp)  "); + } + + $status= $this->app->DB->Select("SELECT status FROM rechnung WHERE id='$id' LIMIT 1"); + $this->app->Tpl->Set('STATUS',""); + + $internet = $this->app->DB->Select("SELECT a.internet FROM rechnung r LEFT JOIN auftrag a ON a.id=r.auftragid WHERE r.id='$id' AND r.id > 0 LIMIT 1"); + if($internet!='') { + $this->app->Tpl->Set('INTERNET',"Internet:"); + } + + $this->app->Tpl->Set('AKTIV_TAB1',"selected"); + + $sollExtSoll = $this->app->DB->SelectRow( + sprintf( + "SELECT extsoll, soll + FROM rechnung + WHERE id = %d AND schreibschutz = 0 AND status = 'versendet' AND extsoll <> 0", + $id + ) + ); + if(!empty($sollExtSoll['extsoll']) && $sollExtSoll['extsoll'] == $sollExtSoll['soll']) { + $sollExtSoll['soll'] = $this->app->DB->Select( + sprintf( + 'SELECT ROUND(SUM(`umsatz_brutto_gesamt`),2) FROM `rechnung_position` WHERE `rechnung` = %d ', + $id + ) + ); + } + + if(!empty($sollExtSoll) && $sollExtSoll['soll'] != $sollExtSoll['extsoll']) { + $extsoll = $sollExtSoll['extsoll']; + $this->app->Tpl->Add( + 'MESSAGE','
    + Der Sollbetrag stimmt nicht mehr mit ursprünglich festgelegten Betrag '. + number_format($extsoll,2,',','.'). + ' überein
    ' + ); + } + parent::RechnungEdit(); + if($id > 0 && $this->app->DB->Select( + sprintf( + 'SELECT id FROM rechnung WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d', + $id + ) + ) + ) { + $this->app->erp->PDFArchivieren('rechnung', $id, true); + } + $this->app->erp->MessageHandlerStandardForm(); + + if($this->app->Secure->GetPOST('weiter')!='') + { + $this->app->Location->execute('index.php?module=rechnung&action=positionen&id='.$id); + } + $this->RechnungMenu(); + } + + function RechnungCreate() + { + $anlegen = $this->app->Secure->GetGET('anlegen'); + if($this->app->erp->Firmendaten('schnellanlegen')=='1' && $anlegen!='1') { + $this->app->Location->execute('index.php?module=rechnung&action=create&anlegen=1'); + } + + if($anlegen != '') { + $id = $this->CreateRechnung(); + $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); + } + + $this->app->Tpl->Add('KURZUEBERSCHRIFT','Rechnung'); + $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Zurück zur Übersicht'); + + $this->app->Tpl->Set('MESSAGE',"
    Möchten Sie eine Rechnung jetzt anlegen?   +

    "); + $this->app->Tpl->Set('TAB1'," + + + + +
    +
    Rechnungen in Bearbeitung +
    +
    + Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind. +
    +
    +
    + [AUFTRAGE]"); + + + $this->app->Tpl->Set('AKTIV_TAB1','selected'); + $this->app->YUI->TableSearch('AUFTRAGE','rechnungeninbearbeitung'); + $this->app->Tpl->Set('TABTEXT','Rechnung anlegen'); + $this->app->Tpl->Parse('PAGE','tabview.tpl'); + } + + /** + * @param int $invoiceId + * + * @return bool + */ + public function markInvoiceAsClosed($invoiceId) + { + $reArr = $this->app->DB->SelectRow( + sprintf( + "SELECT projekt,belegnr,status,usereditid, + DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` + FROM rechnung WHERE id=%d LIMIT 1", + $invoiceId + ) + ); + if($reArr['belegnr'] === '') { + return false; + } + if($reArr['status'] === 'freigegeben') { + $this->app->erp->RechnungNeuberechnen($invoiceId); + } + $projekt = $reArr['projekt']; + $this->app->erp->RechnungProtokoll($invoiceId,'Rechnung versendet'); + $this->app->erp->closeInvoice($invoiceId); + $this->app->DB->Update( + sprintf( + 'UPDATE rechnung SET schreibschutz=1, versendet = 1 WHERE id = %d LIMIT 1', + $invoiceId + ) + ); + $this->app->DB->Update( + sprintf( + "UPDATE rechnung + SET status='versendet' + WHERE id = %d AND status!='storniert' + LIMIT 1", + $invoiceId + ) + ); + $this->app->erp->PDFArchivieren('rechnung', $invoiceId, true); + 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=''"); + + if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) + { + $drucker = $this->app->Secure->GetPOST('seldrucker'); + $aktion = $this->app->Secure->GetPOST('sel_aktion'); + $auswahl = $this->app->Secure->GetPOST('auswahl'); + if($drucker > 0) { + $this->app->erp->BriefpapierHintergrundDisable($drucker); + } + if(is_array($auswahl)) { + foreach($auswahl as $auswahlKey => $auswahlValue) { + if((int)$auswahlValue > 0) { + $auswahl[$auswahlKey] = (int)$auswahlValue; + } + else { + unset($auswahl[$auswahlKey]); + } + } + switch($aktion) + { + case 'bezahlt': + $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='bezahlt', bezahlt_am = now(), ist=soll,mahnwesenfestsetzen='1',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt markiert am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); + break; + case 'offen': + $this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',bezahlt_am = NULL, ist='0',mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')'); + break; + case 'mail': + $auswahl = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)", + implode(', ', $auswahl) + ) + ); + foreach($auswahl as $v) { + if(!$v) { + continue; + } + $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 && + $this->app->DB->Select( + "SELECT r.id + FROM rechnung AS r + INNER JOIN adresse AS a ON r.adresse = a.id + WHERE r.id = '$v' AND r.email <> '' OR a.email <> '' + LIMIT 1" + ) + ) { + $this->app->erp->PDFArchivieren('rechnung', $v, true); + $this->app->erp->Rechnungsmail($v); + } + else if($checkpapier && $drucker) { + $this->app->erp->PDFArchivieren('rechnung', $v, true); + $projekt = $this->app->DB->Select( + "SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1" + ); + if(class_exists('RechnungPDFCustom')) { + $Brief = new RechnungPDFCustom($this->app,$projekt); + } + else { + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($v); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(); + $this->app->printer->Drucken($drucker,$tmpfile); + unlink($tmpfile); + } + } + break; + case 'versendet': + $auswahl = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)", + implode(', ', $auswahl) + ) + ); + foreach($auswahl as $v) { + if($v) { + $reArr = $this->app->DB->SelectRow( + sprintf( + "SELECT projekt,belegnr,status,usereditid, + DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` + FROM rechnung WHERE id=%d LIMIT 1", + $v + ) + ); + if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) { + continue; + } + $this->markInvoiceAsClosed($v); + } + } + break; + case 'drucken': + if($drucker) { + $auswahl = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)", + implode(', ', $auswahl) + ) + ); + foreach($auswahl as $v) { + $reArr = $this->app->DB->SelectRow( + sprintf( + "SELECT projekt,belegnr,status,usereditid,adresse, + DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` + FROM rechnung WHERE id=%d LIMIT 1", + $v + ) + ); + if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) { + continue; + } + if($reArr['status'] === 'freigegeben') { + $this->app->erp->RechnungNeuberechnen($v); + } + $projekt = $reArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1"); + $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); + if(class_exists('RechnungPDFCustom')) { + $Brief = new RechnungPDFCustom($this->app,$projekt); + } + else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($v); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(); + $this->app->printer->Drucken($drucker,$tmpfile); + $doctype = 'rechnung'; + $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $reArr['adresse'], $aktion); + @unlink($tmpfile); + } + } + break; + case 'pdf': + $tmpfile = []; + foreach($auswahl as $v) { + $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1"); + if(class_exists('RechnungPDFCustom')) { + $Brief = new RechnungPDFCustom($this->app,$projekt); + } + else { + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($v); + $tmpfile[] = $Brief->displayTMP(); + } + + if(count($tmpfile) > 0) { + try { + /** @var PdfMerger $pdfMerger */ + $pdfMerger = $this->app->Container->get('PdfMerger'); + $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf'; + $pdfMerger->merge($tmpfile, $mergeOutputPath); + + foreach($tmpfile as $key=>$value) { + unlink($value); + } + + header('Content-type:application/pdf'); + header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf'); + readfile($mergeOutputPath); + $this->app->ExitXentral(); + } catch (PdfComponentExceptionInterface $exception) { + echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage()); + $this->app->ExitXentral(); + } + } + break; + } + } + } + + $this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen'); + + $backurl = $this->app->Secure->GetGET('backurl'); + $backurl = $this->app->erp->base64_url_decode($backurl); + + $this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Übersicht'); + $this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen'); + + if(strlen($backurl)>5){ + $this->app->erp->MenuEintrag("$backurl", 'Zurück'); + } + //else + // $this->app->erp->MenuEintrag("index.php","Zurück zur Übersicht"); + + $zahlungsweisen = $this->app->DB->SelectArr(' + SELECT + zahlungsweise + FROM + rechnung + GROUP BY + zahlungsweise + '); + + $zahlungsweiseStr = ''; + if ($zahlungsweisen) { + foreach ($zahlungsweisen as $zahlungsweise) { + if (empty($zahlungsweise['zahlungsweise'])) { + continue; + } + $zahlungsweiseStr .= ''; + } + } + + $status = $this->app->DB->SelectArr(' + SELECT + status + FROM + rechnung + GROUP BY + status + '); + + $statusStr = ''; + if ($status) { + foreach ($status as $statusE) { + if (empty($statusE['status'])) { + continue; + } + $statusStr .= ''; + } + } + + $versandarten = $this->app->DB->SelectArr(' + SELECT + versandart + FROM + rechnung + GROUP BY + versandart + '); + + $versandartenStr = ''; + if ($versandarten) { + foreach ($versandarten as $versandart) { + if (empty($versandart['versandart'])) { + continue; + } + $versandartenStr .= ''; + } + } + + $laender = $this->app->erp->GetSelectLaenderliste(); + $laenderStr = ''; + foreach ($laender as $landKey => $land) { + $laenderStr .= ''; + } + + + $this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr); + $this->app->Tpl->Add('STATUS',$statusStr); + $this->app->Tpl->Add('VERSANDARTEN',$versandartenStr); + $this->app->Tpl->Add('LAENDER',$laenderStr); + + $this->app->YUI->DatePicker('datumVon'); + $this->app->YUI->DatePicker('datumBis'); + $this->app->YUI->AutoComplete("projekt", "projektname", 1); + $this->app->YUI->AutoComplete("kundennummer", "kunde", 1); + $this->app->YUI->AutoComplete("rechnungsnummer", "rechnung", 1); + $this->app->YUI->AutoComplete("artikel", "artikelnummer", 1); + $this->app->Tpl->Parse('TAB1',"rechnung_table_filter.tpl"); + + $this->app->Tpl->Set('AKTIV_TAB1',"selected"); + $this->app->Tpl->Set('INHALT',''); + + $this->app->YUI->TableSearch('TAB2','rechnungenoffene'); + $this->app->YUI->TableSearch('TAB1','rechnungen'); + $this->app->YUI->TableSearch('TAB3','rechnungeninbearbeitung'); + + if($this->app->erp->RechteVorhanden('rechnung', 'manuellbezahltmarkiert')){ + $this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', ''); + } + + $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))); + + $this->app->Tpl->Parse('PAGE','rechnunguebersicht.tpl'); + } + + /** + * @param string|int $adresse + * + * @return int + */ + public function CreateRechnung($adresse='') + { + $projekt = $this->app->erp->GetCreateProjekt($adresse); + + $belegmax = ''; + $ohnebriefpapier = $this->app->erp->Firmendaten('rechnung_ohnebriefpapier'); + + $usereditid = 0; + if(isset($this->app->User) && $this->app->User && method_exists($this->app->User,'GetID')){ + $usereditid = $this->app->User->GetID(); + } + + if($this->app->erp->StandardZahlungsweise($projekt)==='rechnung') + { + $this->app->DB->Insert("INSERT INTO rechnung (id,datum,bearbeiter,firma,belegnr,zahlungsweise, + zahlungszieltage, + zahlungszieltageskonto, + zahlungszielskonto, + lieferdatum, + status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid) + VALUES ('',NOW(),'','".$this->app->User->GetFirma()."','$belegmax','".$this->app->erp->StandardZahlungsweise($projekt)."', + '".$this->app->erp->ZahlungsZielTage($projekt)."', + '".$this->app->erp->ZahlungsZielTageSkonto($projekt)."', + '".$this->app->erp->ZahlungsZielSkonto($projekt)."',NOW(), + 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid')"); + } else { + $this->app->DB->Insert("INSERT INTO rechnung (id,datum,bearbeiter,firma,belegnr,zahlungsweise, + zahlungszieltage, + zahlungszieltageskonto, + zahlungszielskonto, + lieferdatum, + status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid) + VALUES ('',NOW(),'','".$this->app->User->GetFirma()."','$belegmax','".$this->app->erp->StandardZahlungsweise($projekt)."', + '0', + '0', + '0',NOW(), + 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid')"); + } + + $id = $this->app->DB->GetInsertID(); + $this->app->erp->CheckVertrieb($id,'rechnung'); + $this->app->erp->CheckBearbeiter($id,'rechnung'); + + $this->app->erp->RechnungProtokoll($id,'Rechnung angelegt'); + + $type='rechnung'; + $this->app->erp->ObjektProtokoll($type,$id,$type.'_create',ucfirst($type).' angelegt'); + $deliverythresholdvatid = $this->app->erp->getDeliverythresholdvatid($projekt); + if($id > 0 && !empty($deliverythresholdvatid)){ + $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); + $this->app->DB->Update("UPDATE rechnung SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); + } + $this->app->erp->SchnellFreigabe('rechnung',$id); + + $this->app->erp->LoadSteuersaetzeWaehrung($id,'rechnung',$projekt); + $this->app->erp->EventAPIAdd('EventRechnungCreate',$id,'rechnung','create'); + + return $id; + } + + /** + * @param int $id + * + * @return int + */ + public function CopyRechnung($id) + { + $this->app->DB->Insert("INSERT INTO rechnung (angelegtam) VALUES (NOW())"); + $newid = $this->app->DB->GetInsertID(); + $arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,bearbeiter,zahlungszieltage,zahlungszieltageskonto,zahlungsweise,ohne_artikeltext,ohne_briefpapier,'angelegt' as status, + zahlungszielskonto,ust_befreit,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,typ, + firma,sprache,anzeigesteuer,waehrung,kurs,kostenstelle FROM rechnung WHERE id='$id' LIMIT 1"); + $arr['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '".$arr['adresse']."' LIMIT 1"); + $arr['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM rechnung WHERE id='$id' LIMIT 1"); + $this->app->DB->UpdateArr('rechnung',$newid,'id',$arr, true); + + $pos = $this->app->DB->SelectArr("SELECT * FROM rechnung_position WHERE rechnung='$id'"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++){ + $this->app->DB->Insert("INSERT INTO rechnung_position (rechnung) VALUES($newid)"); + $newposid = $this->app->DB->GetInsertID(); + $pos[$i]['rechnung']=$newid; + $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$pos[$i], true); + if($pos[$i]['steuersatz'] === null){ + $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + $this->app->erp->CheckFreifelder('rechnung',$newid); + $this->app->erp->CopyBelegZwischenpositionen('rechnung',$id,'rechnung',$newid); + $this->app->erp->LoadSteuersaetzeWaehrung($newid,'rechnung'); + $this->app->erp->SchnellFreigabe('rechnung',$newid); + + return $newid; + } + + /** + * @param int $id + * @param int $adresse + */ + public function LoadRechnungStandardwerte($id,$adresse) + { + if($id==0 || $id=='' || $adresse=='' || $adresse=='0'){ + return; + } + $this->app->erp->StartChangeLog('rechnung', $id); + // standard adresse von lieferant + $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,'' as bearbeiter,innendienst as bearbeiterid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + if($arr[0]['bearbeiterid'] <=0 ){ + $arr[0]['bearbeiterid'] = $this->app->User->GetAdresse(); + } + + $arr[0]['gruppe'] = $this->app->erp->GetVerband($adresse); + + $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); + + if($arr[0]['abweichende_rechnungsadresse']=='1') + { + $arr = $this->app->DB->SelectArr("SELECT projekt, rechnung_name as name, + rechnung_abteilung as abteilung, + rechnung_ansprechpartner as ansprechpartner, + rechnung_unterabteilung as unterabteilung, + rechnung_strasse as strasse, + rechnung_adresszusatz as adresszusatz, + rechnung_plz as plz, + rechnung_ort as ort, + rechnung_land as land, + rechnung_telefon as telefon, + rechnung_titel as titel, + rechnung_email as email, + rechnung_telefax as telefax, + rechnung_vorname as vorname, + rechnung_typ as typ, + rechnung_bundesstaat as bundesstaat, + rechnung_gln as gln, + ustid, + kundennummer, + lieferbedingung, + vertrieb as vertriebid, + innendienst as bearbeiterid, + '' as bearbeiter, + rechnung_anschreiben as anschreiben + FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + $arr[0]['gruppe'] = $this->app->erp->GetVerband($adresse); + } + $field = array('gln','anschreiben','name','abteilung','typ','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax','kundennummer','projekt','ust_befreit','gruppe','vertriebid','bearbeiter','ansprechpartner','bearbeiterid','titel','lieferbedingung','bundesstaat'); + + if($rolle_projekt > 0) + { + $arr[0]['projekt'] = $rolle_projekt; + } + + foreach($field as $key=>$value) + { + if($value=="projekt" && $this->app->Secure->POST[$value]!=""&&0) + { + $uparr[$value] = str_replace("'", ''',$this->app->Secure->POST[$value]); + } else { + $this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]); + $uparr[$value] = str_replace("'", ''',$arr[0][$value]); + } + + //$this->app->Secure->POST[$value] = $arr[0][$value]; + //$uparr[$value] = $arr[0][$value]; + } + + $uparr['adresse'] = $adresse; + $uparr['ust_befreit'] = $this->app->erp->AdresseUSTCheck($adresse); + $uparr['zahlungsstatusstatus']='offen'; + + if($this->app->erp->Firmendaten('rechnung_ohnebriefpapier')=='1'){ + $uparr['ohne_briefpapier'] = '1'; + } + + $this->app->DB->UpdateArr('rechnung',$id,'id',$uparr,true); + $uparr=null; + + //liefernantenvorlage + $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); + + if($arr[0]['abweichende_rechnungsadresse']=='1') + { + $arr = $this->app->DB->SelectArr("SELECT projekt, rechnung_name as name, + rechnung_abteilung as abteilung, + rechnung_unterabteilung as unterabteilung, + rechnung_strasse as strasse, + rechnung_adresszusatz as adresszusatz, + rechnung_plz as plz, + rechnung_ort as ort, + rechnung_land as land, + rechnung_telefon as telefon, + rechnung_telefax as telefax, + rechnung_vorname as vorname, + rechnung_typ as typ, + zahlungsweise,zahlungszieltage,zahlungszieltageskonto,zahlungszielskonto,versandart, + rechnung_anschreiben as anschreiben + FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + } + + $field = array('zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart'); + + $this->app->erp->LoadZahlungsweise($adresse,$arr); + + // falls von Benutzer projekt ueberladen werden soll + $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + if($projekt_bevorzugt=="1") + { + $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + $arr[0]['projekt'] = $uparr['projekt']; + $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); + } + if(isset($arr[0]['usereditid'])){ + unset($arr[0]['usereditid']); + } + $this->app->Secure->POST['zahlungsweise'] = strtolower($arr[0]['zahlungsweise']); + $this->app->Secure->POST['zahlungszieltage'] = strtolower($arr[0]['zahlungszieltage']); + $this->app->Secure->POST['zahlungszieltageskonto'] = strtolower($arr[0]['zahlungszieltageskonto']); + $this->app->Secure->POST['zahlungszielskonto'] = strtolower($arr[0]['zahlungszielskonto']); + $this->app->Secure->POST['versandart'] = strtolower($arr[0]['versandart']); + /* + foreach($field as $key=>$value) + { + $uparr[$value] = $arr[0][$value]; + $this->app->Secure->POST[$value] = $arr[0][$value]; + } + */ + $this->app->DB->UpdateArr('rechnung',$id,'id',$arr[0],true); + $this->app->erp->WriteChangeLog(); + $this->app->erp->LoadSteuersaetzeWaehrung($id,'rechnung'); + $this->app->erp->StartChangeLog('rechnung', $id); + $this->app->erp->LoadAdresseStandard('rechnung',$id,$adresse); + $this->app->erp->WriteChangeLog(); + } + + /** + * @param int $id + */ + public function DeleteRechnung($id) + { + if($id <= 0) { + return; + } + $belegnr = $this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$id' LIMIT 1"); + if($belegnr=='' || $belegnr=='0') { + $this->app->DB->Delete("DELETE FROM rechnung_position WHERE rechnung='$id'"); + $this->app->DB->Delete("DELETE FROM rechnung_protokoll WHERE rechnung='$id'"); + $this->app->DB->Delete("DELETE FROM rechnung WHERE id='$id' LIMIT 1"); + } + } + + /** + * @param int $rechnung + * @param int $verkauf + * @param float $menge + * @param string $datum + */ + public function AddRechnungPosition($rechnung, $verkauf,$menge,$datum) + { + $artikel = 0; + $preis = 0; + $projekt = 0; + $waehrung = 0; + $vpe = ''; + if($verkauf){ + $verkaufspreisearr = $this->app->SelectRow("SELECT * FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + } + if(!empty($verkaufspreisearr)) { + $artikel = $verkaufspreisearr['artikel']; + $preis = $verkaufspreisearr['preis']; + $projekt = $verkaufspreisearr['projekt']; + $waehrung = $verkaufspreisearr['waehrung']; + $vpe = $verkaufspreisearr['vpe']; + } + if($artikel > 0){ + $artikelarr = $this->app->SelectRow("SELECT * FROM artikel WHERE id='$artikel' LIMIT 1"); + } + $bezeichnunglieferant = ''; + $umsatzsteuer = ''; + $bestellnummer = ''; + if(!empty($artikelarr)) { + $bezeichnunglieferant = $artikelarr['name_de']; + $umsatzsteuer = $artikelarr['umsatzsteuer']; + $bestellnummer = $artikelarr['nummer']; + } + + $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM rechnung_position WHERE rechnung='$rechnung' LIMIT 1"); + $sort++; + $this->app->DB->Insert("INSERT INTO rechnung_position (rechnung,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) + VALUES ('$rechnung','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); + } + + /** + * @param int $rechnung + * @param int $artikel + * @param float $preis + * @param float $menge + * @param string $bezeichnung + * @param string $beschreibung + * @param string $waehrung + * @param int $rabatt + * + * @return int + */ + public function AddRechnungPositionManuell($rechnung, $artikel,$preis, $menge,$bezeichnung,$beschreibung='',$waehrung='EUR',$rabatt=0) + { + $bezeichnung = $this->app->DB->real_escape_string($bezeichnung); + $beschreibung = $this->app->DB->real_escape_string($beschreibung); + + $bezeichnunglieferant = $bezeichnung; + $artArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT nummer, projekt, umsatzsteuer FROM artikel WHERE id = %d', + $artikel + ) + ); + $bestellnummer = !empty($artArr)?$artArr['nummer']: $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + $projekt = !empty($artArr)?$artArr['projekt']:$this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1"); + + $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); + + if($waehrung!='') { + $this->app->DB->Update("UPDATE rechnung SET waehrung='$waehrung' WHERE id='$rechnung' AND waehrung='' LIMIT 1"); + } + + $keinrabatterlaubt=0; + if($rabatt <> 0) { + $keinrabatterlaubt=1; + } + + //$waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $umsatzsteuer = !empty($artArr)?$artArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); + $umsatzsteuer = $this->app->DB->real_escape_string($umsatzsteuer); + $vpe = ''; + //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM rechnung_position WHERE rechnung='$rechnung' LIMIT 1"); + $sort++; + $this->app->DB->Insert("INSERT INTO rechnung_position (rechnung,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,beschreibung,rabatt,keinrabatterlaubt) + VALUES ('$rechnung','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$beschreibung','$rabatt','$keinrabatterlaubt')"); + + return $this->app->DB->GetInsertID(); + } +} diff --git a/www/widgets/widget.rechnung.php b/www/widgets/widget.rechnung.php index 8cca3fca..d8eda528 100644 --- a/www/widgets/widget.rechnung.php +++ b/www/widgets/widget.rechnung.php @@ -132,13 +132,21 @@ class WidgetRechnung extends WidgetGenRechnung $zahlungsweisenmodule = $this->app->DB->SelectArr("SELECT id, modul, type FROM zahlungsweisen WHERE verhalten = 'rechnung'"); - for($iz=0;$iz 0) - $field->onchange="var cmd = this.form.zahlungsweise.options[this.form.zahlungsweise.selectedIndex].value; if(".implode(' || ',$cmdcheck).") cmd='rechnung'; aktion_buchen(cmd);"; - else - $field->onchange="var cmd = this.form.zahlungsweise.options[this.form.zahlungsweise.selectedIndex].value; aktion_buchen(cmd);"; + + if (!is_null($zahlungsweisenmodule)) + { + if(count($zahlungsweisenmodule) > 0) + $field->onchange="var cmd = this.form.zahlungsweise.options[this.form.zahlungsweise.selectedIndex].value; if(".implode(' || ',$cmdcheck).") cmd='rechnung'; aktion_buchen(cmd);"; + else + $field->onchange="var cmd = this.form.zahlungsweise.options[this.form.zahlungsweise.selectedIndex].value; aktion_buchen(cmd);"; + } + $field->AddOptionsSimpleArray($zahlungsweise); $this->form->NewField($field);