#!/usr/bin/perl #written 11/3/2002 by Finlay #script to execute returns of books # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # Koha is distributed in the hope that it will be useful, but WITHOUT ANY # 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 use strict; use CGI; use C4::Circulation::Circ2; use C4::Search; use C4::Output; use C4::Print; use C4::Reserves2; my %env; my $headerbackgroundcolor='#99cc33'; my $circbackgroundcolor='#ffffcc'; my $circbackgroundcolor='white'; my $linecolor1='#ffffcc'; my $linecolor2='white'; my $backgroundimage="/images/background-mem.gif"; my $query=new CGI; my $branches = getbranches(); my $printers = getprinters(\%env); my $branch = $query->param("branch"); my $printer = $query->param("printer"); ($branch) || ($branch=$query->cookie('branch')) ; ($printer) || ($printer=$query->cookie('printer')) ; # # 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 $ritext = ''; my %returneditems; my %riduedate; my %riborrowernumber; foreach ($query->param) { (next) unless (/ri-(\d*)/); 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); $returneditems{$counter}=$barcode; $riduedate{$counter}=$duedate; $riborrowernumber{$counter}=$borrowernumber; $ritext.="\n"; $ritext.="\n"; $ritext.="\n"; } # Collect a few messages here... my $messagetext=''; my $reservetext=''; ############ # Deal with the requests.... 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); my $branchname = $branches->{$tobranchcd}->{'branchname'}; my ($borr) = getpatroninformation(\%env, $borrnum, 0); my $name = $borr->{'surname'}." ".$borr->{'title'}." ".$borr->{'firstname'}; my $number = "{'borrowernumber'} onClick='openWindow(this,'Member', 480, 640)'>$borr->{'cardnumber'}"; my $slip = $query->param('resslip'); printslip(\%env, $slip); if ($tobranchcd ne $branch) { # my ($transfered, $messages, $iteminfo) = transferbook($tobranchcd, $resbarcode, 1); $reservetext .= <<"EOF"; Item marked Waiting:
Item: $iteminfo->{'title'} ($iteminfo->{'author'})
needs to be transfered to $branchname
to be picked up by $name ($number).
$ritext
EOF } } my $iteminformation; my $borrower; my $returned = 0; my $messages; my $barcode = $query->param('barcode'); # actually return book and prepare item table..... if ($barcode) { # decode cuecat $barcode = cuecatbarcodedecode($barcode); ($returned, $messages, $iteminformation, $borrower) = returnbook($barcode, $branch); $ritext.= "\n"; if ($returned) { $returneditems{0} = $barcode; $riborrowernumber{0} = $borrower->{'borrowernumber'}; $riduedate{0} = $iteminformation->{'date_due'}; $ritext.= "{'date_due'}>\n"; $ritext.= "{'borrowernumber'}>\n"; } elsif (! $messages->{'BadBarcode'}) { $returneditems{0} = $barcode; $riduedate{0} = 0; $ritext.= "\n"; if ($messages->{'wthdrawn'}) { $ritext.= "\n"; $riborrowernumber{0} = 'Item Cancelled'; } else { $ritext.= "\n"; $riborrowernumber{0} = ' '; } } } ################################################################################## # HTML code.... # title.... my $title = <<"EOF"; Circulation: Returns
Branch: $branches->{$branch}->{'branchname'}   Printer: $printers->{$printer}->{'printername'}
Change Settings

EOF my $links = <<"EOF";
Issues  Issues
EOF my $itemtable; if ($iteminformation) { $itemtable = <<"EOF";
Returned Item Information
Title: $iteminformation->{'title'}
EOF } # Barcode entry box, with hidden inputs attached.... my $barcodeentrytext = << "EOF";

