X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=circ%2Freturns.pl;h=c4608523324f30d844652b346818e3cf18418326;hb=9b2028ab726b7377684820ae318c909161792054;hp=6dad4dfe51ece0bc117e5139cccb007fdb8d36b1;hpb=12c6a261248cf9b89883d5cd9025ef33e704692c;p=koha.git diff --git a/circ/returns.pl b/circ/returns.pl index 6dad4dfe51..c460852332 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -1,4 +1,7 @@ #!/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 @@ -28,25 +31,33 @@ use C4::Search; use C4::Output; use C4::Print; use C4::Reserves2; +use C4::Auth; +use C4::Interface::CGI::Output; +use HTML::Template; +use C4::Koha; +my $query=new CGI; +#getting the template +my ($template, $borrowernumber, $cookie) + = get_template_and_user({template_name => "circ/returns.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => {circulate => 1}, + }); + +##################### +#Global vars 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')) ; - +my $branch = getbranch($query, $branches); +my $printer = getprinter($query, $printers); # # Some code to handle the error if there is no branch or printer setting..... @@ -57,13 +68,15 @@ $env{'branchcode'}=$branch; $env{'printer'}=$printer; $env{'queue'}=$printer; + # Set up the item stack .... -my $ritext = ''; my %returneditems; my %riduedate; my %riborrowernumber; +my @inputloop; foreach ($query->param) { (next) unless (/ri-(\d*)/); + my %input; my $counter=$1; (next) if ($counter>20); my $barcode=$query->param("ri-$counter"); @@ -72,18 +85,19 @@ foreach ($query->param) { $counter++; # decode cuecat $barcode = cuecatbarcodedecode($barcode); + ###################### + #Are these lines still useful ? $returneditems{$counter}=$barcode; $riduedate{$counter}=$duedate; $riborrowernumber{$counter}=$borrowernumber; - $ritext.="\n"; - $ritext.="\n"; - $ritext.="\n"; + ####################### + $input{counter}=$counter; + $input{barcode}=$barcode; + $input{duedate}=$duedate; + $input{bornum}=$borrowernumber; + push (@inputloop, \%input); } -# Collect a few messages here... -my $messagetext=''; -my $reservetext=''; - ############ # Deal with the requests.... if ($query->param('resbarcode')) { @@ -95,23 +109,18 @@ if ($query->param('resbarcode')) { my $tobranchcd = ReserveWaiting($item, $borrnum); my $branchname = $branches->{$tobranchcd}->{'branchname'}; my ($borr) = getpatroninformation(\%env, $borrnum, 0); + my $borcnum=$borr->{'cardnumber'}; 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 + $template->param( itemtitle => $iteminfo->{'title'}, + iteminfo => $iteminfo->{'author'}, + branchname => $branchname, + name => $name, + bornum => $borrnum, + borcnum => $borcnum, + diffbranch => 1); } } @@ -126,359 +135,243 @@ 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"; + $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); } 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} = ' '; + my %input; + $input{counter}=0; + $input{first}=1; + $input{barcode}=$barcode; + $input{duedate}=0; + + $returneditems{0} = $barcode; + $riduedate{0} = 0; + if ($messages->{'wthdrawn'}) { + $input{withdrawn}=1; + $input{bornum}="Item Cancelled"; + $riborrowernumber{0} = 'Item Cancelled'; + } else { + $input{bornum}=" "; + $riborrowernumber{0} = ' '; + } + push (@inputloop, \%input); } - } -} - -################################################################################## -# HTML code.... -# title.... -my $title = <<"EOF"; -Circulation: Returns
-Branch: $branches->{$branch}->{'branchname'}  Printer: $printers->{$printer}->{'printername'}
-Change Settings - - -

