X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FHelper%2FPayment.pm;h=f8f156d26644cc343bdbf1b4b811b0ad5e4774a3;hb=053d0c377df96e552ae9bc28c1c1bded0fdfacac;hp=386d284e40ad9fd99dd7cae8302955a54b68d40f;hpb=f4ebee3d6dbd46e854fe54212ac66890c122b18a;p=kivitendo-erp.git diff --git a/SL/DB/Helper/Payment.pm b/SL/DB/Helper/Payment.pm index 386d284e4..f8f156d26 100644 --- a/SL/DB/Helper/Payment.pm +++ b/SL/DB/Helper/Payment.pm @@ -79,7 +79,7 @@ sub pay_invoice { # currency is either passed or use the invoice currency if it differs from the default currency # TODO remove my ($exchangerate,$currency); - if ($params{currency} || $params{currency_id} || $self->currency_id != $::instance_conf->get_currency_id) { + if ($params{currency} || $params{currency_id}) { if ($params{currency} || $params{currency_id} ) { # currency was specified $currency = SL::DB::Manager::Currency->find_by(name => $params{currency}) || SL::DB::Manager::Currency->find_by(id => $params{currency_id}); } else { # use invoice currency @@ -312,26 +312,44 @@ sub pay_invoice { ($netamount, $taxamount) = Form->calculate_tax($arap_amount, $tax->rate, 1, $roundplaces); # for debugging database set my $fullmatch = $netamount == $entry->{amount} ? '::netamount total true' : ''; + my $transfer_chart = $tax->taxkey == 2 ? SL::DB::Chart->new(id => $::instance_conf->get_advance_payment_taxable_7_id)->load + : $tax->taxkey == 3 ? SL::DB::Chart->new(id => $::instance_conf->get_advance_payment_taxable_19_id)->load + : undef; + die "No Transfer Chart for Advance Payment" unless ref $transfer_chart eq 'SL::DB::Chart'; + + my $arap_full_booking= SL::DB::AccTransaction->new(trans_id => $self->id, + chart_id => $clearing_chart->id, + chart_link => $clearing_chart->link, + amount => $arap_amount * -1, # full amount + transdate => $transdate_obj, + source => 'Automatic Tax Booking for Payment in Advance' . $fullmatch, + taxkey => 0, + tax_id => SL::DB::Manager::Tax->find_by(taxkey => 0)->id); + $arap_full_booking->save; + push @new_acc_ids, $arap_full_booking->acc_trans_id; + + my $arap_tax_booking= SL::DB::AccTransaction->new(trans_id => $self->id, + chart_id => $transfer_chart->id, + chart_link => $transfer_chart->link, + amount => _round($netamount), # full amount + transdate => $transdate_obj, + source => 'Automatic Tax Booking for Payment in Advance' . $fullmatch, + taxkey => $tax->taxkey, + tax_id => $tax->id); + $arap_tax_booking->save; + push @new_acc_ids, $arap_tax_booking->acc_trans_id; + my $tax_booking= SL::DB::AccTransaction->new(trans_id => $self->id, chart_id => $tax->chart_id, chart_link => $tax->chart->link, amount => _round($taxamount), transdate => $transdate_obj, source => 'Automatic Tax Booking for Payment in Advance' . $fullmatch, - taxkey => $tax->taxkey, - tax_id => $tax->id); - $tax_booking->save; - push @new_acc_ids, $tax_booking->acc_trans_id; - my $arap_tax_booking= SL::DB::AccTransaction->new(trans_id => $self->id, - chart_id => $clearing_chart->id, - chart_link => $clearing_chart->link, - amount => _round($taxamount * -1), - transdate => $transdate_obj, - source => 'Automatic Tax Booking for Payment in Advance' . $fullmatch, taxkey => 0, tax_id => SL::DB::Manager::Tax->find_by(taxkey => 0)->id); - $arap_tax_booking->save; - push @new_acc_ids, $arap_tax_booking->acc_trans_id; + + $tax_booking->save; + push @new_acc_ids, $tax_booking->acc_trans_id; } } $fx_gain_loss_amount *= -1 if $self->is_sales;