Bug 25375: (QA follow-up) Count available items rather than iterating
authorNick Clemens <nick@bywatersolutions.com>
Fri, 11 Sep 2020 15:23:02 +0000 (15:23 +0000)
committerLucas Gass <lucas@bywatersolutions.com>
Tue, 1 Nov 2022 21:49:55 +0000 (21:49 +0000)
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Joonas Kylmälä <joonas.kylmala@iki.fi>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit d9cb39e57d1e5c979c605e48493ee5f40df3dac4)

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
Koha/SearchEngine/Elasticsearch.pm

index c49aa17..20462cc 100644 (file)
@@ -777,21 +777,16 @@ sub marc_records_to_documents {
             my ($tag, $code) = C4::Biblio::GetMarcFromKohaField('biblio.biblionumber');
             my $field = $record->field($tag);
             my $biblionumber = $field->is_control_field ? $field->data : $field->subfield($code);
-            my $biblio = Koha::Biblios->find($biblionumber);
-            my $items = $biblio->items;
-            my $available = 0;
-            while (my $item = $items->next) {
-                next if $item->onloan;
-                next if $item->notforloan;
-                next if $item->withdrawn;
-                next if $item->itemlost;
-                next if $item->damaged;
-
-                $available = 1;
-                last;
-            }
-
-            $record_document->{available} = $available ? \1 : \0;
+            my $avail_items = Koha::Items->search({
+                biblionumber => $biblionumber,
+                onloan       => undef,
+                notforloan   => 0,
+                withdrawn    => 0,
+                itemlost     => 0,
+                damaged      => 0
+            })->count;
+
+            $record_document->{available} = $avail_items ? \1 : \0;
         }
 
         push @record_documents, $record_document;