@@ -, +, @@ almost place a hold on an item already on hold 1) Enable AllowHoldPolicyOverride 2) Set up circ rules to allow for multiple item level holds on one record 3) Place an item level hold on a record 4) Note you can force placing a second item hold on that reocrd 5) Attempt to do so, it will not actually work 6) Apply this patch 7) Note you can no longer place another item level hold for the same item you just placed an item-level hold on 8) Note you can still force holds that contravene the circ rules for any and all other reasons 9) Test with record level holds --- reserve/placerequest.pl | 13 ++++++++++--- reserve/request.pl | 7 +++++-- 2 files changed, 15 insertions(+), 5 deletions(-) --- a/reserve/placerequest.pl +++ a/reserve/placerequest.pl @@ -88,26 +88,33 @@ if ( $type eq 'str8' && $borrower ) { } } + my $can_override = C4::Context->preference('AllowHoldPolicyOverride'); if ( defined $checkitem && $checkitem ne '' ) { + my $item = Koha::Items->find($checkitem); + if ( $item->biblionumber ne $biblionumber ) { $biblionumber = $item->biblionumber; } - if ( CanItemBeReserved($borrower->{'borrowernumber'}, $item->itemnumber, $branch)->{status} eq 'OK' ) { + + my $can_item_be_reserved = CanItemBeReserved($borrower->{'borrowernumber'}, $item->itemnumber, $branch)->{status}; + + if ( $can_item_be_reserved eq 'OK' || ( $can_item_be_reserved ne 'itemAlreadyOnHold' && $can_override ) ) { AddReserve( $branch, $borrower->{'borrowernumber'}, $biblionumber, \@realbi, $rank[0], $startdate, $expirationdate, $notes, $title, $checkitem, $found, $itemtype ); } + } elsif ($multi_hold) { my $bibinfo = $bibinfos{$biblionumber}; - if ( CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) { + if ( $can_override || CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) { AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,[$biblionumber], $bibinfo->{rank},$startdate,$expirationdate,$notes,$bibinfo->{title},$checkitem,$found); } } else { # place a request on 1st available for ( my $i = 0 ; $i < $holds_to_place_count ; $i++ ) { - if ( CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) { + if ( $can_override || CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) { AddReserve( $branch, $borrower->{'borrowernumber'}, $biblionumber, \@realbi, $rank[0], $startdate, $expirationdate, $notes, $title, $checkitem, $found, $itemtype ); --- a/reserve/request.pl +++ a/reserve/request.pl @@ -508,8 +508,11 @@ foreach my $biblionumber (@biblionumbers) { } elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) { # If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules - $item->{override} = 1; - $num_override++; + # with the exception of itemAlreadyOnHold because, you know, the item is already on hold + if ( $can_item_be_reserved ne 'itemAlreadyOnHold' ) { + $item->{override} = 1; + $num_override++; + } push( @available_itemtypes, $item->{itype} ); } --