Quick bodge to restrict the number of returned books showing to 8.
[koha.git] / circ / circulation.pl
1 #!/usr/bin/perl
2
3 use CGI qw/:standard/;
4 use C4::Circulation::Circ2;
5 use C4::Output;
6 use C4::Print;
7 use DBI;
8
9
10 my %env;
11 my $headerbackgroundcolor='#99cc33';
12 my $circbackgroundcolor='#ffffcc';
13 my $circbackgroundcolor='white';
14 my $linecolor1='#ffffcc';
15 my $linecolor2='white';
16 my $backgroundimage="/images/background-mem.gif";
17 my $query=new CGI;
18 my $branches=getbranches(\%env);
19 my $printers=getprinters(\%env);
20 my $branch=$query->param('branch');
21 my $printer=$query->param('printer');
22 ($branch) || ($branch=$query->cookie('branch'));
23 ($printer) || ($printer=$query->cookie('printer'));
24 my ($oldbranch, $oldprinter);
25 if ($query->param('selectnewbranchprinter')) {
26     $oldbranch=$branch;
27     $oldprinter=$printer;
28     $branch='';
29     $printer='';
30 }
31 $env{'branchcode'}=$branch;
32 $env{'printer'}=$printer;
33 $env{'queue'}=$printer;
34 my $branchcount=0;
35 my $printercount=0;
36 my $branchoptions;
37 my $printeroptions;
38 foreach (keys %$branches) {
39     (next) unless ($_);
40     (next) if (/^TR$/);
41     $branchcount++;
42     my $selected='';
43     ($selected='selected') if ($_ eq $oldbranch);
44     $branchoptions.="<option value=$_ $selected>$branches->{$_}->{'branchname'}\n";
45 }
46 foreach (keys %$printers) {
47     (next) unless ($_);
48     $printercount++;
49     my $selected='';
50     ($selected='selected') if ($_ eq $oldprinter);
51     $printeroptions.="<option value=$_ $selected>$printers->{$_}->{'printername'}\n";
52 }
53 if ($printercount==1) {
54     ($printer)=keys %$printers;
55 }
56 if ($branchcount==1) {
57     ($branch)=keys %$branches;
58 }
59
60
61 my $branchname='';
62 my $printername='';
63 if ($branch && $printer) {
64     $branchname=$branches->{$branch}->{'branchname'};
65     $printername=$printers->{$printer}->{'printername'};
66 }
67
68
69 my $branchcookie=$query->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y');
70 my $printercookie=$query->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y');
71
72 print $query->header(-type=>'text/html',-expires=>'now', -cookie=>[$branchcookie,$printercookie]);
73 #print $query->dump;
74 print startpage();
75 #print startmenu('circulation');
76 my @inp=startmenu('circulation');
77 if ($query->param('module') eq 'issues' && $query->param('barcode') eq '' && $query->param('charges') eq 'yes'){
78  my $count=@inp;
79  for (my $i=0;$i<$count;$i++){
80   my $bornum=$query->param('borrnumber');
81   $inp[$i]=~ s/onLoad=focusinput\(\)/onLoad=focusinput\(\)\;messenger\(\"\/cgi-bin\/koha\/pay.pl?bornum=$bornum\"\)\;window1.focus\(\)/;
82  }
83 }
84 print @inp;
85
86 print <<EOF
87 <script language="javascript" type="text/javascript">
88 <!--
89 function messenger(url){
90    window1=window.open(url,"window1","height=700,width=600,left=150,top=50,350,screenY=50");
91 }
92 //-->
93 </script>
94 EOF
95 ;
96 if ($printer && $branch) {
97
98     SWITCH: {
99         if ($query->param('module') eq 'issues') { issues(); last SWITCH; }
100         if ($query->param('module') eq 'returns') { returns(); last SWITCH; }
101         issues();
102     }
103 } else {
104     my ($printerform, $branchform);
105     if ($printercount>1) {
106         $printerform=<<"EOF";
107
108 <table border=0 cellspacing=0 cellpadding=5>
109 <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Choose a Printer</font></td></tr>
110 <tr><td>
111 <select name=printer>
112 $printeroptions
113 </select>
114 </td></tr>
115 </table>
116 EOF
117     } else {
118         my ($printer) = keys %$printers;
119         $printerform=<<"EOF";
120         <input type=hidden name=printer value=$printer>
121 EOF
122     }
123
124     if ($branchcount>1) {
125         $branchform=<<"EOF";
126 <table border=0 cellpadding=5 cellspacing=0>
127 <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Choose a Branch</font></td></tr>
128 <tr><td>
129 <select name=branch>
130 $branchoptions
131 </select>
132 </td></tr>
133 </table>
134 EOF
135     }
136     print << "EOF";
137     <center>
138     Select a branch and a printer
139     <form method=get>
140     <table border=0>
141     <tr><td>
142     $branchform
143     </td><td>
144     $printerform
145     </td></tr>
146     </table>
147     <input type=submit>
148     </form>
149 EOF
150 }
151
152
153 print endmenu('circulation');
154 print endpage();
155 sub default {
156 print << "EOF";
157 <a href=circulation.pl?module=issues&branch=$branch&printer=$printer>Issues</a>
158 <a href=circulation.pl?module=returns&branch=$branch&printer=$printer>Returns</a>
159 EOF
160 }
161
162
163 sub decode {
164     ($encoded) = @_;
165     $seq = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-';
166     @s = map { index($seq,$_); } split(//,$encoded);
167     $l = ($#s+1) % 4;
168     if ($l)
169     {
170         if ($l == 1)
171         {
172             print "Error!";
173             return;
174         }
175         $l = 4-$l;
176         $#s += $l;
177     }
178     $r = '';
179     while ($#s >= 0)
180     {
181         $n = (($s[0] << 6 | $s[1]) << 6 | $s[2]) << 6 | $s[3];
182         $r .=chr(($n >> 16) ^ 67) .
183              chr(($n >> 8 & 255) ^ 67) .
184              chr(($n & 255) ^ 67);
185         @s = @s[4..$#s];
186     }
187     $r = substr($r,0,length($r)-$l);
188     return $r;
189 }
190
191 sub returns {
192     my %returneditems;
193     print << "EOF";
194     <table border=0 cellpadding=10 cellspacing=0 cellpadding=5><tr><th background=$backgroundimage>Circulation - Returns</th></tr><tr><td bgcolor=$circbackgroundcolor align=center>
195 EOF
196     foreach ($query->param) {
197         (next) unless (/ri-(\d*)/);
198         my $counter=$1;
199         (next) if ($counter>20);
200         my $barcode=$query->param("ri-$counter");
201       # I'm not POSITIVE this decode belongs here - can't tell what causes it to run.
202       # decode cuecat
203       chomp($barcode);
204       @fields = split(/\./,$barcode);
205       @results = map(decode($_), @fields[1..$#fields]);
206       if ($#results == 2)
207       {
208         $barcode=$results[2];
209       }
210       # end decode
211         my $duedate=$query->param("dd-$counter");
212         my $borrowernumber=$query->param("bn-$counter");
213         $counter++;
214         $returneditems{$counter}=$barcode;
215         $riduedate{$counter}=$duedate;
216         $riborrowernumber{$counter}=$borrowernumber;
217         $ritext.="<input type=hidden name=ri-$counter value=$barcode>\n";
218         $ritext.="<input type=hidden name=dd-$counter value=$duedate>\n";
219         $ritext.="<input type=hidden name=bn-$counter value=$borrowernumber>\n";
220     }
221     if (my $barcode=$query->param('barcode')) {
222       # decode cuecat
223       chomp($barcode);
224       @fields = split(/\./,$barcode);
225       @results = map(decode($_), @fields[1..$#fields]);
226       if ($#results == 2)
227       {
228         $barcode=$results[2];
229       }
230       # end decode
231         $ritext.="<input type=hidden name=ri-0 value=$barcode>\n";
232         $returneditems{0}=$barcode;
233     }
234         
235     my $barcodeentrytext= << "EOF";
236     <form method=post action=/cgi-bin/koha/circ/circulation.pl>
237     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
238         <tr><td colspan=2 bgcolor=$headerbackgroundcolor align=center background=$backgroundimage><font color=black><b>Enter Book Barcode</b></font></td></tr>
239         <tr><td>Item Barcode:</td><td><input name=barcode size=10></td></tr>
240     </table>
241     <input type=hidden name=module value=returns>
242     <input type=hidden name=branch value=$branch>
243     <input type=hidden name=printer value=$printer>
244     $ritext
245 EOF
246     if ((my $barcode=$query->param('barcode')) || (%returneditems)) {
247       # decode cuecat
248       chomp($barcode);
249       @fields = split(/\./,$barcode);
250       @results = map(decode($_), @fields[1..$#fields]);
251       if ($#results == 2)
252       {
253         $barcode=$results[2];
254       }
255       # end decode
256         my ($iteminformation, $borrower, $messages, $overduecharge) = returnbook(\%env, $barcode);
257         
258         (my $nosuchitem=1) unless ($iteminformation);
259         $riborrowernumber{0}=$borrower->{'borrowernumber'};
260         $riduedate{0}=$iteminformation->{'date_due'};
261         $barcodeentrytext.= "<input type=hidden name=dd-0 value=$iteminformation->{'date_due'}>\n";
262         $barcodeentrytext.= "<input type=hidden name=bn-0 value=$borrower->{'borrowernumber'}>\n";
263         my @datearr = localtime(time());
264         my $todaysdate = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]);
265         my $itemtable=<<"EOF";
266 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
267 <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Returned Item Information</font></th></tr>
268 <tr><td>
269 Title: $iteminformation->{'title'}<br>
270 <!--Hlt decided they dont want these showing, uncoment the html to make it work
271
272 Author: $iteminformation->{'author'}<br>
273 Barcode: <a href=/cgi-bin/koha/detail.pl?bib=$iteminformation->{'biblionumber'}&type=intra onClick="openWindow(this, 'Item', 480, 640)">$iteminformation->{'barcode'}</a><br>
274 Date Due: $iteminformation->{'date_due'}-->
275 </td></tr>
276 </table>
277 EOF
278         if ($messages) {
279             my $messagetext='';
280             foreach (@$messages) {
281                 $messagetext.="$_<p>\n";
282             }
283             print << "EOF";
284 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
285 <tr><th bgcolor=$headerbackgroundcolor $background=$backgroundimage><font color=black>Messages</font></th></tr>
286 <tr><td>
287 $messagetext
288 </td></tr>
289 </table>
290 <p>
291 EOF
292         }
293         if (($nosuchitem) && ($barcode)) {
294             print << "EOF";
295             <table border=0 cellpadding=1>
296             <tr>
297             <td valign=top>
298             $barcodeentrytext
299             </td>
300             <td valign=top>
301             <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
302             <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Error</font></th></tr>
303             <tr><td>
304             <table border=0 cellpadding=5>
305             <tr><td>
306             $barcode is not a valid barcode.
307             </td></tr>
308             </table>
309             </td></tr>
310             </table>
311             </td>
312             </tr>
313             </table>
314 EOF
315         } elsif ($nosuchitem) {
316             print << "EOF";
317             <table border=0 cellpadding=1>
318             <tr>
319             <td valign=top>
320             $barcodeentrytext
321             </td>
322             </tr>
323             </table>
324 EOF
325         } else {
326             if ($borrower->{'borrowernumber'}) {
327                 my ($patrontable, $flaginfotext) = patrontable($borrower);
328                 print << "EOF";
329                 <table border=0 cellpadding=5>
330                     <tr>
331                         <td>
332                         $barcodeentrytext
333                         </td>
334                         <td align=center valign=top>
335                         $itemtable
336                         </td>
337                     </tr>
338                     <tr>
339                         <td valign=top align=center colspan=2>
340                         <table border=0>
341                         <tr><td valign=top>
342                         $patrontable
343                         </td>
344                         <td valign=top>
345                         $flaginfotext
346                         </td>
347                         </tr>
348                         </table>
349                         </td>
350                     </tr>
351                 </table>
352                 <br>
353 EOF
354             } else {
355                 print << "EOF";
356                 <table border=0 cellpadding=5>
357                 <tr><td>
358                 $barcodeentrytext
359                 </td>
360                 <td>
361
362                 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
363                 <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Error</font></th></tr>
364                 <tr><td>
365                 <table border=0 cellpadding=5>
366                 <tr><td>
367                 $iteminformation->{'title'} by $iteminformation->{'author'} was not loaned out.
368                 </td></tr>
369                 </table>
370                 </td></tr>
371                 </table>
372                 </td>
373                 </tr>
374                 </table>
375 EOF
376             }
377         }
378         print << "EOF";
379         <p>
380         <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
381         <tr><th colspan=6 bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Returned Items</font></th></tr>
382         <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Type</th><th>Borrower</th></tr>
383 EOF
384         my $color='';
385         #set up so only the lat 8 returned items display (make for faster loading pages)
386         my $count=0;
387         foreach (sort {$a <=> $b} keys %returneditems) {
388           if ($count < 8){
389             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
390             my $barcode=$returneditems{$_};
391             my $duedate=$riduedate{$_};
392             my @datearr = localtime(time());
393             ###
394             # convert to nz date format
395             my @tempdate=split(/-/,$duedate);
396             $duedate="$tempdate[2]/$tempdate[1]/$tempdate[0]";
397             ####
398             my $todaysdate = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]);
399             my $overduetext="$duedate";
400             ($overduetext="<font color=red>$duedate</font>") if ($duedate lt $todaysdate);
401             ($duedate) || ($overduetext="<img src=/koha/images/blackdot.gif>");
402             my $borrowernumber=$riborrowernumber{$_};
403             my ($borrower) = getpatroninformation(\%env,$borrowernumber,0);
404             my ($iteminformation) = getiteminformation(\%env, 0, $barcode);
405             print "<tr><td bgcolor=$color>$overduetext</td><td bgcolor=$color align=center><a href=/cgi-bin/koha/detail.pl?bib=$iteminformation->{'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$barcode</a></td><td bgcolor=$color>$iteminformation->{'title'}</td><td bgcolor=$color>$iteminformation->{'author'}</td><td bgcolor=$color align=center>$iteminformation->{'itemtype'}</td><td bgcolor=$color><img src=/koha/images/blackdot.gif><a href=/cgi-bin/koha/moremember.pl?bornum=$borrower->{'borrowernumber'} onClick=\"openWindow(this,'Member', 480, 640)\">$borrower->{'cardnumber'}</a> $borrower->{'firstname'} $borrower->{'surname'}</td></tr>\n";
406           } else {
407             last
408           }
409           $count++;
410         }
411         print "</table>\n";
412     } else {
413         print $barcodeentrytext;
414     }
415     print "</form>\n";
416     print "</td></tr></table>\n";
417 }
418
419 sub issues {
420     my ($noheader) = shift;
421     my $print=$query->param('print');
422     my $borrowernumber=$query->param('borrnumber');    
423     my $barcode=$query->param('barcode');
424     if ($barcode eq ''){
425       $print='yes';     
426     } elsif ($barcode eq ' '){
427       $query->param('barcode','');
428       $barcode='';
429     }
430     if ($print eq 'yes'){
431       my ($borrower, $flags) = getpatroninformation(\%env,$borrowernumber,0);
432       $env{'todaysissues'}=1;
433       my ($borrowerissues) = currentissues(\%env, $borrower);
434       $env{'nottodaysissues'}=1;
435       $env{'todaysissues'}=0;
436       my ($borroweriss2)=currentissues(\%env, $borrower);
437       $env{'nottodaysissues'}=0;
438       my $i=0;
439       my @issues;
440       foreach (sort keys %$borrowerissues) {
441         $issues[$i]=$borrowerissues->{$_};
442         $i++;
443       }
444       foreach (sort keys %$borroweriss2) {
445         $issues[$i]=$borroweriss2->{$_};
446         $i++;
447       }
448       remoteprint(\%env,\@issues,$borrower);
449       $query->param('borrnumber','')
450     }
451     unless ($noheader) {
452       print <<EOF
453       <p align=right>
454       <FONT SIZE=2  face="arial, helvetica">
455       <a href=circulation.pl?borrnumber=$borrowernumber&module=issues&branch=$branch&printer=$printer&print>Next Borrower</a> ||
456       <a href=circulation.pl?module=returns&branch=$branch&printer=$printer>Returns</a></font><p>
457        
458         
459         </p>
460 EOF
461     }
462     if (my $borrnumber=$query->param('borrnumber')) {
463         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
464         my $year=$query->param('year');
465         my $month=$query->param('month');
466         my $day=$query->param('day');
467         if (my $barcode=$query->param('barcode')) {
468           # decode cuecat
469           chomp($barcode);
470           @fields = split(/\./,$barcode);
471           @results = map(decode($_), @fields[1..$#fields]);
472           if ($#results == 2)
473           {
474             $barcode=$results[2];
475           }
476           # end decode
477             my $invalidduedate=0;
478             $env{'datedue'}='';
479             if (($year eq 0) && ($month eq 0) && ($year eq 0)) {
480                 $env{'datedue'}='';
481             } else {
482                 if (($year eq 0) || ($month eq 0) || ($year eq 0)) {
483                     print "Invalid Due Date Specified. Book was not issued.<p>\n";
484                     $invalidduedate=1;
485                 } else {
486                     if (($day>30) && (($month==4) || ($month==6) || ($month==9) || ($month==11))) {
487                         print "Invalid Due Date Specified. Book was not issued. Only 30 days in $month month.<p>\n";
488                         $invalidduedate=1;
489                     } elsif (($day>29) && ($month==2)) {
490                         print "Invalid Due Date Specified. Book was not issued.  Never that many days in February!<p>\n";
491                         $invalidduedate=1;
492                     } elsif (($month==2) && ($day>28) && (($year%4) && ((!($year%100) || ($year%400))))) {
493                         print "Invalid Due Date Specified. Book was not issued.  $year is not a leap year.<p>\n";
494                         $invalidduedate=1;
495                     } else {
496                         $env{'datedue'}="$year-$month-$day";
497                     }
498                 }
499             }
500             my %responses;
501             foreach (sort $query->param) {
502                 if ($_ =~ /response-(\d*)/) {
503                     $responses{$1}=$query->param($_);
504                 }
505             }
506             if (my $qnumber=$query->param('questionnumber')) {
507                 $responses{$qnumber}=$query->param('answer');
508             }
509             unless ($invalidduedate) {
510                 my @time=localtime(time);
511                 my $date= (1900+$time[5])."-".($time[4]+1)."-".$time[3];
512                 my ($iteminformation, $duedate, $rejected, $question, $questionnumber, $defaultanswer, $message) = issuebook(\%env, $borrower, $barcode, \%responses,$date);
513                 unless ($iteminformation) {
514                     print << "EOF";
515                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
516                     <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Error</font></th></tr>
517                     <tr><td>
518                     <table border=0 cellpadding=5>
519                     <tr><td>
520                     $barcode is not a valid barcode.
521                     </td></tr>
522                     </table>
523 EOF
524                 }
525                 if ($rejected) {
526                     if ($rejected == -1) {
527                     } else {
528                         print << "EOF"
529                         <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
530                         <tr><th><font color=black size=6>Error Issuing Book</font></th></tr>
531                         <tr><td><font color=red size=6>$rejected</font></td></tr>
532                         </table>
533                         <br>
534 EOF
535                     }
536                 }
537                 my $responsesform='';
538                 foreach (keys %responses) {
539                     $responsesform.="<input type=hidden name=response-$_ value=$responses{$_}>\n";
540                 }
541                 if ($question) {
542                     my $stickyduedate=$query->param('stickyduedate');
543                     print << "EOF";
544                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
545                     <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Issuing Question</b></font></td></tr>
546                     <tr><td>
547                     <table border=0 cellpadding=10>
548                     <tr><td>
549                     Attempting to issue $iteminformation->{'title'} by $iteminformation->{'author'} to $borrower->{'firstname'} $borrower->{'surname'}.
550                     <p>
551                     $question
552                     </td></tr>
553                     </table>
554                     </td></tr>
555
556                     <tr><td align=center>
557                     <table border=0>
558                     <tr><td>
559                     <form method=get>
560                     <input type=hidden name=module value=issues>
561                     <input type=hidden name=borrnumber value=$borrnumber>
562                     <input type=hidden name=barcode value=$barcode>
563                     <input type=hidden name=questionnumber value=$questionnumber>
564                     <input type=hidden name=day value=$day>
565                     <input type=hidden name=month value=$month>
566                     <input type=hidden name=year value=$year>
567                     <input type=hidden name=stickyduedate value=$stickyduedate>
568                     <input type=hidden name=branch value=$branch>
569                     <input type=hidden name=printer value=$printer>
570                     $responsesform
571                     <input type=hidden name=answer value=Y>
572                     <input type=submit value=Yes>
573                     </form>
574                     </td>
575                     <td>
576                     <form method=get>
577                     <input type=hidden name=module value=issues>
578                     <input type=hidden name=borrnumber value=$borrnumber>
579                     <input type=hidden name=barcode value=$barcode>
580                     <input type=hidden name=questionnumber value=$questionnumber>
581                     <input type=hidden name=day value=$day>
582                     <input type=hidden name=month value=$month>
583                     <input type=hidden name=year value=$year>
584                     <input type=hidden name=stickyduedate value=$stickyduedate>
585                     <input type=hidden name=branch value=$branch>
586                     <input type=hidden name=printer value=$printer>
587                     $responsesform
588                     <input type=hidden name=answer value=N>
589                     <input type=submit value=No>
590                     </form>
591                     </td>
592                     </tr>
593                     </table>
594                     </td></tr>
595                     </table>
596                     </td></tr>
597                     </table>
598 EOF
599                     return;
600                 }
601                 if ($message) {
602                     print << "EOF";
603                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
604                     <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Message</font></th></tr>
605                     <tr><td>$message</td></tr>
606                     </table>
607                     <p>
608 EOF
609                 }
610             }
611         }
612         my $issueid=$query->param('issueid');
613         ($issueid) || ($issueid=int(rand()*1000000000));
614         my $flag='';
615         my $flagtext='';
616         my $flaginfotext='';
617         foreach $flag (sort keys %$flags) {
618             if ($flags->{$flag}->{'noissues'}) {
619                 $flagtext.="<font color=red>$flag</font> ";
620             } else {
621                 $flagtext.="$flag ";
622             }
623             $flags->{$flag}->{'message'}=~s/\n/<br>/g;
624             if ($flags->{$flag}->{'noissues'}) {
625                 $flaginfotext.="<tr><td bgcolor=red valign=top><font color=black><b>$flag</b></font></td><td bgcolor=red><font color=black><b>$flags->{$flag}->{'message'}</b></font></td></tr>\n";
626             } else {
627                 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n";
628             }
629         }
630         if ($flaginfotext) {
631             $flaginfotext="<table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd><tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage colspan=2><font color=black>Patron Flags</font></th></tr>$flaginfotext</table>\n";
632         }
633         $env{'nottodaysissues'}=1;
634         my ($borrowerissues) = currentissues(\%env, $borrower);
635         $env{'nottodaysissues'}=0;
636         $env{'todaysissues'}=1;
637         my ($today) = currentissues(\%env, $borrower);
638         $env{'todaysissues'}=0;
639         my $previssues='';
640         my @datearr = localtime(time());
641         my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", $datearr[3]);
642         my $color='';
643         foreach (sort keys %$borrowerissues) {
644             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
645             my $bookissue=$borrowerissues->{$_};
646             my $bgcolor='';
647             my $datedue=$bookissue->{'date_due'};
648             my $dd=$bookissue->{'date_due'};
649             #convert to nz style dates
650             #this should be set with some kinda config variable
651             
652             my @tempdate=split(/-/,$dd);
653             $dd="$tempdate[2]/$tempdate[1]/$tempdate[0]";
654             
655             #####
656             $datedue=~s/-//g;
657             if ($datedue < $todaysdate) {
658                 $dd="<font color=red>$dd</font>\n";
659             }
660             $previssues.="<tr><td bgcolor=$color align=center>$dd</td><td bgcolor=$color align=center><a href=/cgi-bin/koha/detail.pl?bib=$bookissue->{'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$bookissue->{'barcode'}</a></td><td bgcolor=$color>$bookissue->{'title'}</td><td bgcolor=$color>$bookissue->{'author'}</td><td bgcolor=$color align=center>$bookissue->{'dewey'} $bookissue->{'subclass'}</td></tr>\n";
661         }
662         my $todaysissues='';
663         $color='';
664         foreach (sort keys %$today) {
665             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
666             my $bookissue=$today->{$_};
667             $todaysissues.="<tr><td bgcolor=$color align=center>$bookissue->{'date_due'}</td><td bgcolor=$color align=center><a href=/cgi-bin/koha/detail.pl?bib=$bookissue->{'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$bookissue->{'barcode'}</a></td><td bgcolor=$color>$bookissue->{'title'}</td><td bgcolor=$color>$bookissue->{'author'}</td><td bgcolor=$color align=center>$bookissue->{'dewey'} $bookissue->{'subclass'}</td></tr>\n";
668         }
669         for ($i=1; $i<32; $i++) {
670             my $selected='';
671             if (($query->param('stickyduedate')) && ($day==$i)) {
672                 $selected='selected';
673             }
674             $dayoptions.="<option value=$i $selected>$i";
675         }
676         my $counter=1;
677         foreach (('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) {
678             my $selected='';
679             if (($query->param('stickyduedate')) && ($month==$counter)) {
680                 $selected='selected';
681             }
682             $monthoptions.="<option value=$counter $selected>$_";
683             $counter++;
684         }
685         for ($i=$datearr[5]+1900; $i<$datearr[5]+1905; $i++) {
686             my $selected='';
687             if (($query->param('stickyduedate')) && ($year==$i)) {
688                 $selected='selected';
689             }
690             $yearoptions.="<option value=$i $selected>$i";
691         }
692
693         my $selected='';
694         ($query->param('stickyduedate')) && ($selected='checked');
695         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
696         my ($patrontable, $flaginfotable) = patrontable($borrower);
697         print << "EOF";
698         $patrontable
699         $flaginfotable
700         <FONT SIZE=6><em>Issues</em></FONT> &nbsp; &nbsp;<br> <a href=circulation.pl?selectnewbranchprinter=1><b>Branch:</b></a> $branch,
701          <a href=circulation.pl?selectnewbranchprinter=1><b>Printer:</b></a> $printer<P>
702          <p>
703         <form method=get>
704     <table border=1 cellpadding=5>
705     <tr>
706         <td align=center valign=top>
707             <table border=0 cellspacing=0 cellpadding=5>
708                 <tr><th align=center background=$backgroundimage><font color=black><b>Enter Book Barcode</b></font></th></tr>
709                 <tr><td align=center>
710                 <table border=0>
711                 <tr><td>Item Barcode:</td><td><input name=barcode size=10></td><td><input type=submit value=Issue></tr>
712                 <tr><td colspan=3 align=center>
713                 <table border=0 cellpadding=0 cellspacing=0>
714                 <tr><td>
715                 <select name=day><option value=0>Day$dayoptions</select>
716                 </td><td>
717                 <select name=month><option value=0>Month$monthoptions</select>
718                 </td><td>
719                 <select name=year><option value=0>Year$yearoptions</select>
720                 </td></tr>
721                 </table>
722                 <input type=checkbox name=stickyduedate $selected> Sticky Due Date
723                 </td></tr>
724               </table>
725         <input type=hidden name=module value=issues>
726         <input type=hidden name=borrnumber value=$borrnumber>
727         <input type=hidden name=branch value=$branch>
728         <input type=hidden name=printer value=$printer>
729         
730 EOF
731 ;
732   my $amountold=$flags->{'CHARGES'}->{'message'};
733   my @temp=split(/\$/,$amountold);
734   $amountold=$temp[1];
735   print "<input type=hidden name=oldamount value=$amountold>";
736   if ($flags->{'CHARGES'}){
737             print "<input type=hidden name=charges value=yes>";
738   }
739 print <<EOF
740 </form>
741         </td>
742
743
744     </tr>
745     </table>
746     </table>
747     
748     <p clear=all>
749 <!-- issues tables-->
750         <table border=1 cellpadding=5 cellspacing=0 width=90%>
751         <td colspan=2 align=center>
752         <table border=0 cellpadding=5 cellspacing=0 width=100% > 
753             <tr><th colspan=5 bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Issues Today</b></font></th></tr>
754             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
755             $todaysissues
756         </table>
757         </td>
758     </tr>
759
760     <tr>
761         <td colspan=2 align=center>
762         <table border=0 cellpadding=5 cellspacing=0 width=100%>
763             <tr><th colspan=5 bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Previous Issues</b></font></th></tr>
764             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
765             $previssues
766         </table>
767         </td>
768     </tr>
769 </table>
770 </td></tr></table>
771 <p>
772 EOF
773     } else {
774         if (my $findborrower=$query->param('findborrower')) {
775             my ($borrowers, $flags) = findborrower(\%env, $findborrower);
776             my @borrowers=@$borrowers;
777             if ($#borrowers == -1) {
778                 $query->param('findborrower', '');
779                 print "No borrower matched '$findborrower'<p>\n";
780                 issues(1);
781                 return;
782             }
783             if ($#borrowers == 0) {
784                 $query->param('borrnumber', $borrowers[0]->{'borrowernumber'});
785                 $query->param('barcode',' ');
786                 issues(1);
787                 return;
788             } else {
789                 print "<form method=get>\n";
790                 print "<input type=hidden name=module value=issues>\n";
791                 print "<input type=hidden name=branch value=$branch>\n";
792                 print "<input type=hidden name=printer value=$printer>\n";
793                 print "<input type=hidden name=barcode value=\" \">\n";
794                 print "<table border=0 cellspacing=0 cellpadding=5 bgcolor=#dddddd>";
795                 print "<tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Select a borrower</b></font></th></tr>\n";
796                 print "<tr><td align=center>\n";
797                 print "<select name=borrnumber size=7>\n";
798                 foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowers) {
799                     print "<option value=$_->{'borrowernumber'}>$_->{'surname'}, $_->{'firstname'} ($_->{'cardnumber'})\n";
800                 }
801                 print "</select><br>";
802                 print "<input type=submit>\n";
803                 print "</td></tr></table>\n";
804                 print "</td></tr></table>\n";
805             }
806         } else {
807             print << "EOF";
808 <form method=get>
809 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
810 <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Enter borrower card number<br> or partial last name</b></font></td></tr>
811 <tr><td><input name=findborrower></td></tr>
812 </table>
813 <input type=hidden name=module value=issues>
814 <input type=hidden name=branch value=$branch>
815 <input type=hidden name=printer value=$printer>
816 <input type=hidden name=barcode value=" ">
817 </form>
818 </td></tr></table>
819 EOF
820         }
821     }
822 }
823
824
825 sub patrontable {
826     my ($borrower) = @_;
827     my $flags=$borrower->{'flags'};
828     my $flagtext='';
829     my $flaginfotable='';
830     my $flaginfotext='';
831     my $flag;
832     foreach $flag (sort keys %$flags) {
833         ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
834         if ($flags->{$flag}->{'noissues'}) {
835             $flagtext.="<font color=red>$flag</font> ";
836         } else {
837             $flagtext.="$flag ";
838         }
839         $flags->{$flag}->{'message'}=~s/\n/<br>/g;
840         if ($flags->{$flag}->{'noissues'}) {
841             if ($flag eq 'CHARGES') {
842                 $flaginfotext.="<tr><td valign=top><font color=red>$flag</font></td><td bgcolor=$color><b>$flags->{$flag}->{'message'}</b> <a href=/cgi-bin/koha/pay.pl?bornum=$borrower->{'borrowernumber'} onClick=\"openWindow(this, 'Payment', 480,640)\">Payment</a></td></tr>\n";
843             } else {
844                 $flaginfotext.="<tr><td valign=top><font color=red>$flag</font></td><td bgcolor=$color>$flags->{$flag}->{'message'}</td></tr>\n";
845             }
846         } else {
847             if ($flag eq 'CHARGES') {
848                 $flaginfotext.="<tr><td valign=top>$flag</td><td> $flags->{$flag}->{'message'} <a href=/cgi-bin/koha/pay.pl?bornum=$borrower->{'borrowernumber'} onClick=\"openWindow(this, 'Payment', 480,640)\">Payment</a></td></tr>\n";
849             } elsif ($flag eq 'WAITING') {
850                 my $itemswaiting='';
851                 my $items=$flags->{$flag}->{'itemlist'};
852                 foreach $item (@$items) {
853                     my ($iteminformation) = getiteminformation($env, $item->{'itemnumber'}, 0);
854                     $itemswaiting.="<a href=/cgi-bin/koha/detail.pl?bib=$iteminformation->{'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$iteminformation->{'barcode'}</a> $iteminformation->{'title'} ($branches->{$iteminformation->{'holdingbranch'}}->{'branchname'})<br>\n";
855                 }
856                 $flaginfotext.="<tr><td valign=top>$flag</td><td>$itemswaiting</td></tr>\n";
857             } elsif ($flag eq 'ODUES') {
858                 my $items=$flags->{$flag}->{'itemlist'};
859                 my $itemswaiting="<table border=0 cellspacing=0 cellpadding=2>\n";
860                 my $currentcolor=$color;
861                 {
862                     my $color=$currentcolor;
863                     foreach $item (@$items) {
864                         ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
865                         my ($iteminformation) = getiteminformation($env, $item->{'itemnumber'}, 0);
866                         $itemswaiting.="<tr><td><font color=red>$iteminformation->{'date_due'}</font></td><td bgcolor=$color><a href=/cgi-bin/koha/detail.pl?bib=$iteminformation->{'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$iteminformation->{'barcode'}</a></td><td>$iteminformation->{'title'}</td></tr>\n";
867                     }
868                 }
869                 $itemswaiting.="</table>\n";
870                 if ($query->param('module') ne 'returns'){
871                   $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}, See below</td></tr>\n";
872                 } else {
873                   $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n"; 
874                 }
875             } else {
876                 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n";
877             }
878         }
879     }
880     ($flaginfotext) && ($flaginfotext="<tr><td bgcolor=$headerbackgroundcolor background=$backgroundimage colspan=2><b>Flags</b></td></tr>$flaginfotext\n");
881     $flaginfotext.="</table>";
882     my $patrontable= << "EOF";
883     <table border=1
884     cellpadding=5 cellspacing=0 align=right>
885     <tr><td bgcolor=$headerbackgroundcolor background=$backgroundimage colspan=2><font color=black><b>Patron Information</b></font></td></tr>
886     <tr><td colspan=2>
887     <a href=/cgi-bin/koha/moremember.pl?bornum=$borrower->{'borrowernumber'} onClick="openWindow(this,'Member', 480, 640)">$borrower->{'cardnumber'}</a> $borrower->{'surname'}, $borrower->{'title'} $borrower->{'firstname'}<br>
888 EOF
889     if ($query->param('module') ne 'returns'){ 
890        $patrontable.="$borrower->{'streetaddress'} $borrower->{'city'} Cat:
891        $borrower->{'categorycode'} ";
892      }
893     $patrontable.=<< "EOF";
894     
895     </td></tr>
896
897 EOF
898     return($patrontable, $flaginfotext);
899 }