X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-reserve.pl;h=2bbb4be2f62269f011bb3b20396ed67e76c91f1a;hb=c2e5ae2e66d78d40b1106be54ff2bc626e53b370;hp=ab02afe83d1585a0f38878d5dd4fc45755b55791;hpb=147ae6c665cd25a07471d90afcab3e38ce36d9e0;p=koha.git diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl index ab02afe83d..2bbb4be2f6 100755 --- a/opac/opac-reserve.pl +++ b/opac/opac-reserve.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl +# Copyright Katipo Communications 2002 +# Copyright Koha Development team 2012 +# # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the @@ -11,9 +14,9 @@ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; use warnings; @@ -29,7 +32,9 @@ use C4::Dates qw/format_date/; use C4::Context; use C4::Members; use C4::Branch; # GetBranches +use C4::Overdues; use C4::Debug; +use Koha::DateUtils; # use Data::Dumper; my $MAXIMUM_NUMBER_OF_RESERVES = C4::Context->preference("maxreserves"); @@ -45,8 +50,14 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( debug => 1, } ); -my $OPACDisplayRequestPriority = (C4::Context->preference("OPACDisplayRequestPriority")) ? 1 : 0; -sub get_out ($$$) { + +my ($show_holds_count, $show_priority); +for ( C4::Context->preference("OPACShowHoldQueueDetails") ) { + m/holds/o and $show_holds_count = 1; + m/priority/ and $show_priority = 1; +} + +sub get_out { output_html_with_http_headers(shift,shift,shift); # $query, $cookie, $template->output; exit; } @@ -111,34 +122,45 @@ $template->param( choose_branch => $OPACChooseBranch); # # -# Hash of biblionumber to biblio/biblioitems record. -my %biblioDataHash; - -# Hash of itemnumber to item info. -my %itemInfoHash; - +my %biblioDataHash; # Hash of biblionumber to biblio/biblioitems record. +my %itemInfoHash; # Hash of itemnumber to item info. foreach my $biblioNumber (@biblionumbers) { my $biblioData = GetBiblioData($biblioNumber); $biblioDataHash{$biblioNumber} = $biblioData; my @itemInfos = GetItemsInfo($biblioNumber); + + my $marcrecord= GetMarcBiblio($biblioNumber); + + # flag indicating existence of at least one item linked via a host record + my $hostitemsflag; + # adding items linked via host biblios + my @hostitemInfos = GetHostItemsInfo($marcrecord); + if (@hostitemInfos){ + $hostitemsflag =1; + push (@itemInfos,@hostitemInfos); + } + $biblioData->{itemInfos} = \@itemInfos; foreach my $itemInfo (@itemInfos) { $itemInfoHash{$itemInfo->{itemnumber}} = $itemInfo; } # Compute the priority rank. - my ( $rank, $reserves ) = GetReservesFromBiblionumber($biblioNumber,1); - $biblioData->{reservecount} = $rank; - foreach my $res (@$reserves) { - my $found = $res->{'found'}; - if ( $found && ($found eq 'W') ) { + my ( $rank, $reserves ) = + GetReservesFromBiblionumber( $biblioNumber, 1 ); + $biblioData->{reservecount} = 1; # new reserve + foreach my $res (@{$reserves}) { + my $found = $res->{found}; + if ( $found && $found eq 'W' ) { $rank--; } + else { + $biblioData->{reservecount}++; + } } - $rank++; - $biblioData->{rank} = $rank; + $biblioData->{rank} = $rank + 1; } # @@ -183,11 +205,19 @@ if ( $query->param('place_reserve') ) { my $itemNum = shift(@selectedItems); my $branch = shift(@selectedItems); # i.e., branch code, not name - my $singleBranchMode = $template->param('singleBranchMode'); + my $singleBranchMode = C4::Context->preference("singleBranchMode"); if ($singleBranchMode || ! $OPACChooseBranch) { # single branch mode or disabled user choosing $branch = $borr->{'branchcode'}; } + #item may belong to a host biblio, if yes change biblioNum to hosts bilbionumber + if ($itemNum ne '') { + my $hostbiblioNum = GetBiblionumberFromItemnumber($itemNum); + if ($hostbiblioNum ne $biblioNum) { + $biblioNum = $hostbiblioNum; + } + } + my $biblioData = $biblioDataHash{$biblioNum}; my $found; @@ -256,7 +286,7 @@ if ( $borr->{lost} && ($borr->{lost} eq 1) ) { lost => 1 ); } -if ( $borr->{debarred} && ($borr->{debarred} eq 1) ) { +if ( CheckBorrowerDebarred($borrowernumber) ) { $noreserves = 1; $template->param( message => 1, @@ -374,7 +404,7 @@ foreach my $biblioNum (@biblionumbers) { # change the background color. my $issues= GetItemIssue($itemNum); if ( $issues->{'date_due'} ) { - $itemLoopIter->{dateDue} = format_date($issues->{'date_due'}); + $itemLoopIter->{dateDue} = format_sqlduedatetime($issues->{date_due}); $itemLoopIter->{backgroundcolor} = 'onloan'; } @@ -382,6 +412,11 @@ foreach my $biblioNum (@biblionumbers) { my ($reservedate,$reservedfor,$expectedAt) = GetReservesFromItemnumber($itemNum); my $ItemBorrowerReserveInfo = GetMemberDetails( $reservedfor, 0); + # the item could be reserved for this borrower vi a host record, flag this + if ($reservedfor eq $borrowernumber){ + $itemLoopIter->{already_reserved} = 1; + } + if ( defined $reservedate ) { $itemLoopIter->{backgroundcolor} = 'reserved'; $itemLoopIter->{reservedate} = format_date($reservedate); @@ -423,6 +458,13 @@ foreach my $biblioNum (@biblionumbers) { $itemLoopIter->{nocancel} = 1; } + # if the items belongs to a host record, show link to host record + if ($itemInfo->{biblionumber} ne $biblioNum){ + $biblioLoopIter{hostitemsflag} = 1; + $itemLoopIter->{hostbiblionumber} = $itemInfo->{biblionumber}; + $itemLoopIter->{hosttitle} = GetBiblioData($itemInfo->{biblionumber})->{title}; + } + # If there is no loan, return and transfer, we show a checkbox. $itemLoopIter->{notforloan} = $itemLoopIter->{notforloan} || 0; @@ -436,7 +478,7 @@ foreach my $biblioNum (@biblionumbers) { $policy_holdallowed = 0; } - if (IsAvailableForItemLevelRequest($itemNum) and $policy_holdallowed and CanItemBeReserved($borrowernumber,$itemNum)) { + if (IsAvailableForItemLevelRequest($itemNum) and $policy_holdallowed and CanItemBeReserved($borrowernumber,$itemNum) and ($itemLoopIter->{already_reserved} ne 1)) { $itemLoopIter->{available} = 1; $numCopiesAvailable++; } @@ -451,13 +493,13 @@ foreach my $biblioNum (@biblionumbers) { $itemLoopIter->{imageurl} = getitemtypeimagelocation( 'opac', $itemTypes->{ $itemInfo->{itype} }{imageurl} ); # Show serial enumeration when needed - if ($itemLoopIter->{enumchron}) { - $itemdata_enumchron = 1; - } - $template->param( itemdata_enumchron => $itemdata_enumchron ); + if ($itemLoopIter->{enumchron}) { + $itemdata_enumchron = 1; + } push @{$biblioLoopIter{itemLoop}}, $itemLoopIter; } + $template->param( itemdata_enumchron => $itemdata_enumchron ); if ($numCopiesAvailable > 0) { $numBibsAvailable++; @@ -492,7 +534,8 @@ $template->param(itemtable_colspan => $itemTableColspan); # display infos $template->param(bibitemloop => $biblioLoop); -$template->param( showpriority=>1 ) if $OPACDisplayRequestPriority; +$template->param( showholds=>$show_holds_count); +$template->param( showpriority=>$show_priority); # can set reserve date in future if ( C4::Context->preference( 'AllowHoldDateInFuture' ) &&