From 07ad62380ececb2dda591fcf495d67ee71d890d1 Mon Sep 17 00:00:00 2001 From: Christopher Brannon Date: Tue, 4 Dec 2018 16:38:34 +0000 Subject: [PATCH] Bug 21944: Reroute waiting hold from wrong branch To Test: 1) Place a hold on an item. 2) Check in the item to trigger the hold. Item is now listed as waiting. 3) Set branch to a different library. 4) Check in the item to trigger the hold. Notice that nothing but a local use is recorded. 5) Apply the patch. 6) Repeat steps 1-4. Notice that the hold is triggered around routed to its original pickup location. A transfer is set and the hold status is changed from waiting to correctly showing the item as in transit. Signed-off-by: Martin Renvoize Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart Signed-off-by: Martin Renvoize --- C4/Circulation.pm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index dc12cd3352..6b2c91eec5 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2073,10 +2073,17 @@ sub AddReturn { } # find reserves..... - # if we don't have a reserve with the status W, we launch the Checkreserves routine + # launch the Checkreserves routine to find any holds my ($resfound, $resrec); my $lookahead= C4::Context->preference('ConfirmFutureHolds'); #number of days to look for future holds ($resfound, $resrec, undef) = C4::Reserves::CheckReserves( $item->itemnumber, undef, $lookahead ) unless ( $item->withdrawn ); + # if a hold is found and is waiting at another branch, change the priority back to 1 and trigger the hold (this will trigger a transfer and update the hold status properly) + if ( $resfound eq "Waiting" and $branch ne $resrec->{branchcode} ) { + C4::Reserves::RevertWaitingStatus( { itemnumber => $item->itemnumber } ); + #If the hold is reverted we need to refetch for the return values + ($resfound, $resrec, undef) = C4::Reserves::CheckReserves( $item->itemnumber, undef, $lookahead ) unless ( $item->withdrawn ); + } + ($resfound, $resrec, undef) = C4::Reserves::CheckReserves( $item->itemnumber, undef, $lookahead ) unless ( $item->withdrawn ); if ($resfound) { $resrec->{'ResFound'} = $resfound; $messages->{'ResFound'} = $resrec; -- 2.39.5