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