X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FDeliveryOrder.pm;h=15eeee0c5d1c61e4303dd70cb6594e5a8937cc51;hb=22dc17dbae3ac2ab60b30e064cbc2ca43c91ff74;hp=d15b3fa0bf15e89059564f5fe3f67d6b2d32d84e;hpb=386660077eb786611dc1649d0e1617a29ffc4091;p=kivitendo-erp.git diff --git a/SL/DB/DeliveryOrder.pm b/SL/DB/DeliveryOrder.pm index d15b3fa0b..15eeee0c5 100644 --- a/SL/DB/DeliveryOrder.pm +++ b/SL/DB/DeliveryOrder.pm @@ -101,7 +101,7 @@ sub date { sub _clone_orderitem_cvar { my ($cvar) = @_; - my $cloned = Rose::DB::Object::Helpers::clone_and_reset($_); + my $cloned = $_->clone_and_reset; $cloned->sub_module('delivery_order_items'); return $cloned; @@ -130,22 +130,10 @@ sub new_from { # Custom shipto addresses (the ones specific to the sales/purchase # record and not to the customer/vendor) are only linked from - # shipto -> delivery_orders. Meaning delivery_orders.shipto_id - # will not be filled in that case. Therefore we have to return the - # new shipto object as a separate object so that the caller can - # save it, too. - my $custom_shipto; + # shipto → delivery_orders. Meaning delivery_orders.shipto_id + # will not be filled in that case. if (!$source->shipto_id && $source->id) { - my $old = $source->custom_shipto; - if ($old) { - $custom_shipto = SL::DB::Shipto->new( - map { +($_ => $old->$_) } - grep { !m{^ (?: itime | mtime | shipto_id | trans_id ) $}x } - map { $_->name } - @{ $old->meta->columns } - ); - $custom_shipto->module('DO'); - } + $args{custom_shipto} = $source->custom_shipto->clone($class) if $source->can('custom_shipto') && $source->custom_shipto; } else { $args{shipto_id} = $source->shipto_id; @@ -164,14 +152,15 @@ sub new_from { $item_parents{$source_item_id} ||= $source_item->$item_parent_column; my $item_parent = $item_parents{$source_item_id}; - SL::DB::DeliveryOrderItem->new(map({ ( $_ => $source_item->$_ ) } + my $current_do_item = SL::DB::DeliveryOrderItem->new(map({ ( $_ => $source_item->$_ ) } qw(base_qty cusordnumber description discount lastcost longdescription marge_price_factor parts_id price_factor price_factor_id project_id qty reqdate sellprice serialnumber transdate unit active_discount_source active_price_source )), custom_variables => \@custom_variables, ordnumber => ref($item_parent) eq 'SL::DB::Order' ? $item_parent->ordnumber : $source_item->ordnumber, ); - + $current_do_item->{"converted_from_orderitems_id"} = $_->{id} if ref($item_parent) eq 'SL::DB::Order'; + $current_do_item; } @{ $items }; @items = grep { $params{item_filter}->($_) } @items if $params{item_filter}; @@ -180,7 +169,7 @@ sub new_from { $delivery_order->items(\@items); - return ($delivery_order, $custom_shipto); + return $delivery_order; } sub customervendor { @@ -197,8 +186,9 @@ sub convert_to_invoice { require SL::DB::Invoice; $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(delivery_order_items)) { # expand if needed (delivery_order_items) + foreach (qw(delivery_order_items)) { # expand if needed (orderitems) if ($item->{"converted_from_${_}_id"}) { die unless $item->{id}; RecordLinks->create_links('mode' => 'ids', @@ -220,6 +210,15 @@ sub convert_to_invoice { return $invoice; } +sub digest { + my ($self) = @_; + + sprintf "%s %s (%s)", + $self->donumber, + $self->customervendor->name, + $self->date->to_kivitendo; +} + 1; __END__ @@ -265,18 +264,8 @@ quotations and purchase orders) are supported as sources. The conversion copies order items into delivery order items. Dates are copied as appropriate, e.g. the C field will be set to the current date. -Returns one or two objects depending on the context. In list context -the new delivery order instance and a shipto instance will be -returned. In scalar instance only the delivery order instance is -returned. - -Custom shipto addresses (the ones specific to the sales/purchase -record and not to the customer/vendor) are only linked from C -to C. Meaning C will not -be filled in that case. That's why a separate shipto object is created -and returned. - -The objects returned are not saved. +Returns the new delivery order instance. The object returned is not +saved. C<%params> can include the following options: