+sub customervendor {
+  $_[0]->is_sales ? $_[0]->customer : $_[0]->vendor;
+}
+
+sub convert_to_invoice {
+  my ($self, %params) = @_;
+
+  croak("Conversion to invoices is only supported for sales records") unless $self->customer_id;
+
+  my $invoice;
+  if (!$self->db->with_transaction(sub {
+    require SL::DB::Invoice;
+    $invoice = SL::DB::Invoice->new_from($self)->post(%params) || die;
+    $self->link_to_record($invoice);
+    foreach my $item (@{ $invoice->items }) {
+      foreach (qw(delivery_order_items)) {    # expand if needed (delivery_order_items)
+        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;
+  })) {
+    return undef;
+  }
+
+  return $invoice;
+}
+