X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FUSTVA.pm;h=ee2d21f78252815877764987ca08a37feaaca98e;hb=4c3c1d8ca30914dde03f68b816526015e91360bb;hp=b4dc32b3e83b72a85b907cb716a0eb9cf89099a1;hpb=2567740ec63137b5a51542d11ea69428d17b3783;p=kivitendo-erp.git diff --git a/SL/USTVA.pm b/SL/USTVA.pm index b4dc32b3e..ee2d21f78 100644 --- a/SL/USTVA.pm +++ b/SL/USTVA.pm @@ -26,12 +26,15 @@ package USTVA; +use Carp; +use Data::Dumper; use List::Util qw(first); use SL::DB; use SL::DBUtils; use SL::DB::Default; use SL::DB::Finanzamt; +use SL::Locale::String qw(t8); use utf8; use strict; @@ -523,6 +526,9 @@ sub ustva { $form->{coa} = $::instance_conf->get_coa; + unless ($form->{coa} eq 'Germany-DATEV-SKR03EU' or $form->{coa} eq 'Germany-DATEV-SKR04EU') { + croak t8("Advance turnover tax return only valid for SKR03 or SKR04"); + } my @category_cent = USTVA->report_variables({ myconfig => $myconfig, form => $form, @@ -687,7 +693,7 @@ sub get_accounts_ustva { SUM( ac.amount * -- Bezahlt / Rechnungssumme ( - SELECT SUM(acc.amount), t.rate, c.accno + SELECT SUM(acc.amount) FROM acc_trans acc INNER JOIN chart c ON (acc.chart_id = c.id AND c.link like '%AR_paid%') @@ -695,13 +701,12 @@ sub get_accounts_ustva { 1=1 $ARwhere AND acc.trans_id = ac.trans_id - ) - / + ) / ( SELECT amount FROM ar WHERE id = ac.trans_id ) ) AS amount, - tk.pos_ustva + tk.pos_ustva, t.rate, c.accno FROM acc_trans ac LEFT JOIN chart c ON (c.id = ac.chart_id) LEFT JOIN ar ON (ar.id = ac.trans_id) @@ -834,10 +839,6 @@ sub get_accounts_ustva { |; - my @accno; - my $accno; - my $ref; - # Show all $query in Debuglevel LXDebug::QUERY my $callingdetails = (caller (0))[3]; $main::lxdebug->message(LXDebug->QUERY(), "$callingdetails \$query=\n $query"); @@ -846,41 +847,52 @@ sub get_accounts_ustva { $sth->execute || $form->dberror($query); # ugly, but we need to use static accnos - my $accno_five = 3803; # SKR04 - my $accno_sixteen = 3805; # SKR04 + my ($accno_five, $accno_sixteen, $corr); + if ($form->{coa} eq 'Germany-DATEV-SKR03EU') { - $accno_five = 1773; - $accno_sixteen = 1775; - } + $accno_five = 1773; + $accno_sixteen = 1775; + } elsif (($form->{coa} eq 'Germany-DATEV-SKR04EU')) { + $accno_five = 3803; # SKR04 + $accno_sixteen = 3805; # SKR04 + } else {die "wrong call"; } + while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { next unless $ref->{$category}; + $corr = 0; $ref->{amount} *= -1; - $form->{ $ref->{$category} } += $ref->{amount}; - - # umsatzsteuer 16% pos 35 + # USTVA Pos 35 if ($ref->{pos_ustva} eq '35') { if ($ref->{rate} == 0.16) { $form->{"pos_ustva_81b_kivi"} += $ref->{amount}; } elsif ($ref->{rate} == 0.05) { $form->{"pos_ustva_86b_kivi"} += $ref->{amount}; - } else {die ("No valid tax rate for pos 35"); } + } elsif ($ref->{rate} == 0.19) { + # pos_ustva says 16, but rate says 19 + # (pos_ustva should be tax dependent and not taxkeys dependent) + # correction hotfix for this case: + # bookings exists with 19% -> + # move 19% bookings to the 19% position + # Dont rely on dates of taxkeys + $corr = 1; + $form->{"81"} += $ref->{amount}; + } elsif ($ref->{rate} == 0.07) { + # pos_ustva says 5, but rate says 7 + # see comment above: + # Dont rely on dates of taxkeys + $corr = 1; + $form->{"86"} += $ref->{amount}; + } else {die ("No valid tax rate for pos 35" . Dumper($ref)); } } + # USTVA Pos 36 (Steuerkonten) if ($ref->{pos_ustva} eq '36') { - if ($ref->{accno} eq $accno_sixteen) { + if ($ref->{accno} =~ /^$accno_sixteen/) { $form->{"pos_ustva_811b_kivi"} += $ref->{amount}; - } elsif ($ref->{accno} eq $accno_five) { + } elsif ($ref->{accno} =~ /^$accno_five/) { $form->{"pos_ustva_861b_kivi"} += $ref->{amount}; - } else { die "No valid accno for pos 36"; } + } else { die ("No valid accno for pos 36" . Dumper($ref)); } } - # umsatzsteuer 5% temp - #if ($ref->{rate} == 0.05 && $ref->{pos_ustva} ne '66') { - # if ($ref->{pos_ustva} eq '35') { - # $form->{"pos_ustva_86b_kivi"} += $ref->{amount}; - # } elsif ($ref->{pos_ustva} eq '36') { - # $form->{"pos_ustva_861b_kivi"} += $ref->{amount}; - # } else { die "Kein pos_ustva Eintrag!" . Dumper($ref); } - #} - + $form->{ $ref->{$category} } += $ref->{amount} unless $corr; } $sth->finish;