X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FCsvImport%2FPart.pm;h=3c781aad654173e8fb4f7840704e0b671bde40c0;hb=caf4380789ea2166eaf89f7a600406f850d64428;hp=3be6f2a4421b8e3b6eaf9285e62a0851ec4162eb;hpb=4ab897fdb1a54cd753ec66ebc8fbd5ffdd883cd6;p=kivitendo-erp.git diff --git a/SL/Controller/CsvImport/Part.pm b/SL/Controller/CsvImport/Part.pm index 3be6f2a44..3c781aad6 100644 --- a/SL/Controller/CsvImport/Part.pm +++ b/SL/Controller/CsvImport/Part.pm @@ -129,32 +129,26 @@ sub check_objects { $self->add_cvar_raw_data_columns; map { $self->add_raw_data_columns("pricegroup_${_}") } (1..scalar(@{ $self->all_pricegroups })); map { $self->add_raw_data_columns($_) if exists $self->controller->data->[0]->{raw_data}->{$_} } @{ $self->translation_columns }; - map { $self->add_raw_data_columns("make_${_}", "model_${_}") } sort { $a <=> $b } keys %{ $self->makemodel_columns }; + map { $self->add_raw_data_columns("make_${_}", "model_${_}", "lastcost_${_}") } sort { $a <=> $b } keys %{ $self->makemodel_columns }; } -sub check_duplicates { - my ($self, %params) = @_; - - my $normalizer = sub { my $name = $_[0]; $name =~ s/[\s,\.\-]//g; return $name; }; - my $name_maker = sub { return $normalizer->($_[0]->description) }; - - my %by_name; - if ('check_db' eq $self->controller->profile->get('duplicates')) { - %by_name = map { ( $name_maker->($_) => 'db' ) } @{ $self->existing_objects }; - } - - foreach my $entry (@{ $self->controller->data }) { - next if @{ $entry->{errors} }; - - my $name = $name_maker->($entry->{object}); - - if (!$by_name{ $name }) { - $by_name{ $name } = 'csv'; - - } else { - push @{ $entry->{errors} }, $by_name{ $name } eq 'db' ? $::locale->text('Duplicate in database') : $::locale->text('Duplicate in CSV file'); - } - } +sub get_duplicate_check_fields { + return { + partnumber => { + label => $::locale->text('Part Number'), + default => 0 + }, + + description => { + label => $::locale->text('Description'), + default => 1, + maker => sub { + my $desc = shift->description; + $desc =~ s/[\s,\.\-]//g; + return $desc; + } + }, + }; } sub check_buchungsgruppe { @@ -201,7 +195,7 @@ sub check_existing { if ($self->settings->{article_number_policy} eq 'update_prices') { if ($entry->{part}) { - map { $entry->{part}->$_( $object->$_ ) if defined $object->$_ } qw(sellprice listprice lastcost); + 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; @@ -210,7 +204,8 @@ sub check_existing { 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')) if ( $entry->{part} ); } else { $object->partnumber('####') if $entry->{part}; } @@ -366,6 +361,8 @@ sub handle_pricegroups { sub handle_makemodel { my ($self, $entry) = @_; + my $object = $entry->{object}; + my $found_any; my @makemodels; foreach my $idx (map { substr $_, 5 } grep { m/^make_\d+$/ && $entry->{raw_data}->{$_} } keys %{ $entry->{raw_data} }) { @@ -378,15 +375,41 @@ sub handle_makemodel { push @{ $entry->{errors} }, $::locale->text('Error: Invalid vendor in column make_#1', $idx); } else { - push @makemodels, SL::DB::MakeModel->new(make => $vendor->id, - model => $entry->{raw_data}->{"model_${idx}"}); + $found_any = 1; + push @makemodels, SL::DB::MakeModel->new(make => $vendor->id, + model => $entry->{raw_data}->{"model_${idx}"}, + lastcost_as_number => $entry->{raw_data}->{"lastcost_${idx}"}); + $self->makemodel_columns->{$idx} = 1; $entry->{raw_data}->{"make_${idx}"} = $vendor->name; } } - $entry->{object}->makemodels(\@makemodels); - $entry->{object}->makemodel(scalar(@makemodels) ? 1 : 0); + $object->makemodels(\@makemodels); + $object->makemodel(scalar(@makemodels) ? 1 : 0); + + if ( !$entry->{part} || $self->settings->{article_number_policy} ne 'update_prices' ) { + return; + } + + my %old_makemodels_by_make = map { $_->make => $_ } $entry->{part}->makemodels; + + foreach my $makemodel ($object->makemodels()) { + my $makemodel_orig = $old_makemodels_by_make{$makemodel->make}; + $found_any = 1; + + if ($makemodel_orig) { + $makemodel_orig->model($makemodel->model); + $makemodel_orig->lastcost($makemodel->lastcost); + + } else { + $entry->{part}->add_makemodels($makemodel); + } + } + + $entry->{part}->makemodel($object->makemodel); + + $self->save_with_cascade(1) if $found_any; } sub set_various_fields { @@ -437,6 +460,7 @@ sub setup_displayable_columns { { name => 'make_X', description => $::locale->text('Make (with X being a number)') }, { name => 'microfiche', description => $::locale->text('Microfiche') }, { name => 'model_X', description => $::locale->text('Model (with X being a number)') }, + { name => 'lastcost_X', description => $::locale->text('Lastcost (with X being a number)') }, { name => 'not_discountable', description => $::locale->text('Not Discountable') }, { name => 'notes', description => $::locale->text('Notes') }, { name => 'obsolete', description => $::locale->text('Obsolete') }, @@ -472,4 +496,4 @@ sub setup_displayable_columns { } } -1; +1; \ No newline at end of file