From dc19e7214f9e4781ac320d2780c0b9d99cf3c14f Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Thu, 1 Aug 2019 17:01:28 +0000
Subject: [PATCH] Bug 23414: Prefetch transfers, use only default framework,
 use elsif

This further cleans up the code, before we tested each condition though we return only one status line.

Koha mappings can no longer differ by framework so we don't need to fetch the biblio framework

Prefetching should offer a boost

To test:
Same as before - there is not as big a boost form this, but there shouldn't be a hit

Signed-off-by: Liz Rea <wizzyrea@gmail.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
---
 C4/XSLT.pm | 70 +++++++++++++++++++++++++++++---------------------------------
 1 file changed, 33 insertions(+), 37 deletions(-)

diff --git a/C4/XSLT.pm b/C4/XSLT.pm
index c5d916053c..9b435cb1fe 100644
--- a/C4/XSLT.pm
+++ b/C4/XSLT.pm
@@ -293,14 +293,14 @@ sub buildKohaItemsNamespace {
     my ($biblionumber, $hidden_items) = @_;
 
     my $search_params;
-    $search_params->{biblionumber} = $biblionumber;
-    $search_params->{itemnumber} = { not_in => $hidden_items } if $hidden_items;
-    my @items = Koha::Items->search($search_params);
+    $search_params->{'me.biblionumber'} = $biblionumber;
+    $search_params->{'me.itemnumber'} = { not_in => $hidden_items } if $hidden_items;
+    my @items = Koha::Items->search($search_params,{prefetch=>['branchtransfers','reserves']});
 
     my $shelflocations =
-      { map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => GetFrameworkCode($biblionumber), kohafield => 'items.location' } ) };
+      { map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => "", kohafield => 'items.location' } ) };
     my $ccodes =
-      { map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => GetFrameworkCode($biblionumber), kohafield => 'items.ccode' } ) };
+      { map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => "", kohafield => 'items.ccode' } ) };
 
     my %branches = map { $_->branchcode => $_->branchname } Koha::Libraries->search({}, { order_by => 'branchname' });
 
@@ -311,40 +311,36 @@ sub buildKohaItemsNamespace {
     for my $item (@items) {
         my $status;
 
-        my ( $transfertwhen, $transfertfrom, $transfertto ) = C4::Circulation::GetTransfers($item->itemnumber);
-
         my $reservestatus = C4::Reserves::GetReserveStatus( $item->itemnumber );
 
-        if ( ( $item->itype && $itemtypes->{ $item->itype }->{notforloan} ) || $item->notforloan || $item->onloan || $item->withdrawn || $item->itemlost || $item->damaged ||
-             (defined $transfertwhen && $transfertwhen ne '') || $item->{itemnotforloan} || (defined $reservestatus && $reservestatus eq "Waiting") || $item->has_pending_hold ){
-            if ( $item->notforloan < 0) {
-                $status = "On order";
-            }
-            if ( $item->notforloan && $item->notforloan > 0 || $item->itype && $itemtypes->{ $item->itype }->{notforloan} && $itemtypes->{ $item->itype }->{notforloan} == 1 ) {
-                $status = "reference";
-            }
-            if ($item->onloan) {
-                $status = "Checked out";
-            }
-            if ( $item->withdrawn) {
-                $status = "Withdrawn";
-            }
-            if ($item->itemlost) {
-                $status = "Lost";
-            }
-            if ($item->damaged) {
-                $status = "Damaged";
-            }
-            if (defined $transfertwhen && $transfertwhen ne '') {
-                $status = 'In transit';
-            }
-            if (defined $reservestatus && $reservestatus eq "Waiting") {
-                $status = 'Waiting';
-            }
-            if ($item->has_pending_hold) {
-                $status = 'Pending hold';
-            }
-        } else {
+        if ($item->has_pending_hold) {
+            $status = 'Pending hold';
+        }
+        elsif ( $item->holds->waiting->count ) {
+            $status = 'Waiting';
+        }
+        elsif ($item->get_transfer) {
+            $status = 'In transit';
+        }
+        elsif ($item->damaged) {
+            $status = "Damaged";
+        }
+        elsif ($item->itemlost) {
+            $status = "Lost";
+        }
+        elsif ( $item->withdrawn) {
+            $status = "Withdrawn";
+        }
+        elsif ($item->onloan) {
+            $status = "Checked out";
+        }
+        elsif ( $item->notforloan && $item->notforloan > 0 || $item->itype && $itemtypes->{ $item->itype }->{notforloan} && $itemtypes->{ $item->itype }->{notforloan} == 1 ) {
+            $status = "reference";
+        }
+        elsif ( $item->notforloan < 0) {
+            $status = "On order";
+        }
+        else {
             $status = "available";
         }
         my $homebranch = $item->homebranch? xml_escape($branches{$item->homebranch}):'';
-- 
2.11.0