use SL::Helper::Csv;
+use SL::DBUtils;
use SL::DB::Buchungsgruppe;
use SL::DB::CustomVariable;
use SL::DB::CustomVariableConfig;
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;
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);
$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 };
}
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 (!$self->test_run && $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);
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;
}