From ea20f3920b2ef71e12ef40afdeb40a6f5f361186 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 --- .../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 03f947fcb5..734936f169 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.43.2