X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FAP.pm;h=d399b7c1bff4365537f0f9861070320f86acf766;hb=43816cb7289ee9225c3bb229d077bd87a75562cc;hp=8ca5634cf5d60466dc2050378fbd7b971b9b5025;hpb=c7172f34ff94490977366ca8cad6c057ddc3da91;p=kivitendo-erp.git diff --git a/SL/AP.pm b/SL/AP.pm index 8ca5634cf..d399b7c1b 100644 --- a/SL/AP.pm +++ b/SL/AP.pm @@ -142,7 +142,7 @@ sub _post_transaction { transdate = ?, ordnumber = ?, vendor_id = ?, taxincluded = ?, amount = ?, duedate = ?, deliverydate = ?, tax_point = ?, paid = ?, netamount = ?, currency_id = (SELECT id FROM currencies WHERE name = ?), notes = ?, department_id = ?, storno = ?, storno_id = ?, - globalproject_id = ?, direct_debit = ?, payment_id = ? + globalproject_id = ?, direct_debit = ?, payment_id = ?, transaction_description = ? WHERE id = ?|; @values = ($form->{invnumber}, conv_date($form->{transdate}), $form->{ordnumber}, conv_i($form->{vendor_id}), @@ -153,7 +153,7 @@ sub _post_transaction { conv_i($form->{department_id}), $form->{storno}, $form->{storno_id}, conv_i($form->{globalproject_id}), $form->{direct_debit} ? 't' : 'f', - conv_i($form->{payment_id}), + conv_i($form->{payment_id}), $form->{transaction_description}, $form->{id}); do_query($form, $dbh, $query, @values); @@ -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"; }