Mostly just look changes, got rid of table borders, alternating colors on
[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 DBI;
7
8
9 my %env;
10 my $headerbackgroundcolor='#990000';
11 my $circbackgroundcolor='#555555';
12 my $circbackgroundcolor='#550000';
13 my $linecolor1='#bbbbbb';
14 my $linecolor2='#dddddd';
15 my $query=new CGI;
16 my $branches=getbranches(\%env);
17 my $printers=getprinters(\%env);
18 my $branch=$query->param('branch');
19 my $printer=$query->param('printer');
20 ($branch) || ($branch=$query->cookie('branch'));
21 ($printer) || ($printer=$query->cookie('printer'));
22 my ($oldbranch, $oldprinter);
23 if ($query->param('selectnewbranchprinter')) {
24     $oldbranch=$branch;
25     $oldprinter=$printer;
26     $branch='';
27     $printer='';
28 }
29 $env{'branchcode'}=$branch;
30 $env{'printer'}=$printer;
31 my $branchcount=0;
32 my $printercount=0;
33 my $branchoptions;
34 my $printeroptions;
35 foreach (keys %$branches) {
36     (next) unless ($_);
37     (next) if (/^TR$/);
38     $branchcount++;
39     my $selected='';
40     ($selected='selected') if ($_ eq $oldbranch);
41     $branchoptions.="<option value=$_ $selected>$branches->{$_}->{'branchname'}\n";
42 }
43 foreach (keys %$printers) {
44     (next) unless ($_);
45     $printercount++;
46     my $selected='';
47     ($selected='selected') if ($_ eq $oldprinter);
48     $printeroptions.="<option value=$_ $selected>$printers->{$_}->{'printername'}\n";
49 }
50 if ($printercount==1) {
51     ($printer)=keys %$printers;
52 }
53 if ($branchcount==1) {
54     ($branch)=keys %$branches;
55 }
56
57
58 my $branchname='';
59 my $printername='';
60 if ($branch && $printer) {
61     $branchname=$branches->{$branch}->{'branchname'};
62     $printername=$printers->{$printer}->{'printername'};
63 }
64
65
66 my $branchcookie=$query->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y');
67 my $printercookie=$query->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y');
68
69 print $query->header(-type=>'text/html',-expires=>'now', -cookie=>[$branchcookie,$printercookie]);
70 print startpage();
71 print startmenu('circulation');
72
73
74 print << "EOF";
75 <center>
76 <p>
77 <table border=0 width=100% cellspacing=0 bgcolor=$headerbackgroundcolor>
78 <tr>
79 <th width=5%></th>
80 <th width=30%><font color=white>$branchname</font></th>
81 <th width=10%>
82         <a href=circulation.pl?module=issues&branch=$branch&printer=$printer><font color=white><img src=/images/issues.gif border=0 height=40></font></a>
83 </th>
84 <th width=10%>
85     <a href=circulation.pl?selectnewbranchprinter=1><font color=white>Branch/Printer</font></a>
86 </th>
87 <th width=10%>
88     <a href=circulation.pl?module=returns&branch=$branch&printer=$printer><font color=white><img src=/images/returns.gif border=0 height=40></font></a>
89 </th>
90 <th width=30%><font color=white>$printername</font></th>
91 <th width=5%></th>
92 </tr>
93 </table>
94
95
96 <br>
97 EOF
98
99
100 if ($printer && $branch) {
101
102     SWITCH: {
103         if ($query->param('module') eq 'issues') { issues(); last SWITCH; }
104         if ($query->param('module') eq 'returns') { returns(); last SWITCH; }
105         issues();
106     }
107 } else {
108     my ($printerform, $branchform);
109     if ($printercount>1) {
110         $printerform=<<"EOF";
111 <table border=0 cellspacing=0 cellpadding=5>
112 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Choose a Printer</font></td></tr>
113 <tr><td>
114 <select name=printer>
115 $printeroptions
116 </select>
117 </td></tr>
118 </table>
119 EOF
120     } else {
121         my ($printer) = keys %$printers;
122         $printerform=<<"EOF";
123         <input type=hidden name=printer value=$printer>
124 EOF
125     }
126
127     if ($branchcount>1) {
128         $branchform=<<"EOF";
129 <table border=0 cellpadding=5 cellspacing=0>
130 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Choose a Branch</font></td></tr>
131 <tr><td>
132 <select name=branch>
133 $branchoptions
134 </select>
135 </td></tr>
136 </table>
137 EOF
138     }
139     print << "EOF";
140     Select a branch and a printer
141     <form method=get>
142     <table border=0>
143     <tr><td>
144     $branchform
145     </td><td>
146     $printerform
147     </td></tr>
148     </table>
149     <input type=submit>
150     </form>
151 EOF
152 }
153
154
155 print endmenu('circulation');
156 print endpage();
157 sub default {
158 print << "EOF";
159 <a href=circulation.pl?module=issues&branch=$branch&printer=$printer>Issues</a>
160 <a href=circulation.pl?module=returns&branch=$branch&printer=$printer>Returns</a>
161 EOF
162 }
163
164
165 sub returns {
166     my %returneditems;
167     print << "EOF";
168     <table border=0 cellpadding=10 cellspacing=0 bgcolor=$headerbackgroundcolor cellpadding=5><tr><th><font color=white>Circulation - Returns</font></td></tr><tr><td bgcolor=$circbackgroundcolor align=center>
169 EOF
170     foreach ($query->param) {
171         (next) unless (/ri-(\d*)/);
172         my $counter=$1;
173         (next) if ($counter>20);
174         my $barcode=$query->param("ri-$counter");
175         my $duedate=$query->param("dd-$counter");
176         my $borrowernumber=$query->param("bn-$counter");
177         $counter++;
178         $returneditems{$counter}=$barcode;
179         $riduedate{$counter}=$duedate;
180         $riborrowernumber{$counter}=$borrowernumber;
181         $ritext.="<input type=hidden name=ri-$counter value=$barcode>\n";
182         $ritext.="<input type=hidden name=dd-$counter value=$duedate>\n";
183         $ritext.="<input type=hidden name=bn-$counter value=$borrowernumber>\n";
184     }
185     if (my $barcode=$query->param('barcode')) {
186         $ritext.="<input type=hidden name=ri-0 value=$barcode>\n";
187         $returneditems{0}=$barcode;
188     }
189         
190     my $barcodeentrytext= << "EOF";
191     <form method=get>
192     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
193         <tr><td colspan=2 bgcolor=$headerbackgroundcolor align=center><font color=white><b>Enter Book Barcode</b></font></td></tr>
194         <tr><td>Item Barcode:</td><td><input name=barcode size=10></td></tr>
195     </table>
196     <input type=hidden name=module value=returns>
197     <input type=hidden name=branch value=$branch>
198     <input type=hidden name=printer value=$printer>
199     $ritext
200 EOF
201     if ((my $barcode=$query->param('barcode')) || (%returneditems)) {
202         my ($iteminformation, $borrower, $messages, $overduecharge) = returnbook(\%env, $barcode);
203         
204         (my $nosuchitem=1) unless ($iteminformation);
205         $riborrowernumber{0}=$borrower->{'borrowernumber'};
206         $riduedate{0}=$iteminformation->{'date_due'};
207         $barcodeentrytext.= "<input type=hidden name=dd-0 value=$iteminformation->{'date_due'}>\n";
208         $barcodeentrytext.= "<input type=hidden name=bn-0 value=$borrower->{'borrowernumber'}>\n";
209         my @datearr = localtime(time());
210         my $todaysdate = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]);
211         my $itemtable=<<"EOF";
212 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
213 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Returned Item Information</font></th></tr>
214 <tr><td>
215 Title: $iteminformation->{'title'}<br>
216 Author: $iteminformation->{'author'}<br>
217 Barcode: <a href=/cgi-bin/koha/detail.pl?bib=$iteminformation->{'biblionumber'}&type=intra onClick="openWindow(this, 'Item', 480, 640)">$iteminformation->{'barcode'}</a><br>
218 Date Due: $iteminformation->{'date_due'}
219 </td></tr>
220 </table>
221 EOF
222         if ($messages) {
223             my $messagetext='';
224             foreach (@$messages) {
225                 $messagetext.="$_<p>\n";
226             }
227             print << "EOF";
228 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
229 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Messages</font></th></tr>
230 <tr><td>
231 $messagetext
232 </td></tr>
233 </table>
234 <p>
235 EOF
236         }
237         if (($nosuchitem) && ($barcode)) {
238             print << "EOF";
239             <table border=0 cellpadding=1>
240             <tr>
241             <td valign=top>
242             $barcodeentrytext
243             </td>
244             <td valign=top>
245             <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
246             <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error</font></th></tr>
247             <tr><td>
248             <table border=0 cellpadding=5>
249             <tr><td>
250             $barcode is not a valid barcode.
251             </td></tr>
252             </table>
253             </td></tr>
254             </table>
255             </td>
256             </tr>
257             </table>
258 EOF
259         } elsif ($nosuchitem) {
260             print << "EOF";
261             <table border=0 cellpadding=1>
262             <tr>
263             <td valign=top>
264             $barcodeentrytext
265             </td>
266             </tr>
267             </table>
268 EOF
269         } else {
270             if ($borrower->{'borrowernumber'}) {
271                 my ($patrontable, $flaginfotext) = patrontable($borrower);
272                 print << "EOF";
273                 <table border=0 cellpadding=5>
274                     <tr>
275                         <td>
276                         $barcodeentrytext
277                         </td>
278                         <td align=center valign=top>
279                         $itemtable
280                         </td>
281                     </tr>
282                     <tr>
283                         <td valign=top align=center colspan=2>
284                         <table border=0>
285                         <tr><td valign=top>
286                         $patrontable
287                         </td>
288                         <td valign=top>
289                         $flaginfotext
290                         </td>
291                         </tr>
292                         </table>
293                         </td>
294                     </tr>
295                 </table>
296                 <br>
297 EOF
298             } else {
299                 print << "EOF";
300                 <table border=0 cellpadding=5>
301                 <tr><td>
302                 $barcodeentrytext
303                 </td>
304                 <td>
305
306                 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
307                 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error</font></th></tr>
308                 <tr><td>
309                 <table border=0 cellpadding=5>
310                 <tr><td>
311                 $iteminformation->{'title'} by $iteminformation->{'author'} was not loaned out.
312                 </td></tr>
313                 </table>
314                 </td></tr>
315                 </table>
316                 </td>
317                 </tr>
318                 </table>
319 EOF
320             }
321         }
322         print << "EOF";
323         <p>
324         <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
325         <tr><th colspan=6 bgcolor=$headerbackgroundcolor><font color=white>Returned Items</font></th></tr>
326         <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th><th>Borrower</th></tr>
327 EOF
328         my $color='';
329         foreach (sort {$a <=> $b} keys %returneditems) {
330             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
331             my $barcode=$returneditems{$_};
332             my $duedate=$riduedate{$_};
333             my @datearr = localtime(time());
334             my $todaysdate = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]);
335             my $overduetext="$duedate";
336             ($overduetext="<font color=red>$duedate</font>") if ($duedate lt $todaysdate);
337             ($duedate) || ($overduetext="<img src=/images/blackdot.gif>");
338             my $borrowernumber=$riborrowernumber{$_};
339             my ($borrower) = getpatroninformation(\%env,$borrowernumber,0);
340             my ($iteminformation) = getiteminformation(\%env, 0, $barcode);
341             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->{'dewey'} $iteminformation->{'subclass'}</td><td bgcolor=$color><img src=/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";
342         }
343         print "</table>\n";
344     } else {
345         print $barcodeentrytext;
346     }
347     print "</form>\n";
348     print "</td></tr></table>\n";
349 }
350
351 sub issues {
352     my ($noheader) = shift;
353
354     unless ($noheader) {
355         print << "EOF";
356     <table border=0 bgcolor=$headerbackgroundcolor cellpadding=10 cellspacing=0><tr><th><font color=white>Circulation - Issues</font></td></tr><tr><td bgcolor=$circbackgroundcolor align=center>
357 EOF
358     }
359     if (my $borrnumber=$query->param('borrnumber')) {
360         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
361         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
362         my $year=$query->param('year');
363         my $month=$query->param('month');
364         my $day=$query->param('day');
365         if (my $barcode=$query->param('barcode')) {
366             my $invalidduedate=0;
367             $env{'datedue'}='';
368             if (($year eq 0) && ($month eq 0) && ($year eq 0)) {
369                 $env{'datedue'}='';
370             } else {
371                 if (($year eq 0) || ($month eq 0) || ($year eq 0)) {
372                     print "Invalid Due Date Specified. Book was not issued.<p>\n";
373                     $invalidduedate=1;
374                 } else {
375                     if (($day>30) && (($month==4) || ($month==6) || ($month==9) || ($month==11))) {
376                         print "Invalid Due Date Specified. Book was not issued. Only 30 days in $month month.<p>\n";
377                         $invalidduedate=1;
378                     } elsif (($day>29) && ($month==2)) {
379                         print "Invalid Due Date Specified. Book was not issued.  Never that many days in February!<p>\n";
380                         $invalidduedate=1;
381                     } elsif (($month==2) && ($day>28) && (($year%4) && ((!($year%100) || ($year%400))))) {
382                         print "Invalid Due Date Specified. Book was not issued.  $year is not a leap year.<p>\n";
383                         $invalidduedate=1;
384                     } else {
385                         $env{'datedue'}="$year-$month-$day";
386                     }
387                 }
388             }
389             my %responses;
390             foreach (sort $query->param) {
391                 if ($_ =~ /response-(\d*)/) {
392                     $responses{$1}=$query->param($_);
393                 }
394             }
395             if (my $qnumber=$query->param('questionnumber')) {
396                 $responses{$qnumber}=$query->param('answer');
397             }
398             unless ($invalidduedate) {
399                 my ($iteminformation, $duedate, $rejected, $question, $questionnumber, $defaultanswer, $message) = issuebook(\%env, $borrower, $barcode, \%responses);
400                 unless ($iteminformation) {
401                     print << "EOF";
402                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
403                     <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error</font></th></tr>
404                     <tr><td>
405                     <table border=0 cellpadding=5>
406                     <tr><td>
407                     $barcode is not a valid barcode.
408                     </td></tr>
409                     </table>
410 EOF
411                 }
412                 if ($rejected) {
413                     if ($rejected == -1) {
414                     } else {
415                         print << "EOF"
416                         <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
417                         <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error Issuing Book</font></th></tr>
418                         <tr><td><font color=red>$rejected</font></td></tr>
419                         </table>
420                         <br>
421 EOF
422                     }
423                 }
424                 my $responsesform='';
425                 foreach (keys %responses) {
426                     $responsesform.="<input type=hidden name=response-$_ value=$responses{$_}>\n";
427                 }
428                 if ($question) {
429                     my $stickyduedate=$query->param('stickyduedate');
430                     print << "EOF";
431                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
432                     <tr><th bgcolor=$headerbackgroundcolor><font color=white><b>Issuing Question</b></font></td></tr>
433                     <tr><td>
434                     <table border=0 cellpadding=10>
435                     <tr><td>
436                     Attempting to issue $iteminformation->{'title'} by $iteminformation->{'author'} to $borrower->{'firstname'} $borrower->{'surname'}.
437                     <p>
438                     $question
439                     </td></tr>
440                     </table>
441                     </td></tr>
442
443                     <tr><td align=center>
444                     <table border=0>
445                     <tr><td>
446                     <form method=get>
447                     <input type=hidden name=module value=issues>
448                     <input type=hidden name=borrnumber value=$borrnumber>
449                     <input type=hidden name=barcode value=$barcode>
450                     <input type=hidden name=questionnumber value=$questionnumber>
451                     <input type=hidden name=day value=$day>
452                     <input type=hidden name=month value=$month>
453                     <input type=hidden name=year value=$year>
454                     <input type=hidden name=stickyduedate value=$stickyduedate>
455                     <input type=hidden name=branch value=$branch>
456                     <input type=hidden name=printer value=$printer>
457                     $responsesform
458                     <input type=hidden name=answer value=Y>
459                     <input type=submit value=Yes>
460                     </form>
461                     </td>
462                     <td>
463                     <form method=get>
464                     <input type=hidden name=module value=issues>
465                     <input type=hidden name=borrnumber value=$borrnumber>
466                     <input type=hidden name=barcode value=$barcode>
467                     <input type=hidden name=questionnumber value=$questionnumber>
468                     <input type=hidden name=day value=$day>
469                     <input type=hidden name=month value=$month>
470                     <input type=hidden name=year value=$year>
471                     <input type=hidden name=stickyduedate value=$stickyduedate>
472                     <input type=hidden name=branch value=$branch>
473                     <input type=hidden name=printer value=$printer>
474                     $responsesform
475                     <input type=hidden name=answer value=N>
476                     <input type=submit value=No>
477                     </form>
478                     </td>
479                     </tr>
480                     </table>
481                     </td></tr>
482                     </table>
483                     </td></tr>
484                     </table>
485 EOF
486                     return;
487                 }
488                 if ($message) {
489                     print << "EOF";
490                     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
491                     <tr><th bgcolor=$headerbackgroundcolor><font color=white>Message</font></th></tr>
492                     <tr><td>$message</td></tr>
493                     </table>
494                     <p>
495 EOF
496                 }
497             }
498         }
499         my $issueid=$query->param('issueid');
500         ($issueid) || ($issueid=int(rand()*1000000000));
501         my $flag='';
502         my $flagtext='';
503         my $flaginfotext='';
504         foreach $flag (sort keys %$flags) {
505             if ($flags->{$flag}->{'noissues'}) {
506                 $flagtext.="<font color=red>$flag</font> ";
507             } else {
508                 $flagtext.="$flag ";
509             }
510             $flags->{$flag}->{'message'}=~s/\n/<br>/g;
511             if ($flags->{$flag}->{'noissues'}) {
512                 $flaginfotext.="<tr><td bgcolor=red valign=top><font color=white><b>$flag</b></font></td><td bgcolor=red><font color=white><b>$flags->{$flag}->{'message'}</b></font></td></tr>\n";
513             } else {
514                 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n";
515             }
516         }
517         if ($flaginfotext) {
518             $flaginfotext="<table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd><tr><th bgcolor=$headerbackgroundcolor colspan=2><font color=white>Patron Flags</font></th></tr>$flaginfotext</table>\n";
519         }
520         $env{'nottodaysissues'}=1;
521         my ($borrowerissues) = currentissues(\%env, $borrower);
522         $env{'nottodaysissues'}=0;
523         $env{'todaysissues'}=1;
524         my ($today) = currentissues(\%env, $borrower);
525         $env{'todaysissues'}=0;
526         my $previssues='';
527         my @datearr = localtime(time());
528         my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", $datearr[3]);
529         my $color='';
530         foreach (sort keys %$borrowerissues) {
531             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
532             my $bookissue=$borrowerissues->{$_};
533             my $bgcolor='';
534             my $datedue=$bookissue->{'date_due'};
535             my $dd=$bookissue->{'date_due'};
536             $datedue=~s/-//g;
537             if ($datedue < $todaysdate) {
538                 $dd="<font color=red>$dd</font>\n";
539             }
540             $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";
541         }
542         my $todaysissues='';
543         $color='';
544         foreach (sort keys %$today) {
545             ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
546             my $bookissue=$today->{$_};
547             $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";
548         }
549         for ($i=1; $i<32; $i++) {
550             my $selected='';
551             if (($query->param('stickyduedate')) && ($day==$i)) {
552                 $selected='selected';
553             }
554             $dayoptions.="<option value=$i $selected>$i";
555         }
556         my $counter=1;
557         foreach (('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) {
558             my $selected='';
559             if (($query->param('stickyduedate')) && ($month==$counter)) {
560                 $selected='selected';
561             }
562             $monthoptions.="<option value=$counter $selected>$_";
563             $counter++;
564         }
565         for ($i=$datearr[5]+1900; $i<$datearr[5]+1905; $i++) {
566             my $selected='';
567             if (($query->param('stickyduedate')) && ($year==$i)) {
568                 $selected='selected';
569             }
570             $yearoptions.="<option value=$i $selected>$i";
571         }
572
573         my $selected='';
574         ($query->param('stickyduedate')) && ($selected='checked');
575         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
576         my ($patrontable, $flaginfotable) = patrontable($borrower);
577         print << "EOF";
578         <form method=get>
579     <table border=0 cellpadding=5>
580     <tr>
581         <td align=center valign=top>
582             <table border=0 cellspacing=0 cellpadding=5 bgcolor=#dddddd width=100%>
583                 <tr><td align=center bgcolor=$headerbackgroundcolor><font color=white><b>Enter Book Barcode</b></font></td></tr>
584                 <tr><td align=center>
585                 <table border=0 bgcolor=#dddddd>
586                 <tr><td>Item Barcode:</td><td><input name=barcode size=10></td><td><input type=submit value=Issue></tr>
587                 <tr><td colspan=3 align=center>
588                 <table border=0 cellpadding=0 cellspacing=0>
589                 <tr><td>
590                 <select name=day><option value=0>Day$dayoptions</select>
591                 </td><td>
592                 <select name=month><option value=0>Month$monthoptions</select>
593                 </td><td>
594                 <select name=year><option value=0>Year$yearoptions</select>
595                 </td></tr>
596                 </table>
597                 <br>
598                 <input type=checkbox name=stickyduedate $selected> Sticky Due Date
599                 </td></tr>
600                 </table>
601                 </td></tr>
602             </table>
603         <input type=hidden name=module value=issues>
604         <input type=hidden name=borrnumber value=$borrnumber>
605         <input type=hidden name=branch value=$branch>
606         <input type=hidden name=printer value=$printer>
607         </form>
608         </td>
609         <td align=center valign=top>
610         $patrontable
611         <br>
612         $flaginfotable
613         </td>
614     </tr>
615     <tr>
616         <td colspan=2 align=center>
617         <table border=0 cellpadding=5 cellspacing=0 width=100% bgcolor=#dddddd>
618             <tr><th colspan=5 bgcolor=$headerbackgroundcolor><font color=white><b>Issues Today</b></font></th></tr>
619             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
620             $todaysissues
621         </table>
622         </td>
623     </tr>
624     <tr>
625         <td colspan=2 align=center>
626         <table border=0 cellpadding=5 cellspacing=0 width=100% bgcolor=#dddddd>
627             <tr><th colspan=5 bgcolor=$headerbackgroundcolor><font color=white><b>Previous Issues</b></font></th></tr>
628             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
629             $previssues
630         </table>
631         </td>
632     </tr>
633 </table>
634 </td></tr></table>
635 <p>
636 EOF
637     } else {
638         if (my $findborrower=$query->param('findborrower')) {
639             my ($borrowers, $flags) = findborrower(\%env, $findborrower);
640             my @borrowers=@$borrowers;
641             if ($#borrowers == -1) {
642                 $query->param('findborrower', '');
643                 print "No borrower matched '$findborrower'<p>\n";
644                 issues(1);
645                 return;
646             }
647             if ($#borrowers == 0) {
648                 $query->param('borrnumber', $borrowers[0]->{'borrowernumber'});
649                 issues(1);
650                 return;
651             } else {
652                 print "<form method=get>\n";
653                 print "<input type=hidden name=module value=issues>\n";
654                 print "<input type=hidden name=branch value=$branch>\n";
655                 print "<input type=hidden name=printer value=$printer>\n";
656                 print "<table border=0 cellspacing=0 cellpadding=5 bgcolor=#dddddd>";
657                 print "<tr><th bgcolor=$headerbackgroundcolor><font color=white><b>Select a borrower</b></font></th></tr>\n";
658                 print "<tr><td align=center>\n";
659                 print "<select name=borrnumber size=7>\n";
660                 foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowers) {
661                     print "<option value=$_->{'borrowernumber'}>$_->{'surname'}, $_->{'firstname'} ($_->{'cardnumber'})\n";
662                 }
663                 print "</select><br>";
664                 print "<input type=submit>\n";
665                 print "</td></tr></table>\n";
666                 print "</td></tr></table>\n";
667             }
668         } else {
669             print << "EOF";
670 <form method=get>
671 <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
672 <tr><th bgcolor=$headerbackgroundcolor><font color=white><b>Enter borrower card number<br> or partial last name</b></font></td></tr>
673 <tr><td><input name=findborrower></td></tr>
674 </table>
675 <input type=hidden name=module value=issues>
676 <input type=hidden name=branch value=$branch>
677 <input type=hidden name=printer value=$printer>
678 </form>
679 </td></tr></table>
680 EOF
681         }
682     }
683 }
684
685
686 sub patrontable {
687     my ($borrower) = @_;
688     my $flags=$borrower->{'flags'};
689     my $flagtext='';
690     my $flaginfotable='';
691     my $flaginfotext='';
692     my $flag;
693     foreach $flag (sort keys %$flags) {
694         ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
695         if ($flags->{$flag}->{'noissues'}) {
696             $flagtext.="<font color=red>$flag</font> ";
697         } else {
698             $flagtext.="$flag ";
699         }
700         $flags->{$flag}->{'message'}=~s/\n/<br>/g;
701         if ($flags->{$flag}->{'noissues'}) {
702             if ($flag eq 'CHARGES') {
703                 $flaginfotext.="<tr><td bgcolor=$color 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";
704             } else {
705                 $flaginfotext.="<tr><td bgcolor=$color valign=top><font color=red>$flag</font></td><td bgcolor=$color>$flags->{$flag}->{'message'}</td></tr>\n";
706             }
707         } else {
708             if ($flag eq 'CHARGES') {
709                 $flaginfotext.="<tr><td valign=top bgcolor=$color>$flag</td><td bgcolor=$color>$flags->{$flag}->{'message'} <a href=/cgi-bin/koha/pay.pl?bornum=$borrower->{'borrowernumber'} onClick=\"openWindow(this, 'Payment', 480,640)\">Payment</a></td></tr>\n";
710             } elsif ($flag eq 'WAITING') {
711                 my $itemswaiting='';
712                 my $items=$flags->{$flag}->{'itemlist'};
713                 foreach $item (@$items) {
714                     my ($iteminformation) = getiteminformation($env, $item->{'itemnumber'}, 0);
715                     $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";
716                 }
717                 $flaginfotext.="<tr><td bgcolor=$color valign=top>$flag</td><td bgcolor=$color>$flags->{$flag}->{'message'}<br>$itemswaiting</td></tr>\n";
718             } elsif ($flag eq 'ODUES') {
719                 my $items=$flags->{$flag}->{'itemlist'};
720                 my $itemswaiting="<table border=0 cellspacing=0 cellpadding=2>\n";
721                 my $currentcolor=$color;
722                 {
723                     my $color=$currentcolor;
724                     foreach $item (@$items) {
725                         ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
726                         my ($iteminformation) = getiteminformation($env, $item->{'itemnumber'}, 0);
727                         $itemswaiting.="<tr><td bgcolor=$color><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 bgcolor=$color>$iteminformation->{'title'}</td></tr>\n";
728                     }
729                 }
730                 $itemswaiting.="</table>\n";
731                 $flaginfotext.="<tr><td bgcolor=$color valign=top>$flag</td><td bgcolor=$color>$flags->{$flag}->{'message'}<br>Overdue items can be seen in the Previous Issues table below</td></tr>\n";
732             } else {
733                 $flaginfotext.="<tr><td bgcolor=$color valign=top>$flag</td><td bgcolor=$color>$flags->{$flag}->{'message'}</td></tr>\n";
734             }
735         }
736     }
737     ($flaginfotext) && ($flaginfotext="<table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd><tr><th bgcolor=$headerbackgroundcolor colspan=2><font color=white>Patron Flags</font></th></tr>$flaginfotext</table>\n");
738     my $patrontable= << "EOF";
739     <table border=0 cellpadding=5 cellspacing=0 bgcolor=#dddddd>
740     <tr><th bgcolor=$headerbackgroundcolor><font color=white><b>Patron Information</b></font></td></tr>
741     <tr><td>
742     <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>
743     $borrower->{'streetaddress'} $borrower->{'city'}<br>
744     $borrower->{'categorycode'} $flagtext
745     </td></tr>
746     </table>
747 EOF
748     return($patrontable, $flaginfotext);
749 }