From d7daf48b20186aa34aba7f6c3d68aa6f5fa8f940 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 4 Sep 2013 14:55:57 -0400 Subject: [PATCH] Vandelay copy overlay call number merge When overlaying a copy, if the copy brings with it a new call number which collides with an existing call number AND said copy is the only copy linked to its (old) call number, merge the copy's (old) call number into the (new) existing call number, i.e. the one we collided with. Signed-off-by: Bill Erickson Signed-off-by: Dan Wells --- .../perlmods/lib/OpenILS/Application/Vandelay.pm | 57 ++++++++++++++++++---- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm index 67964478f8..194a1e0e48 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm @@ -22,6 +22,7 @@ use OpenILS::Application::AppUtils; use OpenILS::Application::Cat::BibCommon; use OpenILS::Application::Cat::AuthCommon; use OpenILS::Application::Cat::AssetCommon; +use OpenILS::Application::Cat::Merge; my $U = 'OpenILS::Application::AppUtils'; # A list of LDR/06 values from http://loc.gov/marc @@ -1671,16 +1672,54 @@ sub import_record_asset_list_impl { })->[0]->{count}; if ($count == 1) { - # if this is the only copy attached to this - # callnumber, just update the callnumber - $logger->info("vl: updating callnumber label in copy overlay"); - - $copy->call_number->label($item->call_number); - if (!$e->update_asset_call_number($copy->call_number)) { - $$report_args{evt} = $e->die_event; - respond_with_status($report_args); - next; + my $evol = $e->search_asset_call_number({ + id => {'<>' => $copy->call_number->id}, + label => $item->call_number, + owning_lib => $copy->call_number->owning_lib, + record => $copy->call_number->record, + prefix => $copy->call_number->prefix, + suffix => $copy->call_number->suffix, + deleted => 'f' + })->[0]; + + if ($evol) { + # call number for overlayed copy changed to a + # label already in use by another call number. + # merge the old CN into the new CN + + $logger->info( + "vl: moving copy to new call number ". + $item->call_number); + + my ($mvol, $err) = + OpenILS::Application::Cat::Merge::merge_volumes( + $e, [$copy->call_number], $evol); + + if (!$mvol) { + $$report_args{evt} = $err; + respond_with_status($report_args); + next; + } + + # update our copy *cough* of the copy to pick up + # any changes made my merge_volumes + $copy = $e->retrieve_asset_copy([ + $copy->id, + {flesh => 1, flesh_fields => {acp => ['call_number']}} + ]); + + } else { + $logger->info( + "vl: updating copy call number label". + $item->call_number); + + $copy->call_number->label($item->call_number); + if (!$e->update_asset_call_number($copy->call_number)) { + $$report_args{evt} = $e->die_event; + respond_with_status($report_args); + next; + } } } else { -- 2.11.0