]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DB/DeliveryOrder.pm
io.pl print_form: CreatePDF zum Auffinden des Templates nutzen
[mfinanz.git] / SL / DB / DeliveryOrder.pm
index 0a8f34851024062768e0e4a753e48197fb325b93..febf5e27e6c3283fb25f24629959925219c277b5 100644 (file)
@@ -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<date>
 
-An alias for L</transdate> for compatibility with other sales/purchase models.
+An alias for C<transdate> for compatibility with other sales/purchase models.
 
 =item C<displayable_state>
 
@@ -158,7 +178,7 @@ closed and delivered.
 
 =item C<items>
 
-An alias for L</deliver_orer_items> for compatibility with other
+An alias for C<deliver_orer_items> for compatibility with other
 sales/purchase models.
 
 =item C<items_sorted>