diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index 20ea009e..fc1d4c21 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -27569,6 +27569,16 @@ function Firmendaten($field,$projekt="")
return $buchstaben_anteil_string.$neue_nummer;
}
+ function CalcNextArtikelNummer($nummer) {
+ $check = null;
+ do {
+ $nummer = $this->CalcNextNummer($nummer);
+ $sql = "SELECT id FROM artikel WHERE nummer = '".$nummer."'";
+ $check = $this->app->DB->Select($sql);
+ } while (!empty($check));
+ return ($nummer);
+ }
+
function GetNextNummer($type,$projekt="",$data="")
{
$doctype = $type;
@@ -28043,7 +28053,7 @@ function Firmendaten($field,$projekt="")
$nurzahlen = preg_replace("/[^0-9]/","",$next_nummer_alt);
$laenge = strlen($nurzahlen);
- $next_nummer = $this->CalcNextNummer($next_nummer_alt);
+ $next_nummer = $this->CalcNextArtikelNummer($next_nummer_alt);
//$nurbuchstaben.str_pad($nurzahlen+1, $laenge ,'0', STR_PAD_LEFT);
$neue_nummer = $next_nummer;
@@ -28056,12 +28066,12 @@ function Firmendaten($field,$projekt="")
if($eigenernummernkreis=="1")
{
$neue_nummer = $this->app->DB->Select("SELECT next_artikelnummer FROM projekt WHERE id='$projekt' LIMIT 1");
- if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextNummer($neue_nummer);
- $next_nummer = $this->CalcNextNummer($neue_nummer);
+ if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextArtikelNummer($neue_nummer);
+ $next_nummer = $this->CalcNextArtikelNummer($neue_nummer);
$this->app->DB->Update("UPDATE projekt SET next_artikelnummer='".$next_nummer."' WHERE id='$projekt' LIMIT 1");
} else {
//zentraler nummernkreis mit prefix
- $next_nummer = $this->CalcNextNummer($this->Firmendaten("next_artikelnummer"));
+ $next_nummer = $this->CalcNextArtikelNummer($this->Firmendaten("next_artikelnummer"));
$this->FirmendatenSet("next_artikelnummer",$next_nummer);
if($next_nummer_alt!="") $neue_nummer=$next_nummer_alt.$next_nummer;
else $neue_nummer = $next_nummer;
@@ -28076,15 +28086,15 @@ function Firmendaten($field,$projekt="")
if($eigenernummernkreis)
{
$neue_nummer = $this->app->DB->Select("SELECT next_artikelnummer FROM projekt WHERE id='$projekt' LIMIT 1");
- if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextNummer($neue_nummer);
- $next_nummer = $this->CalcNextNummer($neue_nummer);
+ if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextArtikelNummer($neue_nummer);
+ $next_nummer = $this->CalcNextArtikelNummer($neue_nummer);
$this->app->DB->Update("UPDATE projekt SET next_artikelnummer='".$next_nummer."' WHERE id='$projekt' LIMIT 1");
}else{
$firmennummer = $this->app->erp->Firmendaten('next_artikelnummer');
if($firmennummer)
{
$next_nummer = $firmennummer;
- $neue_nummer = $this->CalcNextNummer($next_nummer);
+ $neue_nummer = $this->CalcNextArtikelNummer($next_nummer);
$this->FirmendatenSet('next_artikelnummer', $neue_nummer);
$neue_nummer = $this->app->erp->Firmendaten('next_artikelnummer');
} else {
@@ -28106,10 +28116,11 @@ function Firmendaten($field,$projekt="")
$neue_nummer = $this->app->DB->Select("SELECT MAX(CAST(nummer AS UNSIGNED)) FROM artikel WHERE nummer LIKE '1%'");
if(($neue_nummer=="" || $neue_nummer=="0")) $neue_nummer = "100000";
}
- $neue_nummer = $this->CalcNextNummer($neue_nummer);//$neue_nummer + 1;
+ $neue_nummer = $this->CalcNextArtikelNummer($neue_nummer);//$neue_nummer + 1;
}
}
}
+
$this->app->erp->ProzessUnlock($process_lock);
$neue_nummer = str_replace('{JAHR}',date('Y'),$neue_nummer);
$neue_nummer = str_replace('{MONAT}',date('m'),$neue_nummer);
diff --git a/www/pages/content/exportbuchhaltung_export.tpl b/www/pages/content/exportbuchhaltung_export.tpl
index b73af264..980863de 100644
--- a/www/pages/content/exportbuchhaltung_export.tpl
+++ b/www/pages/content/exportbuchhaltung_export.tpl
@@ -61,7 +61,11 @@
-
+
+ {|PDF-Dateien exportieren:|} |
+ |
+
+
diff --git a/www/pages/exportbuchhaltung.php b/www/pages/exportbuchhaltung.php
index b96476e1..afa25dfa 100644
--- a/www/pages/exportbuchhaltung.php
+++ b/www/pages/exportbuchhaltung.php
@@ -1,13 +1,13 @@
_data = $data;
parent::__construct($message);
@@ -46,6 +46,91 @@ class Exportbuchhaltung
var $belegnummer;
var $headerwritten = false;
+ function typen($rechnung, $gutschrift, $verbindlichkeit, $lieferantengutschrift) : array {
+ return(
+ array(
+ array(
+ 'typ' => 'rechnung',
+ 'subtable' => 'rechnung_position',
+ 'kennzeichen' => 'S',
+ 'kennzeichen_negativ' => 'H',
+ 'field_belegnr' => 'b.belegnr',
+ 'field_name' => 'b.name',
+ 'field_date' => 'datum',
+ 'field_auftrag' => 'MAKE_SET(3,b.auftrag,(SELECT auftrag.internet FROM auftrag WHERE auftrag.id = auftragid))',
+ 'field_zahlweise' => 'CONCAT(UCASE(LEFT(b.zahlungsweise, 1)),SUBSTRING(b.zahlungsweise, 2))',
+ 'field_kontonummer' => 'a.kundennummer_buchhaltung',
+ 'field_kundennummer' => 'b.kundennummer',
+ 'field_betrag_gesamt' => 'b.soll',
+ 'field_betrag' => 'p.umsatz_brutto_gesamt',
+ 'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\',\'storniert\')',
+ 'Buchungstyp' => 'SR',
+ 'do' => $rechnung,
+ 'pdf' => 'print'
+ ),
+ array(
+ 'typ' => 'gutschrift',
+ 'subtable' => 'gutschrift_position',
+ 'kennzeichen' => 'H',
+ 'kennzeichen_negativ' => 'S',
+ 'field_belegnr' => 'b.belegnr',
+ 'field_name' => 'b.name',
+ 'field_date' => 'datum',
+ 'field_auftrag' => '\'\'',
+ 'field_zahlweise' => '\'\'',
+ 'field_kontonummer' => 'a.kundennummer_buchhaltung',
+ 'field_kundennummer' => 'b.kundennummer',
+ 'field_betrag_gesamt' => 'b.soll',
+ 'field_betrag' => 'p.umsatz_brutto_gesamt',
+ 'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\')',
+ 'Buchungstyp' => '',
+ 'do' => $gutschrift,
+ 'pdf' => 'print'
+ ),
+ array(
+ 'typ' => 'verbindlichkeit',
+ 'subtable' => 'verbindlichkeit_position',
+ 'kennzeichen' => 'H',
+ 'kennzeichen_negativ' => 'S',
+ 'field_belegnr' => 'b.rechnung',
+ 'field_name' => 'a.name',
+ 'field_date' => 'rechnungsdatum',
+ 'field_auftrag' => 'b.auftrag',
+ 'field_zahlweise' => '\'\'',
+ 'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
+ 'field_kundennummer' => 'a.lieferantennummer',
+ 'field_betrag_gesamt' => 'b.betrag',
+ 'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
+ 'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
+ 'condition_where' => ' AND b.status IN (\'freigegeben\', \'abgeschlossen\')',
+ 'Buchungstyp' => '',
+ 'do' => $verbindlichkeit,
+ 'pdf' => 'load'
+ ),
+ array(
+ 'typ' => 'lieferantengutschrift',
+ 'subtable' => 'lieferantengutschrift_position',
+ 'kennzeichen' => 'S',
+ 'kennzeichen_negativ' => 'H',
+ 'field_belegnr' => 'b.rechnung',
+ 'field_name' => 'a.name',
+ 'field_date' => 'rechnungsdatum',
+ 'field_auftrag' => '\'\'',
+ 'field_zahlweise' => '\'\'',
+ 'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
+ 'field_kundennummer' => 'a.lieferantennummer',
+ 'field_betrag_gesamt' => 'b.betrag',
+ 'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
+ 'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
+ 'condition_where' => ' AND b.status IN (\'freigegeben\', \'abgeschlossen\')',
+ 'Buchungstyp' => '',
+ 'do' => $lieferantengutschrift,
+ 'pdf' => 'load'
+ )
+ )
+ );
+ }
+
/**
* Exportbelegepositionen constructor.
*
@@ -57,12 +142,12 @@ class Exportbuchhaltung
$this->app = $app;
if ($intern == true) {
return;
- }
+ }
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("export", "ExportBuchhaltungList");
$this->app->ActionHandlerListen($app);
- $this->app->erp->Headlines('Buchhaltung Export DATEV');
+ $this->app->erp->Headlines('Buchhaltung Export DATEV');
}
function ExportBuchhaltungList() {
@@ -70,7 +155,7 @@ class Exportbuchhaltung
$von_form = $this->app->Secure->GetPOST("von");
$bis_form = $this->app->Secure->GetPOST("bis");
$von = date_create($this->app->erp->ReplaceDatum(true, $von_form, true));
- $bis = date_create($this->app->erp->ReplaceDatum(true, $bis_form, true));
+ $bis = date_create($this->app->erp->ReplaceDatum(true, $bis_form, true));
$projektkuerzel = $this->app->Secure->GetPOST("projekt");
$projekt = $this->app->erp->ReplaceProjekt(true, $projektkuerzel, true);
@@ -81,12 +166,13 @@ class Exportbuchhaltung
$diffignore = $this->app->Secure->GetPOST("diffignore");
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
$format = $this->app->Secure->GetPOST('format');
+ $pdfexport = $this->app->Secure->GetPOST("pdfexport");
$account_id = null;
if (!empty($sachkonto)) {
$sachkonto_kennung = explode(' ',$sachkonto)[0];
- $account_id = $this->app->DB->SelectArr("SELECT id from kontorahmen WHERE sachkonto = '".$sachkonto_kennung."'")[0]['id'];
- }
+ $account_id = $this->app->DB->SelectArr("SELECT id from kontorahmen WHERE sachkonto = '".$sachkonto_kennung."'")[0]['id'];
+ }
$msg = "";
@@ -101,13 +187,13 @@ class Exportbuchhaltung
$vbchecked = true;
$lgchecked = true;
}
-
+
$missing_obligatory = array();
$buchhaltung_berater = $this->app->erp->Firmendaten('buchhaltung_berater');
$buchhaltung_mandant = $this->app->erp->Firmendaten('buchhaltung_mandant');
$buchhaltung_wj_beginn = $this->app->erp->Firmendaten('buchhaltung_wj_beginn');
- $buchhaltung_sachkontenlaenge = $this->app->erp->Firmendaten('buchhaltung_sachkontenlaenge');
+ $buchhaltung_sachkontenlaenge = $this->app->erp->Firmendaten('buchhaltung_sachkontenlaenge');
$buchhaltung_berater = $this->app->erp->Firmendaten('buchhaltung_berater');
if (empty($buchhaltung_berater)) {
@@ -124,15 +210,15 @@ class Exportbuchhaltung
$buchhaltung_sachkontenlaenge = $this->app->erp->Firmendaten('buchhaltung_sachkontenlaenge');
if (empty($buchhaltung_sachkontenlaenge)) {
$missing_obligatory[] = "Sachkontenlänge";
- }
+ }
if (!empty($missing_obligatory)) {
$msg = "Angaben in den Grundeinstellungen fehlen: ".implode(", ",$missing_obligatory).".
";
- }
+ }
//---------- DOWNLOAD HERE
if ($submit == 'Download') {
- $dataok = true;
+ $dataok = true;
if (
!$rgchecked &&
@@ -148,7 +234,7 @@ class Exportbuchhaltung
$von_next_year = $von_next_year->modify("+1 year");;
$buchhaltung_wj_beginn = date_create(date_format($von,'Y').$buchhaltung_wj_beginn);
- if ($buchhaltung_wj_beginn > $von) {
+ if ($buchhaltung_wj_beginn > $von) {
$buchhaltung_wj_beginn = $buchhaltung_wj_beginn->modify("-1 year");
}
@@ -161,20 +247,100 @@ class Exportbuchhaltung
}
if ($dataok) {
- $filename = "EXTF_".date('Ymd') . "_Buchungsstapel_DATEV_export.csv";
+ $filename_csv = "EXTF_".date('Ymd') . "_Buchungsstapel_DATEV_export.csv";
try {
- $csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $lgchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename, $diffignore, $sachkonto_kennung, $format);
- header("Content-Disposition: attachment; filename=" . $filename);
- header("Pragma: no-cache");
- header("Expires: 0");
- echo($csv);
+ $csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $lgchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename_csv, $diffignore, $sachkonto_kennung, $format);
+ if ($pdfexport) {
+
+ $dateinamezip = 'Export_Buchhaltung_'.date('Y-m-d').'.zip';
+
+ $zip = new ZipArchive;
+ $zip->open($dateinamezip, ZipArchive::CREATE);
+
+ $zip->addFromString($typ['typ']."/".$filename_csv, $csv);
+
+ $typen = $this->typen($rgchecked, $gschecked, $vbchecked, $lgchecked);
+
+ foreach ($typen as $typ) {
+ $sql = "
+ SELECT id, ".$typ['field_belegnr']." belegnr FROM ".$typ['typ']." b
+ WHERE
+ b.".$typ['field_date']." BETWEEN '".date_format($von,"Y-m-d")."' AND '".date_format($bis,"Y-m-d")."' AND (b.projekt=$projekt OR $projekt=0)".$typ['condition_where'];
+ $belege = $this->app->DB->SelectArr($sql);
+ foreach ($belege as $beleg) {
+
+ if (!$typ['do']) {
+ continue;
+ }
+
+ switch ($typ['pdf']) {
+ case 'print':
+ switch ($typ['typ']) {
+ case 'rechnung':
+ if(class_exists('GutschriftPDFCustom')) {
+ $Brief = new RechnungPDFCustom($this->app,$projekt);
+ }
+ else{
+ $Brief = new RechnungPDF($this->app,$projekt);
+ }
+ $Brief->GetRechnung($beleg['id']);
+ break;
+ case 'gutschrift':
+ if(class_exists('RechnungPDFCustom')) {
+ $Brief = new GutschriftPDFCustom($this->app,$projekt);
+ }
+ else{
+ $Brief = new GutschriftPDF($this->app,$projekt);
+ }
+ $Brief->GetGutschrift($beleg['id']);
+ break;
+ default:
+ exit();
+ break;
+ }
+ $tmpfile = $Brief->displayTMP();
+ $file_name = $beleg['belegnr'].".pdf";
+ $zip->addFromString($typ['typ']."/".$file_name, file_get_contents($tmpfile));
+ break;
+ case 'load':
+ $file_attachments = $this->app->erp->GetDateiSubjektObjekt('%',$typ['typ'],$beleg['id']);
+ $suffix = "";
+ $count = 0;
+ foreach ($file_attachments as $file_attachment) {
+ if ($this->app->erp->GetDateiEndung($file_attachment) == 'pdf') {
+ $file_contents = $this->app->erp->GetDatei($file_attachment);
+ $file_name = filter_var($beleg['belegnr'],FILTER_SANITIZE_EMAIL).$suffix.".pdf";
+ $zip->addFromString($typ['typ']."/".$file_name, $file_contents);
+ $count++;
+ $suffix = "_".$count;
+ }
+ }
+ break;
+ }
+ }
+ }
+ $zip->close();
+
+ // download
+ header('Content-Type: application/zip');
+ header("Content-Disposition: attachment; filename=$dateinamezip");
+ header('Content-Length: ' . filesize($dateinamezip));
+
+ readfile($dateinamezip);
+ unlink($dateinamezip);
+ } else {
+ header("Content-Disposition: attachment; filename=" . $filename_csv);
+ header("Pragma: no-cache");
+ header("Expires: 0");
+ echo($csv);
+ }
$this->app->ExitXentral();
- }
+ }
catch (ConsistencyException $e) {
$msg = "Inkonsistente Daten (".$e->getMessage()."):
";
$data = $e->getData();
-
+
$count = 0;
foreach($data as $item) {
$msg .= $item['typ']." ".$item['belegnr']." (Kopf ".$this->app->erp->ReplaceMengeBetrag(false,$item['betrag_gesamt'],false)." Positionen ".$this->app->erp->ReplaceMengeBetrag(false,$item['betrag_summe'],false).")
";
@@ -187,7 +353,7 @@ class Exportbuchhaltung
$msg .= "
";
}
}
- }
+ }
//---------- DOWNLOAD HERE
$this->app->erp->MenuEintrag("index.php?module=exportbuchhaltung&action=export", "Übersicht");
@@ -204,21 +370,22 @@ class Exportbuchhaltung
$this->app->Tpl->SET('VBCHECKED',$vbchecked?'checked':'');
$this->app->Tpl->SET('LGCHECKED',$lgchecked?'checked':'');
$this->app->Tpl->SET('DIFFIGNORE',$diffignore?'checked':'');
+ $this->app->Tpl->SET('PDFEXPORT',$pdfexport?'checked':'');
+
+ $this->app->Tpl->SET('VON', $von_form);
+ $this->app->Tpl->SET('BIS', $bis_form);
+ $this->app->Tpl->SET('PROJEKT', $projektkuerzel);
+ $this->app->Tpl->SET('SACHKONTO', $sachkonto);
- $this->app->Tpl->SET('VON', $von_form);
- $this->app->Tpl->SET('BIS', $bis_form);
- $this->app->Tpl->SET('PROJEKT', $projektkuerzel);
- $this->app->Tpl->SET('SACHKONTO', $sachkonto);
-
$this->app->Tpl->Parse('PAGE', "exportbuchhaltung_export.tpl");
}
/*
* Create DATEV Buchhungsstapel
* format: "ISO-8859-1", "UTF-8", "UTF-8-BOM"
- * @throws ConsistencyException with string (list of items) if consistency check fails and no sachkonto for differences is given
- */
- function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, bool $lieferantengutschrift, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv', $diffignore = false, $sachkonto_differences, string $format = "ISO-8859-1") : string {
+ * @throws ConsistencyException with string (list of items) if consistency check fails and no sachkonto for differences is given
+ */
+ function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, bool $lieferantengutschrift, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv', $diffignore = false, $sachkonto_differences, string $format = "ISO-8859-1") : string {
$datev_header_definition = array (
'1' => 'Kennzeichen',
@@ -254,7 +421,7 @@ class Exportbuchhaltung
'31' => 'Anwendungs- information'
);
- $datev_buchungsstapel_definition = array (
+ $datev_buchungsstapel_definition = array (
'1' => 'Umsatz',
'2' => 'Soll-/Haben-Kennzeichen',
'3' => 'WKZ Umsatz',
@@ -387,7 +554,7 @@ class Exportbuchhaltung
}
else {
$kuerzel = $usernamearr[0][0].$usernamearr[1][0];
- }
+ }
$data['Kennzeichen'] = 'EXTF';
$data['Versionsnummer'] = '700';
@@ -424,12 +591,12 @@ class Exportbuchhaltung
// Start
$csv = "";
- // Output data header row
+ // Output data header row
$comma = "";
foreach ($datev_header_definition as $key => $value) {
if (!isset($data[$value])) {
$data[$value] = '';
- }
+ }
$csv .= $comma.'"'.$data[$value].'"';
$comma = ";";
}
@@ -438,104 +605,27 @@ class Exportbuchhaltung
// Output column captions
$comma = "";
foreach ($datev_buchungsstapel_definition as $key => $value) {
- $csv .= $comma.'"'.$value.'"';
+ $csv .= $comma.'"'.$value.'"';
$comma = ";";
}
$csv .= "\r\n";
- // Collate data and transform in RAM
- $typen = array(
- array(
- 'typ' => 'rechnung',
- 'subtable' => 'rechnung_position',
- 'kennzeichen' => 'S',
- 'kennzeichen_negativ' => 'H',
- 'field_belegnr' => 'b.belegnr',
- 'field_name' => 'b.name',
- 'field_date' => 'datum',
- 'field_auftrag' => 'MAKE_SET(3,b.auftrag,(SELECT auftrag.internet FROM auftrag WHERE auftrag.id = auftragid))',
- 'field_zahlweise' => 'CONCAT(UCASE(LEFT(b.zahlungsweise, 1)),SUBSTRING(b.zahlungsweise, 2))',
- 'field_kontonummer' => 'a.kundennummer_buchhaltung',
- 'field_kundennummer' => 'b.kundennummer',
- 'field_betrag_gesamt' => 'b.soll',
- 'field_betrag' => 'p.umsatz_brutto_gesamt',
- 'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\',\'storniert\')',
- 'Buchungstyp' => 'SR',
- 'do' => $rechnung
- ),
- array(
- 'typ' => 'gutschrift',
- 'subtable' => 'gutschrift_position',
- 'kennzeichen' => 'H',
- 'kennzeichen_negativ' => 'S',
- 'field_belegnr' => 'b.belegnr',
- 'field_name' => 'b.name',
- 'field_date' => 'datum',
- 'field_auftrag' => '\'\'',
- 'field_zahlweise' => '\'\'',
- 'field_kontonummer' => 'a.kundennummer_buchhaltung',
- 'field_kundennummer' => 'b.kundennummer',
- 'field_betrag_gesamt' => 'b.soll',
- 'field_betrag' => 'p.umsatz_brutto_gesamt',
- 'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\')',
- 'Buchungstyp' => '',
- 'do' => $gutschrift
- ),
- array(
- 'typ' => 'verbindlichkeit',
- 'subtable' => 'verbindlichkeit_position',
- 'kennzeichen' => 'H',
- 'kennzeichen_negativ' => 'S',
- 'field_belegnr' => 'b.rechnung',
- 'field_name' => 'a.name',
- 'field_date' => 'rechnungsdatum',
- 'field_auftrag' => 'b.auftrag',
- 'field_zahlweise' => '\'\'',
- 'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
- 'field_kundennummer' => 'a.lieferantennummer',
- 'field_betrag_gesamt' => 'b.betrag',
- 'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
- 'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
- 'condition_where' => ' AND b.status IN (\'freigegeben\')',
- 'Buchungstyp' => '',
- 'do' => $verbindlichkeit
- ),
- array(
- 'typ' => 'lieferantengutschrift',
- 'subtable' => 'lieferantengutschrift_position',
- 'kennzeichen' => 'S',
- 'kennzeichen_negativ' => 'H',
- 'field_belegnr' => 'b.rechnung',
- 'field_name' => 'a.name',
- 'field_date' => 'rechnungsdatum',
- 'field_auftrag' => '\'\'',
- 'field_zahlweise' => '\'\'',
- 'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
- 'field_kundennummer' => 'a.lieferantennummer',
- 'field_betrag_gesamt' => 'b.betrag',
- 'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
- 'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
- 'condition_where' => ' AND b.status IN (\'freigegeben\')',
- 'Buchungstyp' => '',
- 'do' => $lieferantengutschrift
- )
- );
-
- foreach ($typen as $typ) {
+ // Collate data and transform in RAM
+ $typen = $this->typen($rechnung, $gutschrift, $verbindlichkeit, $lieferantengutschrift);
+ foreach ($typen as $typ) {
if (!$typ['do']) {
continue;
}
-
if (!empty($typ['field_gegenkonto'])) {
$sql_gegenkonto = $typ['field_gegenkonto'];
- } else
+ } else
{
$sql_gegenkonto = "NULL";
}
-
- $sql = "SELECT
+
+ $sql = "SELECT
".$typ['typ']." id,
".$typ['field_belegnr']." as belegnr,
".$typ['field_auftrag']." as auftrag,
@@ -550,18 +640,18 @@ class Exportbuchhaltung
ROUND(".$typ['field_betrag'].",2) as betrag,
".$sql_gegenkonto." as gegenkonto,
b.waehrung as pos_waehrung
- FROM
- ".$typ['typ']." b
- LEFT JOIN
- ".$typ['subtable']." p
- ON
- b.id = p.".$typ['typ']."
- INNER JOIN
- adresse a ON a.id = b.adresse
- WHERE
- b.".$typ['field_date']." BETWEEN '".date_format($von,"Y-m-d")."' AND '".date_format($bis,"Y-m-d")."' AND (b.projekt=$projekt OR $projekt=0)".$typ['condition_where'];
+ FROM
+ ".$typ['typ']." b
+ LEFT JOIN
+ ".$typ['subtable']." p
+ ON
+ b.id = p.".$typ['typ']."
+ INNER JOIN
+ adresse a ON a.id = b.adresse
+ WHERE
+ b.".$typ['field_date']." BETWEEN '".date_format($von,"Y-m-d")."' AND '".date_format($bis,"Y-m-d")."' AND (b.projekt=$projekt OR $projekt=0)".$typ['condition_where'];
- // Check consistency of positions
+ // Check consistency of positions
if (!$diffignore) {
$sql_check = "SELECT *
FROM
@@ -581,52 +671,52 @@ class Exportbuchhaltung
GROUP BY
id
) summen
- WHERE betrag_gesamt <> betrag_summe OR betrag_summe IS NULL";
-
+ WHERE betrag_gesamt <> betrag_summe OR betrag_summe IS NULL";
+
$result = $this->app->DB->SelectArr($sql_check);
- if (!empty($result)) {
-
- if (!$sachkonto_differences) {
+ if (!empty($result)) {
+
+ if (!$sachkonto_differences) {
$e = new ConsistencyException(ucfirst($typ['typ']),$result);
throw $e;
} else {
- // Create differences entries
+ // Create differences entries
foreach ($result as $row) {
-
+
$posid = $row['pos_id'];
$tmpsteuersatz = 0;
$tmpsteuertext = '';
$erloes = '';
$result = array();
- $this->app->erp->GetSteuerPosition($typ['typ'], $posid, $tmpsteuersatz, $tmpsteuertext, $erloes);
-
- $data = array();
-
- $difference = $row['betrag_gesamt']-$row['betrag_summe'];
-
+ $this->app->erp->GetSteuerPosition($typ['typ'], $posid, $tmpsteuersatz, $tmpsteuertext, $erloes);
+
+ $data = array();
+
+ $difference = $row['betrag_gesamt']-$row['betrag_summe'];
+
$data['Umsatz'] = number_format(abs($difference), 2, ',', ''); // obligatory
$data['EU-Steuersatz (Bestimmung)'] = 0;
$data['WKZ Umsatz'] = $row['waehrung'];
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,36);
$data['Konto'] = $row['kundennummer'];
- $data['Soll-/Haben-Kennzeichen'] = ($difference < 0)?'S':'H'; // obligatory
-
- $data['Gegenkonto (ohne BU-Schlüssel)'] = $sachkonto_differences; // obligatory
-
- $data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory
+ $data['Soll-/Haben-Kennzeichen'] = ($difference < 0)?'S':'H'; // obligatory
+
+ $data['Gegenkonto (ohne BU-Schlüssel)'] = $sachkonto_differences; // obligatory
+
+ $data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory
$data['Buchungstext'] = "Differenz";
$data['EU-Mitgliedstaat u. UStID (Bestimmung)'] = $row['ustid'];
$data['Auftragsnummer'] = $row['auftrag'];
$data['Zahlweise'] = $row['zahlweise'];
$csv .= $this->create_line($datev_buchungsstapel_definition,$data);
- }
- }
+ }
+ }
}
- } // diffignore
+ } // diffignore
// Query position data
- $arr = $this->app->DB->Query($sql);
- while ($row = $this->app->DB->Fetch_Assoc($arr)) {
+ $arr = $this->app->DB->Query($sql);
+ while ($row = $this->app->DB->Fetch_Assoc($arr)) {
//print_r($row);
@@ -635,7 +725,7 @@ class Exportbuchhaltung
$tmpsteuertext = '';
$erloes = '';
$result = array();
- $this->app->erp->GetSteuerPosition($typ['typ'], $posid, $tmpsteuersatz, $tmpsteuertext, $erloes);
+ $this->app->erp->GetSteuerPosition($typ['typ'], $posid, $tmpsteuersatz, $tmpsteuertext, $erloes);
$data = array();
@@ -644,7 +734,7 @@ class Exportbuchhaltung
$data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen']; // obligatory
} else if ($row['betrag'] < 0) {
$data['Umsatz'] = number_format(-$row['betrag'], 2, ',', ''); // obligatory
- $data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen_negativ']; // obligatory
+ $data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen_negativ']; // obligatory
} else {
continue;
}
@@ -653,23 +743,23 @@ class Exportbuchhaltung
$data['WKZ Umsatz'] = $row['pos_waehrung'];
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,36);
$data['Konto'] = $row['kundennummer']; // obligatory
-
+
if (!empty($typ['field_gegenkonto'])) {
- $data['Gegenkonto (ohne BU-Schlüssel)'] = $row['gegenkonto']; // obligatory
+ $data['Gegenkonto (ohne BU-Schlüssel)'] = $row['gegenkonto']; // obligatory
} else {
$data['Gegenkonto (ohne BU-Schlüssel)'] = $erloes; // obligatory
}
-
+
$data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory
$data['Buchungstext'] = mb_strimwidth($row['name'],0,60);
$data['EU-Mitgliedstaat u. UStID (Bestimmung)'] = $row['ustid'];
-
+
$data['Auftragsnummer'] = ($row['auftrag']!=0)?$row['auftrag']:'';
$data['Zahlweise'] = $row['zahlweise'];
-
+
$csv .= $this->create_line($datev_buchungsstapel_definition,$data);
}
- }
+ }
$csv .= '"0";"S";"EUR";"0";"";"";"1234";"1370";"";"101";"";"";"";"Testbuchung";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"0";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""'; // Testbuchung
@@ -685,22 +775,22 @@ class Exportbuchhaltung
}
return($csv);
- }
-
- function create_line($definition, $data) : string {
+ }
+
+ function create_line($definition, $data) : string {
$csv = "";
- $comma = "";
+ $comma = "";
foreach ($definition as $key => $value) {
if (!isset($data[$value])) {
$data[$value] = '';
- }
+ }
$csv .= $comma.'"'.$data[$value].'"';
$comma = ";";
}
- $csv .= "\r\n";
- return($csv);
+ $csv .= "\r\n";
+ return($csv);
}
-
+
}
/*