Enter Book Barcode
Item Barcode:
$ritext
EOF 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 $number = "{'borrowernumber'} onClick='openWindow(this,'Member', 480, 640)'>$borr->{'cardnumber'}"; my ($iteminfo) = getiteminformation(\%env, 0, $barcode); if ($res->{'ResFound'} eq "Waiting") { $reservetext = <<"EOF"; Item marked Waiting:
Item $iteminfo->{'title'} ($iteminfo->{'author'})
is marked waiting at $branchname for $name ($number).
$ritext
EOF } 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); my $slip = <<"EOF"; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Date: $todaysdate; ITEM RESERVED: $iteminfo->{'title'} ($iteminfo->{'author'}) barcode: $iteminfo->{'barcode'} itemtype: $iteminfo->{'itemtype'} COLLECT AT: $branchname BORROWER: $borr->{'title'} $borr->{'firstname'} $borr->{'surname'} card number: $borr->{'cardnumber'} Phone: $borr->{'phone'} $borr->{'streetaddress'} $borr->{'suburb'} $borr->{'town'} $borr->{'emailaddress'} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EOF $reservetext = <<"EOF"; Reserve found: Item: $iteminfo->{'title'} ($iteminfo->{'author'}) {'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$barcode
for $name ($number) to be collected at $branchname.
Change status to waiting and print slip?:
$ritext {'itemnumber'}> {'borrowernumber'}>
EOF } } my $reservefoundtext; if ($reservetext) { $reservefoundtext = <<"EOF";
Reserve Found
$reservetext
EOF } # collect the messages and put into message table.... foreach my $code (keys %$messages) { warn $code; if ($code eq 'BadBarcode'){ $messagetext .= " No Item with barcode: $messages->{'BadBarcode'}
"; } if ($code eq 'NotIssued'){ my $braname = $branches->{$messages->{'IsPermanent'}}->{'branchname'}; $messagetext .= " Item not on issue.
"; } if ($code eq 'WasLost'){ $messagetext .= " Item was lost, now found.
"; } if ($code eq 'wthdrawn'){ $messagetext = " Item Cancelled.
"; last; } if (($code eq 'IsPermanent') && (not $messages->{'ResFound'})) { if ($messages->{'IsPermanent'} ne $branch) { $messagetext .= " Please return to $branches->{$messages->{'IsPermanent'}}->{'branchname'}
"; } } } $messagetext = substr($messagetext, 0, -4); my $messagetable; if ($messagetext) { $messagetable = << "EOF";
Messages
$messagetext
EOF } # patrontable .... my $borrowertable; my $flaginfotable; if ($borrower) { $borrowertable = << "EOF"; EOF my $flags = $borrower->{'flags'}; my $flaginfotext=''; my $displayflag = ''; my $color = ''; foreach my $flag (sort keys %$flags) { ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1); if ($flags->{$flag}->{'noissues'}) { $displayflag = "$flag"; } else { $displayflag = $flag; } if ($flag eq 'CHARGES') { $flaginfotext.= <<"EOF"; EOF } elsif ($flag eq 'WAITING') { my $itemswaiting=''; my $items = $flags->{$flag}->{'itemlist'}; foreach my $item (@$items) { my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); $itemswaiting .= <<"EOF"; {'biblionumber'}&type=intra onClick="openWindow(this, 'Item', 480, 640)">$iteminformation->{'barcode'} $iteminformation->{'title'} ($branches->{$iteminformation->{'holdingbranch'}}->{'branchname'})
EOF } $flaginfotext.="\n"; } elsif ($flag eq 'ODUES') { my $itemsoverdue = ''; my $items = $flags->{$flag}->{'itemlist'}; foreach my $item (sort {$a->{'date_due'} cmp $b->{'date_due'}} @$items) { my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); $itemsoverdue .= <<"EOF"; $item->{'date_due'}{'biblionumber'}&type=intra onClick="openWindow(this, 'Item', 480, 640)">$iteminformation->{'barcode'} $iteminformation->{'title'}
EOF } $flaginfotext .= "\n"; } else { $flaginfotext.= <<"EOF"; EOF } } if ($flaginfotext) { $borrowertable .= << "EOF"; $flaginfotext EOF } $borrowertable .= "
Borrower Information
{'borrowernumber'} onClick="openWindow(this,'Member', 480, 640)">$borrower->{'cardnumber'} $borrower->{'surname'}, $borrower->{'title'} $borrower->{'firstname'}
$displayflag $flags->{$flag}->{'message'} {'borrowernumber'} onClick="openWindow(this, 'Payment', 480,640)">Payment
$displayflag$itemswaiting
$displayflag$itemsoverdue
$displayflag $flags->{$flag}->{'message'}
Flags
"; } # the returned items..... my $returneditemstable = << "EOF"; EOF my $color=''; #set up so only the lat 8 returned items display (make for faster loading pages) my $count=0; foreach (sort {$a <=> $b} keys %returneditems) { if ($count < 8) { ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1); my $barcode = $returneditems{$_}; my $duedate = $riduedate{$_}; my $overduetext; my $borrowerinfo; if ($duedate) { my @tempdate = split ( /-/ , $duedate ) ; my $duedatenz = "$tempdate[2]/$tempdate[1]/$tempdate[0]"; my @datearr = localtime(time()); my $todaysdate = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]); $overduetext = "$duedatenz"; ($overduetext="$duedate") if ($duedate lt $todaysdate); ($duedatenz) || ($overduetext = ""); my ($borrower) = getpatroninformation(\%env, $riborrowernumber{$_}, 0); $borrowerinfo = "{'borrowernumber'} onClick=\"openWindow(this,'Member', 480, 640)\">$borrower->{'cardnumber'} $borrower->{'firstname'} $borrower->{'surname'}"; } else { $overduetext = "Not on Issue."; $borrowerinfo = $riborrowernumber{$_}; } my ($iteminformation) = getiteminformation(\%env, 0, $barcode);; $returneditemstable .= << "EOF"; EOF } else { last; } $count++; } $returneditemstable .= "
Returned Items
Due DateBar CodeTitleAuthorTypeBorrower
$overduetext {'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$barcode $iteminformation->{'title'} $iteminformation->{'author'} $iteminformation->{'itemtype'} $borrowerinfo
\n"; # actually print the page! print $query->header(); print startpage(); print startmenu('circulation'); #debug # foreach my $key (keys %$messages) { # print "$key : $messages->{$key}
"; # } print <<"EOF"; $links $title EOF if ($reservefoundtext) { print <<"EOF"; EOF } else { print <<"EOF"; EOF } if ($returned) { print <<"EOF"; EOF } if (%returneditems) { print ""; } print "
$reservefoundtext
$messagetable
$barcodeentrytext $messagetable
$itemtable $borrowertable
$returneditemstable
"; print endmenu('circulation'); print endpage(); 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; } }