-EOF - -my $links = <<"EOF"; -
- -IssuesIssues -
-EOF - - -my $itemtable; -if ($iteminformation) { - $itemtable = <<"EOF"; - - - -
-Returned Item Information
-Title: $iteminformation->{'title'}
- -
-EOF + $template->param( returned => $returned, + itemtitle => $iteminformation->{'title'}, +# itembc => $iteminformation->{'barcode'}, +# itemdatedue => $iteminformation->{'datedue'}, + itemauthor => $iteminformation->{'author'}); } +$template->param(inputloop => \@inputloop); -# Barcode entry box, with hidden inputs attached.... -my $barcodeentrytext = << "EOF"; -

- - - -
-Enter Book Barcode
Item Barcode:
-$ritext -
-EOF +my $found=0; +my $waiting=0; +my $reserved=0; 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'} - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + $template->param( found => 1, + name => $name, + bornum => $res->{'borrowernumber'}, + borcnum => $borr->{'cardnumber'}, + branchname => $branches->{$res->{'branchcode'}}->{'branchname'}, + waiting => 1, + itemtitle => $iteminfo->{'title'}, + itemauthor => $iteminfo->{'author'}); -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 printslip?: -
-$ritext -{'itemnumber'}> -{'borrowernumber'}> - - - -
-
-EOF } -} -my $reservefoundtext; -if ($reservetext) { - $reservefoundtext = <<"EOF"; - - -
Reserve Found
$reservetext
-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); + $template->param( found => 1, + branchname => $branches->{$res->{'branchcode'}}->{'branchname'}, + reserved => 1, + today => $todaysdate, + itemnum => $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'}, + bortown => $borr->{'town'}, + boremail => $borr->{'emailadress'}, + barcode => $barcode + ); + } } -# collect the messages and put into message table.... +# Error Messages +my @errmsgloop; foreach my $code (keys %$messages) { # warn $code; + my %err; + my $exit_required_p = 0; 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'}
"; - } + $err{badbarcode}=1; + $err{msg}= $messages->{'BadBarcode'}; + } elsif ($code eq 'NotIssued'){ + $err{notissued}=1; + $err{msg}= $branches->{$messages->{'IsPermanent'}}->{'branchname'}; + } elsif ($code eq 'WasLost'){ + $err{waslost}=1; + } elsif ($code eq 'WasReturned'){ + ; # FIXME... anything to do here? + } elsif ($code eq 'WasTransfered'){ + ; # FIXME... anything to do here? + } elsif ($code eq 'wthdrawn'){ + $err{withdrawn}=1; + $exit_required_p = 1; + } elsif (($code eq 'IsPermanent') && (not $messages->{'ResFound'})) { + if ($messages->{'IsPermanent'} ne $branch) { + $err{ispermanent}=1; + $err{msg}=$branches->{$messages->{'IsPermanent'}}->{'branchname'} ; + } + } else { + die "Unknown error code $code"; # XXX } + push (@errmsgloop, \%err); +last if $exit_required_p; } -$messagetext = substr($messagetext, 0, -4); - -my $messagetable; -if ($messagetext) { - $messagetable = << "EOF"; - - -
Messages
$messagetext
-EOF -} - +$template->param(errmsgloop => \@errmsgloop); # patrontable .... -my $borrowertable; -my $flaginfotable; if ($borrower) { - $borrowertable = << "EOF"; - - - -EOF my $flags = $borrower->{'flags'}; - my $flaginfotext=''; - my $displayflag = ''; my $color = ''; + my @flagloop; + my $flagset; 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=intraonClick="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=intraonClick="openWindow(this, 'Item', 480, 640)">$iteminformation->{'barcode'}$iteminformation->{'title'} -
-EOF - } - $flaginfotext .= "\n"; - } else { - $flaginfotext.= <<"EOF"; - - -EOF - } - } - if ($flaginfotext) { - $borrowertable .= << "EOF"; - -$flaginfotext -EOF + 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; + } elsif ($flag eq 'WAITING') { + $flaginfo{msg}=$flag; + $flaginfo{waiting}=1; + 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); + } + $flaginfo{itemloop}=\@waitingitemloop; + } elsif ($flag eq 'ODUES') { + my $items = $flags->{$flag}->{'itemlist'}; + my @itemloop; + foreach my $item (sort {$a->{'date_due'} cmp $b->{'date_due'}} @$items) { + my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); + my %overdueitem; + $overdueitem{duedate}=$item->{'date_due'}; + $overdueitem{biblionum}=$iteminformation->{'biblionumber'}; + $overdueitem{barcode}=$iteminformation->{'barcode'}; + $overdueitem{title}=$iteminformation->{'title'}; + $overdueitem{brname}=$branches->{$iteminformation->{'holdingbranch'}}->{'branchname'}; + push(@itemloop, \%overdueitem); + } + $flaginfo{itemloop}=\@itemloop; + $flaginfo{overdue}=1; + } else { + $flaginfo{other}=1; + $flaginfo{msg}=$flags->{$flag}->{'message'}; + } + push(@flagloop, \%flaginfo); } - $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
"; + $template->param( flagset => $flagset, + flagloop => \@flagloop, + ribornum => $borrower->{'borrowernumber'}, + riborcnum => $borrower->{'cardnumber'}, + riborsurname => $borrower->{'surname'}, + ribortitle => $borrower->{'title'}, + riborfirstname => $borrower->{'firstname'} + ); } -# 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; +my @riloop; foreach (sort {$a <=> $b} keys %returneditems) { + my %ri; if ($count < 8) { - ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1); - my $barcode = $returneditems{$_}; - my $duedate = $riduedate{$_}; - my $overduetext; + ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1); + $ri{color}=$color; + my $barcode = $returneditems{$_}; + my $duedate = $riduedate{$_}; + my $overduetext; my $borrowerinfo; - if ($duedate) { - my @tempdate = split ( /-/ , $duedate ) ; + 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'}"; + my $todaysdate = $datearr[5].'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]); + 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'}; } else { - $overduetext = "Not on Issue."; - $borrowerinfo = $riborrowernumber{$_}; - } - my ($iteminformation) = getiteminformation(\%env, 0, $barcode);; - $returneditemstable .= << "EOF"; - - - - - - -EOF - } else { - last; + $ri{bornum}=$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; + } else { + last; } $count++; + push(@riloop,\%ri); } -$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"; +$template->param(riloop => \@riloop); +$template->param( genbrname => $branches->{$branch}->{'branchname'}, + genprname => $printers->{$printer}->{'printername'}, + branch => $branch, + printer => $printer, + errmsgloop => \@errmsgloop + ); # 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(); +output_html_with_http_headers $query, $cookie, $template->output; sub cuecatbarcodedecode { my ($barcode) = @_; @@ -490,3 +383,7 @@ sub cuecatbarcodedecode { } else { return $barcode; }} + +# Local Variables: +# tab-width: 4 +# End: