diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 330923e..cf43075 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2679,24 +2679,23 @@ sub CanBookBeRenewed : PureFunction { # can be filled with available items. We can get the union of the sets simply # by pushing all the elements onto an array and removing the duplicates. my @reservable; - foreach my $b (@borrowernumbers) { - my ($borr) = C4::Members::GetMember( borrowernumber => $b); - foreach my $i (@itemnumbers) { - my $item = GetItem($i); - if ( !IsItemOnHoldAndFound($i) - && IsAvailableForItemLevelRequest( $item, $borr ) - && CanItemBeReserved( $b, $i ) ) - { - push( @reservable, $i ); + my %borrowers; + ITEM: foreach my $i (@itemnumbers) { + my $item = GetItem($i); + next if IsItemOnHoldAndFound($i); + for my $b (@borrowernumbers) { + my $borr = $borrowers{$b}//= C4::Members::GetMember(borrowernumber => $_); + next unless IsAvailableForItemLevelRequest($item, $borr); + next unless CanItemBeReserved($b,$i); + + push @reservable, $i; + if (@reservable >= @borrowernumbers) { + $resfound = 0; + last ITEM; } + last; } } - - @reservable = uniq(@reservable); - - if ( @reservable >= @borrowernumbers ) { - $resfound = 0; - } } } return ( 0, "on_reserve" ) if $resfound; # '' when no hold was found diff --git a/reserve/request.pl b/reserve/request.pl index 3f4dba3..a022c99 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -512,6 +512,7 @@ foreach my $biblionumber (@biblionumbers) { } @reserves ) { + my $priority = $res->priority(); my %reserve; my @optionloop; for ( my $i = 1 ; $i <= $totalcount ; $i++ ) { @@ -519,7 +520,7 @@ foreach my $biblionumber (@biblionumbers) { @optionloop, { num => $i, - selected => ( $i == $res->priority() ), + selected => ( $i == $priority ), } ); }