X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/5ef5314ce854aec6ee6f49155ff9a64970952867..15b2640059:/SL/DB/Invoice.pm diff --git a/SL/DB/Invoice.pm b/SL/DB/Invoice.pm index 9aa17adec..3f337f103 100644 --- a/SL/DB/Invoice.pm +++ b/SL/DB/Invoice.pm @@ -240,9 +240,14 @@ sub post { require SL::DB::Chart; if (!$params{ar_id}) { - my $chart = SL::DB::Manager::Chart->get_all(query => [ SL::DB::Manager::Chart->link_filter('AR') ], - sort_by => 'id ASC', - limit => 1)->[0]; + my $chart; + if ($::instance_conf->get_ar_chart_id) { + $chart = SL::DB::Manager::Chart->find_by(id => $::instance_conf->get_ar_chart_id); + } else { + $chart = SL::DB::Manager::Chart->get_all(query => [ SL::DB::Manager::Chart->link_filter('AR') ], + sort_by => 'id ASC', + limit => 1)->[0]; + }; croak("No AR chart found and no parameter 'ar_id' given") unless $chart; $params{ar_id} = $chart->id; } @@ -260,6 +265,8 @@ sub post { $self->_post_add_acctrans({ $params{ar_id} => $self->amount * -1 }); $self->_post_update_allocated($data{allocated}); + + $self->_post_book_rounding($data{rounding}); }; if ($self->db->in_transaction) { @@ -296,6 +303,26 @@ sub _post_add_acctrans { } } +sub _post_book_rounding { + my ($self, $rounding) = @_; + + my $tax_id = SL::DB::Manager::Tax->find_by(taxkey => 0)->id; + my $rnd_accno = $rounding == 0 ? 0 + : $rounding > 0 ? SL::DB::Default->get->rndgain_accno_id + : SL::DB::Default->get->rndloss_accno_id + ; + if ($rnd_accno != 0) { + SL::DB::AccTransaction->new(trans_id => $self->id, + chart_id => $rnd_accno, + amount => $rounding, + tax_id => $tax_id, + taxkey => 0, + project_id => $self->globalproject_id, + transdate => $self->transdate, + chart_link => $rnd_accno)->save; + } +} + sub add_ar_amount_row { my ($self, %params ) = @_; @@ -303,7 +330,7 @@ sub add_ar_amount_row { die "not an ar invoice" if $self->invoice and not $self->customer_id; die "add_ar_amount_row needs a chart object as chart param" unless $params{chart} && $params{chart}->isa('SL::DB::Chart'); - die unless $params{chart}->link =~ /AR_amount/; + die "chart must be an AR_amount chart" unless $params{chart}->link =~ /AR_amount/; my $acc_trans = [];