Added magic RCS comment.
[koha.git] / groups.pl
1 #!/usr/bin/perl
2
3 # $Id$
4
5 #written 14/1/2000
6 #script to display reports
7
8
9 # Copyright 2000-2002 Katipo Communications
10 #
11 # This file is part of Koha.
12 #
13 # Koha is free software; you can redistribute it and/or modify it under the
14 # terms of the GNU General Public License as published by the Free Software
15 # Foundation; either version 2 of the License, or (at your option) any later
16 # version.
17 #
18 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
19 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
20 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License along with
23 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
24 # Suite 330, Boston, MA  02111-1307 USA
25
26 use CGI qw/:standard/;
27 use C4::Output;
28 use C4::Groups;
29 use C4::Circulation::Circ2;
30 use C4::Print;
31 use DBI;
32
33 my $input=new CGI;
34 my $time=$input->param('time');
35 #print $input->header;
36
37
38 my $branches=getbranches(\%env);
39 my $printers=getprinters(\%env);
40 my $branch=$input->param('branch');
41 my $printer=$input->param('printer');
42 ($branch) || ($branch=$input->cookie('branch'));
43 ($printer) || ($printer=$input->cookie('printer'));
44 my ($oldbranch, $oldprinter);
45 if ($input->param('selectnewbranchprinter')) {
46     $oldbranch=$branch;
47     $oldprinter=$printer;
48     $branch='';
49     $printer='';
50 }
51 $env{'branchcode'}=$branch;
52 $env{'printer'}=$printer;
53 #$env{'queue'}=$printer;
54 my $branchcount=0;
55 my $printercount=0;
56 my $branchoptions;
57 my $printeroptions;
58 foreach (keys %$branches) {
59     (next) unless ($_);
60     (next) if (/^TR$/);
61     $branchcount++;
62     my $selected='';
63     ($selected='selected') if ($_ eq $oldbranch);
64     ($selected='selected') if ($_ eq $branch);
65     $branchoptions.="<option value=$_ $selected>$branches->{$_}->{'branchname'}\n";
66 }
67 foreach (keys %$printers) {
68     (next) unless ($_);
69     $printercount++;
70     my $selected='';
71     ($selected='selected') if ($_ eq $oldprinter || $_ eq $printer);
72     $printeroptions.="<option value=$_ $selected>$printers->{$_}->{'printername'}\n";
73 }
74 if ($printercount==1) {
75     ($printer)=keys %$printers;
76 }
77 if ($branchcount==1) {
78     ($branch)=keys %$branches;
79 }
80
81
82 my $branchname='';
83 my $printername='';
84 if ($branch && $printer) {
85     $branchname=$branches->{$branch}->{'branchname'};
86     $printername=$printers->{$printer}->{'printername'};
87 }
88
89
90 my $branchcookie=$input->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y', -path=>'/cgi-bin/koha/');
91 my $printercookie=$input->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y', -path=>'/cgi-bin/koha/');
92
93 print $input->header(-type=>'text/html',-expires=>'now', -cookie=>[$branchcookie,$printercookie]);
94 print startpage;
95 unless ($input->param('printable')) {
96     print startmenu('report');
97 }
98 print center;
99
100
101
102 my $type=$input->param('type');
103 my $groups=getgroups();
104 if ($input->param('print')) {
105     if ($input->param('groupsselected')) {
106         foreach ($input->param()) {
107             if (/print_(.*)/) {
108                 my $group=$1;
109                 printgroup($group,$input->param('type'));
110             }
111         }
112     } else {
113         print "<h2>Select the groups to print</h2>\n";
114         print "<form method=post>\n";
115         print "<input type=hidden name=print value=1>\n";
116         print "<input type=hidden name=groupsselected value=1>\n";
117         print "<table border=0><tr><td bgcolor=#dddddd>\n";
118         print "<table border=1 cellspacing=5 cellpadding=10><tr>\n";
119         my $counter=0;
120         foreach (sort {$groups->{$a} cmp $groups->{$b}} keys %$groups) {
121             (next) unless ($groups->{$_});
122             if ($counter>3) {
123                 $counter=0;
124                 print "</tr><tr>\n";
125             } else {
126             }
127             print << "EOF";
128 <td><input type=checkbox name=print_$_ value=0> $groups->{$_}
129 </td>
130 EOF
131             $counter++;
132         }
133         print << "EOF";
134 </tr></table>
135 </td></tr></table>
136 <p>
137 Printer:
138 <select name=printer>
139 $printeroptions
140 </select>
141 <p>
142 <input type=radio name=type value=issues> Issues <input type=radio name=type value=overdues checked> Overdues
143 <p>
144 <input type=submit value=Print>
145 </body></html>
146 EOF
147         exit;
148     }
149 }
150 if (my $group=$input->param('group')) {
151     print "<a href=groups.pl?type=$type>Back to group list</a><p>\n";
152     if ($input->param('printable')) {
153         print "<head><title>Overdue list for $groups->{$group}</title></head><body>\n";
154     }
155     my $members=groupmembers($env, $group);
156     print "<table border=0><tr><td bgcolor=#dddddd>\n";
157     print "<table border=1 cellspacing=5 cellpadding=10>\n";
158     my $typetext='';
159     ($type eq 'overdues') ? ($typetext="Overdues") : ($typetext="Issues");
160     print "<thead><tr><th>Card #</th><th>Name</th><th>IS/OD</th><th>$typetext</th></tr></thead>\n";
161     foreach (sort { $a->{'surname'}." ".$a->{'firstname'} cmp $b->{'surname'}." ".$b->{'firstname'} }  @$members) {
162         my $fullname=$_->{'firstname'}." ".$_->{'surname'};
163         my $userid=$_->{'userid'};
164         my $cardnumber=$_->{'cardnumber'};
165         my $currentissues=$_->{'currentissues'};
166         my $counter=0;
167         my $overduecounter=0;
168         my $overduelist='';
169         foreach (keys %$currentissues) {
170             $counter++;
171             if ($currentissues->{$_}->{'overdue'}) {
172                 $overduecounter++;
173                 $title=$currentissues->{$_}->{'title'};
174                 $author=$currentissues->{$_}->{'author'};
175                 $date_due=$currentissues->{$_}->{'date_due'};
176                 $overduelist.="<u>$title</u> by $author (<font color=red>$date_due</font>)<br>\n";
177             } else {
178                 if ($type eq 'issues') {
179                     $title=$currentissues->{$_}->{'title'};
180                     $author=$currentissues->{$_}->{'author'};
181                     $date_due=$currentissues->{$_}->{'date_due'};
182                     $overduelist.="<u>$title</u> by $author due on $date_due<br>\n";
183                 }
184             }
185         }
186         my $overduetext="0";
187         if ($overduecounter) {
188             $overduetext="<font color=red>$overduecounter</font>";
189         }
190         (next) unless ($overduecounter || $counter);
191         if ($overduecounter==0 && $type eq 'overdues') {
192             next;
193         }
194         print "<tr><td align=center>$cardnumber</td><td>$fullname</td><td align=center>$counter/$overduetext</td><td>$overduelist</td></tr>\n";
195     }
196     print "</table>\n";
197     print "</td></tr></table>\n";
198 } else {
199     print "<a href=groups.pl?print=1>Print Reports</a><p>\n";
200     print "<h2>Pick a group</h2>\n";
201     print "<table border=0><tr><td bgcolor=#dddddd>\n";
202     print "<table border=1 cellspacing=5 cellpadding=10><tr>\n";
203     my $counter=0;
204     foreach (sort {$groups->{$a} cmp $groups->{$b}} keys %$groups) {
205         (next) unless ($groups->{$_});
206         if ($counter>3) {
207             $counter=0;
208             print "</tr><tr>\n";
209         } else {
210         }
211         print << "EOF";
212 <td align=center>$groups->{$_}
213 <br>
214 <a href=groups.pl?type=issues&group=$_>Issues</a> | <a href=groups.pl?type=overdues&group=$_>Overdues</a>
215 </td>
216 EOF
217         $counter++;
218     }
219     print "</tr></table>\n";
220     print "</td></tr></table>\n";
221 }
222
223
224 unless ($input->param('printable')) {
225     print endmenu('report');
226 }
227 print endpage;
228
229
230
231 sub printgroup {
232     my $group=shift;
233     my $type=shift;
234     $output= "<head><title>Overdue list for $groups->{$group}</title></head><body><center>\n";
235     my $members=groupmembers($env, $group);
236     ($type eq 'overdues') && ($output.="<img src=/usr/local/koha/librarian/htdocs/images/overdues.jpg><br>\n");
237     $output.= "<table border=1 cellspacing=5 cellpadding=10>\n";
238     my $typetext='';
239     ($type eq 'overdues') ? ($typetext="Overdues") : ($typetext="Issues");
240     $output.= "<thead><tr><th>Card #</th><th>Name</th><th>IS/OD</th><th>$typetext</th></tr></thead>\n";
241     foreach (sort { $a->{'surname'}." ".$a->{'firstname'} cmp $b->{'surname'}." ".$b->{'firstname'} }  @$members) {
242         my $fullname=$_->{'firstname'}." ".$_->{'surname'};
243         my $userid=$_->{'userid'};
244         my $cardnumber=$_->{'cardnumber'};
245         my $currentissues=$_->{'currentissues'};
246         my $counter=0;
247         my $overduecounter=0;
248         my $overduelist='';
249         foreach (keys %$currentissues) {
250             $counter++;
251             if ($currentissues->{$_}->{'overdue'}) {
252                 $overduecounter++;
253                 $title=$currentissues->{$_}->{'title'};
254                 $author=$currentissues->{$_}->{'author'};
255                 $date_due=$currentissues->{$_}->{'date_due'};
256                 $overduelist.="<u>$title</u> by $author (<font color=red>$date_due</font>)<br>\n";
257             } else {
258                 if ($type eq 'issues') {
259                     $title=$currentissues->{$_}->{'title'};
260                     $author=$currentissues->{$_}->{'author'};
261                     $date_due=$currentissues->{$_}->{'date_due'};
262                     $overduelist.="<u>$title</u> by $author due on $date_due<br>\n";
263                 }
264             }
265         }
266         my $overduetext="0";
267         if ($overduecounter) {
268             $overduetext="<font color=red>$overduecounter</font>";
269         }
270         (next) unless ($overduecounter || $counter);
271         if ($overduecounter==0 && $type eq 'overdues') {
272             next;
273         }
274         $output.= "<tr><td align=center>$cardnumber</td><td>$fullname</td><td align=center>$counter/$overduetext</td><td>$overduelist</td></tr>\n";
275     }
276     $output.= "</table>\n";
277     $output.= "</td></tr></table>\n";
278     open (P, "|html2ps | lpr -P$printer");
279     print P $output;
280     close P;
281 }