|
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 |
} |
| 784 |
|