From 2a8f748f25e305deca7fce41451fbd78056ba26d 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 Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall --- C4/HoldsQueue.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm index e5f29c72bc..0f2ad221a2 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; @@ -422,7 +423,8 @@ sub MapItemsToHoldRequests { if ($local_hold_match) { if ( exists $items_by_itemnumber{ $item->{itemnumber} } - and not exists $allocated_items{ $item->{itemnumber} } ) + and not exists $allocated_items{ $item->{itemnumber} } + and not $request->{allocated}) { $item_map{ $item->{itemnumber} } = { borrowernumber => $request->{borrowernumber}, @@ -435,6 +437,7 @@ sub MapItemsToHoldRequests { reservenotes => $request->{reservenotes}, }; $allocated_items{ $item->{itemnumber} }++; + $request->{allocated} = 1; $num_items_remaining--; } } @@ -444,6 +447,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 +498,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.39.5