From 80b2ac582160103428829fa6d6a818e51cd2e9a3 Mon Sep 17 00:00:00 2001 From: Christopher Brannon Date: Wed, 7 Nov 2018 23:55:33 +0000 Subject: [PATCH] Bug 21346: 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. --- C4/Circulation.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 23d0b5fb5c..cd53bf78e6 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2015,10 +2015,15 @@ 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} ) { + ModReserve( { rank => 1, reserve_id => $resrec->{reserve_id}, branchcode => $resrec->{branchcode} } ); + ($resfound, $resrec, undef) = C4::Reserves::CheckReserves( $item->{'itemnumber'}, undef, $lookahead ) unless ( $item->{'withdrawn'} ); + } if ($resfound) { $resrec->{'ResFound'} = $resfound; $messages->{'ResFound'} = $resrec; -- 2.11.0