}
$item->{cn_source} = delete $item->{'items.cn_source'}; # Because of C4::Biblio::_disambiguate
- $item->{cn_sort} = delete $item->{'items.cn_sort'}; # Because of C4::Biblio::_disambiguate
+ delete $item->{'items.cn_sort'}; # Because of C4::Biblio::_disambiguate
$item->{itemnumber} = $itemnumber;
$item->{biblionumber} = $biblionumber;
+
+ my $existing_cn_sort = $item_object->cn_sort; # set_or_blank will reset cn_sort to undef as we are not passing it
+ # We rely on Koha::Item->store to modify it if itemcallnumber or cn_source is modified
$item_object = $item_object->set_or_blank($item);
+ $item_object->cn_sort($existing_cn_sort); # Resetting to the existing value
+
my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
$item_object->more_subfields_xml(_get_unlinked_subfields_xml($unlinked_item_subfields));
$item_object->store({ skip_record_index => $params->{skip_record_index} });
};
subtest 'ModItemFromMarc' => sub {
- plan tests => 4;
+ plan tests => 5;
$schema->storage->txn_begin;
my $builder = t::lib::TestBuilder->new;
is( $updated_item->{new_status}, "this is something", "Non mapped field has not been reset" );
is( Koha::Items->find($itemnumber)->new_status, "this is something" );
+ subtest 'cn_sort' => sub {
+ plan tests => 3;
+
+ my $item = $builder->build_sample_item;
+ $item->set({ cn_source => 'ddc', itemcallnumber => 'xxx' })->store;
+ is( $item->cn_sort, 'XXX', 'init values set are expected' );
+
+ my $marc = C4::Items::Item2Marc( $item->get_from_storage->unblessed, $item->biblionumber );
+ ModItemFromMarc( $marc, $item->biblionumber, $item->itemnumber );
+ is( $item->get_from_storage->cn_sort, 'XXX', 'cn_sort has not been updated' );
+
+ $marc = C4::Items::Item2Marc( { %{$item->unblessed}, itemcallnumber => 'yyy' }, $item->biblionumber );
+ ModItemFromMarc( $marc, $item->biblionumber, $item->itemnumber );
+ is( $item->get_from_storage->cn_sort, 'YYY', 'cn_sort has been updated' );
+ };
+
$schema->storage->txn_rollback;
};