+sub convert_to_delivery_order {
+ my ($self, @args) = @_;
+
+ my ($delivery_order, $custom_shipto);
+ if (!$self->db->with_transaction(sub {
+ require SL::DB::DeliveryOrder;
+ ($delivery_order, $custom_shipto) = SL::DB::DeliveryOrder->new_from($self, @args);
+ $delivery_order->save;
+ $custom_shipto->save if $custom_shipto;
+ $self->link_to_record($delivery_order);
+ $self->update_attributes(delivered => 1);
+ 1;
+ })) {
+ return wantarray ? () : undef;
+ }
+
+ return wantarray ? ($delivery_order, $custom_shipto) : $delivery_order;
+}
+
+sub number {
+ my $self = shift;
+
+ my %number_method = (
+ sales_order => 'ordnumber',
+ sales_quotation => 'quonumber',
+ purchase_order => 'ordnumber',
+ request_quotation => 'quonumber',
+ );
+
+ return $self->${ \ $number_method{$self->type} }(@_);
+}
+
+sub date {
+ goto &transdate;
+}
+