my $invoice;
if (!$self->db->with_transaction(sub {
require SL::DB::Invoice;
- $invoice = SL::DB::Invoice->new_from($self)->post(%params) || die;
+ $invoice = SL::DB::Invoice->new_from($self, %params)->post || die;
$self->link_to_record($invoice);
+ # TODO extend link_to_record for items, otherwise long-term no d.r.y.
+ foreach my $item (@{ $invoice->items }) {
+ foreach (qw(orderitems)) {
+ if ($item->{"converted_from_${_}_id"}) {
+ die unless $item->{id};
+ RecordLinks->create_links('mode' => 'ids',
+ 'from_table' => $_,
+ 'from_ids' => $item->{"converted_from_${_}_id"},
+ 'to_table' => 'invoice',
+ 'to_id' => $item->{id},
+ ) || die;
+ delete $item->{"converted_from_${_}_id"};
+ }
+ }
+ }
$self->update_attributes(closed => 1);
1;
})) {
my %args = ( map({ ( $_ => $source->$_ ) } qw(amount cp_id currency_id cusordnumber customer_id delivery_customer_id delivery_term_id delivery_vendor_id
department_id exchangerate globalproject_id intnotes marge_percent marge_total language_id netamount notes
ordnumber payment_id quonumber reqdate salesman_id shippingpoint shipvia taxincluded tax_point taxzone_id
- transaction_description vendor_id
+ transaction_description vendor_id billing_address_id
)),
quotation => !!($destination_type =~ m{quotation$}),
closed => 0,
linked to the new invoice via L<SL::DB::RecordLink>. C<$self>'s
C<closed> attribute is set to C<true>, and C<$self> is saved.
-The arguments in C<%params> are passed to L<SL::DB::Invoice::post>.
+The arguments in C<%params> are passed to L<SL::DB::Invoice::new_from>.
Returns the new invoice instance on success and C<undef> on
failure. The whole process is run inside a transaction. On failure