X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/a60c6759b61a4e596ad234eaf938466563efe36c..a0516348e76b315f149bd1014ef68eaf24d7073c:/SL/DB/DeliveryOrder.pm diff --git a/SL/DB/DeliveryOrder.pm b/SL/DB/DeliveryOrder.pm index 0a8f34851..febf5e27e 100644 --- a/SL/DB/DeliveryOrder.pm +++ b/SL/DB/DeliveryOrder.pm @@ -4,6 +4,8 @@ use strict; use Carp; +use Rose::DB::Object::Helpers (); + use SL::DB::MetaSetup::DeliveryOrder; use SL::DB::Manager::DeliveryOrder; use SL::DB::Helper::FlattenToForm; @@ -17,6 +19,12 @@ __PACKAGE__->meta->add_relationship(orderitems => { type => 'one to many column_map => { id => 'delivery_order_id' }, manager_args => { with_objects => [ 'part' ] } }, + custom_shipto => { + type => 'one to one', + class => 'SL::DB::Shipto', + column_map => { id => 'trans_id' }, + query_args => [ module => 'DO' ], + }, ); __PACKAGE__->meta->initialize; @@ -75,6 +83,15 @@ sub date { goto &transdate; } +sub _clone_orderitem_cvar { + my ($cvar) = @_; + + my $cloned = Rose::DB::Object::Helpers::clone_and_reset($_); + $cloned->sub_module('delivery_order_items'); + + return $cloned; +} + sub new_from { my ($class, $source, %params) = @_; @@ -100,9 +117,7 @@ sub new_from { # save it, too. my $custom_shipto; if (!$source->shipto_id && $source->id) { - require SL::DB::Shipto; - - my $old = SL::DB::Manager::Shipto->find_by(trans_id => $source->id); + my $old = $source->custom_shipto; if ($old) { $custom_shipto = SL::DB::Shipto->new( map { +($_ => $old->$_) } @@ -110,6 +125,7 @@ sub new_from { map { $_->name } @{ $old->meta->columns } ); + $custom_shipto->module('DO'); } } else { @@ -119,11 +135,15 @@ sub new_from { my $delivery_order = $class->new(%args, %params); my @items = map { - my $source_item = $_; + my $source_item = $_; + my @custom_variables = map { _clone_orderitem_cvar($_) } @{ $source_item->custom_variables }; + SL::DB::DeliveryOrderItem->new(map({ ( $_ => $source_item->$_ ) } - qw(base_qty cusordnumber description discount lastcost longdescription marge_price_factor ordnumber parts_id price_factor price_factor_id - project_id qty reqdate sellprice serialnumber transdate unit - ))); + qw(base_qty cusordnumber description discount lastcost longdescription marge_price_factor ordnumber parts_id price_factor price_factor_id + project_id qty reqdate sellprice serialnumber transdate unit + )), + custom_variables => \@custom_variables); + } @{ $source->items_sorted }; $delivery_order->items(\@items); @@ -149,7 +169,7 @@ SL::DB::DeliveryOrder - Rose model for delivery orders (table =item C -An alias for L for compatibility with other sales/purchase models. +An alias for C for compatibility with other sales/purchase models. =item C @@ -158,7 +178,7 @@ closed and delivered. =item C -An alias for L for compatibility with other +An alias for C for compatibility with other sales/purchase models. =item C