# 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
push @new_acc_ids, $arap_booking->acc_trans_id;
# hook for invoice_for_advance_payment DATEV always pairs, acc_trans_id has to be higher than arap_booking ;-)
- if ($self->type eq 'invoice_for_advance_payment') {
+ if ($self->invoice_type eq 'invoice_for_advance_payment') {
my $clearing_chart = SL::DB::Chart->new(id => $::instance_conf->get_advance_payment_clearing_chart_id)->load;
die "No Clearing Chart for Advance Payment" unless ref $clearing_chart eq 'SL::DB::Chart';
($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;
};
push @skonto_charts, $rec;
- };
- };
+ }
+ }
# if the rounded sum of all rounding_errors reaches 0.01 this sum is
# subtracted from the largest skonto_amount