- $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_mm = map { $_->make . $; . $_->model => $_ } $entry->{part}->makemodels;
+ my @new_makemodels;
+
+ foreach my $makemodel ($object->makemodels()) {
+ my $makemodel_orig = $old_makemodels_by_mm{$makemodel->make,$makemodel->model};
+ $found_any = 1;
+
+ if ($makemodel_orig) {
+ $makemodel_orig->model($makemodel->model);
+ $makemodel_orig->lastcost($makemodel->lastcost);
+
+ } else {
+ push @new_makemodels, $makemodel;
+ }
+ }
+
+ $entry->{part}->makemodels([ $entry->{part}->makemodels, @new_makemodels ]) if @new_makemodels;
+
+ # reindex makemodels
+ my $i = 0;
+ $_->sortorder(++$i) for @{ $entry->{part}->makemodels };
+
+ $self->save_with_cascade(1) if $found_any;