From 31b02f3b28493c6a68131511627a2ca929e16e4f Mon Sep 17 00:00:00 2001 From: Lebbeous Fogle-Weekley Date: Fri, 20 May 2011 10:17:05 -0400 Subject: [PATCH] Fix a problem with open-ils.circ.holds.retrieve_all_from_title Anoop Atre spotted this bug that's triggered by selecting "View Holds" from "Actions for Selected Record" in the catalog seen through the staff client. Said method would error out like this: [2011-05-20 10:04:03] open-ils.circ [ERR :31866:CStoreEditor.pm:109:13058333633194115] editor[0|1] request error open-ils.cstore.direct.serial.issuance.id_list.atomic : {"subscription":[]} : Exception: OpenSRF::DomainObject::oilsMethodException 2011-05-20T10:04:03 OpenILS::Utils::CStoreEditor /openils/lib/perl5/OpenILS/Utils/CStoreEditor.pm:412 <500> Severe query error -- see error log for more details because when trying to gather issuance-type holds, it didn't properly test whether there actually were any subscriptions and issuances related to the bib record in question. Signed-off-by: Lebbeous Fogle-Weekley --- .../perlmods/lib/OpenILS/Application/Circ/Holds.pm | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm index c95a74a16f..a84bb11718 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm @@ -2750,7 +2750,7 @@ sub all_rec_holds { $args->{fulfillment_time} = undef; # we don't want to see old fulfilled holds $args->{cancel_time} = undef; - my $resp = { volume_holds => [], copy_holds => [], metarecord_holds => [] }; + my $resp = { volume_holds => [], copy_holds => [], metarecord_holds => [], issuance_holds => [] }; my $mr_map = $e->search_metabib_metarecord_source_map({source => $title_id})->[0]; if($mr_map) { @@ -2778,15 +2778,22 @@ sub all_rec_holds { my $subs = $e->search_serial_subscription( { record_entry => $title_id }, {idlist=>1}); - my $issuances = $e->search_serial_issuance( - { subscription => $subs }, {idlist=>1}); - $resp->{issuance_holds} = $e->search_action_hold_request( - { - hold_type => OILS_HOLD_TYPE_ISSUANCE, - target => $issuances, - %$args - }, {idlist=>1} ); + if (@$subs) { + my $issuances = $e->search_serial_issuance( + {subscription => $subs}, {idlist=>1} + ); + + if ($issuances) { + $resp->{issuance_holds} = $e->search_action_hold_request( + { + hold_type => OILS_HOLD_TYPE_ISSUANCE, + target => $issuances, + %$args + }, {idlist=>1} + ); + } + } my $vols = $e->search_asset_call_number( { record => $title_id, deleted => 'f' }, {idlist=>1}); -- 2.11.0