X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDATEV.pm;h=eacda097db0b474970d6b5930caf199bb56ec11a;hb=4555e1300f7ddd26d4548156360f4988d5b835ff;hp=5da44499fb64e3a4c02d7674c76d21a07292f595;hpb=bf3b69660fe6904f483b1720c9dc492df160c761;p=kivitendo-erp.git diff --git a/SL/DATEV.pm b/SL/DATEV.pm index 5da44499f..eacda097d 100644 --- a/SL/DATEV.pm +++ b/SL/DATEV.pm @@ -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(); @@ -402,7 +405,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; @@ -482,13 +485,14 @@ sub _get_transactions { $absumsatz += -1 * $new_trans{'amount'}; } else { - my $unrounded = $trans->[$j]->{'amount'} * (1 + $tax_rate) * -1; # + $rounding_error; + my $unrounded = $trans->[$j]->{'amount'} * (1 + $tax_rate) * -1 + $rounding_error; my $rounded = $form->round_amount($unrounded, 2); - $rounding_error += $unrounded - $rounded; + + $rounding_error = $unrounded - $rounded; $new_trans{'amount'} = $rounded; - $new_trans{'umsatz'} = abs($form->round_amount(($trans->[$j]->{'amount'} * (1 + $tax_rate)), 2)) * $ml; - $trans->[$j]->{'umsatz'} = abs($form->round_amount(($trans->[$j]->{'amount'} * (1 + $tax_rate)), 2)) * $ml; - $absumsatz += $form->round_amount($trans->[$j]->{'amount'} + $trans->[$j]->{'amount'} * $tax_rate, 2); + $new_trans{'umsatz'} = abs($rounded) * $ml; + $trans->[$j]->{'umsatz'} = $new_trans{umsatz}; + $absumsatz -= $rounded; } push @{ $form->{DATEV} }, [ \%new_trans, $trans->[$j] ]; @@ -534,8 +538,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; } }