From aea2a830bfbfb5000aab0450f331d191a69dbd02 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Wed, 25 May 2022 14:44:50 +0000 Subject: [PATCH] Bug 30847: Don't get biblio/item info when placing holds The only bit we get form the hash is the rank and title We can si9mply fetch the biblio once to calculate no need to fetch all the info as we don't display or use it --- opac/opac-reserve.pl | 81 ++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl index 7b9720d617..471cd5d519 100755 --- a/opac/opac-reserve.pl +++ b/opac/opac-reserve.pl @@ -131,43 +131,7 @@ $template->param( branch => $branch ); # # -# Build hashes of the requested biblio(item)s and items. -# -# - -my %biblioDataHash; # Hash of biblionumber to biblio/biblioitems record. -foreach my $biblioNumber (@biblionumbers) { - - my $biblioData = GetBiblioData($biblioNumber); - $biblioDataHash{$biblioNumber} = $biblioData; - - my @itemInfos = GetItemsInfo($biblioNumber); - - my $marcrecord= GetMarcBiblio({ biblionumber => $biblioNumber }); - - # flag indicating existence of at least one item linked via a host record - # adding items linked via host biblios - my @hostitemInfos = GetHostItemsInfo($marcrecord); - if (@hostitemInfos){ - push (@itemInfos,@hostitemInfos); - } - - $biblioData->{itemInfos} = \@itemInfos; - - # Compute the priority rank. - my $biblio = Koha::Biblios->find( $biblioNumber ); - next unless $biblio; - - $biblioData->{object} = $biblio; - my $reservecount = $biblio->holds->search({ found => [ {"!=" => "W"},undef] })->count; - $biblioData->{reservecount} = $reservecount; - $biblioData->{rank} = $reservecount + 1; -} - -# -# -# If this is the second time through this script, it -# means we are carrying out the hold request, possibly +# Here we are carrying out the hold request, possibly # with a specific item for each biblionumber. # # @@ -239,8 +203,6 @@ if ( $query->param('place_reserve') ) { $biblioNum = $item->biblionumber; } - my $biblioData = $biblioDataHash{$biblioNum}; - # Check for user supplied reserve date my $startdate; if ( C4::Context->preference('AllowHoldDateInFuture') @@ -251,7 +213,9 @@ if ( $query->param('place_reserve') ) { my $patron_expiration_date = $query->param("expiration_date_$biblioNum"); - my $rank = $biblioData->{rank}; + my $biblio = Koha::Biblios->find($biblioNum); + my $rank = $biblio->holds->search({ found => [ {"!=" => "W"},undef] })->count + 1; + if ( $item ) { $canreserve = 1 if CanItemBeReserved( $patron, $item, $branch )->{status} eq 'OK'; } @@ -292,7 +256,7 @@ if ( $query->param('place_reserve') ) { reservation_date => $startdate, expiration_date => $patron_expiration_date, notes => $notes, - title => $biblioData->{title}, + title => $biblio->title, itemnumber => $itemNum, found => undef, itemtype => $itemtype, @@ -307,6 +271,41 @@ if ( $query->param('place_reserve') ) { exit; } +# +# +# Build hashes of the requested biblio(item)s and items. +# +# + +my %biblioDataHash; # Hash of biblionumber to biblio/biblioitems record. +foreach my $biblioNumber (@biblionumbers) { + + my $biblioData = GetBiblioData($biblioNumber); + $biblioDataHash{$biblioNumber} = $biblioData; + + my @itemInfos = GetItemsInfo($biblioNumber); + + my $marcrecord= GetMarcBiblio({ biblionumber => $biblioNumber }); + + # flag indicating existence of at least one item linked via a host record + # adding items linked via host biblios + my @hostitemInfos = GetHostItemsInfo($marcrecord); + if (@hostitemInfos){ + push (@itemInfos,@hostitemInfos); + } + + $biblioData->{itemInfos} = \@itemInfos; + + # Compute the priority rank. + my $biblio = Koha::Biblios->find( $biblioNumber ); + next unless $biblio; + + $biblioData->{object} = $biblio; + my $reservecount = $biblio->holds->search({ found => [ {"!=" => "W"},undef] })->count; + $biblioData->{reservecount} = $reservecount; + $biblioData->{rank} = $reservecount + 1; +} + # # # Here we check that the borrower can actually make reserves Stage 1. -- 2.30.2