From 226a2dffdfb9a4719ae51203851531e450f3c36f Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Fri, 10 Mar 2023 10:23:32 +0100
Subject: [PATCH] Export Buchhaltung added consistency check
---
www/pages/exportbuchhaltung.php | 81 +++++++++++++++++++++++++++++----
1 file changed, 72 insertions(+), 9 deletions(-)
diff --git a/www/pages/exportbuchhaltung.php b/www/pages/exportbuchhaltung.php
index 01af6fe3..10f34f49 100644
--- a/www/pages/exportbuchhaltung.php
+++ b/www/pages/exportbuchhaltung.php
@@ -19,6 +19,26 @@
?>
_data = $data;
+ parent::__construct($message);
+ }
+
+ public function getData()
+ {
+ return $this->_data;
+ }
+}
+
class Exportbuchhaltung
{
/** @var Application $app */
@@ -130,12 +150,30 @@ class Exportbuchhaltung
if ($dataok) {
$filename = "EXTF_".date('Ymd') . "_Buchungsstapel_DATEV_export.csv";
- $csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename);
- header("Content-Disposition: attachment; filename=" . $filename);
- header("Pragma: no-cache");
- header("Expires: 0");
- echo($csv);
- $this->app->ExitXentral();
+ try {
+ $csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename);
+ header("Content-Disposition: attachment; filename=" . $filename);
+ 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).")
";
+ $count++;
+ if ($count == 10) {
+ $msg .= "...";
+ break;
+ }
+ }
+ $msg .= "
";
+ }
}
}
//---------- DOWNLOAD HERE
@@ -161,6 +199,7 @@ class Exportbuchhaltung
/*
* Create DATEV Buchhungsstapel
+ * @throws ConsistencyException with string (list of items) if consistency check fails
*/
function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv') : string {
@@ -400,6 +439,7 @@ class Exportbuchhaltung
'field_auftrag' => 'b.auftrag',
'field_kontonummer' => 'a.kundennummer_buchhaltung',
'field_kundennummer' => 'b.kundennummer',
+ 'field_betrag_gesamt' => 'b.soll',
'field_betrag' => 'p.umsatz_brutto_gesamt',
'field_gegenkonto' => '\'\'',
'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\',\'storniert\')',
@@ -417,6 +457,7 @@ class Exportbuchhaltung
'field_auftrag' => '\'\'',
'field_kontonummer' => 'a.kundennummer_buchhaltung',
'field_kundennummer' => 'b.kundennummer',
+ 'field_betrag_gesamt' => 'b.soll',
'field_betrag' => 'p.umsatz_brutto_gesamt',
'field_gegenkonto' => '\'\'',
'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\')',
@@ -434,6 +475,7 @@ class Exportbuchhaltung
'field_auftrag' => 'b.auftrag',
'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
'field_kundennummer' => 'a.lieferantennummer',
+ 'field_betrag_gesamt' => 'b.betrag',
'field_betrag' => 'p.betrag',
'field_gegenkonto' => 'gegenkonto',
'condition_where' => '',
@@ -447,7 +489,7 @@ class Exportbuchhaltung
if (!$typ['do']) {
continue;
}
-
+
$sql = "SELECT
".$typ['field_belegnr']." as belegnr,
".$typ['field_auftrag']." as auftrag,
@@ -456,6 +498,7 @@ class Exportbuchhaltung
b.ustid,
b.".$typ['field_date']." as datum,
p.id as pos_id,
+ ".$typ['field_betrag_gesamt']." as betrag_gesamt,
".$typ['field_betrag']." as betrag,
".$typ['field_gegenkonto']." as gegenkonto,
p.waehrung as pos_waehrung
@@ -470,10 +513,30 @@ class Exportbuchhaltung
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'];
-// echo($sql);
+ // Check consistency of positions
+ $sql_check = "SELECT *
+ FROM
+ (
+ SELECT
+ belegnr,
+ betrag_gesamt,
+ ROUND(SUM(betrag),2) AS betrag_summe
+ FROM
+ (".$sql.") posten
+ GROUP BY
+ belegnr
+ ) summen
+ WHERE betrag_gesamt <> betrag_summe";
+
+ $result = $this->app->DB->SelectArr($sql_check);
+ if (!empty($result)) {
+ $e = new ConsistencyException(ucfirst($typ['typ']),$result);
+ throw $e;
+ }
+
+ // Query position data
$arr = $this->app->DB->Query($sql);
-
while ($row = $this->app->DB->Fetch_Assoc($arr)) {
// print_r($row);