- && ($i->[$j]->{'chart_id'} eq "")
- && ( $i->[$j]->{'taxkey'} eq ""
- || $i->[$j]->{'taxkey'} eq "0"
- || $i->[$j]->{'taxkey'} eq "1"
- || $i->[$j]->{'taxkey'} eq "10"
- || $i->[$j]->{'taxkey'} eq "11")) {
- my %blubb = {};
- map({ $blubb{$_} = $i->[$notsplitindex]->{$_}; } keys(%{ $i->[$notsplitindex] }));
-
- $absumsatz += $i->[$j]->{'amount'};
- $blubb{'amount'} = $i->[$j]->{'amount'} * (-1);
- $blubb{'umsatz'} = abs($i->[$j]->{'amount'}) * $ml;
- $i->[$j]->{'umsatz'} = abs($i->[$j]->{'amount'}) * $ml;
-
- push @{ $splits[$g] }, \%blubb; #$i->[$notsplitindex];
- push @{ $splits[$g] }, $i->[$j];
- push @{ $form->{DATEV} }, \@{ $splits[$g] };
-
- $g++;
-
- } elsif (($j != $notsplitindex) && ($i->[$j]->{'chart_id'} eq "")) {
- $absumsatz += ($i->[$j]->{'amount'} * (1 + $taxes{ $taxid_taxkeys{$i->[$j]->{'taxkey'}} }));
-
- my %blubb = {};
- map({ $blubb{$_} = $i->[$notsplitindex]->{$_}; } keys(%{ $i->[$notsplitindex] }));
-
- $test = 1 + $taxes{ $taxid_taxkeys{$i->[$j]->{'taxkey'}} };
- $blubb{'amount'} = $form->round_amount(($i->[$j]->{'amount'} * $test * -1), 2);
- $blubb{'umsatz'} = abs($form->round_amount(($i->[$j]->{'amount'} * $test), 2)) * $ml;
- $i->[$j]->{'umsatz'} = abs($form->round_amount(($i->[$j]->{'amount'} * $test), 2)) * $ml;
-
- push @{ $splits[$g] }, \%blubb;
- push @{ $splits[$g] }, $i->[$j];
- push @{ $form->{DATEV} }, \@{ $splits[$g] };
- $g++;
+ && !$trans->[$j]->{is_tax}
+ && ( $trans->[$j]->{'taxkey'} eq ""
+ || $trans->[$j]->{'taxkey'} eq "0"
+ || $trans->[$j]->{'taxkey'} eq "1"
+ || $trans->[$j]->{'taxkey'} eq "10"
+ || $trans->[$j]->{'taxkey'} eq "11")) {
+ my %new_trans = ();
+ map { $new_trans{$_} = $trans->[$notsplitindex]->{$_}; } keys %{ $trans->[$notsplitindex] };
+
+ $absumsatz += $trans->[$j]->{'amount'};
+ $new_trans{'amount'} = $trans->[$j]->{'amount'} * (-1);
+ $new_trans{'umsatz'} = abs($trans->[$j]->{'amount'}) * $ml;
+ $trans->[$j]->{'umsatz'} = abs($trans->[$j]->{'amount'}) * $ml;
+
+ push @{ $form->{DATEV} }, [ \%new_trans, $trans->[$j] ];
+
+ } elsif (($j != $notsplitindex) && !$trans->[$j]->{is_tax}) {
+ my %tax_info = $taxkeys->get_full_tax_info('transdate' => $trans->[$j]->{transdate});
+
+ my %new_trans = ();
+ map { $new_trans{$_} = $trans->[$notsplitindex]->{$_}; } keys %{ $trans->[$notsplitindex] };
+
+ my $tax_rate = $tax_info{taxkeys}->{ $trans->[$j]->{'taxkey'} }->{taxrate};
+ $new_trans{'net_amount'} = $trans->[$j]->{'amount'} * -1;
+ $new_trans{'tax_rate'} = 1 + $tax_rate;
+
+ if (!$trans->[$j]->{'invoice'}) {
+ $new_trans{'amount'} = $form->round_amount(-1 * ($trans->[$j]->{amount} + $trans->[$j]->{tax_amount}), 2);
+ $new_trans{'umsatz'} = abs($new_trans{'amount'}) * $ml;
+ $trans->[$j]->{'umsatz'} = $new_trans{'umsatz'};
+ $absumsatz += -1 * $new_trans{'amount'};
+
+ } else {
+ my $unrounded = $trans->[$j]->{'amount'} * (1 + $tax_rate) * -1 + $rounding_error;
+ my $rounded = $form->round_amount($unrounded, 2);
+
+ $rounding_error = $unrounded - $rounded;
+ $new_trans{'amount'} = $rounded;
+ $new_trans{'umsatz'} = abs($rounded) * $ml;
+ $trans->[$j]->{'umsatz'} = $new_trans{umsatz};
+ $absumsatz -= $rounded;
+ }
+
+ push @{ $form->{DATEV} }, [ \%new_trans, $trans->[$j] ];
+ push @taxed, $form->{DATEV}->[-1];