Making a change to the way charges are handled, the system originally worked such...
[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         foreach (sort {$a <=> $b} keys %returneditems) {
386             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
387             my $barcode=$returneditems{$_};
388             my $duedate=$riduedate{$_};
389             my @datearr = localtime(time());
390             my $todaysdate = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]);
391             my $overduetext="$duedate";
392             ($overduetext="<font color=red>$duedate</font>") if ($duedate lt $todaysdate);
393             ($duedate) || ($overduetext="<img src=/koha/images/blackdot.gif>");
394             my $borrowernumber=$riborrowernumber{$_};
395             my ($borrower) = getpatroninformation(\%env,$borrowernumber,0);
396             my ($iteminformation) = getiteminformation(\%env, 0, $barcode);
397             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";
398         }
399         print "</table>\n";
400     } else {
401         print $barcodeentrytext;
402     }
403     print "</form>\n";
404     print "</td></tr></table>\n";
405 }
406
407 sub issues {
408     my ($noheader) = shift;
409     my $print=$query->param('print');
410     my $borrowernumber=$query->param('borrnumber');    
411     my $barcode=$query->param('barcode');
412     if ($barcode eq ''){
413       $print='yes';     
414     } elsif ($barcode eq ' '){
415       $query->param('barcode','');
416       $barcode='';
417     }
418     if ($print eq 'yes'){
419       my ($borrower, $flags) = getpatroninformation(\%env,$borrowernumber,0);
420       $env{'todaysissues'}=1;
421       my ($borrowerissues) = currentissues(\%env, $borrower);
422       $env{'nottodaysissues'}=1;
423       $env{'todaysissues'}=0;
424       my ($borroweriss2)=currentissues(\%env, $borrower);
425       $env{'nottodaysissues'}=0;
426       my $i=0;
427       my @issues;
428       foreach (sort keys %$borrowerissues) {
429         $issues[$i]=$borrowerissues->{$_};
430         $i++;
431       }
432       foreach (sort keys %$borroweriss2) {
433         $issues[$i]=$borroweriss2->{$_};
434         $i++;
435       }
436       remoteprint(\%env,\@issues,$borrower);
437       $query->param('borrnumber','')
438     }
439     unless ($noheader) {
440       print <<EOF
441       <p align=right>
442       <FONT SIZE=2  face="arial, helvetica">
443       <a href=circulation.pl?borrnumber=$borrowernumber&module=issues&branch=$branch&printer=$printer&print>Next Borrower</a> ||
444       <a href=circulation.pl?module=returns&branch=$branch&printer=$printer>Returns</a></font><p>
445        
446         
447         </p>
448 EOF
449     }
450     if (my $borrnumber=$query->param('borrnumber')) {
451         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
452         my $year=$query->param('year');
453         my $month=$query->param('month');
454         my $day=$query->param('day');
455         if (my $barcode=$query->param('barcode')) {
456           # decode cuecat
457           chomp($barcode);
458           @fields = split(/\./,$barcode);
459           @results = map(decode($_), @fields[1..$#fields]);
460           if ($#results == 2)
461           {
462             $barcode=$results[2];
463           }
464           # end decode
465             my $invalidduedate=0;
466             $env{'datedue'}='';
467             if (($year eq 0) && ($month eq 0) && ($year eq 0)) {
468                 $env{'datedue'}='';
469             } else {
470                 if (($year eq 0) || ($month eq 0) || ($year eq 0)) {
471                     print "Invalid Due Date Specified. Book was not issued.<p>\n";
472                     $invalidduedate=1;
473                 } else {
474                     if (($day>30) && (($month==4) || ($month==6) || ($month==9) || ($month==11))) {
475                         print "Invalid Due Date Specified. Book was not issued. Only 30 days in $month month.<p>\n";
476                         $invalidduedate=1;
477                     } elsif (($day>29) && ($month==2)) {
478                         print "Invalid Due Date Specified. Book was not issued.  Never that many days in February!<p>\n";
479                         $invalidduedate=1;
480                     } elsif (($month==2) && ($day>28) && (($year%4) && ((!($year%100) || ($year%400))))) {
481                         print "Invalid Due Date Specified. Book was not issued.  $year is not a leap year.<p>\n";
482                         $invalidduedate=1;
483                     } else {
484                         $env{'datedue'}="$year-$month-$day";
485                     }
486                 }
487             }
488             my %responses;
489             foreach (sort $query->param) {
490                 if ($_ =~ /response-(\d*)/) {
491                     $responses{$1}=$query->param($_);
492                 }
493             }
494             if (my $qnumber=$query->param('questionnumber')) {
495                 $responses{$qnumber}=$query->param('answer');
496             }
497             unless ($invalidduedate) {
498                 my @time=localtime(time);
499                 my $date= (1900+$time[5])."-".($time[4]+1)."-".$time[3];
500                 my ($iteminformation, $duedate, $rejected, $question, $questionnumber, $defaultanswer, $message) = issuebook(\%env, $borrower, $barcode, \%responses,$date);
501                 unless ($iteminformation) {
502                     print << "EOF";
503                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
504                     <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Error</font></th></tr>
505                     <tr><td>
506                     <table border=0 cellpadding=5>
507                     <tr><td>
508                     $barcode is not a valid barcode.
509                     </td></tr>
510                     </table>
511 EOF
512                 }
513                 if ($rejected) {
514                     if ($rejected == -1) {
515                     } else {
516                         print << "EOF"
517                         <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
518                         <tr><th><font color=black size=6>Error Issuing Book</font></th></tr>
519                         <tr><td><font color=red size=6>$rejected</font></td></tr>
520                         </table>
521                         <br>
522 EOF
523                     }
524                 }
525                 my $responsesform='';
526                 foreach (keys %responses) {
527                     $responsesform.="<input type=hidden name=response-$_ value=$responses{$_}>\n";
528                 }
529                 if ($question) {
530                     my $stickyduedate=$query->param('stickyduedate');
531                     print << "EOF";
532                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
533                     <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Issuing Question</b></font></td></tr>
534                     <tr><td>
535                     <table border=0 cellpadding=10>
536                     <tr><td>
537                     Attempting to issue $iteminformation->{'title'} by $iteminformation->{'author'} to $borrower->{'firstname'} $borrower->{'surname'}.
538                     <p>
539                     $question
540                     </td></tr>
541                     </table>
542                     </td></tr>
543
544                     <tr><td align=center>
545                     <table border=0>
546                     <tr><td>
547                     <form method=get>
548                     <input type=hidden name=module value=issues>
549                     <input type=hidden name=borrnumber value=$borrnumber>
550                     <input type=hidden name=barcode value=$barcode>
551                     <input type=hidden name=questionnumber value=$questionnumber>
552                     <input type=hidden name=day value=$day>
553                     <input type=hidden name=month value=$month>
554                     <input type=hidden name=year value=$year>
555                     <input type=hidden name=stickyduedate value=$stickyduedate>
556                     <input type=hidden name=branch value=$branch>
557                     <input type=hidden name=printer value=$printer>
558                     $responsesform
559                     <input type=hidden name=answer value=Y>
560                     <input type=submit value=Yes>
561                     </form>
562                     </td>
563                     <td>
564                     <form method=get>
565                     <input type=hidden name=module value=issues>
566                     <input type=hidden name=borrnumber value=$borrnumber>
567                     <input type=hidden name=barcode value=$barcode>
568                     <input type=hidden name=questionnumber value=$questionnumber>
569                     <input type=hidden name=day value=$day>
570                     <input type=hidden name=month value=$month>
571                     <input type=hidden name=year value=$year>
572                     <input type=hidden name=stickyduedate value=$stickyduedate>
573                     <input type=hidden name=branch value=$branch>
574                     <input type=hidden name=printer value=$printer>
575                     $responsesform
576                     <input type=hidden name=answer value=N>
577                     <input type=submit value=No>
578                     </form>
579                     </td>
580                     </tr>
581                     </table>
582                     </td></tr>
583                     </table>
584                     </td></tr>
585                     </table>
586 EOF
587                     return;
588                 }
589                 if ($message) {
590                     print << "EOF";
591                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
592                     <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black>Message</font></th></tr>
593                     <tr><td>$message</td></tr>
594                     </table>
595                     <p>
596 EOF
597                 }
598             }
599         }
600         my $issueid=$query->param('issueid');
601         ($issueid) || ($issueid=int(rand()*1000000000));
602         my $flag='';
603         my $flagtext='';
604         my $flaginfotext='';
605         foreach $flag (sort keys %$flags) {
606             if ($flags->{$flag}->{'noissues'}) {
607                 $flagtext.="<font color=red>$flag</font> ";
608             } else {
609                 $flagtext.="$flag ";
610             }
611             $flags->{$flag}->{'message'}=~s/\n/<br>/g;
612             if ($flags->{$flag}->{'noissues'}) {
613                 $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";
614             } else {
615                 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n";
616             }
617         }
618         if ($flaginfotext) {
619             $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";
620         }
621         $env{'nottodaysissues'}=1;
622         my ($borrowerissues) = currentissues(\%env, $borrower);
623         $env{'nottodaysissues'}=0;
624         $env{'todaysissues'}=1;
625         my ($today) = currentissues(\%env, $borrower);
626         $env{'todaysissues'}=0;
627         my $previssues='';
628         my @datearr = localtime(time());
629         my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", $datearr[3]);
630         my $color='';
631         foreach (sort keys %$borrowerissues) {
632             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
633             my $bookissue=$borrowerissues->{$_};
634             my $bgcolor='';
635             my $datedue=$bookissue->{'date_due'};
636             my $dd=$bookissue->{'date_due'};
637             $datedue=~s/-//g;
638             if ($datedue < $todaysdate) {
639                 $dd="<font color=red>$dd</font>\n";
640             }
641             $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";
642         }
643         my $todaysissues='';
644         $color='';
645         foreach (sort keys %$today) {
646             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
647             my $bookissue=$today->{$_};
648             $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";
649         }
650         for ($i=1; $i<32; $i++) {
651             my $selected='';
652             if (($query->param('stickyduedate')) && ($day==$i)) {
653                 $selected='selected';
654             }
655             $dayoptions.="<option value=$i $selected>$i";
656         }
657         my $counter=1;
658         foreach (('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) {
659             my $selected='';
660             if (($query->param('stickyduedate')) && ($month==$counter)) {
661                 $selected='selected';
662             }
663             $monthoptions.="<option value=$counter $selected>$_";
664             $counter++;
665         }
666         for ($i=$datearr[5]+1900; $i<$datearr[5]+1905; $i++) {
667             my $selected='';
668             if (($query->param('stickyduedate')) && ($year==$i)) {
669                 $selected='selected';
670             }
671             $yearoptions.="<option value=$i $selected>$i";
672         }
673
674         my $selected='';
675         ($query->param('stickyduedate')) && ($selected='checked');
676         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
677         my ($patrontable, $flaginfotable) = patrontable($borrower);
678         print << "EOF";
679         $patrontable
680         $flaginfotable
681         <FONT SIZE=6><em>Issues</em></FONT> &nbsp; &nbsp;<br> <a href=circulation.pl?selectnewbranchprinter=1><b>Branch:</b></a> $branch,
682          <a href=circulation.pl?selectnewbranchprinter=1><b>Printer:</b></a> $printer<P>
683          <p>
684         <form method=get>
685     <table border=1 cellpadding=5>
686     <tr>
687         <td align=center valign=top>
688             <table border=0 cellspacing=0 cellpadding=5>
689                 <tr><th align=center background=$backgroundimage><font color=black><b>Enter Book Barcode</b></font></th></tr>
690                 <tr><td align=center>
691                 <table border=0>
692                 <tr><td>Item Barcode:</td><td><input name=barcode size=10></td><td><input type=submit value=Issue></tr>
693                 <tr><td colspan=3 align=center>
694                 <table border=0 cellpadding=0 cellspacing=0>
695                 <tr><td>
696                 <select name=day><option value=0>Day$dayoptions</select>
697                 </td><td>
698                 <select name=month><option value=0>Month$monthoptions</select>
699                 </td><td>
700                 <select name=year><option value=0>Year$yearoptions</select>
701                 </td></tr>
702                 </table>
703                 <input type=checkbox name=stickyduedate $selected> Sticky Due Date
704                 </td></tr>
705               </table>
706         <input type=hidden name=module value=issues>
707         <input type=hidden name=borrnumber value=$borrnumber>
708         <input type=hidden name=branch value=$branch>
709         <input type=hidden name=printer value=$printer>
710         
711 EOF
712 ;
713   my $amountold=$flags->{'CHARGES'}->{'message'};
714   my @temp=split(/\$/,$amountold);
715   $amountold=$temp[1];
716   print "<input type=hidden name=oldamount value=$amountold>";
717   if ($flags->{'CHARGES'}){
718             print "<input type=hidden name=charges value=yes>";
719   }
720 print <<EOF
721 </form>
722         </td>
723
724
725     </tr>
726     </table>
727     </table>
728     
729     <p clear=all>
730 <!-- issues tables-->
731         <table border=1 cellpadding=5 cellspacing=0 width=90%>
732         <td colspan=2 align=center>
733         <table border=0 cellpadding=5 cellspacing=0 width=100% > 
734             <tr><th colspan=5 bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Issues Today</b></font></th></tr>
735             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
736             $todaysissues
737         </table>
738         </td>
739     </tr>
740
741     <tr>
742         <td colspan=2 align=center>
743         <table border=0 cellpadding=5 cellspacing=0 width=100%>
744             <tr><th colspan=5 bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Previous Issues</b></font></th></tr>
745             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
746             $previssues
747         </table>
748         </td>
749     </tr>
750 </table>
751 </td></tr></table>
752 <p>
753 EOF
754     } else {
755         if (my $findborrower=$query->param('findborrower')) {
756             my ($borrowers, $flags) = findborrower(\%env, $findborrower);
757             my @borrowers=@$borrowers;
758             if ($#borrowers == -1) {
759                 $query->param('findborrower', '');
760                 print "No borrower matched '$findborrower'<p>\n";
761                 issues(1);
762                 return;
763             }
764             if ($#borrowers == 0) {
765                 $query->param('borrnumber', $borrowers[0]->{'borrowernumber'});
766                 $query->param('barcode',' ');
767                 issues(1);
768                 return;
769             } else {
770                 print "<form method=get>\n";
771                 print "<input type=hidden name=module value=issues>\n";
772                 print "<input type=hidden name=branch value=$branch>\n";
773                 print "<input type=hidden name=printer value=$printer>\n";
774                 print "<input type=hidden name=barcode value=\" \">\n";
775                 print "<table border=0 cellspacing=0 cellpadding=5 bgcolor=#dddddd>";
776                 print "<tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Select a borrower</b></font></th></tr>\n";
777                 print "<tr><td align=center>\n";
778                 print "<select name=borrnumber size=7>\n";
779                 foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowers) {
780                     print "<option value=$_->{'borrowernumber'}>$_->{'surname'}, $_->{'firstname'} ($_->{'cardnumber'})\n";
781                 }
782                 print "</select><br>";
783                 print "<input type=submit>\n";
784                 print "</td></tr></table>\n";
785                 print "</td></tr></table>\n";
786             }
787         } else {
788             print << "EOF";
789 <form method=get>
790 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
791 <tr><th bgcolor=$headerbackgroundcolor background=$backgroundimage><font color=black><b>Enter borrower card number<br> or partial last name</b></font></td></tr>
792 <tr><td><input name=findborrower></td></tr>
793 </table>
794 <input type=hidden name=module value=issues>
795 <input type=hidden name=branch value=$branch>
796 <input type=hidden name=printer value=$printer>
797 <input type=hidden name=barcode value=" ">
798 </form>
799 </td></tr></table>
800 EOF
801         }
802     }
803 }
804
805
806 sub patrontable {
807     my ($borrower) = @_;
808     my $flags=$borrower->{'flags'};
809     my $flagtext='';
810     my $flaginfotable='';
811     my $flaginfotext='';
812     my $flag;
813     foreach $flag (sort keys %$flags) {
814         ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
815         if ($flags->{$flag}->{'noissues'}) {
816             $flagtext.="<font color=red>$flag</font> ";
817         } else {
818             $flagtext.="$flag ";
819         }
820         $flags->{$flag}->{'message'}=~s/\n/<br>/g;
821         if ($flags->{$flag}->{'noissues'}) {
822             if ($flag eq 'CHARGES') {
823                 $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";
824             } else {
825                 $flaginfotext.="<tr><td valign=top><font color=red>$flag</font></td><td bgcolor=$color>$flags->{$flag}->{'message'}</td></tr>\n";
826             }
827         } else {
828             if ($flag eq 'CHARGES') {
829                 $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";
830             } elsif ($flag eq 'WAITING') {
831                 my $itemswaiting='';
832                 my $items=$flags->{$flag}->{'itemlist'};
833                 foreach $item (@$items) {
834                     my ($iteminformation) = getiteminformation($env, $item->{'itemnumber'}, 0);
835                     $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";
836                 }
837                 $flaginfotext.="<tr><td valign=top>$flag</td><td>$itemswaiting</td></tr>\n";
838             } elsif ($flag eq 'ODUES') {
839                 my $items=$flags->{$flag}->{'itemlist'};
840                 my $itemswaiting="<table border=0 cellspacing=0 cellpadding=2>\n";
841                 my $currentcolor=$color;
842                 {
843                     my $color=$currentcolor;
844                     foreach $item (@$items) {
845                         ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
846                         my ($iteminformation) = getiteminformation($env, $item->{'itemnumber'}, 0);
847                         $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";
848                     }
849                 }
850                 $itemswaiting.="</table>\n";
851                 if ($query->param('module') ne 'returns'){
852                   $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}, See below</td></tr>\n";
853                 } else {
854                   $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n"; 
855                 }
856             } else {
857                 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n";
858             }
859         }
860     }
861     ($flaginfotext) && ($flaginfotext="<tr><td bgcolor=$headerbackgroundcolor background=$backgroundimage colspan=2><b>Flags</b></td></tr>$flaginfotext\n");
862     $flaginfotext.="</table>";
863     my $patrontable= << "EOF";
864     <table border=1
865     cellpadding=5 cellspacing=0 align=right>
866     <tr><td bgcolor=$headerbackgroundcolor background=$backgroundimage colspan=2><font color=black><b>Patron Information</b></font></td></tr>
867     <tr><td colspan=2>
868     <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>
869 EOF
870     if ($query->param('module') ne 'returns'){ 
871        $patrontable.="$borrower->{'streetaddress'} $borrower->{'city'} Cat:
872        $borrower->{'categorycode'} ";
873      }
874     $patrontable.=<< "EOF";
875     
876     </td></tr>
877
878 EOF
879     return($patrontable, $flaginfotext);
880 }