diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl index f89720fdd9..8b8098396b 100755 --- a/reserve/placerequest.pl +++ b/reserve/placerequest.pl @@ -86,26 +86,33 @@ if ( $type eq 'str8' && $borrower ) { } } + my $can_override = C4::Context->preference('AllowHoldPolicyOverride'); if ( defined $checkitem && $checkitem ne '' ) { - my $item = GetItem($checkitem); - if ( $item->{'biblionumber'} ne $biblionumber ) { - $biblionumber = $item->{'biblionumber'}; + + 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 ); diff --git a/reserve/request.pl b/reserve/request.pl index 91b6ffdd95..006822f248 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -492,8 +492,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} ); }