From 42527dfe639c04c9dce781239f9c23f2bf109f98 Mon Sep 17 00:00:00 2001 From: Mirko Tietgen Date: Wed, 3 May 2017 21:13:49 +0200 Subject: [PATCH] Bug 18547 - On shelf holds allowed > "If all unavailable" ignores default hold policy If in the circ rules matrix you set "On shelf holds allowed" to "If all unavailable", default hold policy "From home library" is ignored. Test plan: - Have a test user from one branch (eg Centerville) - Set "On shelf holds allowed" to "If all unavailable" for your patron and item category (or everyone and everything) - For "Default checkout, hold and return policy", set hold policy to "From home library" -> make sure there is no "Default holds policy by item type" to override the setting - Have two items for a record. 1. An item with home branch same as test user (eg Centerville) -> check this item out to somebody else 2. an item with a different home branch (eg Fairfield) -> available, not checked out - Try to place a hold for your test user. Does not work. - Apply the patch - Try to place a hold. Should work now. Followed test plan, worked as intended Signed-off-by: Alex Buckley --- C4/Reserves.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 3192d50..d9c7da0 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -1413,6 +1413,10 @@ sub IsAvailableForItemLevelRequest { my $any_available = 0; foreach my $i (@items) { + + my $circ_control_branch = C4::Circulation::_GetCircControlBranch( $i->unblessed(), $borrower ); + my $branchitemrule = C4::Circulation::GetBranchItemRule( $circ_control_branch, $i->itype ); + $any_available = 1 unless $i->itemlost || $i->notforloan > 0 @@ -1421,7 +1425,8 @@ sub IsAvailableForItemLevelRequest { || IsItemOnHoldAndFound( $i->id ) || ( $i->damaged && !C4::Context->preference('AllowHoldsOnDamagedItems') ) - || Koha::ItemTypes->find( $i->effective_itemtype() )->notforloan; + || Koha::ItemTypes->find( $i->effective_itemtype() )->notforloan + || $branchitemrule->{holdallowed} == 1 && $borrower->{branchcode} ne $i->homebranch; } return $any_available ? 0 : 1; -- 2.1.4