X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Freturns.pl;h=2aac76a6e3a48fd9801b336457c3fc887ac0e8ee;hb=bb032138e72a6428e404d9f3593430b7fd989f45;hp=d338619ddd5869869799e9d30dd7c5ae0d6a76f0;hpb=193e22714f5da304001d65fb1817ca40e832ea64;p=koha_gimpoz diff --git a/circ/returns.pl b/circ/returns.pl index d338619ddd..2aac76a6e3 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -1,12 +1,8 @@ #!/usr/bin/perl -# WARNING: This file contains mixed-sized tabs! (some 4-character, some 8) -# WARNING: Currently, 4-character tabs seem to be dominant -# WARNING: But there are still lots of 8-character tabs - -#written 11/3/2002 by Finlay -#script to execute returns of books # Copyright 2000-2002 Katipo Communications +# 2006 SAN-OP +# 2007 BibLibre, Paul POULAIN # # This file is part of Koha. # @@ -19,75 +15,98 @@ # 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 returns.pl + +script to execute returns of books + +=cut use strict; +#use warnings; FIXME - Bug 2505 + use CGI; -use C4::Circulation::Circ2; -use C4::Date; -use C4::Search; +use C4::Context; +use C4::Auth qw/:DEFAULT get_session/; use C4::Output; +use C4::Circulation; +use C4::Dates qw/format_date/; +use Date::Calc qw/Add_Delta_Days/; +use C4::Calendar; use C4::Print; -use C4::Reserves2; -use C4::Auth; -use C4::Interface::CGI::Output; -use HTML::Template; -use C4::Koha; -use C4::Context; +use C4::Reserves; +use C4::Biblio; +use C4::Items; +use C4::Members; +use C4::Branch; # GetBranches GetBranchName +use C4::Koha; # FIXME : is it still useful ? +use C4::RotatingCollections; my $query = new CGI; +if (!C4::Context->userenv){ + my $sessionID = $query->cookie("CGISESSID"); + my $session = get_session($sessionID); + if ($session->param('branch') eq 'NO_LIBRARY_SET'){ + # no branch set we can't return + print $query->redirect("/cgi-bin/koha/circ/selectbranchprinter.pl"); + exit; + } +} + #getting the template -my ( $template, $borrowernumber, $cookie ) = get_template_and_user( +my ( $template, $librarian, $cookie ) = get_template_and_user( { template_name => "circ/returns.tmpl", query => $query, type => "intranet", authnotrequired => 0, - flagsrequired => { circulate => 1 }, + flagsrequired => { circulate => "circulate_remaining_permissions" }, } ); ##################### #Global vars -my %env; -my $headerbackgroundcolor = '#99cc33'; -my $linecolor1 = '#ffffcc'; -my $linecolor2 = 'white'; +my $branches = GetBranches(); +my $printers = GetPrinters(); -my $branches = getbranches('IS'); -my $printers = getprinters( \%env ); - -my $branch = C4::Context->userenv->{'branch'}; -my $printer = C4::Context->userenv->{'branchprinter'}; +my $printer = C4::Context->userenv ? C4::Context->userenv->{'branchprinter'} : ""; +my $overduecharges = (C4::Context->preference('finesMode') && C4::Context->preference('finesMode') ne 'off'); +my $userenv_branch = C4::Context->userenv->{'branch'} || ''; # # Some code to handle the error if there is no branch or printer setting..... # -$env{'branchcode'} = $branch; -$env{'printer'} = $printer; -$env{'queue'} = $printer; - # Set up the item stack .... my %returneditems; my %riduedate; my %riborrowernumber; my @inputloop; foreach ( $query->param ) { - (next) unless (/ri-(\d*)/); + my $counter; + if (/ri-(\d*)/) { + $counter = $1; + if ($counter > 20) { + next; + } + } + else { + next; + } + my %input; - my $counter = $1; - (next) if ( $counter > 20 ); my $barcode = $query->param("ri-$counter"); my $duedate = $query->param("dd-$counter"); my $borrowernumber = $query->param("bn-$counter"); $counter++; - # decode cuecat - $barcode = cuecatbarcodedecode($barcode); + # decode barcode ## Didn't we already decode them before passing them back last time?? + $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace + $barcode = barcodedecode($barcode) if(C4::Context->preference('itemBarcodeInputFilter')); ###################### #Are these lines still useful ? @@ -96,113 +115,148 @@ foreach ( $query->param ) { $riborrowernumber{$counter} = $borrowernumber; ####################### - $input{counter} = $counter; - $input{barcode} = $barcode; - $input{duedate} = $duedate; - $input{bornum} = $borrowernumber; - push ( @inputloop, \%input ); + $input{counter} = $counter; + $input{barcode} = $barcode; + $input{duedate} = $duedate; + $input{borrowernumber} = $borrowernumber; + push( @inputloop, \%input ); } ############ # Deal with the requests.... + +if ($query->param('WT-itemNumber')){ + updateWrongTransfer ($query->param('WT-itemNumber'),$query->param('WT-waitingAt'),$query->param('WT-From')); +} + if ( $query->param('resbarcode') ) { - my $item = $query->param('itemnumber'); - my $borrnum = $query->param('borrowernumber'); - my $resbarcode = $query->param('resbarcode'); - - # set to waiting.... - my $iteminfo = getiteminformation( \%env, $item ); - my $tobranchcd = ReserveWaiting( $item, $borrnum ); -# if($iteminfo->{'holdingbranch'} ne $branch){ -# UpdateHoldingbranch($branch,$item); -# } -# check if we have other reservs for this document, if we have a return send the message of transfer - my ($messages,$nextreservinfo) = OtherReserves($item); - # my $branchname = $branches->{$tobranchcd}->{'branchname'}; - not sure if this line + $tobranchcd line do the same thing - # as the $messages{'transfert'} code - my $branchname = getbranchname($messages->{'transfert'}); - my ($borr) = getpatroninformation( \%env, $nextreservinfo, 0 ); - my $borcnum = $borr->{'cardnumber'}; - my $name = - $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}; - my $slip = $query->param('resslip'); - printreserve( \%env, $branchname, $borr, $iteminfo ); -# if ( $tobranchcd ne $branch ) { - not sure if line below is doing the same + my $item = $query->param('itemnumber'); + my $borrowernumber = $query->param('borrowernumber'); + my $resbarcode = $query->param('resbarcode'); + my $diffBranchReturned = $query->param('diffBranch'); + my $iteminfo = GetBiblioFromItemNumber($item); + # fix up item type for display + $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'}; + my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef; +# diffBranchSend tells ModReserveAffect whether document is expected in this library or not, +# i.e., whether to apply waiting status + ModReserveAffect( $item, $borrowernumber, $diffBranchSend); +# check if we have other reserves for this document, if we have a return send the message of transfer + my ( $messages, $nextreservinfo ) = GetOtherReserves($item); + + my ($borr) = GetMemberDetails( $nextreservinfo, 0 ); + my $name = $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}; if ( $messages->{'transfert'} ) { -# add the transfer routine -# C4::Circulation::Circ2::dotransfer($item,$iteminfo->{'holdingbranch'},$tobranchcd); $template->param( - itemtitle => $iteminfo->{'title'}, - iteminfo => $iteminfo->{'author'}, - branchname => $branchname, - name => $name, - bornum => $borrnum, - borcnum => $borcnum, - borfirstname => $borr->{'firstname'}, - borsurname => $borr->{'surname'}, - diffbranch => 1 + itemtitle => $iteminfo->{'title'}, + itembiblionumber => $iteminfo->{'biblionumber'}, + iteminfo => $iteminfo->{'author'}, + tobranchname => GetBranchName($messages->{'transfert'}), + name => $name, + borrowernumber => $borrowernumber, + borcnum => $borr->{'cardnumber'}, + borfirstname => $borr->{'firstname'}, + borsurname => $borr->{'surname'}, + diffbranch => 1, ); - set_transit($item); } } -my $iteminformation; my $borrower; my $returned = 0; my $messages; -my $barcode = $query->param('barcode'); +my $issueinformation; +my $itemnumber; +my $barcode = $query->param('barcode'); +my $exemptfine = $query->param('exemptfine'); +my $dropboxmode = $query->param('dropboxmode'); +my $dotransfer = $query->param('dotransfer'); +my $calendar = C4::Calendar->new( branchcode => $userenv_branch ); +#dropbox: get last open day (today - 1) +my $today = C4::Dates->new(); +my $today_iso = $today->output('iso'); +my $dropboxdate = $calendar->addDate($today, -1); +if ($dotransfer){ +# An item has been returned to a branch other than the homebranch, and the librarian has chosen to initiate a transfer + my $transferitem = $query->param('transferitem'); + my $tobranch = $query->param('tobranch'); + ModItemTransfer($transferitem, $userenv_branch, $tobranch); +} # actually return book and prepare item table..... if ($barcode) { - # decode cuecat - $barcode = cuecatbarcodedecode($barcode); - ( $returned, $messages, $iteminformation, $borrower ) = - returnbook( $barcode, $branch ); + $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace + $barcode = barcodedecode($barcode) if C4::Context->preference('itemBarcodeInputFilter'); + $itemnumber = GetItemnumberFromBarcode($barcode); + + if ( C4::Context->preference("InProcessingToShelvingCart") ) { + my $item = GetItem( $itemnumber ); + if ( $item->{'location'} eq 'PROC' ) { + $item->{'location'} = 'CART'; + ModItem( $item, $item->{'biblionumber'}, $item->{'itemnumber'} ); + } + } + + if ( C4::Context->preference("ReturnToShelvingCart") ) { + my $item = GetItem( $itemnumber ); + $item->{'location'} = 'CART'; + ModItem( $item, $item->{'biblionumber'}, $item->{'itemnumber'} ); + } + +# +# save the return +# + ( $returned, $messages, $issueinformation, $borrower ) = + AddReturn( $barcode, $userenv_branch, $exemptfine, $dropboxmode); # do the return + my $homeorholdingbranchreturn = C4::Context->preference('HomeOrHoldingBranchReturn') or 'homebranch'; + + # get biblio description + my $biblio = GetBiblioFromItemNumber($itemnumber); + # fix up item type for display + $biblio->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $biblio->{'itype'} : $biblio->{'itemtype'}; + + $template->param( + title => $biblio->{'title'}, + homebranch => $biblio->{'homebranch'}, + homebranchname => GetBranchName( $biblio->{$homeorholdingbranchreturn} ), + author => $biblio->{'author'}, + itembarcode => $biblio->{'barcode'}, + itemtype => $biblio->{'itemtype'}, + ccode => $biblio->{'ccode'}, + itembiblionumber => $biblio->{'biblionumber'}, + ); + + my %input = ( + counter => 0, + first => 1, + barcode => $barcode, + ); + if ($returned) { - $returneditems{0} = $barcode; - $riborrowernumber{0} = $borrower->{'borrowernumber'}; - $riduedate{0} = $iteminformation->{'date_due'}; - my %input; - $input{counter} = 0; - $input{first} = 1; - $input{barcode} = $barcode; - $input{duedate} = $riduedate{0}; - $input{bornum} = $riborrowernumber{0}; - push ( @inputloop, \%input ); - # check if the branch is the same as homebranch - # if not, we want to put a message - if ($iteminformation->{'homebranch'} ne $branch){ - $template->param( homebranch =>$iteminformation->{'homebranch'}); - } + my $duedate = $issueinformation->{'date_due'}; + $returneditems{0} = $barcode; + $riborrowernumber{0} = $borrower->{'borrowernumber'}; + $riduedate{0} = $duedate; + $input{borrowernumber} = $borrower->{'borrowernumber'}; + $input{duedate} = $duedate; + $input{return_overdue} = 1 if ($duedate and $duedate lt $today->output('iso')); + push( @inputloop, \%input ); } elsif ( !$messages->{'BadBarcode'} ) { - my %input; - $input{counter} = 0; - $input{first} = 1; - $input{barcode} = $barcode; - $input{duedate} = 0; - + $input{duedate} = 0; $returneditems{0} = $barcode; $riduedate{0} = 0; if ( $messages->{'wthdrawn'} ) { - $input{withdrawn} = 1; - $input{bornum} = "Item Cancelled"; - $riborrowernumber{0} = 'Item Cancelled'; + $input{withdrawn} = 1; + $input{borrowernumber} = 'Item Cancelled'; # FIXME: should be in display layer ? + $riborrowernumber{0} = 'Item Cancelled'; } else { - $input{bornum} = " "; - $riborrowernumber{0} = ' '; + $input{borrowernumber} = ' '; # This seems clearly bogus. + $riborrowernumber{0} = ' '; } - push ( @inputloop, \%input ); + push( @inputloop, \%input ); } - $template->param( - returned => $returned, - itemtitle => $iteminformation->{'title'}, - - # itembc => $iteminformation->{'barcode'}, - # itemdatedue => $iteminformation->{'datedue'}, - itemauthor => $iteminformation->{'author'} - ); } $template->param( inputloop => \@inputloop ); @@ -214,119 +268,109 @@ my $reserved = 0; # if the document is transfered, we have warning message . if ( $messages->{'WasTransfered'} ) { -# my $res = $messages->{'ResFound'}; -# my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'}; -# my ($borr) = getpatroninformation( \%env, $res->{'borrowernumber'}, 0 ); -# my $name = -# $borr->{'surname'} . " " . $borr->{'title'} . " " . $borr->{'firstname'}; - my ($iteminfo) = getiteminformation( \%env, 0, $barcode ); - -# if ( $res->{'ResFound'} eq "Waiting" ) { -# if($branch eq $res->{'branchcode'}){ -# $template->param(intransit => 0); -# } else { -# $template->param(intransit => 1); -# } - - $template->param( - found => 1, - transfer => 1, - itemhomebranch => $branches->{$iteminfo->{'homebranch'} }->{'branchname'} - ); + $template->param( + found => 1, + transfer => 1, + ); +} - } +if ( $messages->{'NeedsTransfer'} ){ + $template->param( + found => 1, + needstransfer => 1, + itemnumber => $itemnumber, + ); +} -if ( $messages->{'ResFound'} ) { - my $res = $messages->{'ResFound'}; - my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'}; - my ($borr) = getpatroninformation( \%env, $res->{'borrowernumber'}, 0 ); - my $name = - $borr->{'surname'} . " " . $borr->{'title'} . " " . $borr->{'firstname'}; - my ($iteminfo) = getiteminformation( \%env, 0, $barcode ); - - if ( $res->{'ResFound'} eq "Waiting" ) { - if($branch eq $res->{'branchcode'}){ - $template->param(intransit => 0); - } else { - $template->param(intransit => 1); - } - - $template->param( - found => 1, - name => $name, - borfirstname => $borr->{'firstname'}, - borsurname => $borr->{'surname'}, - bortitle => $borr->{'title'}, - borphone => $borr->{'phone'}, - boremail => $borr->{'emailaddress'}, - borstraddress => $borr->{'streetaddress'}, - borcity => $borr->{'city'}, - borzip => $borr->{'zipcode'}, - bornum => $res->{'borrowernumber'}, - borcnum => $borr->{'cardnumber'}, - debarred => $borr->{'debarred'}, - gonenoaddress => $borr->{'gonenoaddress'}, - currentbranch => $branches->{ $branch }->{'branchname'}, - branchname => $branches->{ $res->{'branchcode'} }->{'branchname'}, - waiting => 1, - itemnumber => $res->{'itemnumber'}, - itemtitle => $iteminfo->{'title'}, - itemauthor => $iteminfo->{'author'}, - itembarcode => $iteminfo->{'barcode'}, - itemtype => $iteminfo->{'itemtype'}, - itembiblionumber => $iteminfo->{'biblionumber'} - ); +if ( $messages->{'Wrongbranch'} ){ + $template->param( + wrongbranch => 1, + ); +} - } - if ( $res->{'ResFound'} eq "Reserved" ) { - my @da = localtime( time() ); - my $todaysdate = - sprintf( "%0.2d", ( $da[3] + 1 ) ) . "/" - . sprintf( "%0.2d", ( $da[4] + 1 ) ) . "/" - . ( $da[5] + 1900 ); - - if($branch eq $res->{'branchcode'}){ - $template->param(intransit => 0); - } else { - $template->param(intransit => 1); - } - +# case of wrong transfert, if the document wasn't transfered to the right library (according to branchtransfer (tobranch) BDD) + +if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) { + $messages->{'WrongTransfer'} = GetBranchName( $messages->{'WrongTransfer'} ); + $template->param( + WrongTransfer => 1, + TransferWaitingAt => $messages->{'WrongTransfer'}, + WrongTransferItem => $messages->{'WrongTransferItem'}, + ); + + my $reserve = $messages->{'ResFound'}; + my $branchname = $branches->{ $reserve->{'branchcode'} }->{'branchname'}; + my ($borr) = GetMemberDetails( $reserve->{'borrowernumber'}, 0 ); + my $name = $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}; + $template->param( + wname => $name, + wborfirstname => $borr->{'firstname'}, + wborsurname => $borr->{'surname'}, + wbortitle => $borr->{'title'}, + wborphone => $borr->{'phone'}, + wboremail => $borr->{'email'}, + wboraddress => $borr->{'address'}, + wboraddress2 => $borr->{'address2'}, + wborcity => $borr->{'city'}, + wborzip => $borr->{'zipcode'}, + wborrowernumber => $reserve->{'borrowernumber'}, + wborcnum => $borr->{'cardnumber'}, + wtransfertFrom => $userenv_branch, + ); +} + +# +# reserve found and item arrived at the expected branch +# +if ( $messages->{'ResFound'}) { + my $reserve = $messages->{'ResFound'}; + my $branchname = $branches->{ $reserve->{'branchcode'} }->{'branchname'}; + my ($borr) = GetMemberDetails( $reserve->{'borrowernumber'}, 0 ); + + if ( $reserve->{'ResFound'} eq "Waiting" or $reserve->{'ResFound'} eq "Reserved" ) { + if ( $reserve->{'ResFound'} eq "Waiting" ) { + $template->param( + waiting => ($userenv_branch eq $reserve->{'branchcode'} ? 1 : 0 ), + ); + } elsif ( $reserve->{'ResFound'} eq "Reserved" ) { + $template->param( + intransit => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ), + transfertodo => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ), + resbarcode => $barcode, + reserved => 1, + ); + } + + # same params for Waiting or Reserved $template->param( - found => 1, - currentbranch => $branches->{ $branch }->{'branchname'}, - name => $name, - branchname => $branches->{ $res->{'branchcode'} }->{'branchname'}, - reserved => 1, - today => $todaysdate, - itemnumber => $res->{'itemnumber'}, - itemtitle => $iteminfo->{'title'}, - itemauthor => $iteminfo->{'author'}, - itembarcode => $iteminfo->{'barcode'}, - itemtype => $iteminfo->{'itemtype'}, - itembiblionumber => $iteminfo->{'biblionumber'}, - borsurname => $borr->{'surname'}, - bortitle => $borr->{'title'}, - borfirstname => $borr->{'firstname'}, - bornum => $res->{'borrowernumber'}, - borcnum => $borr->{'cardnumber'}, - borphone => $borr->{'phone'}, - borstraddress => $borr->{'streetaddress'}, - borsub => $borr->{'suburb'}, - borcity => $borr->{'city'}, - borzip => $borr->{'zipcode'}, - boremail => $borr->{'emailaddress'}, - debarred => $borr->{'debarred'}, - gonenoaddress => $borr->{'gonenoaddress'}, - barcode => $barcode + found => 1, + currentbranch => $branches->{$userenv_branch}->{'branchname'}, + destbranchname => $branches->{ $reserve->{'branchcode'} }->{'branchname'}, + name => $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}, + borfirstname => $borr->{'firstname'}, + borsurname => $borr->{'surname'}, + bortitle => $borr->{'title'}, + borphone => $borr->{'phone'}, + boremail => $borr->{'email'}, + boraddress => $borr->{'address'}, + boraddress2 => $borr->{'address2'}, + borcity => $borr->{'city'}, + borzip => $borr->{'zipcode'}, + borcnum => $borr->{'cardnumber'}, + debarred => $borr->{'debarred'}, + gonenoaddress => $borr->{'gonenoaddress'}, + barcode => $barcode, + destbranch => $reserve->{'branchcode'}, + borrowernumber => $reserve->{'borrowernumber'}, + itemnumber => $reserve->{'itemnumber'}, + reservenotes => $reserve->{'reservenotes'}, ); - } + } # else { ; } # error? } # Error Messages my @errmsgloop; foreach my $code ( keys %$messages ) { - - # warn $code; my %err; my $exit_required_p = 0; if ( $code eq 'BadBarcode' ) { @@ -354,17 +398,29 @@ foreach my $code ( keys %$messages ) { $exit_required_p = 1; } elsif ( ( $code eq 'IsPermanent' ) && ( not $messages->{'ResFound'} ) ) { - if ( $messages->{'IsPermanent'} ne $branch ) { + if ( $messages->{'IsPermanent'} ne $userenv_branch ) { $err{ispermanent} = 1; $err{msg} = $branches->{ $messages->{'IsPermanent'} }->{'branchname'}; } } + elsif ( $code eq 'WrongTransfer' ) { + ; # FIXME... anything to do here? + } + elsif ( $code eq 'WrongTransferItem' ) { + ; # FIXME... anything to do here? + } + elsif ( $code eq 'NeedsTransfer' ) { + } + elsif ( $code eq 'Wrongbranch' ) { + } + else { - die "Unknown error code $code"; # XXX + die "Unknown error code $code"; # note we need all the (empty) elsif's above, or we die. + # This forces the issue of staying in sync w/ Circulation.pm } if (%err) { - push ( @errmsgloop, \%err ); + push( @errmsgloop, \%err ); } last if $exit_required_p; } @@ -373,22 +429,18 @@ $template->param( errmsgloop => \@errmsgloop ); # patrontable .... if ($borrower) { my $flags = $borrower->{'flags'}; - my $color = ''; my @flagloop; my $flagset; foreach my $flag ( sort keys %$flags ) { my %flaginfo; - ( $color eq $linecolor1 ) - ? ( $color = $linecolor2 ) - : ( $color = $linecolor1 ); unless ($flagset) { $flagset = 1; } - $flaginfo{color} = $color; $flaginfo{redfont} = ( $flags->{$flag}->{'noissues'} ); $flaginfo{flag} = $flag; if ( $flag eq 'CHARGES' ) { - $flaginfo{msg} = $flag; - $flaginfo{charges} = 1; - $flaginfo{bornum} = $borrower->{borrowernumber}; + $flaginfo{msg} = $flag; + $flaginfo{charges} = 1; + $flaginfo{chargeamount} = $flags->{$flag}->{amount}; + $flaginfo{borrowernumber} = $borrower->{borrowernumber}; } elsif ( $flag eq 'WAITING' ) { $flaginfo{msg} = $flag; @@ -396,16 +448,13 @@ if ($borrower) { my @waitingitemloop; my $items = $flags->{$flag}->{'itemlist'}; foreach my $item (@$items) { - my ($iteminformation) = - getiteminformation( \%env, $item->{'itemnumber'}, 0 ); - my %waitingitem; - $waitingitem{biblionum} = $iteminformation->{'biblionumber'}; - $waitingitem{barcode} = $iteminformation->{'barcode'}; - $waitingitem{title} = $iteminformation->{'title'}; - $waitingitem{brname} = - $branches->{ $iteminformation->{'holdingbranch'} }->{ - 'branchname'}; - push ( @waitingitemloop, \%waitingitem ); + my $biblio = GetBiblioFromItemNumber( $item->{'itemnumber'}); + push @waitingitemloop, { + biblionum => $biblio->{'biblionumber'}, + barcode => $biblio->{'barcode'}, + title => $biblio->{'title'}, + brname => $branches->{ $biblio->{'holdingbranch'} }->{'branchname'}, + }; } $flaginfo{itemloop} = \@waitingitemloop; } @@ -415,17 +464,14 @@ if ($borrower) { foreach my $item ( sort { $a->{'date_due'} cmp $b->{'date_due'} } @$items ) { - my ($iteminformation) = - getiteminformation( \%env, $item->{'itemnumber'}, 0 ); - my %overdueitem; - $overdueitem{duedate} = format_date($item->{'date_due'}); - $overdueitem{biblionum} = $iteminformation->{'biblionumber'}; - $overdueitem{barcode} = $iteminformation->{'barcode'}; - $overdueitem{title} = $iteminformation->{'title'}; - $overdueitem{brname} = - $branches->{ $iteminformation->{'holdingbranch'} }->{ - 'branchname'}; - push ( @itemloop, \%overdueitem ); + my $biblio = GetBiblioFromItemNumber( $item->{'itemnumber'}); + push @itemloop, { + duedate => format_date($item->{'date_due'}), + biblionum => $biblio->{'biblionumber'}, + barcode => $biblio->{'barcode'}, + title => $biblio->{'title'}, + brname => $branches->{ $biblio->{'holdingbranch'} }->{'branchname'}, + }; } $flaginfo{itemloop} = \@itemloop; $flaginfo{overdue} = 1; @@ -434,119 +480,95 @@ if ($borrower) { $flaginfo{other} = 1; $flaginfo{msg} = $flags->{$flag}->{'message'}; } - push ( @flagloop, \%flaginfo ); + push( @flagloop, \%flaginfo ); } $template->param( - flagset => $flagset, - flagloop => \@flagloop, - ribornum => $borrower->{'borrowernumber'}, - riborcnum => $borrower->{'cardnumber'}, - riborsurname => $borrower->{'surname'}, - ribortitle => $borrower->{'title'}, - riborfirstname => $borrower->{'firstname'} + flagset => $flagset, + flagloop => \@flagloop, + riborrowernumber => $borrower->{'borrowernumber'}, + riborcnum => $borrower->{'cardnumber'}, + riborsurname => $borrower->{'surname'}, + ribortitle => $borrower->{'title'}, + riborfirstname => $borrower->{'firstname'} ); } -my $color = ''; - #set up so only the last 8 returned items display (make for faster loading pages) +my $returned_counter = ( C4::Context->preference('numReturnedItemsToShow') ) ? C4::Context->preference('numReturnedItemsToShow') : 8; my $count = 0; my @riloop; foreach ( sort { $a <=> $b } keys %returneditems ) { my %ri; - if ( $count < 8 ) { - ( $color eq $linecolor1 ) - ? ( $color = $linecolor2 ) - : ( $color = $linecolor1 ); - $ri{color} = $color; - my $barcode = $returneditems{$_}; + if ( $count++ < $returned_counter ) { + my $bar_code = $returneditems{$_}; my $duedate = $riduedate{$_}; - my $overduetext; - my $borrowerinfo; if ($duedate) { - my @tempdate = split ( /-/, $duedate ); - $ri{year}=$tempdate[0]; - $ri{month}=$tempdate[1]; - $ri{day}=$tempdate[2]; - my $duedatenz = "$tempdate[2]/$tempdate[1]/$tempdate[0]"; - my @datearr = localtime( time() ); - my $todaysdate = - $datearr[5] . '-' - . sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-' - . sprintf( "%0.2d", $datearr[3] ); - $ri{duedate}=format_date($duedate); - my ($borrower) = - getpatroninformation( \%env, $riborrowernumber{$_}, 0 ); - $ri{bornum} = $borrower->{'borrowernumber'}; - $ri{borcnum} = $borrower->{'cardnumber'}; - $ri{borfirstname} = $borrower->{'firstname'}; - $ri{borsurname} = $borrower->{'surname'}; - $ri{bortitle} = $borrower->{'title'}; + my @tempdate = split( /-/, $duedate ); + $ri{year} = $tempdate[0]; + $ri{month} = $tempdate[1]; + $ri{day} = $tempdate[2]; + $ri{duedate} = format_date($duedate); + my ($b) = GetMemberDetails( $riborrowernumber{$_}, 0 ); + $ri{return_overdue} = 1 if ($duedate lt $today->output('iso')); + $ri{borrowernumber} = $b->{'borrowernumber'}; + $ri{borcnum} = $b->{'cardnumber'}; + $ri{borfirstname} = $b->{'firstname'}; + $ri{borsurname} = $b->{'surname'}; + $ri{bortitle} = $b->{'title'}; + $ri{bornote} = $b->{'borrowernotes'}; + $ri{borcategorycode}= $b->{'categorycode'}; } else { - $ri{bornum} = $riborrowernumber{$_}; + $ri{borrowernumber} = $riborrowernumber{$_}; } -# my %ri; - my ($iteminformation) = getiteminformation( \%env, 0, $barcode ); - $ri{color} = $color; - $ri{itembiblionumber} = $iteminformation->{'biblionumber'}; - $ri{itemtitle} = $iteminformation->{'title'}; - $ri{itemauthor} = $iteminformation->{'author'}; - $ri{itemtype} = $iteminformation->{'itemtype'}; - $ri{barcode} = $barcode; + + # my %ri; + my $biblio = GetBiblioFromItemNumber(GetItemnumberFromBarcode($bar_code)); + # fix up item type for display + $biblio->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $biblio->{'itype'} : $biblio->{'itemtype'}; + $ri{itembiblionumber} = $biblio->{'biblionumber'}; + $ri{itemtitle} = $biblio->{'title'}; + $ri{itemauthor} = $biblio->{'author'}; + $ri{itemtype} = $biblio->{'itemtype'}; + $ri{itemnote} = $biblio->{'itemnotes'}; + $ri{ccode} = $biblio->{'ccode'}; + $ri{itemnumber} = $biblio->{'itemnumber'}; + $ri{barcode} = $bar_code; } else { last; } - $count++; - push ( @riloop, \%ri ); + push @riloop, \%ri; } -$template->param( riloop => \@riloop ); $template->param( - genbrname => $branches->{$branch}->{'branchname'}, - genprname => $printers->{$printer}->{'printername'}, - branch => $branch, - printer => $printer, - errmsgloop => \@errmsgloop + riloop => \@riloop, + genbrname => $branches->{$userenv_branch}->{'branchname'}, + genprname => $printers->{$printer}->{'printername'}, + branchname => $branches->{$userenv_branch}->{'branchname'}, + printer => $printer, + errmsgloop => \@errmsgloop, + exemptfine => $exemptfine, + dropboxmode => $dropboxmode, + dropboxdate => $dropboxdate->output(), + overduecharges => $overduecharges, + soundon => C4::Context->preference("SoundOn"), ); +### Comment out rotating collections for now to allow it a little more time to bake +### for 3.4; in particular, must ensure that it doesn't fight with transfers required +### to fill hold requests +### -- Galen Charlton 2010-10-06 +#my $itemnumber = GetItemnumberFromBarcode( $query->param('barcode') ); +#if ( $itemnumber ) { +# my ( $holdingBranch, $collectionBranch ) = GetCollectionItemBranches( $itemnumber ); +# if ( ! ( $holdingBranch eq $collectionBranch ) ) { +# $template->param( +# collectionItemNeedsTransferred => 1, +# collectionBranch => GetBranchName($collectionBranch), +# ); +# } +#} + # actually print the page! output_html_with_http_headers $query, $cookie, $template->output; - -sub cuecatbarcodedecode { - my ($barcode) = @_; - chomp($barcode); - my @fields = split ( /\./, $barcode ); - my @results = map( decode($_), @fields[ 1 .. $#fields ] ); - if ( $#results == 2 ) { - return $results[2]; - } - else { - return $barcode; - } -} - - -sub set_transit { - my ($itemnumber) = @_; - my $dbh=C4::Context->dbh(); - my $query = "UPDATE items SET holdingbranch='TRA' WHERE itemnumber = ?"; - my $sth=$dbh->prepare($query); - $sth->execute($itemnumber); - $sth->finish(); - } - -sub set_transit { - my ($itemnumber) = @_; - my $dbh=C4::Context->dbh(); - my $query = "UPDATE items SET holdingbranch='TRA' WHERE itemnumber = ?"; - my $sth=$dbh->prepare($query); - $sth->execute($itemnumber); - $sth->finish(); -} - - -# Local Variables: -# tab-width: 4 -# End: