4 use C4::Circulation::Circ2;
10 my $headerbackgroundcolor='#990000';
12 my $branches=getbranches(\%env);
13 my $printers=getprinters(\%env);
14 my $branch=$query->param('branch');
15 my $printer=$query->param('printer');
16 ($branch) || ($branch=$query->cookie('branch'));
17 ($printer) || ($printer=$query->cookie('printer'));
18 my ($oldbranch, $oldprinter);
19 if ($query->param('selectnewbranchprinter')) {
25 $env{'branchcode'}=$branch;
26 $env{'printer'}=$printer;
31 foreach (keys %$branches) {
35 ($selected='selected') if ($_ eq $oldbranch);
36 $branchoptions.="<option value=$_ $selected>$branches->{$_}->{'branchname'}\n";
38 foreach (keys %$printers) {
42 ($selected='selected') if ($_ eq $oldprinter);
43 $printeroptions.="<option value=$_ $selected>$printers->{$_}->{'printername'}\n";
45 if ($printercount==1) {
46 ($printer)=keys %$printers;
48 if ($branchcount==1) {
49 ($branch)=keys %$branches;
55 if ($branch && $printer) {
56 $branchname=$branches->{$branch}->{'branchname'};
57 $printername=$printers->{$printer}->{'printername'};
61 my $branchcookie=$query->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y');
62 my $printercookie=$query->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y');
64 print $query->header(-type=>'text/html',-expires=>'now', -cookie=>[$branchcookie,$printercookie]);
66 print startmenu('circulation');
72 <table border=0 width=100%>
75 <td align=right width=30%><table border=1 bgcolor=$headerbackgroundcolor width=100%><tr><th><font color=white>$branchname</font></th></tr></table></td>
76 <td align=center width=20%>
77 <a href=circulation.pl?module=issues&branch=$branch&printer=$printer><img src=/images/issues.gif border=0 width=60></a>
78 <a href=circulation.pl?module=returns&branch=$branch&printer=$printer><img src=/images/returns.gif border=0 width=60></a>
80 <a href=circulation.pl?selectnewbranchprinter=1>Set Branch/Printer</a>
81 </td><td align=left width=30%>
82 <table border=1 bgcolor=$headerbackgroundcolor width=100%><tr><th><font color=white>$printername</font></th></tr></table>
91 if ($printer && $branch) {
94 if ($query->param('module') eq 'issues') { issues(); last SWITCH; }
95 if ($query->param('module') eq 'returns') { returns(); last SWITCH; }
99 my ($printerform, $branchform);
100 if ($printercount>1) {
101 $printerform=<<"EOF";
103 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Choose a Printer</font></td></tr>
105 <select name=printer>
112 my ($printer) = keys %$printers;
113 $printerform=<<"EOF";
114 <input type=hidden name=printer value=$printer>
118 if ($branchcount>1) {
121 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Choose a Branch</font></td></tr>
131 Select a branch and a printer
146 print endmenu('circulation');
150 <a href=circulation.pl?module=issues&branch=$branch&printer=$printer>Issues</a>
151 <a href=circulation.pl?module=returns&branch=$branch&printer=$printer>Returns</a>
158 foreach ($query->param) {
159 (next) unless (/ri-(\d*)/);
161 (next) if ($counter>20);
162 my $barcode=$query->param("ri-$counter");
164 $returneditems{$counter}=$barcode;
165 $ritext.="<input type=hidden name=ri-$counter value=$barcode>\n";
167 if (my $barcode=$query->param('barcode')) {
168 $ritext.="<input type=hidden name=ri-0 value=$barcode>\n";
169 $returneditems{0}=$barcode;
174 <table border=3 bgcolor=#dddddd>
175 <tr><td colspan=2 bgcolor=$headerbackgroundcolor align=center><font color=white><b><font size=+1>Returns</font><br>Enter Book Barcode</b></font></td></tr>
176 <tr><td>Item Barcode:</td><td><input name=barcode size=10></td></tr>
178 <input type=hidden name=module value=returns>
179 <input type=hidden name=branch value=$branch>
180 <input type=hidden name=printer value=$printer>
184 if (my $barcode=$query->param('barcode')) {
185 my ($iteminformation, $borrower, $messages, $overduecharge) = returnbook(\%env, $barcode);
186 (my $nosuchitem=1) unless ($iteminformation);
187 my $itemtable=<<"EOF";
188 <table border=1 bgcolor=#dddddd>
189 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Item Information</font></th></tr>
191 Title: $iteminformation->{'title'}<br>
192 Author: $iteminformation->{'author'}<br>
193 Barcode: <a href=/cgi-bin/koha/detail.pl?bib=$iteminformation->{'biblionumber'}&type=intra onClick="openWindow(this, 'Item', 480, 640)">$iteminformation->{'barcode'}</a><br>
194 Date Due: $iteminformation->{'date_due'}
200 <table border=1 bgcolor=#dddddd>
201 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error</font></th></tr>
203 <table border=0 cellpadding=5>
205 $barcode is not a valid barcode.
213 my ($patrontable, $flaginfotext) = patrontable($borrower);
214 print "<hr><p><table border=0><tr><td valign=top align=center>$patrontable</td><td valign=top align=center>$flaginfotext</td></tr><tr><td colspan=2 align=center>$itemtable</td></tr></table><br>\n";
217 <table border=1 bgcolor=#dddddd>
218 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error</font></th></tr>
220 <table border=0 cellpadding=5>
222 $iteminformation->{'title'} by $iteminformation->{'author'} was not loaned out.
234 <table border=1 bgcolor=#dddddd>
235 <tr><th colspan=4 bgcolor=$headerbackgroundcolor><font color=white>Returned Items</font></th></tr>
236 <tr><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
238 foreach (sort {$a <=> $b} keys %returneditems) {
239 my $barcode=$returneditems{$_};
240 my ($iteminformation) = getiteminformation(\$env, 0, $barcode);
241 print "<tr><td align=center><a href=/cgi-bin/koha/detail.pl?bib=$iteminformation->{'biblionumber'}&type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$barcode</a></td><td>$iteminformation->{'title'}</td><td>$iteminformation->{'author'}</td><td align=center>$iteminformation->{'dewey'} $iteminformation->{'subclass'}</td></tr>\n";
248 if (my $borrnumber=$query->param('borrnumber')) {
249 my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
250 my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
251 my $year=$query->param('year');
252 my $month=$query->param('month');
253 my $day=$query->param('day');
254 if (my $barcode=$query->param('barcode')) {
255 my $invalidduedate=0;
257 if (($year eq 0) && ($month eq 0) && ($year eq 0)) {
260 if (($year eq 0) || ($month eq 0) || ($year eq 0)) {
261 print "Invalid Due Date Specified. Book was not issued.<p>\n";
264 if (($day>30) && (($month==4) || ($month==6) || ($month==9) || ($month==11))) {
265 print "Invalid Due Date Specified. Book was not issued.<p>\n";
267 } elsif (($day>29) && ($month==2)) {
268 print "Invalid Due Date Specified. Book was not issued.<p>\n";
270 } elsif (($day>28) && (($year%4) && ((!($year%100) || ($year%400))))) {
271 print "Invalid Due Date Specified. Book was not issued.<p>\n";
274 $env{'datedue'}="$year-$month-$day";
279 foreach (sort $query->param) {
280 if ($_ =~ /response-(\d*)/) {
281 $responses{$1}=$query->param($_);
284 if (my $qnumber=$query->param('questionnumber')) {
285 $responses{$qnumber}=$query->param('answer');
287 unless ($invalidduedate) {
288 my ($iteminformation, $duedate, $rejected, $question, $questionnumber, $defaultanswer, $message) = issuebook(\%env, $borrower, $barcode, \%responses);
289 unless ($iteminformation) {
291 <table border=1 bgcolor=#dddddd>
292 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error</font></th></tr>
294 <table border=0 cellpadding=5>
296 $barcode is not a valid barcode.
304 if ($rejected == -1) {
307 <table border=1 bgcolor=#dddddd>
308 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Error Issuing Book</font></th></tr>
309 <tr><td><font color=red>$rejected</font></td></tr>
315 my $responsesform='';
316 foreach (keys %responses) {
317 $responsesform.="<input type=hidden name=response-$_ value=$responses{$_}>\n";
320 my $stickyduedate=$query->param('stickyduedate');
322 <table border=1 bgcolor=#dddddd>
323 <tr><th bgcolor=$headerbackgroundcolor><font color=white><b>Issuing Question</b></font></td></tr>
325 <table border=0 cellpadding=10>
327 Attempting to issue $iteminformation->{'title'} by $iteminformation->{'author'} to $borrower->{'firstname'} $borrower->{'surname'}.
334 <tr><td align=center>
338 <input type=hidden name=module value=issues>
339 <input type=hidden name=borrnumber value=$borrnumber>
340 <input type=hidden name=barcode value=$barcode>
341 <input type=hidden name=questionnumber value=$questionnumber>
342 <input type=hidden name=day value=$day>
343 <input type=hidden name=month value=$month>
344 <input type=hidden name=year value=$year>
345 <input type=hidden name=stickyduedate value=$stickyduedate>
346 <input type=hidden name=branch value=$branch>
347 <input type=hidden name=printer value=$printer>
349 <input type=hidden name=answer value=Y>
350 <input type=submit value=Yes>
355 <input type=hidden name=module value=issues>
356 <input type=hidden name=borrnumber value=$borrnumber>
357 <input type=hidden name=barcode value=$barcode>
358 <input type=hidden name=questionnumber value=$questionnumber>
359 <input type=hidden name=day value=$day>
360 <input type=hidden name=month value=$month>
361 <input type=hidden name=year value=$year>
362 <input type=hidden name=stickyduedate value=$stickyduedate>
363 <input type=hidden name=branch value=$branch>
364 <input type=hidden name=printer value=$printer>
366 <input type=hidden name=answer value=N>
367 <input type=submit value=No>
379 <table border=1 bgcolor=#dddddd>
380 <tr><th bgcolor=$headerbackgroundcolor><font color=white>Message</font></th></tr>
381 <tr><td>$message</td></tr>
388 my $issueid=$query->param('issueid');
389 ($issueid) || ($issueid=int(rand()*1000000000));
393 foreach $flag (sort keys %$flags) {
394 if ($flags->{$flag}->{'noissues'}) {
395 $flagtext.="<font color=red>$flag</font> ";
399 $flags->{$flag}->{'message'}=~s/\n/<br>/g;
400 if ($flags->{$flag}->{'noissues'}) {
401 $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";
403 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n";
407 $flaginfotext="<table border=1 width=70% bgcolor=#dddddd><tr><th bgcolor=$headerbackgroundcolor colspan=2><font color=white>Patron Flags</font></th></tr>$flaginfotext</table>\n";
409 $env{'nottodaysissues'}=1;
410 my ($borrowerissues) = currentissues(\%env, $borrower);
411 $env{'nottodaysissues'}=0;
412 $env{'todaysissues'}=1;
413 my ($today) = currentissues(\%env, $borrower);
414 $env{'todaysissues'}=0;
416 my @datearr = localtime(time());
417 my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", $datearr[3]);
418 foreach (sort keys %$borrowerissues) {
419 my $bookissue=$borrowerissues->{$_};
421 my $datedue=$bookissue->{'date_due'};
423 if ($datedue < $todaysdate) {
424 $bgcolor="bgcolor=red";
426 #$previssues.="<tr $bgcolor><td>$bookissue->{'date_due'}</td><td>$bookissue->{'barcode'}</td><td>$bookissue->{'title'}</td><td>$bookissue->{'author'}</td><td>$bookissue->{'dewey'} $bookissue->{'subclass'}</td></tr>\n";
427 $previssues.="<tr><td align=center>$bookissue->{'date_due'}</td><td 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>$bookissue->{'title'}</td><td>$bookissue->{'author'}</td><td align=center>$bookissue->{'dewey'} $bookissue->{'subclass'}</td></tr>\n";
430 foreach (sort keys %$today) {
431 my $bookissue=$today->{$_};
432 $todaysissues.="<tr><td align=center>$bookissue->{'date_due'}</td><td 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>$bookissue->{'title'}</td><td>$bookissue->{'author'}</td><td align=center>$bookissue->{'dewey'} $bookissue->{'subclass'}</td></tr>\n";
434 for ($i=1; $i<32; $i++) {
436 if (($query->param('stickyduedate')) && ($day==$i)) {
437 $selected='selected';
439 $dayoptions.="<option value=$i $selected>$i";
442 foreach (('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) {
444 if (($query->param('stickyduedate')) && ($month==$counter)) {
445 $selected='selected';
447 $monthoptions.="<option value=$counter $selected>$_";
450 for ($i=$datearr[5]+1900; $i<$datearr[5]+1905; $i++) {
452 if (($query->param('stickyduedate')) && ($year==$i)) {
453 $selected='selected';
455 $yearoptions.="<option value=$i $selected>$i";
459 ($query->param('stickyduedate')) && ($selected='checked');
460 my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
461 my ($patrontable, $flaginfotable) = patrontable($borrower);
464 <table border=0 cellpadding=5 width=90%>
466 <td align=center valign=top>
467 <table border=1 bgcolor=#dddddd width=100%>
468 <tr><td align=center bgcolor=$headerbackgroundcolor><font color=white><b>Enter Book Barcode</b></font></td></tr>
469 <tr><td align=center>
470 <table border=0 bgcolor=#dddddd>
471 <tr><td>Item Barcode:</td><td><input name=barcode size=10></td><td><input type=submit value=Issue></tr>
472 <tr><td colspan=3 align=center>
473 <select name=day><option value=0>Day$dayoptions</select><select name=month><option value=0>Month$monthoptions</select><select name=year><option value=0>Year$yearoptions</select>
475 <input type=checkbox name=stickyduedate $selected> Sticky Due Date
480 <input type=hidden name=module value=issues>
481 <input type=hidden name=borrnumber value=$borrnumber>
482 <input type=hidden name=branch value=$branch>
483 <input type=hidden name=printer value=$printer>
486 <td align=center valign=top>
493 <td colspan=2 align=center>
494 <table border=1 width=100% bgcolor=#dddddd>
495 <tr><th colspan=5 bgcolor=$headerbackgroundcolor><font color=white><b>Issues Today</b></font></th></tr>
496 <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
502 <td colspan=2 align=center>
503 <table border=1 width=100% bgcolor=#dddddd>
504 <tr><th colspan=5 bgcolor=$headerbackgroundcolor><font color=white><b>Previous Issues</b></font></th></tr>
505 <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
514 if (my $findborrower=$query->param('findborrower')) {
515 my ($borrowers, $flags) = findborrower(\%env, $findborrower);
516 my @borrowers=@$borrowers;
517 if ($#borrowers == -1) {
518 $query->param('findborrower', '');
519 print "No borrower matched '$findborrower'<p>\n";
523 if ($#borrowers == 0) {
524 $query->param('borrnumber', $borrowers[0]->{'borrowernumber'});
528 print "<form method=get>\n";
529 print "<input type=hidden name=module value=issues>\n";
530 print "<input type=hidden name=branch value=$branch>\n";
531 print "<input type=hidden name=printer value=$printer>\n";
532 print "<table border=1 cellpadding=5 bgcolor=#dddddd>";
533 print "<tr><th bgcolor=$headerbackgroundcolor><font color=white><b><font size=+1>Issues</font><br>Select a borrower</b></font></th></tr>\n";
534 print "<tr><td align=center>\n";
535 print "<select name=borrnumber size=7>\n";
536 foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowers) {
537 print "<option value=$_->{'borrowernumber'}>$_->{'surname'}, $_->{'firstname'} ($_->{'cardnumber'})\n";
539 print "</select><br>";
540 print "<input type=submit>\n";
541 print "</td></tr></table>\n";
546 <table border=1 bgcolor=#dddddd>
547 <tr><th bgcolor=$headerbackgroundcolor><font color=white><b><font size=+1>Issues</font><br>Enter borrower card number<br> or partial last name</b></font></td></tr>
548 <tr><td><input name=findborrower></td></tr>
550 <input type=hidden name=module value=issues>
551 <input type=hidden name=branch value=$branch>
552 <input type=hidden name=printer value=$printer>
562 my $flags=$borrower->{'flags'};
564 my $flaginfotable='';
567 foreach $flag (sort keys %$flags) {
568 if ($flags->{$flag}->{'noissues'}) {
569 $flagtext.="<font color=red>$flag</font> ";
573 $flags->{$flag}->{'message'}=~s/\n/<br>/g;
574 if ($flags->{$flag}->{'noissues'}) {
575 if ($flag eq 'CHARGES') {
576 $flaginfotext.="<tr><td bgcolor=red valign=top><font color=white><b>$flag</b></font></td><td><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";
578 $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";
581 if ($flag eq 'CHARGES') {
582 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'} <a href=/cgi-bin/koha/pay.pl?bornum=$borrower->{'borrowernumber'} onClick=\"openWindow(this, 'Payment', 480,640)\">Payment</a></td></tr>\n";
584 $flaginfotext.="<tr><td valign=top>$flag</td><td>$flags->{$flag}->{'message'}</td></tr>\n";
588 ($flaginfotext) && ($flaginfotext="<table border=1 bgcolor=#dddddd><tr><th bgcolor=$headerbackgroundcolor colspan=2><font color=white>Patron Flags</font></th></tr>$flaginfotext</table>\n");
589 my $patrontable= << "EOF";
590 <table border=1 bgcolor=#dddddd>
591 <tr><th bgcolor=$headerbackgroundcolor><font color=white><b>Patron Information</b></font></td></tr>
593 <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>
594 $borrower->{'streetaddress'} $borrower->{'city'}<br>
595 $borrower->{'categorycode'} $flagtext
599 return($patrontable, $flaginfotext);