X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FCsvImport%2FPart.pm;h=79c1b919258a305b45e56cf46b57b4f453b93e39;hb=4c313ecf54813bb13c72804f9db3a6d02a20d7bc;hp=36dccc62a33c20620e0ecbb07d7100d4e74fbeb1;hpb=d74921657d967900bded4aaf4805647e9cf83562;p=kivitendo-erp.git diff --git a/SL/Controller/CsvImport/Part.pm b/SL/Controller/CsvImport/Part.pm index 36dccc62a..79c1b9192 100644 --- a/SL/Controller/CsvImport/Part.pm +++ b/SL/Controller/CsvImport/Part.pm @@ -4,6 +4,7 @@ use strict; use SL::Helper::Csv; +use SL::DBUtils; use SL::DB::Buchungsgruppe; use SL::DB::CustomVariable; use SL::DB::CustomVariableConfig; @@ -60,13 +61,19 @@ sub init_units_by { sub init_parts_by { my ($self) = @_; - my $parts_by = { id => { map { ( $_->id => $_ ) } grep { !$_->assembly } @{ $self->existing_objects } }, - partnumber => { part => { }, - service => { } } }; - - foreach my $part (@{ $self->existing_objects }) { - next if $part->assembly; - $parts_by->{partnumber}->{ $part->type }->{ $part->partnumber } = $part; +# my $parts_by = { id => { map { ( $_->id => $_ ) } grep { !$_->assembly } @{ $self->existing_objects } }, +# partnumber => { part => { }, +# service => { } } }; +# +# foreach my $part (@{ $self->existing_objects }) { +# next if $part->assembly; +# $parts_by->{partnumber}->{ $part->type }->{ $part->partnumber } = $part; +# } + + my $parts_by = {}; + my $sth = prepare_execute_query($::form, $::form->get_standard_dbh, 'SELECT partnumber FROM parts'); + while (my ($partnumber) = $sth->fetchrow_array()) { + $parts_by->{partnumber}{$partnumber} = 1; } return $parts_by; @@ -103,12 +110,14 @@ 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(8 + ($i/$num_data * 40)) if $i % 100 == 0; # scale from 5..45% + $self->controller->track_progress(progress => $i/$num_data * 100) if $i % 100 == 0; $self->check_buchungsgruppe($entry); $self->check_type($entry); @@ -133,7 +142,7 @@ sub check_objects { $self->add_columns(map { "${_}_id" } grep { exists $self->controller->data->[0]->{raw_data}->{$_} } qw (price_factor payment partsgroup)); $self->add_columns(qw(shop)) if $self->settings->{shoparticle_if_missing}; $self->add_cvar_raw_data_columns; - map { $self->add_raw_data_columns("pricegroup_${_}") } (1..scalar(@{ $self->all_pricegroups })); + map { $self->add_raw_data_columns("pricegroup_${_}") if exists $self->controller->data->[0]->{raw_data}->{"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_${_}", "lastcost_${_}") } sort { $a <=> $b } keys %{ $self->makemodel_columns }; } @@ -194,12 +203,17 @@ sub check_existing { my $object = $entry->{object}; - $entry->{part} = SL::DB::Manager::Part->find_by( - SL::DB::Manager::Part->type_filter($object->type), - ( partnumber => $object->partnumber ) x!! $object->partnumber, - ); + 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, + ); + } if ($self->settings->{article_number_policy} eq 'update_prices') { + if ($object->partnumber && $self->parts_by->{partnumber}{$object->partnumber}) { + push @{ $entry->{information} }, $::locale->text('Updating prices of existing entry in database'); + } if ($entry->{part}) { map { $entry->{part}->$_( $object->$_ ) if defined $object->$_ } qw(sellprice listprice lastcost); @@ -220,14 +234,13 @@ sub check_existing { sub handle_prices { my ($self, $entry) = @_; - foreach my $column (qw(sellprice listprice lastcost)) { - next unless $self->controller->headers->{used}->{ $column }; - + foreach my $column (qw(sellprice)) { + my $object = $entry->{object_to_save} || $entry->{object}; my $adjustment = $self->settings->{sellprice_adjustment}; - my $value = $entry->{object}->$column; + my $value = $object->$column; $value = $self->settings->{sellprice_adjustment_type} eq 'percent' ? $value * (100 + $adjustment) / 100 : $value + $adjustment; - $entry->{object}->$column($::form->round_amount($value, $self->settings->{sellprice_places})); + $object->$column($::form->round_amount($value, $self->settings->{sellprice_places})); } } @@ -430,6 +443,8 @@ sub init_profile { my $profile = $self->SUPER::init_profile; delete @{$profile}{qw(alternate assembly bom expense_accno_id income_accno_id inventory_accno_id makemodel priceupdate stockable type)}; + $profile->{"pricegroup_$_"} = '' for 1 .. scalar @{ $_[0]->all_pricegroups }; + return $profile; } @@ -470,7 +485,7 @@ sub setup_displayable_columns { { name => 'not_discountable', description => $::locale->text('Not Discountable') }, { name => 'notes', description => $::locale->text('Notes') }, { name => 'obsolete', description => $::locale->text('Obsolete') }, - { name => 'onhand', description => $::locale->text('On Hand') }, + { name => 'onhand', description => $::locale->text('On Hand') . ' [2]' }, { name => 'partnumber', description => $::locale->text('Part Number') }, { name => 'partsgroup_id', description => $::locale->text('Partsgroup (database ID)') }, { name => 'partsgroup', description => $::locale->text('Partsgroup (name)') }, @@ -481,7 +496,7 @@ sub setup_displayable_columns { { name => 'rop', description => $::locale->text('ROP') }, { name => 'sellprice', description => $::locale->text('Sellprice') }, { name => 'shop', description => $::locale->text('Shopartikel') }, - { name => 'type', description => $::locale->text('Article type (see below)') }, + { name => 'type', description => $::locale->text('Article type') . ' [3]' }, { name => 'unit', description => $::locale->text('Unit (if missing or empty default unit will be used)') }, { name => 've', description => $::locale->text('Verrechnungseinheit') }, { name => 'weight', description => $::locale->text('Weight') },