From 7c6826ad16483ac00c2ab1fc164352eb4f3b90f2 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 26 Jan 2017 14:31:35 +0000 Subject: [PATCH] Bug 18001 - LocalHoldsPriority can cause multiple holds queue lines for same hold request If LocalHoldsPriority is enabled, and a record level request has more than one item that could fill that hold, there is a possibility that a holds queue row will be generated for the request for each of the available items! Signed-off-by: Kyle M Hall Signed-off-by: Joel Sasse --- C4/HoldsQueue.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm index e5f29c7..666a9be 100755 --- a/C4/HoldsQueue.pm +++ b/C4/HoldsQueue.pm @@ -397,6 +397,7 @@ sub MapItemsToHoldRequests { C4::Context->preference('LocalHoldsPriorityItemControl'); foreach my $request (@$hold_requests) { + next if (defined($request->{itemnumber})); #skip item level holds in local priority checking last if $num_items_remaining == 0; my $local_hold_match; @@ -435,6 +436,7 @@ sub MapItemsToHoldRequests { reservenotes => $request->{reservenotes}, }; $allocated_items{ $item->{itemnumber} }++; + $request->{allocated} = 1; $num_items_remaining--; } } @@ -444,6 +446,7 @@ sub MapItemsToHoldRequests { foreach my $request (@$hold_requests) { last if $num_items_remaining == 0; + next if $request->{allocated}; # is this an item-level request? if (defined($request->{itemnumber})) { @@ -494,6 +497,7 @@ sub MapItemsToHoldRequests { my $pull_branches; foreach my $request (@$hold_requests) { last if $num_items_remaining == 0; + next if $request->{allocated}; next if defined($request->{itemnumber}); # already handled these # look for local match first -- 2.1.4