@@ -, +, @@ to skip --- C4/Reserves.pm | 4 ++-- .../intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref | 3 ++- t/db_dependent/Holds.t | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) --- a/C4/Reserves.pm +++ a/C4/Reserves.pm @@ -794,8 +794,8 @@ sub CheckReserves { # if item is not for loan it cannot be reserved either..... # except where items.notforloan < 0 : This indicates the item is holdable. - my $SkipHoldTrapOnNotForLoanValue = C4::Context->preference('SkipHoldTrapOnNotForLoanValue'); - return if $SkipHoldTrapOnNotForLoanValue && $notforloan_per_item eq $SkipHoldTrapOnNotForLoanValue; + my @SkipHoldTrapOnNotForLoanValue = split( '|', C4::Context->preference('SkipHoldTrapOnNotForLoanValue') ); + return if @SkipHoldTrapOnNotForLoanValue && grep( $notforloan_per_item, @SkipHoldTrapOnNotForLoanValue ); my $dont_trap = C4::Context->preference('TrapHoldsOnOrder') ? ($notforloan_per_item > 0) : ($notforloan_per_item && 1 ); return if $dont_trap or $notforloan_per_itemtype; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -527,10 +527,11 @@ Circulation: no: "Don't trap" - items that are not for loan but holdable ( notforloan < 0 ) to fill holds. - - - Never trap items with a 'not for loan' value of + - Never trap items with 'not for loan' values of - pref: SkipHoldTrapOnNotForLoanValue class: integer - to fill holds. + - "(list of not for loan values separated with a pipe '|')" - - pref: HoldsAutoFill choices: --- a/t/db_dependent/Holds.t +++ a/t/db_dependent/Holds.t @@ -7,7 +7,7 @@ use t::lib::TestBuilder; use C4::Context; -use Test::More tests => 65; +use Test::More tests => 66; use MARC::Record; use C4::Biblio; @@ -365,6 +365,8 @@ t::lib::Mocks::mock_preference( 'TrapHoldsOnOrder', 1 ); ok( defined( ( CheckReserves($itemnumber) )[1] ), "Hold is trapped for item that is not for loan but holdable ( notforloan < 0 )" ); t::lib::Mocks::mock_preference( 'SkipHoldTrapOnNotForLoanValue', '-1' ); ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for item with notforloan value matching SkipHoldTrapOnNotForLoanValue" ); +t::lib::Mocks::mock_preference( 'SkipHoldTrapOnNotForLoanValue', '-1|1' ); +ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for item with notforloan value matching SkipHoldTrapOnNotForLoanValue" ); $hold->delete(); # Regression test for bug 9532 --