Kalkulator in Einkaufsrechnungen noch nicht einbinden
[kivitendo-erp.git] / SL / DATEV.pm
index 56c3e82..508ed95 100644 (file)
@@ -26,7 +26,8 @@
 
 package DATEV;
 
-use List::Util qw(max);
+use utf8;
+use strict;
 
 use SL::DBUtils;
 use SL::DATEV::KNEFile;
@@ -34,10 +35,9 @@ use SL::Taxkeys;
 
 use Data::Dumper;
 use File::Path;
+use List::Util qw(max);
 use Time::HiRes qw(gettimeofday);
 
-use strict;
-
 sub _get_export_path {
   $main::lxdebug->enter_sub();
 
@@ -330,6 +330,9 @@ sub _get_transactions {
   my ($notsplitindex);
   my @errors   = ();
 
+  $form->{net_gross_differences}     = [];
+  $form->{sum_net_gross_differences} = 0;
+
   $fromto      =~ s/transdate/ac\.transdate/g;
 
   my $taxkeys  = Taxkeys->new();
@@ -383,6 +386,7 @@ sub _get_transactions {
        ORDER BY trans_id, acc_trans_id|;
 
   my $sth = prepare_execute_query($form, $dbh, $query);
+  $form->{DATEV} = [];
 
   my $counter = 0;
   while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
@@ -402,7 +406,7 @@ sub _get_transactions {
 
       if ($ref2->{trans_id} != $trans->[0]->{trans_id}) {
         $form->error("Unbalanced ledger! old trans_id " . $trans->[0]->{trans_id} . " new trans_id " . $ref2->{trans_id} . " count $count");
-        exit 1;
+        ::end_of_request();
       }
 
       push @{ $trans }, $ref2;
@@ -535,8 +539,13 @@ sub _get_transactions {
       $idx++;
     }
 
-    if (abs($absumsatz) >= 0.01) {
-      push @errors, "Datev-Export fehlgeschlagen! Bei Transaktion $trans->[0]->{trans_id} ($absumsatz, Rundungsfehler $rounding_error)\n";
+    $absumsatz = $form->round_amount($absumsatz, 2);
+    if (abs($absumsatz) >= (0.01 * (1 + scalar @taxed))) {
+      push @errors, "Datev-Export fehlgeschlagen! Bei Transaktion $trans->[0]->{trans_id} ($absumsatz)\n";
+
+    } elsif (abs($absumsatz) >= 0.01) {
+      push @{ $form->{net_gross_differences} }, $absumsatz;
+      $form->{sum_net_gross_differences} += $absumsatz;
     }
   }
 
@@ -768,14 +777,14 @@ sub kne_buchungsexport {
       my $taxkey         = 0;
       my $charttax       = 0;
       my ($haben, $soll);
-      my $iconv          = $main::locale->{iconv_iso8859};
-      my %umlaute = ($iconv->convert('ä') => 'ae',
-                     $iconv->convert('ö') => 'oe',
-                     $iconv->convert('ü') => 'ue',
-                     $iconv->convert('Ä') => 'Ae',
-                     $iconv->convert('Ö') => 'Oe',
-                     $iconv->convert('Ü') => 'Ue',
-                     $iconv->convert('ß') => 'sz');
+      my $iconv          = $::locale->{iconv_utf8};
+      my %umlaute = ($iconv->convert('ä') => 'ae',
+                     $iconv->convert('ö') => 'oe',
+                     $iconv->convert('ü') => 'ue',
+                     $iconv->convert('Ä') => 'Ae',
+                     $iconv->convert('Ö') => 'Oe',
+                     $iconv->convert('Ü') => 'Ue',
+                     $iconv->convert('ß') => 'sz');
       for (my $i = 0; $i < $trans_lines; $i++) {
         if ($trans_lines == 2) {
           if (abs($transaction->[$i]->{'amount'}) > abs($umsatz)) {