Revision 5436e964
Von Jan Büren vor fast 3 Jahren hinzugefügt
SL/DB/Helper/Payment.pm | ||
---|---|---|
77 | 77 |
}; |
78 | 78 |
|
79 | 79 |
# currency is either passed or use the invoice currency if it differs from the default currency |
80 |
# TODO remove |
|
80 | 81 |
my ($exchangerate,$currency); |
81 | 82 |
if ($params{currency} || $params{currency_id} || $self->currency_id != $::instance_conf->get_currency_id) { |
82 | 83 |
if ($params{currency} || $params{currency_id} ) { # currency was specified |
... | ... | |
290 | 291 |
$arap_booking->save; |
291 | 292 |
push @new_acc_ids, $arap_booking->acc_trans_id; |
292 | 293 |
|
294 |
# hook for invoice_for_advance_payment DATEV always pairs, acc_trans_id has to be higher than arap_booking ;-) |
|
295 |
if ($self->type eq 'invoice_for_advance_payment') { |
|
296 |
my $clearing_chart = SL::DB::Chart->new(id => $::instance_conf->get_advance_payment_clearing_chart_id)->load; |
|
297 |
die "No Clearing Chart for Advance Payment" unless ref $clearing_chart eq 'SL::DB::Chart'; |
|
298 |
|
|
299 |
# what does ptc say |
|
300 |
my %inv_calc = $self->calculate_prices_and_taxes(); |
|
301 |
my @trans_ids = keys %{ $inv_calc{amounts} }; |
|
302 |
die "Invalid state for advance payment more than one trans_id" if (scalar @trans_ids > 1); |
|
303 |
my $entry = delete $inv_calc{amounts}{$trans_ids[0]}; |
|
304 |
my $tax; |
|
305 |
if ($entry->{tax_id}) { |
|
306 |
$tax = SL::DB::Manager::Tax->find_by(id => $entry->{tax_id}); # || die "Can't find tax with id " . $entry->{tax_id}; |
|
307 |
} |
|
308 |
if ($tax and $tax->rate != 0) { |
|
309 |
my ($netamount, $taxamount); |
|
310 |
my $roundplaces = 2; |
|
311 |
# we dont have a clue about skonto, that's why we use $arap_amount as taxincluded |
|
312 |
($netamount, $taxamount) = Form->calculate_tax($arap_amount, $tax->rate, 1, $roundplaces); |
|
313 |
# for debugging database set |
|
314 |
my $fullmatch = $netamount == $entry->{amount} ? '::netamount total true' : ''; |
|
315 |
my $tax_booking= SL::DB::AccTransaction->new(trans_id => $self->id, |
|
316 |
chart_id => $tax->chart_id, |
|
317 |
chart_link => $tax->chart->link, |
|
318 |
amount => _round($taxamount), |
|
319 |
transdate => $transdate_obj, |
|
320 |
source => 'Automatic Tax Booking for Payment in Advance' . $fullmatch, |
|
321 |
taxkey => $tax->taxkey, |
|
322 |
tax_id => $tax->id); |
|
323 |
$tax_booking->save; |
|
324 |
push @new_acc_ids, $tax_booking->acc_trans_id; |
|
325 |
my $arap_tax_booking= SL::DB::AccTransaction->new(trans_id => $self->id, |
|
326 |
chart_id => $clearing_chart->id, |
|
327 |
chart_link => $clearing_chart->link, |
|
328 |
amount => _round($taxamount * -1), |
|
329 |
transdate => $transdate_obj, |
|
330 |
source => 'Automatic Tax Booking for Payment in Advance' . $fullmatch, |
|
331 |
taxkey => 0, |
|
332 |
tax_id => SL::DB::Manager::Tax->find_by(taxkey => 0)->id); |
|
333 |
$arap_tax_booking->save; |
|
334 |
push @new_acc_ids, $arap_tax_booking->acc_trans_id; |
|
335 |
} |
|
336 |
} |
|
293 | 337 |
$fx_gain_loss_amount *= -1 if $self->is_sales; |
294 | 338 |
$self->paid($self->paid + _round($paid_amount) + $fx_gain_loss_amount) if $paid_amount; |
295 | 339 |
$self->datepaid($transdate_obj); |
Auch abrufbar als: Unified diff
Kontoauszug verbuchen, Mehrwertsteuerkorrektur für Anzahlungsrechnungen