X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FInvoice.pm;h=d6ec6c8535bbfc23504262b8639ee83bb5fffd6e;hb=0ebb8f829ac2d23b65e8d993c7d03aa0b172b637;hp=3f337f10345f1eb4aec1c794bbf2b9898450fbee;hpb=72e403238ba3798e1d5ab57d1708d44fe6692677;p=kivitendo-erp.git diff --git a/SL/DB/Invoice.pm b/SL/DB/Invoice.pm index 3f337f103..d6ec6c853 100644 --- a/SL/DB/Invoice.pm +++ b/SL/DB/Invoice.pm @@ -60,6 +60,12 @@ __PACKAGE__->meta->add_relationship( sort_by => 'acc_trans_id ASC', }, }, + dunnings => { + type => 'one to many', + class => 'SL::DB::Dunning', + column_map => { id => 'trans_id' }, + manager_args => { with_objects => [ 'dunnings' ] } + }, ); __PACKAGE__->meta->initialize; @@ -252,7 +258,7 @@ sub post { $params{ar_id} = $chart->id; } - my $worker = sub { + if (!$self->db->with_transaction(sub { my %data = $self->calculate_prices_and_taxes; $self->_post_create_assemblyitem_entries($data{assembly_items}); @@ -267,11 +273,9 @@ sub post { $self->_post_update_allocated($data{allocated}); $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; } @@ -557,6 +561,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; } @@ -573,12 +584,18 @@ sub link { my ($self) = @_; my $html; - $html = SL::Presenter->get->sales_invoice($self, display => 'inline') if $self->invoice; - $html = SL::Presenter->get->ar_transaction($self, display => 'inline') if !$self->invoice; + $html = $self->presenter->sales_invoice(display => 'inline') if $self->invoice; + $html = $self->presenter->ar_transaction(display => 'inline') if !$self->invoice; return $html; } +sub mark_as_paid { + my ($self) = @_; + + $self->update_attributes(paid => $self->amount); +} + 1; __END__ @@ -700,6 +717,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 and credit notes in general. + =item C Calculate and set amount and netamount from acc_trans objects by summing up the @@ -757,6 +779,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