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