X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=reserve%2Frequest.pl;h=acb813c7f1de879a817c8e31dd3da7f6dcd9a88f;hb=cf4144bca8d9a8c4010347d40558f29382d5669c;hp=6a7ec0e81055e8651879e9a701ec9ff3272e5a05;hpb=68924c5e6bb5cf18bd22b7345259a436240ce231;p=koha.git diff --git a/reserve/request.pl b/reserve/request.pl index 6a7ec0e810..acb813c7f1 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -1,11 +1,7 @@ #!/usr/bin/perl -# $Id$ -#script to place reserves/requests #writen 2/1/00 by chris@katipo.oc.nz - - # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -23,63 +19,73 @@ # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA +=head1 request.pl + +script to place reserves/requests + +=cut + use strict; -use HTML::Template; +use warnings; +use C4::Branch; # GetBranches get_branchinfos_of use CGI; -use Date::Manip; use List::MoreUtils qw/uniq/; -use Data::Dumper; - -use C4::Search; +use Date::Calc qw/Date_to_Days/; use C4::Output; -use C4::Interface::CGI::Output; use C4::Auth; -use C4::Reserves2; +use C4::Reserves; use C4::Biblio; +use C4::Items; use C4::Koha; -use C4::Circulation::Circ2; -use C4::Acquisition; -use C4::Date; +use C4::Circulation; +use C4::Dates qw/format_date/; use C4::Members; +use C4::Search; # enabled_staff_search_views my $dbh = C4::Context->dbh; my $sth; my $input = new CGI; -my ($template, $borrowernumber, $cookie) - = get_template_and_user({ - template_name => "reserve/request.tmpl", - query => $input, - type => "intranet", +my ( $template, $borrowernumber, $cookie ) = get_template_and_user( + { + template_name => "reserve/request.tmpl", + query => $input, + type => "intranet", authnotrequired => 0, - flagsrequired => {reserveforothers => 1}, - }); + flagsrequired => { reserveforothers => 1 }, + } +); + +# get Branches and Itemtypes +my $branches = GetBranches(); +my $itemtypes = GetItemTypes(); # get biblio information.... -my $bib = $input->param('bib'); -warn '[Debub Pierrick] $bib: ', $bib; -my $dat = bibdata($bib); +my $biblionumber = $input->param('biblionumber'); +my $dat = GetBiblioData($biblionumber); # Select borrowers infos my $findborrower = $input->param('findborrower'); $findborrower =~ s|,| |g; my $cardnumber = $input->param('cardnumber'); -my %env; my $borrowerslist; my $messageborrower; +my $warnings; +my $messages; -my $date = today(); +my $date = C4::Dates->today('iso'); if ($findborrower) { - my ($count,$borrowers) = BornameSearch(\%env, $findborrower, 'cardnumber', 'web'); + my ( $count, $borrowers ) = + SearchMember($findborrower, 'cardnumber', 'web' ); my @borrowers = @$borrowers; - if ($#borrowers == -1) { - $input->param('findborrower', ''); - $messageborrower = "'$findborrower'"; + if ( $#borrowers == -1 ) { + $input->param( 'findborrower', '' ); + $messageborrower = "'$findborrower'"; } - elsif ($#borrowers == 0) { - $input->param('cardnumber', $borrowers[0]->{'cardnumber'}); + elsif ( $#borrowers == 0 ) { + $input->param( 'cardnumber', $borrowers[0]->{'cardnumber'} ); $cardnumber = $borrowers[0]->{'cardnumber'}; } else { @@ -88,47 +94,63 @@ if ($findborrower) { } if ($cardnumber) { - my $borrowerinfo = getpatroninformation (\%env,0,$cardnumber); - my $expiry; - my $diffbranch; - my @getreservloop; - my $count_reserv = 0; - my $maxreserves; - -# we check the reserves of the borrower, and if he can reserv a document + my $borrowerinfo = GetMemberDetails( 0, $cardnumber ); + 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" ... - my $number_reserves = - GetNumberReservesFromBorrower($borrowerinfo->{'borrowernumber'}); + my $number_reserves = + GetReserveCount( $borrowerinfo->{'borrowernumber'} ); - if ($number_reserves > C4::Context->preference('maxreserves')) { - $maxreserves = 1; - } + if ( not CanBookBeReserved($borrowerinfo->{borrowernumber}, $biblionumber)) { + $warnings = 1; + $maxreserves = 1; + } + + # we check the date expiry of the borrower (only if there is an expiry date, otherwise, set to 1 (warn) + my $expiry_date = $borrowerinfo->{dateexpiry}; + 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; + }else{ + $expiry = 0; + } -# we check the date expiricy of the borrower - my $warning=Date_Cmp(ParseDate("today"),format_date($borrowerinfo->{'expiry'})); - if ( $warning > 0) { - $expiry = 1; - } - -# check if the borrower make the reserv in a different branch - if ($borrowerinfo->{'branchcode'} ne C4::Context->userenv->{'branch'}) { - $diffbranch = 1; - } - - $template->param( - borrowersurname => $borrowerinfo->{'surname'}, - borrowerfirstname => $borrowerinfo->{'firstname'}, - borrowerreservs => $count_reserv, - maxreserves => $maxreserves, - expiry => $expiry, - diffbranch => $diffbranch - ); + + # 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 + ); } -$template->param( - messageborrower => $messageborrower -); +$template->param( messageborrower => $messageborrower ); my $CGIselectborrower; if ($borrowerslist) { @@ -136,18 +158,20 @@ if ($borrowerslist) { my %labels; foreach my $borrower ( - sort {$a->{surname}.$a->{firstname} cmp $b->{surname}.$b->{firstname}} - @{$borrowerslist} - ) { + 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->{streetaddress}, + $borrower->{surname}, $borrower->{firstname}, + $borrower->{cardnumber}, $borrower->{categorycode}, + $borrower->{address}, ); } @@ -161,229 +185,293 @@ if ($borrowerslist) { } # get existing reserves ..... -my ($count, $reserves) = FindReserves($bib, undef); +my ( $count, $reserves ) = GetReservesFromBiblionumber($biblionumber); my $totalcount = $count; my $alreadyreserved; -# FIXME launch another time getpatroninformation perhaps until -my $borrowerinfo = getpatroninformation (\%env,0,$cardnumber); +# FIXME launch another time GetMemberDetails perhaps until +my $borrowerinfo = GetMemberDetails( 0, $cardnumber ); foreach my $res (@$reserves) { - if (($res->{found} eq 'W') or ($res->{priority} == 0)) { - $count--; + if ( ( $res->{found} eq 'W' ) ) { + $count--; } - if ($borrowerinfo->{borrowernumber} eq $res->{borrowernumber}) { - $alreadyreserved = 1; + if ( $borrowerinfo->{borrowernumber} eq $res->{borrowernumber} ) { + $warnings = 1; + $alreadyreserved = 1; } } -$template->param(alreadyreserved => $alreadyreserved); +$template->param( alreadyreserved => $alreadyreserved, + messages => $messages, + warnings => $warnings ); + +# 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) { +for ( 1 .. $count + 1 ) { push( @optionloop, { - num => $_, - selected => ($_ == $count + 1), + num => $_, + selected => ( $_ == $count + 1 ), } ); } +# adding a fixed value for priority options +my $fixedRank = $count+1; my @branchcodes; my %itemnumbers_of_biblioitem; -my @itemnumbers = @{get_itemnumbers_of($bib)->{$bib}}; -my $iteminfos_of = get_iteminfos_of(@itemnumbers); +my @itemnumbers; -foreach my $itemnumber (@itemnumbers) { - push( - @branchcodes, - $iteminfos_of->{$itemnumber}->{homebranch}, - $iteminfos_of->{$itemnumber}->{holdingbranch} - ); +if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){ + @itemnumbers = @$items; +} +else { + $template->param('noitems' => 1); +} + +my $iteminfos_of = GetItemInfosOf(@itemnumbers); +foreach my $itemnumber (@itemnumbers) { my $biblioitemnumber = $iteminfos_of->{$itemnumber}->{biblioitemnumber}; - push( - @{ $itemnumbers_of_biblioitem{$biblioitemnumber} }, - $itemnumber - ); + push( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} }, $itemnumber ); } -@branchcodes = uniq @branchcodes; - my @biblioitemnumbers = keys %itemnumbers_of_biblioitem; -my $branchinfos_of = get_branchinfos_of(@branchcodes); my $notforloan_label_of = get_notforloan_label_of(); -my $biblioiteminfos_of = get_biblioiteminfos_of(@biblioitemnumbers); - -my @itemtypes; -foreach my $biblioitemnumber (@biblioitemnumbers) { - push @itemtypes, $biblioiteminfos_of->{$biblioitemnumber}{itemtype}; -} - -my $itemtypeinfos_of = get_itemtypeinfos_of(@itemtypes); - -my $return_date_of = get_return_date_of(@itemnumbers); +my $biblioiteminfos_of = GetBiblioItemInfosOf(@biblioitemnumbers); my @bibitemloop; foreach my $biblioitemnumber (@biblioitemnumbers) { my $biblioitem = $biblioiteminfos_of->{$biblioitemnumber}; - + + my $num_available; + my $num_override; + $biblioitem->{itemloop} = []; + $biblioitem->{description} = - $itemtypeinfos_of->{ $biblioitem->{itemtype} }{description}; + $itemtypes->{ $biblioitem->{itemtype} }{description}; - foreach my $itemnumber (@{$itemnumbers_of_biblioitem{$biblioitemnumber}}) { + foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ){ my $item = $iteminfos_of->{$itemnumber}; + + + unless (C4::Context->preference('item-level_itypes')) { + $item->{itype} = $biblioitem->{itemtype}; + } - $item->{homebranchname} = - $branchinfos_of->{ $item->{homebranch} }{branchname}; + $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}) { + if ( $item->{homebranch} ne $item->{holdingbranch} ) { $item->{holdingbranchname} = - $branchinfos_of->{ $item->{holdingbranch} }{branchname}; + $branches->{ $item->{holdingbranch} }{branchname}; } - + + # add information + $item->{itemcallnumber} = $item->{itemcallnumber}; + # if the item is currently on loan, we display its return date and # change the background color - my $date_due; - - if (defined $return_date_of->{$itemnumber}) { - $date_due = format_date($return_date_of->{$itemnumber}); - + my $issues= GetItemIssue($itemnumber); + if ( $issues->{'date_due'} ) { + $item->{date_due} = format_date($issues->{'date_due'}); $item->{backgroundcolor} = 'onloan'; } # checking reserve - my $reservedate = GetFirstReserveDateFromItem($itemnumber); + my ($reservedate,$reservedfor,$expectedAt) = GetReservesFromItemnumber($itemnumber); + my $ItemBorrowerReserveInfo = GetMemberDetails( $reservedfor, 0); - if (defined $reservedate) { + if ( defined $reservedate ) { $item->{backgroundcolor} = 'reserved'; + $item->{reservedate} = format_date($reservedate); + $item->{ReservedForBorrowernumber} = $reservedfor; + $item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'}; + $item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'}; + $item->{ExpectedAtLibrary} = $branches->{$expectedAt}{branchname}; + } # Management of the notforloan document - if ($item->{notforloan}) { + if ( $item->{notforloan} ) { $item->{backgroundcolor} = 'other'; $item->{notforloanvalue} = - $notforloan_label_of->{ $item->{notforloan} }; + $notforloan_label_of->{ $item->{notforloan} }; } # Management of lost or long overdue items - if ($item->{itemlost}) { + if ( $item->{itemlost} ) { # FIXME localized strings should never be in Perl code - $item->{message} = $item->{itemlost} == 1 - ? "(lost)" - : $item->{itemlost} == 2 - ? "(long overdue)" - : ""; + $item->{message} = + $item->{itemlost} == 1 ? "(lost)" + : $item->{itemlost} == 2 ? "(long overdue)" + : ""; $item->{backgroundcolor} = 'other'; } - # Check of the transfered documents - my ($transfertwhen,$transfertfrom,$transfertto) = - get_transfert_infos($itemnumber); + # Check the transit status + my ( $transfertwhen, $transfertfrom, $transfertto ) = + GetTransfers($itemnumber); - if ($transfertwhen ne '') { + if ( $transfertwhen ne '' ) { $item->{transfertwhen} = format_date($transfertwhen); $item->{transfertfrom} = - $branchinfos_of->{$transfertfrom}{branchname}; - $item->{transfertto} = - $branchinfos_of->{$transfertto}{branchname}; + $branches->{$transfertfrom}{branchname}; + $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("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 ) ) { + $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'} ) ) { + $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 none of the conditions hold true, then neither override nor available is set and the item cannot be checked - # An item is available only if: - if (not defined $reservedate # not reserved yet - and $date_due eq '' # not currently on loan - and not $item->{itemlost} # not lost - and not $item->{notforloan} # not forbidden to loan - and $transfertwhen eq '' # not currently on transfert - ) { - $item->{available} = 1; + # 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}); } + push @{ $biblioitem->{itemloop} }, $item; + } - 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 ); } push @bibitemloop, $biblioitem; } - # existingreserves building my @reserveloop; -my $branches = getbranches(); -foreach my $res (sort {$a->{found} cmp $b->{found}} @$reserves){ +( $count, $reserves ) = GetReservesFromBiblionumber($biblionumber); +foreach my $res ( sort { $a->{found} cmp $b->{found} } @$reserves ) { my %reserve; my @optionloop; - for (my $i=1; $i <= $totalcount; $i++) { + for ( my $i = 1 ; $i <= $totalcount ; $i++ ) { push( @optionloop, { - num => $i, - selected => ($i == $res->{priority}), + num => $i, + selected => ( $i == $res->{priority} ), } ); } my @branchloop; - foreach my $br (keys %$branches) { + foreach my $br ( keys %$branches ) { my %abranch; - $abranch{'selected'}=($br eq $res->{'branchcode'}); - $abranch{'branch'}=$br; - $abranch{'branchname'}=$branches->{$br}->{'branchname'}; - push(@branchloop,\%abranch); + $abranch{'selected'} = ( $br eq $res->{'branchcode'} ); + $abranch{'branch'} = $br; + $abranch{'branchname'} = $branches->{$br}->{'branchname'}; + push( @branchloop, \%abranch ); } - if (($res->{'found'} eq 'W') or ($res->{'priority'} eq '0')) { - my %env; + if ( ( $res->{'found'} eq 'W' ) ) { my $item = $res->{'itemnumber'}; - $item = getiteminformation(\%env,$item); + $item = GetBiblioFromItemNumber($item,undef); + $reserve{'wait'}= 1; $reserve{'holdingbranch'}=$item->{'holdingbranch'}; - $reserve{'barcode'}=$item->{'barcode'}; $reserve{'biblionumber'}=$item->{'biblionumber'}; + $reserve{'barcodenumber'} = $item->{'barcode'}; $reserve{'wbrcode'} = $res->{'branchcode'}; + $reserve{'itemnumber'} = $res->{'itemnumber'}; $reserve{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'}; if($reserve{'holdingbranch'} eq $reserve{'wbrcode'}){ $reserve{'atdestination'} = 1; } + # set found to 1 if reserve is waiting for patron pickup + $reserve{'found'} = 1 if $res->{'found'} eq 'W'; + } elsif ($res->{priority} > 0) { + if (defined($res->{itemnumber})) { + my $item = GetItem($res->{itemnumber}); + $reserve{'itemnumber'} = $res->{'itemnumber'}; + $reserve{'barcodenumber'} = $item->{'barcode'}; + $reserve{'item_level_hold'} = 1; + } } - - $reserve{'date'} = format_date($res->{'reservedate'}); - $reserve{'borrowernumber'}=$res->{'borrowernumber'}; - $reserve{'biblionumber'}=$res->{'biblionumber'}; - $reserve{'bornum'}=$res->{'borrowernumber'}; - $reserve{'firstname'}=$res->{'firstname'}; - $reserve{'surname'}=$res->{'surname'}; - $reserve{'bornum'}=$res->{'borrowernumber'}; - $reserve{'notes'}=$res->{'reservenotes'}; - $reserve{'wait'}=(($res->{'found'} eq 'W') or ($res->{'priority'} eq '0')); - $reserve{'constrainttypea'}=($res->{'constrainttype'} eq 'a'); - $reserve{'constrainttypeo'}=($res->{'constrainttype'} eq 'o'); - $reserve{'voldesc'}=$res->{'volumeddesc'}; - $reserve{'itemtype'}=$res->{'itemtype'}; - $reserve{'branchloop'}=\@branchloop; - $reserve{'optionloop'}=\@optionloop; - - push(@reserveloop,\%reserve); + +# get borrowers reserve info +my $reserveborrowerinfo = GetMemberDetails( $res->{'borrowernumber'}, 0); + + $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{'notes'} = $res->{'reservenotes'}; + $reserve{'wait'} = + ( ( $res->{'found'} eq 'W' ) or ( $res->{'priority'} eq '0' ) ); + $reserve{'constrainttypea'} = ( $res->{'constrainttype'} eq 'a' ); + $reserve{'constrainttypeo'} = ( $res->{'constrainttype'} eq 'o' ); + $reserve{'voldesc'} = $res->{'volumeddesc'}; + $reserve{'ccode'} = $res->{'ccode'}; + $reserve{'barcode'} = $res->{'barcode'}; + $reserve{'priority'} = $res->{'priority'}; + $reserve{'branchloop'} = \@branchloop; + $reserve{'optionloop'} = \@optionloop; + + push( @reserveloop, \%reserve ); } my $default = C4::Context->userenv->{branch}; my @values; my %label_of; -foreach my $branchcode (keys %{$branches}) { +foreach my $branchcode (sort keys %{$branches} ) { push @values, $branchcode; $label_of{$branchcode} = $branches->{$branchcode}->{branchname}; } - my $CGIbranch = CGI::scrolling_list( -name => 'pickup', + -id => 'pickup', -values => \@values, -default => $default, -labels => \%label_of, @@ -395,25 +483,27 @@ my $CGIbranch = CGI::scrolling_list( my $time = time(); $template->param( - CGIbranch => $CGIbranch, + CGIbranch => $CGIbranch, reserveloop => \@reserveloop, - time => $time, + time => $time, + fixedRank => $fixedRank, ); -# setup colors +# display infos $template->param( - optionloop =>\@optionloop, - bibitemloop => \@bibitemloop, - date => $date, - bib => $bib, - findborrower => $findborrower, - cardnumber => $cardnumber, + optionloop => \@optionloop, + bibitemloop => \@bibitemloop, + date => $date, + biblionumber => $biblionumber, + findborrower => $findborrower, + cardnumber => $cardnumber, CGIselectborrower => $CGIselectborrower, - title =>$dat->{title}, + title => $dat->{title}, + author => $dat->{author}, + holdsview => 1, + borrower_branchname => $branches->{$borrowerinfo->{'branchcode'}}->{'branchname'}, + borrower_branchcode => $borrowerinfo->{'branchcode'}, ); # printout the page -print $input->header( - -type => C4::Interface::CGI::Output::guesstype($template->output), - -expires=>'now' -), $template->output; +output_html_with_http_headers $input, $cookie, $template->output;