X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FAP.pm;h=d399b7c1bff4365537f0f9861070320f86acf766;hb=43816cb7289ee9225c3bb229d077bd87a75562cc;hp=a02d6ffd459a90678d1031c6fd12282b37765026;hpb=caaa17becdae3615d24ae3e36f70eebe0ede2362;p=kivitendo-erp.git diff --git a/SL/AP.pm b/SL/AP.pm index a02d6ffd4..d399b7c1b 100644 --- a/SL/AP.pm +++ b/SL/AP.pm @@ -428,10 +428,6 @@ sub _post_transaction { sub _reverse_charge { my ($self, $myconfig, $form) = @_; - # check taxkey settings or return - my $tax = SL::DB::Manager::Tax->get_first( where => [taxkey => 94 ]); - return unless ref $tax eq 'SL::DB::Tax'; - # delete previous bookings, if they exists (repost) my $ap_gl = SL::DB::Manager::ApGl->get_first(where => [ ap_id => $form->{id} ]); my $gl_id = ref $ap_gl eq 'SL::DB::ApGl' ? $ap_gl->gl_id : undef; @@ -440,20 +436,22 @@ sub _reverse_charge { SL::DB::Manager::ApGl-> delete_all(where => [ ap_id => $form->{id} ]) if $gl_id; SL::DB::Manager::RecordLink-> delete_all(where => [ from_table => 'ap', to_table => 'gl', from_id => $form->{id} ]); - # gl booking - my ($credit, $debit); - $credit = SL::DB::Manager::Chart->find_by(id => $tax->chart_id); - $debit = SL::DB::Manager::Chart->find_by(id => $tax->reverse_charge_chart_id); - - croak("No such Chart ID" . $tax->chart_id) unless ref $credit eq 'SL::DB::Chart'; - croak("No such Chart ID" . $tax->reverse_chart_id) unless ref $debit eq 'SL::DB::Chart'; - my ($i, $current_transaction); for $i (1 .. $form->{rowcount}) { - next unless $form->{"taxkey_$i"} == 94; - my ($tmpnetamount, $tmptaxamount) = $form->calculate_tax($form->{"amount_$i"}, 0.19, $form->{taxincluded}, 2); + my $tax = SL::DB::Manager::Tax->get_first( where => [id => $form->{"tax_id_$i"}, '!reverse_charge_chart_id' => undef ]); + next unless ref $tax eq 'SL::DB::Tax'; + + # gl booking + my ($credit, $debit); + $credit = SL::DB::Manager::Chart->find_by(id => $tax->chart_id); + $debit = SL::DB::Manager::Chart->find_by(id => $tax->reverse_charge_chart_id); + + croak("No such Chart ID" . $tax->chart_id) unless ref $credit eq 'SL::DB::Chart'; + croak("No such Chart ID" . $tax->reverse_chart_id) unless ref $debit eq 'SL::DB::Chart'; + + my ($tmpnetamount, $tmptaxamount) = $form->calculate_tax($form->{"amount_$i"}, $tax->rate, $form->{taxincluded}, 2); $current_transaction = SL::DB::GLTransaction->new( employee_id => $form->{employee_id}, transdate => $form->{transdate}, @@ -463,13 +461,15 @@ sub _reverse_charge { imported => 0, # not imported taxincluded => 0, )->add_chart_booking( - chart => $tmptaxamount < 0 ? $credit : $debit, - credit => abs($tmptaxamount), + chart => $tmptaxamount > 0 ? $debit : $credit, + debit => abs($tmptaxamount), source => "Reverse Charge for " . $form->{invnumber}, + tax_id => 0, )->add_chart_booking( - chart => $tmptaxamount < 0 ? $debit : $credit, - debit => abs($tmptaxamount), + chart => $tmptaxamount > 0 ? $credit : $debit, + credit => abs($tmptaxamount), source => "Reverse Charge for " . $form->{invnumber}, + tax_id => 0, )->post; # add a stable link from ap to gl my %props_gl = ( @@ -618,6 +618,10 @@ sub ap_transactions { $where .= " AND a.ordnumber ILIKE ?"; push(@values, like($form->{ordnumber})); } + if ($form->{taxzone_id}) { + $where .= " AND a.taxzone_id = ?"; + push(@values, $form->{taxzone_id}); + } if ($form->{transaction_description}) { $where .= " AND a.transaction_description ILIKE ?"; push(@values, like($form->{transaction_description})); @@ -698,7 +702,7 @@ SQL my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC'; my $sortorder = join(', ', map { "$_ $sortdir" } @a); - if (grep({ $_ eq $form->{sort} } qw(transdate id invnumber ordnumber name netamount tax amount paid datepaid due duedate notes employee transaction_description direct_debit department))) { + if (grep({ $_ eq $form->{sort} } qw(transdate id invnumber ordnumber name netamount tax amount paid datepaid due duedate notes employee transaction_description direct_debit department taxzone))) { $sortorder = $form->{sort} . " $sortdir"; }