Lines 444-449
foreach my $biblionumber (@biblionumbers) {
Link Here
|
444 |
$itemtypes->{ $biblioitem->{itemtype} }{imageurl} ); |
444 |
$itemtypes->{ $biblioitem->{itemtype} }{imageurl} ); |
445 |
} |
445 |
} |
446 |
|
446 |
|
|
|
447 |
# iterating through all items first to check if any of them available |
448 |
# to pass this value further inside down to IsAvailableForItemLevelRequest to |
449 |
# it's complicated logic to analyse. |
450 |
# (before this loop was inside that sub loop so it was O(n^2) ) |
451 |
my $items_any_available; |
452 |
|
453 |
$items_any_available = items_any_available($biblioitemnumber) |
454 |
if $patron; |
455 |
|
447 |
foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) { |
456 |
foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) { |
448 |
my $item = $iteminfos_of->{$itemnumber}; |
457 |
my $item = $iteminfos_of->{$itemnumber}; |
449 |
my $do_check; |
458 |
my $do_check; |
Lines 557-563
foreach my $biblionumber (@biblionumbers) {
Link Here
|
557 |
!$item->{cantreserve} |
566 |
!$item->{cantreserve} |
558 |
&& !$exceeded_maxreserves |
567 |
&& !$exceeded_maxreserves |
559 |
&& $can_item_be_reserved eq 'OK' |
568 |
&& $can_item_be_reserved eq 'OK' |
560 |
&& IsAvailableForItemLevelRequest($item_object, $patron) |
569 |
# items_any_available defined outside of the current loop, |
|
|
570 |
# so we avoiding loop inside IsAvailableForItemLevelRequest: |
571 |
&& IsAvailableForItemLevelRequest($item_object, $patron, undef, $items_any_available) |
561 |
) |
572 |
) |
562 |
{ |
573 |
{ |
563 |
$item->{available} = 1; |
574 |
$item->{available} = 1; |
Lines 745-747
sub sort_borrowerlist {
Link Here
|
745 |
} @{$borrowerslist}; |
756 |
} @{$borrowerslist}; |
746 |
return $ref; |
757 |
return $ref; |
747 |
} |
758 |
} |
748 |
- |
759 |
|
|
|
760 |
sub items_any_available { |
761 |
my $biblioitemnumber = shift; |
762 |
my $items_any_available; |
763 |
|
764 |
my @items = Koha::Items->search( { biblionumber => $biblioitemnumber } ); |
765 |
|
766 |
foreach my $i (@items) { |
767 |
my $reserves_control_branch = GetReservesControlBranch( $i->unblessed(), $patron->unblessed ); |
768 |
my $branchitemrule = C4::Circulation::GetBranchItemRule( $reserves_control_branch, $i->itype ); |
769 |
|
770 |
$items_any_available = 1 |
771 |
unless $i->itemlost |
772 |
|| $i->notforloan > 0 |
773 |
|| $i->withdrawn |
774 |
|| $i->onloan |
775 |
|| IsItemOnHoldAndFound( $i->id ) |
776 |
|| ( $i->damaged |
777 |
&& !C4::Context->preference('AllowHoldsOnDamagedItems') ) |
778 |
|| Koha::ItemTypes->find( $i->effective_itemtype() )->notforloan |
779 |
|| $branchitemrule->{holdallowed} == 1 && $patron->branchcode ne $i->homebranch; |
780 |
} |
781 |
|
782 |
return $items_any_available; |
783 |
} |