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