]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DB/Part.pm
Part makemodels relationship nutzt sortorder
[mfinanz.git] / SL / DB / Part.pm
index d336af38d088c77b943fffee0359619816b17711..7fd35d80ef2e0120c4da93560b6c0b4a7219e907 100644 (file)
@@ -21,6 +21,7 @@ __PACKAGE__->meta->add_relationships(
   assemblies                     => {
     type         => 'one to many',
     class        => 'SL::DB::Assembly',
+    manager_args => { sort_by => 'position, oid' },
     column_map   => { id => 'id' },
   },
   prices         => {
@@ -31,6 +32,7 @@ __PACKAGE__->meta->add_relationships(
   makemodels     => {
     type         => 'one to many',
     class        => 'SL::DB::MakeModel',
+    manager_args => { sort_by => 'sortorder' },
     column_map   => { id => 'parts_id' },
   },
   translations   => {
@@ -58,6 +60,29 @@ sub _before_save_set_partnumber {
   return 1;
 }
 
+sub validate {
+  my ($self) = @_;
+
+  my @errors;
+  push @errors, $::locale->text('The partnumber is missing.')     unless $self->partnumber;
+  push @errors, $::locale->text('The unit is missing.')           unless $self->unit;
+  push @errors, $::locale->text('The buchungsgruppe is missing.') unless $self->buchungsgruppen_id or $self->buchungsgruppe;
+
+  unless ( $self->id ) {
+    push @errors, $::locale->text('The partnumber already exists.') if SL::DB::Manager::Part->get_all_count(where => [ partnumber => $self->partnumber ]);
+  };
+
+  if ($self->is_assortment && scalar @{$self->assortment_items} == 0) {
+    push @errors, $::locale->text('The assortment doesn\'t have any items.');
+  }
+
+  if ($self->is_assembly && scalar @{$self->assemblies} == 0) {
+    push @errors, $::locale->text('The assembly doesn\'t have any items.');
+  }
+
+  return @errors;
+}
+
 sub is_type {
   my $self = shift;
   my $type  = lc(shift || '');
@@ -223,6 +248,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__