From cc435b591efba0fb8a60e8546ad97778926c6b0c 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 --- .../src/perlmods/OpenILS/Application/Circ/Holds.pm | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm index 222ea98d72..f5812eb3d1 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm @@ -2592,7 +2592,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) { @@ -2613,15 +2613,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