X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=reserve%2Frequest.pl;h=a86e0e78b41dac6089f718e4a4e9a266e7243e18;hb=5d6c092921919526ade501facb1220f8a108a08f;hp=908a626b248d718c8f6c26959dd0207ed124af80;hpb=8e0b1fe58f7e4f6e595b18d43c939c203833dac1;p=koha_fer diff --git a/reserve/request.pl b/reserve/request.pl index 908a626b24..a86e0e78b4 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -3,6 +3,7 @@ #writen 2/1/00 by chris@katipo.oc.nz # Copyright 2000-2002 Katipo Communications +# Parts Copyright 2011 Catalyst IT # # This file is part of Koha. # @@ -15,9 +16,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. =head1 request.pl @@ -27,7 +28,7 @@ script to place reserves/requests use strict; use warnings; -use C4::Branch; # GetBranches get_branchinfos_of +use C4::Branch; use CGI; use List::MoreUtils qw/uniq/; use Date::Calc qw/Date_to_Days/; @@ -41,82 +42,85 @@ use C4::Circulation; use C4::Dates qw/format_date/; use C4::Members; use C4::Search; # enabled_staff_search_views +use Koha::DateUtils; my $dbh = C4::Context->dbh; my $sth; my $input = new CGI; -my ( $template, $borrowernumber, $cookie ) = get_template_and_user( +my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user( { template_name => "reserve/request.tmpl", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { reserveforothers => 1 }, + flagsrequired => { reserveforothers => 'place_holds' }, } ); my $multihold = $input->param('multi_hold'); $template->param(multi_hold => $multihold); +my $showallitems = $input->param('showallitems'); # get Branches and Itemtypes my $branches = GetBranches(); my $itemtypes = GetItemTypes(); - -my $default = C4::Context->userenv->{branch}; -my @values; -my %label_of; - -foreach my $branchcode (sort keys %{$branches} ) { - push @values, $branchcode; - $label_of{$branchcode} = $branches->{$branchcode}->{branchname}; + +my $userbranch = ''; +if (C4::Context->userenv && C4::Context->userenv->{'branch'}) { + $userbranch = C4::Context->userenv->{'branch'}; } -my $CGIbranch = CGI::scrolling_list( - -name => 'pickup', - -id => 'pickup', - -values => \@values, - -default => $default, - -labels => \%label_of, - -size => 1, - -multiple => 0, - ); + # Select borrowers infos my $findborrower = $input->param('findborrower'); $findborrower = '' unless defined $findborrower; $findborrower =~ s|,| |g; -my $cardnumber = $input->param('cardnumber') || ''; -my $borrowerslist; +my $borrowernumber_hold = $input->param('borrowernumber') || ''; my $messageborrower; -my $warnings; -my $messages; +my $maxreserves; my $date = C4::Dates->today('iso'); +my $action = $input->param('action'); +$action ||= q{}; + +if ( $action eq 'move' ) { + my $where = $input->param('where'); + my $reserve_id = $input->param('reserve_id'); + AlterPriority( $where, $reserve_id ); +} elsif ( $action eq 'cancel' ) { + my $reserve_id = $input->param('reserve_id'); + CancelReserve({ reserve_id => $reserve_id }); +} elsif ( $action eq 'setLowestPriority' ) { + my $reserve_id = $input->param('reserve_id'); + ToggleLowestPriority( $reserve_id ); +} elsif ( $action eq 'toggleSuspend' ) { + my $reserve_id = $input->param('reserve_id'); + my $suspend_until = $input->param('suspend_until'); + ToggleSuspend( $reserve_id, $suspend_until ); +} if ($findborrower) { - my ( $count, $borrowers ) = - SearchMember($findborrower, 'cardnumber', 'web' ); - - my @borrowers = @$borrowers; + my $borrowers = Search($findborrower, 'cardnumber'); - if ( $#borrowers == -1 ) { - $input->param( 'findborrower', '' ); + if ($borrowers && @$borrowers) { + if ( @$borrowers == 1 ) { + $borrowernumber_hold = $borrowers->[0]->{'borrowernumber'}; + } + else { + $template->param( borrower_list => sort_borrowerlist($borrowers)); + } + } else { $messageborrower = "'$findborrower'"; } - elsif ( $#borrowers == 0 ) { - $input->param( 'cardnumber', $borrowers[0]->{'cardnumber'} ); - $cardnumber = $borrowers[0]->{'cardnumber'}; - } - else { - $borrowerslist = \@borrowers; - } } -if ($cardnumber) { - my $borrowerinfo = GetMemberDetails( 0, $cardnumber ); +# If we have the borrowernumber because we've performed an action, then we +# don't want to try to place another reserve. +if ($borrowernumber_hold && !$action) { + my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold ); my $diffbranch; my @getreservloop; my $count_reserv = 0; - my $maxreserves; # we check the reserves of the borrower, and if he can reserv a document # FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ... @@ -124,8 +128,7 @@ if ($cardnumber) { my $number_reserves = GetReserveCount( $borrowerinfo->{'borrowernumber'} ); - if ( $number_reserves > C4::Context->preference('maxreserves') ) { - $warnings = 1; + if ( C4::Context->preference('maxreserves') && ($number_reserves >= C4::Context->preference('maxreserves')) ) { $maxreserves = 1; } @@ -134,74 +137,38 @@ if ($cardnumber) { my $expiry = 0; # flag set if patron account has expired if ($expiry_date and $expiry_date ne '0000-00-00' and Date_to_Days(split /-/,$date) > Date_to_Days(split /-/,$expiry_date)) { - $messages = $expiry = 1; + $expiry = 1; } - # check if the borrower make the reserv in a different branch if ( $borrowerinfo->{'branchcode'} ne C4::Context->userenv->{'branch'} ) { - $messages = 1; $diffbranch = 1; } $template->param( - borrowernumber => $borrowerinfo->{'borrowernumber'}, - borrowersurname => $borrowerinfo->{'surname'}, - borrowerfirstname => $borrowerinfo->{'firstname'}, - borrowerstreetaddress => $borrowerinfo->{'address'}, - borrowercity => $borrowerinfo->{'city'}, - borrowerphone => $borrowerinfo->{'phone'}, - borrowermobile => $borrowerinfo->{'mobile'}, - borrowerfax => $borrowerinfo->{'fax'}, - borrowerphonepro => $borrowerinfo->{'phonepro'}, - borroweremail => $borrowerinfo->{'email'}, - borroweremailpro => $borrowerinfo->{'emailpro'}, - borrowercategory => $borrowerinfo->{'category'}, - borrowerreservs => $count_reserv, - maxreserves => $maxreserves, - expiry => $expiry, - diffbranch => $diffbranch, - messages => $messages, - warnings => $warnings + borrowernumber => $borrowerinfo->{'borrowernumber'}, + borrowersurname => $borrowerinfo->{'surname'}, + borrowerfirstname => $borrowerinfo->{'firstname'}, + borrowerstreetaddress => $borrowerinfo->{'address'}, + borrowercity => $borrowerinfo->{'city'}, + borrowerphone => $borrowerinfo->{'phone'}, + borrowermobile => $borrowerinfo->{'mobile'}, + borrowerfax => $borrowerinfo->{'fax'}, + borrowerphonepro => $borrowerinfo->{'phonepro'}, + borroweremail => $borrowerinfo->{'email'}, + borroweremailpro => $borrowerinfo->{'emailpro'}, + borrowercategory => $borrowerinfo->{'category'}, + borrowerreservs => $count_reserv, + cardnumber => $borrowerinfo->{'cardnumber'}, + expiry => $expiry, + diffbranch => $diffbranch, ); } $template->param( messageborrower => $messageborrower ); -my $CGIselectborrower; -if ($borrowerslist) { - my @values; - my %labels; - - foreach my $borrower ( - sort { - $a->{surname} - . $a->{firstname} cmp $b->{surname} - . $b->{firstname} - } @{$borrowerslist} - ) - { - push @values, $borrower->{cardnumber}; - - $labels{ $borrower->{cardnumber} } = sprintf( - '%s, %s ... (%s - %s) ... %s', - $borrower->{surname}, $borrower->{firstname}, - $borrower->{cardnumber}, $borrower->{categorycode}, - $borrower->{address}, - ); - } - - $CGIselectborrower = CGI::scrolling_list( - -name => 'cardnumber', - -values => \@values, - -labels => \%labels, - -size => 7, - -multiple => 0, - ); -} - -# FIXME launch another time GetMemberDetails perhaps until -my $borrowerinfo = GetMemberDetails( 0, $cardnumber ); +# FIXME launch another time GetMember perhaps until +my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold ); my @biblionumbers = (); my $biblionumbers = $input->param('biblionumbers'); @@ -211,46 +178,54 @@ if ($multihold) { push @biblionumbers, $input->param('biblionumber'); } +my $itemdata_enumchron = 0; my @biblioloop = (); foreach my $biblionumber (@biblionumbers) { my %biblioloopiter = (); - my $maxreserves; - my $dat = GetBiblioData($biblionumber); + my $dat = GetBiblioData($biblionumber); - if ( not CanBookBeReserved($borrowerinfo->{borrowernumber}, $biblionumber) ) { - $warnings = 1; + unless ( CanBookBeReserved($borrowerinfo->{borrowernumber}, $biblionumber) ) { $maxreserves = 1; } + + my $alreadypossession; + if (not C4::Context->preference('AllowHoldsOnPatronsPossessions') and CheckIfIssuedToPatron($borrowerinfo->{borrowernumber},$biblionumber)) { + $alreadypossession = 1; + } + # get existing reserves ..... - my ( $count, $reserves ) = GetReservesFromBiblionumber($biblionumber,1); + my $reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber, all_dates => 1 }); + my $count = scalar( @$reserves ); my $totalcount = $count; - my $alreadyreserved; + my $holds_count = 0; + my $alreadyreserved = 0; foreach my $res (@$reserves) { if ( defined $res->{found} && $res->{found} eq 'W' ) { $count--; } - if ( defined $borrowerinfo && ($borrowerinfo->{borrowernumber} eq $res->{borrowernumber}) ) { - $warnings = 1; + if ( defined $borrowerinfo && defined($borrowerinfo->{borrowernumber}) && ($borrowerinfo->{borrowernumber} eq $res->{borrowernumber}) ) { + $holds_count++; + } + } + + if ( $holds_count ) { $alreadyreserved = 1; $biblioloopiter{warn} = 1; $biblioloopiter{alreadyres} = 1; - } } - $template->param( alreadyreserved => $alreadyreserved, - messages => $messages, - warnings => $warnings, - maxreserves=>$maxreserves - ); - - + $template->param( + alreadyreserved => $alreadyreserved, + alreadypossession => $alreadypossession, + ); + # FIXME think @optionloop, is maybe obsolete, or must be switchable by a systeme preference fixed rank or not # make priorities options - + my @optionloop; for ( 1 .. $count + 1 ) { push( @@ -267,81 +242,96 @@ foreach my $biblionumber (@biblionumbers) { my @branchcodes; my %itemnumbers_of_biblioitem; my @itemnumbers; - + ## $items is array of 'item' table numbers if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){ @itemnumbers = @$items; } - else { + my @hostitems = get_hostitemnumbers_of($biblionumber); + if (@hostitems){ + $template->param('hostitemsflag' => 1); + push(@itemnumbers, @hostitems); + } + + if (!@itemnumbers) { $template->param('noitems' => 1); $biblioloopiter{noitems} = 1; } - + ## Hash of item number to 'item' table fields my $iteminfos_of = GetItemInfosOf(@itemnumbers); - + ## Here we go backwards again to create hash of biblioitemnumber to itemnumbers, ## when by definition all of the itemnumber have the same biblioitemnumber foreach my $itemnumber (@itemnumbers) { my $biblioitemnumber = $iteminfos_of->{$itemnumber}->{biblioitemnumber}; push( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} }, $itemnumber ); } - + ## Should be same as biblionumber my @biblioitemnumbers = keys %itemnumbers_of_biblioitem; - + my $notforloan_label_of = get_notforloan_label_of(); - + ## Hash of biblioitemnumber to 'biblioitem' table records my $biblioiteminfos_of = GetBiblioItemInfosOf(@biblioitemnumbers); - + my @bibitemloop; - + foreach my $biblioitemnumber (@biblioitemnumbers) { my $biblioitem = $biblioiteminfos_of->{$biblioitemnumber}; my $num_available = 0; my $num_override = 0; - + my $hiddencount = 0; + $biblioitem->{description} = $itemtypes->{ $biblioitem->{itemtype} }{description}; + if($biblioitem->{biblioitemnumber} ne $biblionumber){ + $biblioitem->{hostitemsflag}=1; + } $biblioloopiter{description} = $biblioitem->{description}; $biblioloopiter{itypename} = $biblioitem->{description}; $biblioloopiter{imageurl} = getitemtypeimagelocation('intranet', $itemtypes->{$biblioitem->{itemtype}}{imageurl}); - + foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) { my $item = $iteminfos_of->{$itemnumber}; - + unless (C4::Context->preference('item-level_itypes')) { $item->{itype} = $biblioitem->{itemtype}; } - + $item->{itypename} = $itemtypes->{ $item->{itype} }{description}; $item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} ); $item->{homebranchname} = $branches->{ $item->{homebranch} }{branchname}; - + # if the holdingbranch is different than the homebranch, we show the # holdingbranch of the document too if ( $item->{homebranch} ne $item->{holdingbranch} ) { $item->{holdingbranchname} = $branches->{ $item->{holdingbranch} }{branchname}; } - + + if($item->{biblionumber} ne $biblionumber){ + $item->{hostitemsflag}=1; + $item->{hosttitle} = GetBiblioData($item->{biblionumber})->{title}; + } + # add information $item->{itemcallnumber} = $item->{itemcallnumber}; - + # if the item is currently on loan, we display its return date and # change the background color my $issues= GetItemIssue($itemnumber); if ( $issues->{'date_due'} ) { - $item->{date_due} = format_date($issues->{'date_due'}); + $item->{date_due} = format_sqldatetime($issues->{date_due}); $item->{backgroundcolor} = 'onloan'; } - + # checking reserve - my ($reservedate,$reservedfor,$expectedAt) = GetReservesFromItemnumber($itemnumber); - my $ItemBorrowerReserveInfo = GetMemberDetails( $reservedfor, 0); - + my ($reservedate,$reservedfor,$expectedAt,$reserve_id,$wait) = GetReservesFromItemnumber($itemnumber); + my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor ); + if ( defined $reservedate ) { $item->{backgroundcolor} = 'reserved'; $item->{reservedate} = format_date($reservedate); @@ -349,31 +339,35 @@ foreach my $biblionumber (@biblionumbers) { $item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'}; $item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'}; $item->{ExpectedAtLibrary} = $branches->{$expectedAt}{branchname}; - + $item->{waitingdate} = $wait; } - + # Management of the notforloan document if ( $item->{notforloan} ) { $item->{backgroundcolor} = 'other'; $item->{notforloanvalue} = $notforloan_label_of->{ $item->{notforloan} }; } - + # Management of lost or long overdue items if ( $item->{itemlost} ) { - + # FIXME localized strings should never be in Perl code $item->{message} = $item->{itemlost} == 1 ? "(lost)" : $item->{itemlost} == 2 ? "(long overdue)" : ""; $item->{backgroundcolor} = 'other'; + if (GetHideLostItemsPreference($borrowernumber) && !$showallitems) { + $item->{hide} = 1; + $hiddencount++; + } } - + # Check the transit status my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers($itemnumber); - + if ( defined $transfertwhen && $transfertwhen ne '' ) { $item->{transfertwhen} = format_date($transfertwhen); $item->{transfertfrom} = @@ -381,73 +375,83 @@ foreach my $biblionumber (@biblionumbers) { $item->{transfertto} = $branches->{$transfertto}{branchname}; $item->{nocancel} = 1; } - + # If there is no loan, return and transfer, we show a checkbox. $item->{notforloan} = $item->{notforloan} || 0; - + # if independent branches is on we need to check if the person can reserve # for branches they arent logged in to - if ( C4::Context->preference("IndependantBranches") ) { + if ( C4::Context->preference("IndependentBranches") ) { if (! C4::Context->preference("canreservefromotherbranches")){ # cant reserve items so need to check if item homebranch and userenv branch match if not we cant reserve my $userenv = C4::Context->userenv; - if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) { + unless ( C4::Context->IsSuperLibrarian ) { $item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} ); } } } - + my $branch = C4::Circulation::_GetCircControlBranch($item, $borrowerinfo); my $branchitemrule = GetBranchItemRule( $branch, $item->{'itype'} ); my $policy_holdallowed = 1; - + $item->{'holdallowed'} = $branchitemrule->{'holdallowed'}; - + if ( $branchitemrule->{'holdallowed'} == 0 || - ( $branchitemrule->{'holdallowed'} == 1 && $borrowerinfo->{'branchcode'} ne $item->{'homebranch'} ) ) { + ( $branchitemrule->{'holdallowed'} == 1 && + $borrowerinfo->{'branchcode'} ne $item->{'homebranch'} ) ) { $policy_holdallowed = 0; } - if (IsAvailableForItemLevelRequest($itemnumber) and not $item->{cantreserve} and CanItemBeReserved($borrowerinfo->{borrowernumber}, $itemnumber) ) { - if ( not $policy_holdallowed and C4::Context->preference( 'AllowHoldPolicyOverride' ) ) { - $item->{override} = 1; - $num_override++; - } elsif ( $policy_holdallowed ) { - $item->{available} = 1; - $num_available++; - } + if ( + $policy_holdallowed + && !$item->{cantreserve} + && IsAvailableForItemLevelRequest($itemnumber) + && CanItemBeReserved( + $borrowerinfo->{borrowernumber}, $itemnumber + ) + ) + { + $item->{available} = 1; + $num_available++; + } + elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) { + +# If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules + $item->{override} = 1; + $num_override++; } + # If none of the conditions hold true, then neither override nor available is set and the item cannot be checked - - # FIXME: move this to a pm - my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'"); - $sth2->execute($item->{ReservedForBorrowernumber},$item->{itemnumber}); - while (my $wait_hashref = $sth2->fetchrow_hashref) { - $item->{waitingdate} = format_date($wait_hashref->{waitingdate}); + + # Show serial enumeration when needed + if ($item->{enumchron}) { + $itemdata_enumchron = 1; } + push @{ $biblioitem->{itemloop} }, $item; } - + if ( $num_override == scalar( @{ $biblioitem->{itemloop} } ) ) { # That is, if all items require an override $template->param( override_required => 1 ); } elsif ( $num_available == 0 ) { $template->param( none_available => 1 ); - $template->param( warnings => 1 ); $biblioloopiter{warn} = 1; $biblioloopiter{none_avail} = 1; } - + $template->param( hiddencount => $hiddencount); + push @bibitemloop, $biblioitem; } # existingreserves building my @reserveloop; - ( $count, $reserves ) = GetReservesFromBiblionumber($biblionumber,1); - foreach my $res ( sort { + $reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber, all_dates => 1 }); + foreach my $res ( sort { my $a_found = $a->{found} || ''; my $b_found = $a->{found} || ''; - $a_found cmp $b_found; + $a_found cmp $b_found; } @$reserves ) { my %reserve; my @optionloop; @@ -460,11 +464,11 @@ foreach my $biblionumber (@biblionumbers) { } ); } - - if ( defined $res->{'found'} && $res->{'found'} eq 'W' ) { + + if ( defined $res->{'found'} && ($res->{'found'} eq 'W' || $res->{'found'} eq 'T' )) { my $item = $res->{'itemnumber'}; $item = GetBiblioFromItemNumber($item,undef); - $reserve{'wait'}= 1; + $reserve{'wait'}= 1; $reserve{'holdingbranch'}=$item->{'holdingbranch'}; $reserve{'biblionumber'}=$item->{'biblionumber'}; $reserve{'barcodenumber'} = $item->{'barcode'}; @@ -472,10 +476,16 @@ foreach my $biblionumber (@biblionumbers) { $reserve{'itemnumber'} = $res->{'itemnumber'}; $reserve{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'}; if($reserve{'holdingbranch'} eq $reserve{'wbrcode'}){ - $reserve{'atdestination'} = 1; + # Just because the holdingbranch matches the reserve branch doesn't mean the item + # has arrived at the destination, check for an open transfer for the item as well + my ( $transfertwhen, $transfertfrom, $transferto ) = C4::Circulation::GetTransfers( $res->{itemnumber} ); + if ( not $transferto or $transferto ne $res->{branchcode} ) { + $reserve{'atdestination'} = 1; + } } # set found to 1 if reserve is waiting for patron pickup $reserve{'found'} = 1 if $res->{'found'} eq 'W'; + $reserve{'intransit'} = 1 if $res->{'found'} eq 'T'; } elsif ($res->{priority} > 0) { if (defined($res->{itemnumber})) { my $item = GetItem($res->{itemnumber}); @@ -484,19 +494,21 @@ foreach my $biblionumber (@biblionumbers) { $reserve{'item_level_hold'} = 1; } } - + # get borrowers reserve info - my $reserveborrowerinfo = GetMemberDetails( $res->{'borrowernumber'}, 0); + my $reserveborrowerinfo = GetMember( borrowernumber => $res->{'borrowernumber'} ); if (C4::Context->preference('HidePatronName')){ $reserve{'hidename'} = 1; $reserve{'cardnumber'} = $reserveborrowerinfo->{'cardnumber'}; } + $reserve{'expirationdate'} = format_date( $res->{'expirationdate'} ) + unless ( !defined($res->{'expirationdate'}) || $res->{'expirationdate'} eq '0000-00-00' ); $reserve{'date'} = format_date( $res->{'reservedate'} ); $reserve{'borrowernumber'} = $res->{'borrowernumber'}; $reserve{'biblionumber'} = $res->{'biblionumber'}; $reserve{'borrowernumber'} = $res->{'borrowernumber'}; $reserve{'firstname'} = $reserveborrowerinfo->{'firstname'}; - $reserve{'surname'} = $reserveborrowerinfo->{'surname'}; + $reserve{'surname'} = $reserveborrowerinfo->{'surname'}; $reserve{'notes'} = $res->{'reservenotes'}; $reserve{'wait'} = ( ( defined $res->{'found'} and $res->{'found'} eq 'W' ) or ( $res->{'priority'} eq '0' ) ); @@ -506,30 +518,38 @@ foreach my $biblionumber (@biblionumbers) { $reserve{'ccode'} = $res->{'ccode'}; $reserve{'barcode'} = $res->{'barcode'}; $reserve{'priority'} = $res->{'priority'}; - $reserve{'branchloop'} = GetBranchesLoop($res->{'branchcode'}); + $reserve{'lowestPriority'} = $res->{'lowestPriority'}; $reserve{'optionloop'} = \@optionloop; - + $reserve{'suspend'} = $res->{'suspend'}; + $reserve{'suspend_until'} = $res->{'suspend_until'}; + $reserve{'reserve_id'} = $res->{'reserve_id'}; + + if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) { + $reserve{'branchloop'} = [ GetBranchDetail($res->{'branchcode'}) ]; + } else { + $reserve{'branchloop'} = GetBranchesLoop($res->{'branchcode'}); + } + push( @reserveloop, \%reserve ); } - + # get the time for the form name... my $time = time(); - - $template->param( - CGIbranch => $CGIbranch, + $template->param( + branchloop => GetBranchesLoop($userbranch), time => $time, fixedRank => $fixedRank, ); - + # display infos $template->param( optionloop => \@optionloop, bibitemloop => \@bibitemloop, + itemdata_enumchron => $itemdata_enumchron, date => $date, biblionumber => $biblionumber, findborrower => $findborrower, - cardnumber => $cardnumber, title => $dat->{title}, author => $dat->{author}, holdsview => 1, @@ -541,7 +561,6 @@ foreach my $biblionumber (@biblionumbers) { borrower_branchcode => $borrowerinfo->{'branchcode'}, ); } - $template->param(CGIselectborrower => $CGIselectborrower) if defined $CGIselectborrower; $biblioloopiter{biblionumber} = $biblionumber; $biblioloopiter{title} = $dat->{title}; @@ -551,24 +570,36 @@ foreach my $biblionumber (@biblionumbers) { if (@reserveloop) { $template->param( reserveloop => \@reserveloop ); } - push @biblioloop, \%biblioloopiter; } $template->param( biblioloop => \@biblioloop ); $template->param( biblionumbers => $biblionumbers ); +$template->param( maxreserves => $maxreserves ); if ($multihold) { $template->param( multi_hold => 1 ); } if ( C4::Context->preference( 'AllowHoldDateInFuture' ) ) { - $template->param( - reserve_in_future => 1, - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), - ); + $template->param( reserve_in_future => 1 ); } - + +$template->param( + SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'), + AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'), +); + # printout the page output_html_with_http_headers $input, $cookie, $template->output; + +sub sort_borrowerlist { + my $borrowerslist = shift; + my $ref = []; + push @{$ref}, sort { + uc( $a->{surname} . $a->{firstname} ) cmp + uc( $b->{surname} . $b->{firstname} ) + } @{$borrowerslist}; + return $ref; +}