Fixed a bug in issuing reserved books. Was calling non-existent
[koha.git] / circ / circulation.pl
1 #!/usr/bin/perl
2
3 use CGI qw/:standard/;
4 use C4::Circulation::Circ2;
5 use C4::Output;
6 use DBI;
7
8
9 my %env;
10 my $query=new CGI;
11 print $query->header;
12 print startpage();
13 print startmenu('catalogue');
14
15 print << "EOF";
16 <center>
17 <a href=circulation.pl?module=issues>Issues</a> |
18 <a href=circulation.pl?module=returns>Returns</a>
19 <hr>
20 EOF
21
22 SWITCH: {
23     if ($query->param('module') eq 'issues') { issues(); last SWITCH; }
24     if ($query->param('module') eq 'returns') { returns(); last SWITCH; }
25     issues();
26 }
27
28
29 print endmenu();
30 print endpage();
31 sub default {
32 print << "EOF";
33 <a href=circulation.pl?module=issues>Issues</a>
34 <a href=circulation.pl?module=returns>Returns</a>
35 EOF
36 }
37
38 sub issues {
39     if (my $borrnumber=$query->param('borrnumber')) {
40         my ($borrower, $flags) = getpatroninformation(\%env,$borrnumber,0);
41         if (my $barcode=$query->param('barcode')) {
42             my %responses;
43             foreach (sort $query->param) {
44                 if ($_ =~ /response-(\d*)/) {
45                     $responses{$1}=$query->param($_);
46                 }
47             }
48             if (my $qnumber=$query->param('questionnumber')) {
49                 $responses{$qnumber}=$query->param('answer');
50             }
51             my ($iteminformation, $duedate, $rejected, $question, $questionnumber, $defaultanswer) = issuebook(\%env, $borrower, $barcode, \%responses);
52             if ($rejected) {
53                 if ($rejected == -1) {
54                 } else {
55                     print "Error issuing book: $rejected<br>\n";
56                 }
57             }
58             my $responsesform='';
59             foreach (keys %responses) {
60                 $responsesform.="<input type=hidden name=response-$_ value=$responses{$_}>\n";
61             }
62             if ($question) {
63                 print << "EOF";
64                 <table border=1 bgcolor=#dddddd>
65                 <tr><th bgcolor=black><font color=white><b>Issuing Question</b></font></td></tr>
66                 <tr><td>
67                 Attempting to issue $iteminformation->{'title'} by $iteminformation->{'author'} to $borrower->{'firstname'} $borrower->{'surname'}.
68                 <br>
69                 $question
70                 </td></tr>
71
72                 <tr><td align=center>
73                 <table border=0>
74                 <tr><td>
75                 <form method=get>
76                 <input type=hidden name=module value=issues>
77                 <input type=hidden name=borrnumber value=$borrnumber>
78                 <input type=hidden name=barcode value=$barcode>
79                 <input type=hidden name=questionnumber value=$questionnumber>
80                 $responsesform
81                 <input type=hidden name=answer value=Y>
82                 <input type=submit value=Yes>
83                 </form>
84                 </td>
85                 <td>
86                 <form method=get>
87                 <input type=hidden name=module value=issues>
88                 <input type=hidden name=borrnumber value=$borrnumber>
89                 <input type=hidden name=barcode value=$barcode>
90                 <input type=hidden name=questionnumber value=$questionnumber>
91                 $responsesform
92                 <input type=hidden name=answer value=N>
93                 <input type=submit value=No>
94                 </form>
95                 </td>
96                 </tr>
97                 </table>
98                 </td></tr>
99                 </table>
100 EOF
101                 return;
102             }
103         }
104         my $issueid=$query->param('issueid');
105         ($issueid) || ($issueid=int(rand()*1000000000));
106         my $flag='';
107         my $flagtext='';
108         foreach $flag (sort keys %$flags) {
109             $flagtext.="$flag ";
110         }
111         $env{'nottodaysissues'}=1;
112         my ($borrowerissues) = currentissues(\%env, $borrower);
113         $env{'nottodaysissues'}=0;
114         $env{'todaysissues'}=1;
115         my ($today) = currentissues(\%env, $borrower);
116         $env{'todaysissues'}=0;
117         my $previssues='';
118         my @datearr = localtime(time());
119         my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", $datearr[3]);
120         foreach (sort keys %$borrowerissues) {
121             my $bookissue=$borrowerissues->{$_};
122             my $bgcolor='';
123             my $datedue=$bookissue->{'date_due'};
124             $datedue=~s/-//g;
125             if ($datedue < $todaysdate) {
126                 $bgcolor="bgcolor=red";
127             }
128             $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";
129         }
130         my $todaysissues='';
131         foreach (sort keys %$today) {
132             my $bookissue=$today->{$_};
133             $todaysissues.="<tr><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";
134         }
135         print << "EOF";
136         <form method=get>
137         <input type=hidden name=module value=issues>
138         <input type=hidden name=borrnumber value=$borrnumber>
139     <table border=0 cellpadding=5>
140     <tr>
141         <td align=left>
142             <table border=3 bgcolor=#dddddd>
143                 <tr><td colspan=2 bgcolor=black><font color=white><b>Enter Book Barcode</b></font></td></tr>
144                 <tr><td>Item Barcode:</td><td><input name=barcode size=10></td></tr>
145             </table>
146         </td>
147         <td align=right>
148         <table border=1 bgcolor=#dddddd>
149         <tr><th bgcolor=black><font color=white><b>Patron Information</b></font></td></tr>
150         <tr><td>
151         $borrower->{'cardnumber'} $borrower->{'surname'}, $borrower->{'title'} $borrower->{'firstname'}<br>
152         $borrower->{'streetaddress'} $borrower->{'city'}<br>
153         $borrower->{'categorycode'} $flagtext
154         </td></tr>
155         </table>
156         </td>
157     </tr>
158     <tr>
159         <td colspan=2 align=center>
160         <table border=1 width=100% bgcolor=#dddddd>
161             <tr><th colspan=5 bgcolor=black><font color=white><b>Today's Issues</b></font></th></tr>
162             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
163             $todaysissues
164         </table>
165         </td>
166     </tr>
167     <tr>
168         <td colspan=2 align=center>
169         <table border=1 width=100% bgcolor=#dddddd>
170             <tr><th colspan=5 bgcolor=black><font color=white><b>Previous Issues</b></font></th></tr>
171             <tr><th>Due Date</th><th>Bar Code</th><th>Title</th><th>Author</th><th>Class</th></tr>
172             $previssues
173         </table>
174         </td>
175     </tr>
176 </table>
177 EOF
178     } else {
179         if (my $findborrower=$query->param('findborrower')) {
180             my ($borrowers, $flags) = findborrower(\%env, $findborrower);
181             print "<form method=get>\n";
182             print "<input type=hidden name=module value=issues>\n";
183             my @borrowers=@$borrowers;
184             if ($#borrowers == 0) {
185                 $query->param('borrnumber', $borrowers[0]->{'borrowernumber'});
186                 issues();
187                 return;
188             } else {
189                 print "<table border=1 cellpadding=5 bgcolor=#dddddd>";
190                 print "<tr><th bgcolor=black><font color=white><b>Select a borrower</b></font></th></tr>\n";
191                 print "<tr><td align=center>\n";
192                 print "<select name=borrnumber size=7>\n";
193                 foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowers) {
194                     print "<option value=$_->{'borrowernumber'}>$_->{'surname'}, $_->{'firstname'} ($_->{'cardnumber'})\n";
195                 }
196                 print "</select><br>";
197                 print "<input type=submit>\n";
198                 print "</td></tr></table>\n";
199             }
200         } else {
201             print << "EOF";
202             <h1>Issues Module</h1>
203 <form method=get>
204 <input type=hidden name=module value=issues>
205 <table border=1 bgcolor=#dddddd>
206 <tr><th bgcolor=black><font color=white><b>Enter borrower card number<br> or partial last name</b></font></td></tr>
207 <tr><td><input name=findborrower></td></tr>
208 </table>
209 </form>
210 EOF
211         }
212     }
213 }