From d75da287eacc3bdc2148386beb7a22b738e558f9 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 29 May 2015 06:46:24 -0400 Subject: [PATCH] Bug 14297: Holds Queue building ignoring holds where pickup & home branch don't match and item is not from least cost branch If a record has a hold on it where the pickup and home branch do not match, the holds queue builder will only look at items from the least cost branch ( as defined by the transport cost matrix or the sys pref StaticHoldsQueueWeight. Test Plan: 1) Create a record with two items, one for library A and one for library B 2) Set your circulation rules such that the book from library A is holdable by all and the book from library B is holdable only by library B patrons 3) Create a hold for a Library C patron for pickup at library C 4) Set the syspref StaticHoldsQueueWeight to by Library B, Library A, Library C in that order 5) Rebuild the holds queue 6) Note the hold wasn't picked up even though the item from library A could have filled the hold 7) Apply this patch 8) Rebuild the holds queue 9) View the holds queue again 10) Note the hold now displays Signed-off-by: Nora Blake Signed-off-by: Jonathan Druart Signed-off-by: Tomas Cohen Arazi --- C4/HoldsQueue.pm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm index 13cb295e9e..bae6f82d27 100755 --- a/C4/HoldsQueue.pm +++ b/C4/HoldsQueue.pm @@ -457,6 +457,8 @@ sub MapItemsToHoldRequests { } else { $pull_branches = [keys %items_by_branch]; } + + # Try picking items where the home and pickup branch match first PULL_BRANCHES: foreach my $branch (@$pull_branches) { my $holding_branch_items = $items_by_branch{$branch} @@ -473,6 +475,7 @@ sub MapItemsToHoldRequests { } } + # Now try items from the least cost branch based on the transport cost matrix or StaticHoldsQueueWeight unless ( $itemnumber ) { foreach my $current_item ( @{ $items_by_branch{$holdingbranch} } ) { if ( $holdingbranch && ( $current_item->{holdallowed} == 2 || $request->{borrowerbranch} eq $current_item->{homebranch} ) ) { @@ -481,6 +484,24 @@ sub MapItemsToHoldRequests { } } } + + # Now try for items for any item that can fill this hold + unless ( $itemnumber ) { + PULL_BRANCHES2: + foreach my $branch (@$pull_branches) { + my $holding_branch_items = $items_by_branch{$branch} + or next; + + $holdingbranch ||= $branch; + foreach my $item (@$holding_branch_items) { + next if ( $item->{holdallowed} == 1 && $item->{homebranch} ne $request->{borrowerbranch} ); + + $itemnumber = $item->{itemnumber}; + $holdingbranch = $branch; + last PULL_BRANCHES2; + } + } + } } if ($itemnumber) { -- 2.39.5