X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/00b9499e32bdf89676f1933cbd4cab39502c3210..8ae2bc4fb4c72f3ac907a3e47c0cbd5da23f62c5:/SL/Controller/CsvImport/Part.pm diff --git a/SL/Controller/CsvImport/Part.pm b/SL/Controller/CsvImport/Part.pm index d39927ad9..30c3719ca 100644 --- a/SL/Controller/CsvImport/Part.pm +++ b/SL/Controller/CsvImport/Part.pm @@ -103,9 +103,15 @@ sub check_objects { return unless @{ $self->controller->data }; + $self->controller->track_progress(phase => 'building data', progress => 0); + $self->makemodel_columns({}); + my $i; + my $num_data = scalar @{ $self->controller->data }; foreach my $entry (@{ $self->controller->data }) { + $self->controller->track_progress(progress => $i/$num_data * 100) if $i % 100 == 0; + $self->check_buchungsgruppe($entry); $self->check_type($entry); $self->check_unit($entry); @@ -120,6 +126,8 @@ sub check_objects { $self->handle_cvars($entry); $self->handle_makemodel($entry); $self->set_various_fields($entry); + } continue { + $i++; } $self->add_columns(qw(type)) if $self->settings->{parts_type} eq 'mixed'; @@ -132,29 +140,23 @@ sub check_objects { 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 { @@ -371,7 +373,7 @@ sub handle_makemodel { my $found_any; my @makemodels; - foreach my $idx (map { substr $_, 5 } grep { m/^make_\d+$/ && $entry->{raw_data}->{$_} } keys %{ $entry->{raw_data} }) { + foreach my $idx (sort map { substr $_, 5 } grep { m/^make_\d+$/ && $entry->{raw_data}->{$_} } keys %{ $entry->{raw_data} }) { my $vendor = $entry->{raw_data}->{"make_${idx}"}; $vendor = $self->vc_by->{id}-> { $vendor } || $self->vc_by->{number}->{vendors}->{ $vendor } @@ -463,10 +465,10 @@ sub setup_displayable_columns { { name => 'image', description => $::locale->text('Image') }, { name => 'lastcost', description => $::locale->text('Last Cost') }, { name => 'listprice', description => $::locale->text('List Price') }, - { name => 'make_X', description => $::locale->text('Make (with X being a number)') }, + { name => 'make_X', description => $::locale->text('Make (vendor\'s database ID, number or name; with X being a number)') . ' [1]' }, { 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 => 'model_X', description => $::locale->text('Model (with X being a number)') . ' [1]' }, + { name => 'lastcost_X', description => $::locale->text('Lastcost (with X being a number)') . ' [1]' }, { name => 'not_discountable', description => $::locale->text('Not Discountable') }, { name => 'notes', description => $::locale->text('Notes') }, { name => 'obsolete', description => $::locale->text('Obsolete') },