Fix LP1180140, View Holds not working for a serial with subscription and no issuances
authorSteven Chan <schan@sitka.bclibraries.ca>
Wed, 15 May 2013 21:30:15 +0000 (14:30 -0700)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Thu, 12 Dec 2013 21:43:03 +0000 (16:43 -0500)
A request is made to
open-ils.circ.holds.retrieve_all_from_title,
which is the function Circ/Holds.pm/all_rec_holds().

In the function, when checking for issuance holds, there is a missing @
to dereference the list of issuance IDs, so that the ahr table is search
with badly formed input, which results in returning an undefined list
instead of an empty list.  The error will occur for any record with a
serial.subscription entry but with no related entries in
serial.issuance.

We also recode the initialization of the response object in order to
clarify its expected structure, a hash of array references.

Signed-off-by: Steven Chan <schan@sitka.bclibraries.ca>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm

index 9de0fca..8ba48ab 100644 (file)
@@ -3188,7 +3188,16 @@ 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 => [], recall_holds => [], force_holds => [], metarecord_holds => [], part_holds => [], issuance_holds => [] };
+    my $resp = {
+          metarecord_holds => []
+        , title_holds      => []
+        , volume_holds     => []
+        , copy_holds       => []
+        , recall_holds     => []
+        , force_holds      => []
+        , part_holds       => []
+        , issuance_holds   => []
+    };
 
     my $mr_map = $e->search_metabib_metarecord_source_map({source => $title_id})->[0];
     if($mr_map) {
@@ -3229,7 +3238,7 @@ sub all_rec_holds {
             {subscription => $subs}, {idlist=>1}
         );
 
-        if ($issuances) {
+        if (@$issuances) {
             $resp->{issuance_holds} = $e->search_action_hold_request(
                 {
                     hold_type => OILS_HOLD_TYPE_ISSUANCE,