X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FController%2FCsvImport%2FPart.pm;h=34bdd73655e637d61b19d5ebb2c4059a4dfa2f0d;hb=6e6038682b1a2b6e6bc74f1eee40eba21afcb7e9;hp=8b9cb133505497fca30dd759e59a9594b1b21155;hpb=531aada2daa8be0b86a5426e3c576037ea560657;p=kivitendo-erp.git diff --git a/SL/Controller/CsvImport/Part.pm b/SL/Controller/CsvImport/Part.pm index 8b9cb1335..34bdd7365 100644 --- a/SL/Controller/CsvImport/Part.pm +++ b/SL/Controller/CsvImport/Part.pm @@ -16,6 +16,8 @@ use SL::DB::Price; use SL::DB::Translation; use SL::DB::Unit; +use List::MoreUtils qw(none); + use parent qw(SL::Controller::CsvImport::Base); use Rose::Object::MakeMethods::Generic @@ -204,31 +206,35 @@ sub check_existing { my $object = $entry->{object}; if ($object->partnumber && $self->parts_by->{partnumber}{$object->partnumber}) { - $entry->{part} = SL::DB::Manager::Part->find_by( - SL::DB::Manager::Part->type_filter($object->type), - ( partnumber => $object->partnumber ) x!! $object->partnumber, - ); + $entry->{part} = SL::DB::Manager::Part->find_by(partnumber => $object->partnumber); } if ($entry->{part}) { if ($self->settings->{article_number_policy} eq 'update_prices') { - map { $entry->{part}->$_( $object->$_ ) if defined $object->$_ } qw(sellprice listprice lastcost); + if ($self->settings->{parts_type} eq 'mixed' && $entry->{part}->type ne $object->type) { + push(@{$entry->{errors}}, $::locale->text('Skipping due to existing entry in database with different type')); + } else { + map { $entry->{part}->$_( $object->$_ ) if defined $object->$_ } qw(sellprice listprice lastcost); - # merge prices - my %prices_by_pricegroup_id = map { $_->pricegroup->id => $_ } $entry->{part}->prices, $object->prices; - $entry->{part}->prices(grep { $_ } map { $prices_by_pricegroup_id{$_->id} } @{ $self->all_pricegroups }); + # merge prices + my %prices_by_pricegroup_id = map { $_->pricegroup->id => $_ } $entry->{part}->prices, $object->prices; + $entry->{part}->prices(grep { $_ } map { $prices_by_pricegroup_id{$_->id} } @{ $self->all_pricegroups }); - push @{ $entry->{information} }, $::locale->text('Updating prices of existing entry in database'); - $entry->{object_to_save} = $entry->{part}; + push @{ $entry->{information} }, $::locale->text('Updating prices of existing entry in database'); + $entry->{object_to_save} = $entry->{part}; + } } elsif ( $self->settings->{article_number_policy} eq 'skip' ) { push(@{$entry->{errors}}, $::locale->text('Skipping due to existing entry in database')); + } else { $object->partnumber('####'); + push(@{$entry->{errors}}, $::locale->text('Skipping, for assemblies are not importable (yet)')) if $object->type eq 'assembly'; } + } else { + push(@{$entry->{errors}}, $::locale->text('Skipping, for assemblies are not importable (yet)')) if $object->type eq 'assembly'; } } - sub handle_prices { my ($self, $entry) = @_; @@ -258,16 +264,24 @@ sub check_type { if ($type eq 'mixed') { $type = $entry->{raw_data}->{type} =~ m/^p/i ? 'part' : $entry->{raw_data}->{type} =~ m/^s/i ? 'service' + : $entry->{raw_data}->{type} =~ m/^a/i ? 'assembly' : undef; } - $entry->{object}->income_accno_id( $bg->income_accno_id_0 ); - $entry->{object}->expense_accno_id( $bg->expense_accno_id_0 ); + $entry->{object}->assembly($type eq 'assembly'); + + $entry->{object}->income_accno_id( $bg->income_accno_id_0 ); + + if ($type eq 'part' || $type eq 'service') { + $entry->{object}->expense_accno_id( $bg->expense_accno_id_0 ); + } if ($type eq 'part') { $entry->{object}->inventory_accno_id( $bg->inventory_accno_id ); + } + - } elsif ($type ne 'service') { + if (none { $_ eq $type } qw(part service assembly)) { push @{ $entry->{errors} }, $::locale->text('Error: Invalid part type'); return 0; }