@@ -, +, @@ --- opac/opac-reserve.pl | 92 ++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 47 deletions(-) --- a/opac/opac-reserve.pl +++ a/opac/opac-reserve.pl @@ -130,49 +130,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 $biblio = Koha::Biblios->find( $biblioNumber ); - next unless $biblio; - - my $marcrecord = $biblio->metadata->record; - - my $items = - $biblio->items->filter_by_visible_in_opac( { patron => $patron } ); - my $host_items = - $biblio->host_items->filter_by_visible_in_opac( { patron => $patron } ); - $items = $biblio->items->search_ordered( - { - itemnumber => { - -in => [ - $items->get_column('itemnumber'), - $host_items->get_column('itemnumber') - ] - } - } - ); - - $biblioData->{items} = [$items->as_list]; # FIXME Potentially a lot in memory here! - - # Compute the priority rank. - $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. # # @@ -245,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') @@ -260,7 +216,8 @@ if ( $query->param('place_reserve') ) { my $itemtype = $query->param('itemtype') || undef; $itemtype = undef if $itemNum; - 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'; } @@ -299,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, @@ -314,6 +271,47 @@ 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 $biblio = Koha::Biblios->find( $biblioNumber ); + next unless $biblio; + + my $marcrecord = $biblio->metadata->record; + + my $items = + $biblio->items->filter_by_visible_in_opac( { patron => $patron } ); + my $host_items = + $biblio->host_items->filter_by_visible_in_opac( { patron => $patron } ); + $items = $biblio->items->search_ordered( + { + itemnumber => { + -in => [ + $items->get_column('itemnumber'), + $host_items->get_column('itemnumber') + ] + } + } + ); + + $biblioData->{items} = [$items->as_list]; # FIXME Potentially a lot in memory here! + + # Compute the priority rank. + $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. --