Neue Methode clone_and_reset_deep für Part
authorG. Richardson <information@kivitendo-premium.de>
Sun, 7 Aug 2016 20:46:56 +0000 (22:46 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Tue, 22 Nov 2016 13:42:49 +0000 (14:42 +0100)
SL/DB/Part.pm
SL/DB/Price.pm

index e095506..f95be9b 100644 (file)
@@ -247,6 +247,37 @@ sub displayable_name {
   join ' ', grep $_, map $_[0]->$_, qw(partnumber description);
 }
 
+sub clone_and_reset_deep {
+  my ($self) = @_;
+
+  my $clone = $self->clone_and_reset; # resets id and partnumber (primary key and unique constraint)
+  $clone->makemodels(       map { $_->clone_and_reset } @{$self->makemodels});
+  $clone->translations(     map { $_->clone_and_reset } @{$self->translations});
+
+  if ( $self->is_assortment ) {
+    $clone->assortment_items( map { $_->clone } @{$self->assortment_items} );
+      foreach my $ai ( @{ $clone->assortment_items } ) {
+        $ai->assortment_id(undef);
+      };
+  };
+
+  if ( $self->is_assembly ) {
+    $clone->assemblies( map { $_->clone_and_reset } @{$self->assemblies});
+  };
+
+  if ( $self->prices ) {
+    $clone->prices( map { $_->clone } @{$self->prices}); # pricegroup_id gets reset here because it is part of a unique contraint
+    if ( $clone->prices ) {
+      foreach my $price ( @{$clone->prices} ) {
+        $price->id(undef);
+        $price->parts_id(undef);
+      };
+    };
+  };
+
+  return $clone;
+}
+
 1;
 
 __END__
index 93f9dde..6c7e8af 100644 (file)
@@ -6,6 +6,7 @@ package SL::DB::Price;
 use strict;
 
 use SL::DB::MetaSetup::Price;
+use Rose::DB::Object::Helpers qw(clone);
 
 __PACKAGE__->meta->initialize;