- 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);
+ if ($entry->{part}) {
+ if ($self->settings->{article_number_policy} eq 'update_prices') {
+ 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 });