X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FInvoice.pm;h=44b81dfd09cd9ebc46dfa07eb830597297565578;hb=d3ae6850565e55743af3b9aadfb12f308a30ac94;hp=0ef5b6602e4a2f4ab533cdf58d897c6e03b9a720;hpb=64b3d19a8012187c3c01717b91d59df2b2753ee3;p=kivitendo-erp.git diff --git a/SL/DB/Invoice.pm b/SL/DB/Invoice.pm index 0ef5b6602..44b81dfd0 100644 --- a/SL/DB/Invoice.pm +++ b/SL/DB/Invoice.pm @@ -240,21 +240,20 @@ 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; } - my $worker = sub { + if (!$self->db->with_transaction(sub { my %data = $self->calculate_prices_and_taxes; - my $grossamount = $self->amount; - $self->amount($::form->round_amount($grossamount, 2, 1)); - my $rounding = $::form->round_amount( - $self->amount - $grossamount, - 2 - ); $self->_post_create_assemblyitem_entries($data{assembly_items}); $self->save; @@ -262,16 +261,15 @@ sub post { $self->_post_add_acctrans($data{amounts_cogs}); $self->_post_add_acctrans($data{amounts}); $self->_post_add_acctrans($data{taxes}); + $self->_post_add_acctrans({ $params{ar_id} => $self->amount * -1 }); $self->_post_update_allocated($data{allocated}); - $self->_post_book_rounding($rounding); - }; + $self->_post_book_rounding($data{rounding}); - if ($self->db->in_transaction) { - $worker->(); - } elsif (!$self->db->do_transaction($worker)) { + 1; + })) { $::lxdebug->message(LXDebug->WARN(), "convert_to_invoice failed: " . join("\n", (split(/\n/, $self->db->error))[0..2])); return undef; } @@ -330,7 +328,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 = []; @@ -557,6 +555,13 @@ sub abbreviation { return t8('Invoice (one letter abbreviation)'); } +sub oneline_summary { + my $self = shift; + + return sprintf("%s: %s %s %s (%s)", $self->abbreviation, $self->invnumber, $self->customer->name, + $::form->format_amount(\%::myconfig, $self->amount,2), $self->transdate->to_kivitendo); +} + sub date { goto &transdate; } @@ -579,6 +584,12 @@ sub link { return $html; } +sub mark_as_paid { + my ($self) = @_; + + $self->update_attributes(paid => $self->amount); +} + 1; __END__ @@ -700,6 +711,11 @@ active. See L. +=item C + +Returns 1 or 0, depending on whether the invoice is closed or not. Currently +invoices that are overpaid also count as closed. + =item C Calculate and set amount and netamount from acc_trans objects by summing up the @@ -757,6 +773,10 @@ Mandatory params are =back +=item C + +Marks the invoice as paid by setting its C member to the value of C. + =back =head1 TODO