fixed potential SQL error in fr-FR sample itemtypes
[koha.git] / circ / pendingreserves.pl
blob04230529c86dd97d7e3f5e894c34d43b36b405b3
1 #!/usr/bin/perl
4 # Copyright 2000-2002 Katipo Communications
6 # This file is part of Koha.
8 # Koha is free software; you can redistribute it and/or modify it under the
9 # terms of the GNU General Public License as published by the Free Software
10 # Foundation; either version 2 of the License, or (at your option) any later
11 # version.
13 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License along with
18 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19 # Suite 330, Boston, MA 02111-1307 USA
21 # Modification by D.Ulm, actually works (as long as indep. branches not turned on)
22 # Someone let me know what indep. branches is supposed to do and I'll make that part work too
24 # The reserve pull lists *works* as long as not for indepencdant branches, I can fix!
26 use strict;
27 use C4::Context;
28 use C4::Output;
29 use CGI;
30 use C4::Auth;
31 use C4::Dates qw/format_date format_date_in_iso/;
32 use C4::Debug;
33 use Date::Calc qw/Today Add_Delta_YMD/;
35 my $input = new CGI;
36 my $order = $input->param('order');
37 my $startdate=$input->param('from');
38 my $enddate=$input->param('to');
40 my $theme = $input->param('theme'); # only used if allowthemeoverride is set
42 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
44 template_name => "circ/pendingreserves.tmpl",
45 query => $input,
46 type => "intranet",
47 authnotrequired => 0,
48 flagsrequired => { circulate => 1 },
49 debug => 1,
53 my $duedate;
54 my $borrowernumber;
55 my $itemnum;
56 my $data1;
57 my $data2;
58 my $data3;
59 my $name;
60 my $phone;
61 my $email;
62 my $biblionumber;
63 my $title;
64 my $author;
66 my ( $year, $month, $day ) = Today();
67 my $todaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", $year, $month, $day);
68 my $yesterdaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", Add_Delta_YMD($year, $month, $day, 0, 0, -1));
69 # Find 10 years ago for the default shelf pull start and end dates
70 # A default of the prior day's holds is a reasonable way to pull holds
71 my $pastdate = sprintf("%-04.4d-%-02.2d-%02.2d", Add_Delta_YMD($year, $month, $day, -10, 0, 0));
73 # Predefine the start and end dates if they are not already defined
74 $startdate =~ s/^\s+//;
75 $startdate =~ s/\s+$//;
76 $enddate =~ s/^\s+//;
77 $enddate =~ s/\s+$//;
78 # Check if null, should string match, if so set start and end date to yesterday
79 if (!defined($startdate) or $startdate eq "") {
80 $startdate = format_date($pastdate);
82 if (!defined($enddate) or $enddate eq "") {
83 $enddate = format_date($yesterdaysdate);
87 my $dbh = C4::Context->dbh;
88 my ($sqlorderby, $sqldatewhere) = ("","");
89 $debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate);
90 my @query_params = ();
91 if ($startdate) {
92 $sqldatewhere .= " AND reservedate >= ?";
93 push @query_params, format_date_in_iso($startdate);
95 if ($enddate) {
96 $sqldatewhere .= " AND reservedate <= ?";
97 push @query_params, format_date_in_iso($enddate);
100 if ($order eq "biblio") {
101 $sqlorderby = " ORDER BY biblio.title ";
102 } elsif ($order eq "itype") {
103 $sqlorderby = " ORDER BY l_itype, location, l_itemcallnumber ";
104 } elsif ($order eq "location") {
105 $sqlorderby = " ORDER BY location, l_itemcallnumber, holdingbranch ";
106 } elsif ($order eq "date") {
107 $sqlorderby = " ORDER BY l_reservedate, location, l_itemcallnumber ";
108 } elsif ($order eq "library") {
109 $sqlorderby = " ORDER BY holdingbranch, l_itemcallnumber, location ";
110 } elsif ($order eq "call") {
111 $sqlorderby = " ORDER BY l_itemcallnumber, holdingbranch, location ";
112 } else {
113 $sqlorderby = " ORDER BY biblio.title ";
115 my $strsth =
116 "SELECT min(reservedate) as l_reservedate,
117 reserves.borrowernumber as borrowernumber,
118 GROUP_CONCAT(DISTINCT items.holdingbranch
119 ORDER BY items.itemnumber SEPARATOR '<br/>') l_holdingbranch,
120 reserves.biblionumber,
121 reserves.branchcode,
122 GROUP_CONCAT(DISTINCT reserves.branchcode
123 ORDER BY items.itemnumber SEPARATOR ', ') l_branch,
124 items.holdingbranch as branch,
125 items.itemcallnumber,
126 GROUP_CONCAT(DISTINCT items.itype
127 ORDER BY items.itemnumber SEPARATOR '<br/>') l_itype,
128 GROUP_CONCAT(DISTINCT items.location
129 ORDER BY items.itemnumber SEPARATOR '<br/>') l_location,
130 GROUP_CONCAT(DISTINCT items.itemcallnumber
131 ORDER BY items.itemnumber SEPARATOR '<br/>') l_itemcallnumber,
132 items.itemnumber,
133 notes,
134 notificationdate,
135 reminderdate,
136 max(priority) as priority,
137 reserves.found,
138 biblio.title,
139 biblio.author,
140 count(DISTINCT items.itemnumber) as icount,
141 count(DISTINCT reserves.borrowernumber) as rcount
142 FROM reserves
143 LEFT JOIN items ON items.biblionumber=reserves.biblionumber
144 LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber
145 LEFT JOIN branchtransfers ON items.itemnumber=branchtransfers.itemnumber
146 WHERE
147 reserves.found IS NULL
148 $sqldatewhere
149 AND items.itemnumber NOT IN (SELECT itemnumber FROM branchtransfers where datearrived IS NULL)
150 AND items.itemnumber NOT IN (SELECT itemnumber FROM issues)
151 AND reserves.priority <> 0
152 AND reserves.itemnumber is NULL
153 AND notforloan = 0 AND damaged = 0 AND itemlost = 0 AND wthdrawn = 0
155 # GROUP BY reserves.biblionumber allows only items that are not checked out, else multiples occur when
156 # multiple patrons have a hold on an item
159 if (C4::Context->preference('IndependantBranches')){
160 $strsth .= " AND items.holdingbranch=? ";
161 push @query_params, C4::Context->userenv->{'branch'};
163 $strsth .= " GROUP BY reserves.biblionumber " . $sqlorderby;
165 my $sth = $dbh->prepare($strsth);
166 $sth->execute(@query_params);
168 my @reservedata;
169 my $previous;
170 my $this;
171 while ( my $data = $sth->fetchrow_hashref ) {
172 $this=$data->{biblionumber}.":".$data->{borrowernumber};
173 my @itemlist;
174 push(
175 @reservedata,
177 reservedate => format_date( $data->{l_reservedate} ),
178 priority => $data->{priority},
179 name => $data->{l_patron},
180 title => $data->{title},
181 author => $data->{author},
182 borrowernumber => $data->{borrowernumber},
183 itemnum => $data->{itemnumber},
184 phone => $data->{phone},
185 email => $data->{email},
186 biblionumber => $data->{biblionumber},
187 statusw => ( $data->{found} eq "W" ),
188 statusf => ( $data->{found} eq "F" ),
189 holdingbranch => $data->{l_holdingbranch},
190 branch => $data->{l_branch},
191 itemcallnumber => $data->{l_itemcallnumber},
192 notes => $data->{notes},
193 notificationdate => $data->{notificationdate},
194 reminderdate => $data->{reminderdate},
195 count => $data->{icount},
196 rcount => $data->{rcount},
197 pullcount => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount},
198 itype => $data->{l_itype},
199 location => $data->{l_location}
202 $previous=$this;
205 $sth->finish;
207 # *** I doubt any of this is needed now with the above fixes *** -d.u.
209 #$strsth=~ s/AND reserves.itemnumber is NULL/AND reserves.itemnumber is NOT NULL/;
210 #$strsth=~ s/LEFT JOIN items ON items.biblionumber=reserves.biblionumber/LEFT JOIN items ON items.biblionumber=reserves.itemnumber/;
211 #$sth = $dbh->prepare($strsth);
212 #if (C4::Context->preference('IndependantBranches')){
213 # $sth->execute(C4::Context->userenv->{'branch'});
215 #else {
216 # $sth->execute();
218 #while ( my $data = $sth->fetchrow_hashref ) {
219 # $this=$data->{biblionumber}.":".$data->{borrowernumber};
220 # my @itemlist;
221 # push(
222 # @reservedata,
224 # reservedate => format_date( $data->{l_reservedate} ),
225 # priority => $data->{priority},
226 # name => $data->{l_patron},
227 # title => $data->{title},
228 # author => $data->{author},
229 # borrowernumber => $data->{borrowernumber},
230 # itemnum => $data->{itemnumber},
231 # phone => $data->{phone},
232 # email => $data->{email},
233 # biblionumber => $data->{biblionumber},
234 # statusw => ( $data->{found} eq "W" ),
235 # statusf => ( $data->{found} eq "F" ),
236 # holdingbranch => $data->{l_holdingbranch},
237 # branch => $data->{l_branch},
238 # itemcallnumber => $data->{l_itemcallnumber},
239 # notes => $data->{notes},
240 # notificationdate => $data->{notificationdate},
241 # reminderdate => $data->{reminderdate},
242 # count => $data->{icount},
243 # rcount => $data->{rcount},
244 # pullcount => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount},
245 # itype => $data->{l_itype},
246 # location => $data->{l_location},
247 # thisitemonly => 1,
250 # );
251 # $previous=$this;
253 #$sth->finish;
255 $template->param(
256 todaysdate => format_date($todaysdate),
257 from => $startdate,
258 to => $enddate,
259 reserveloop => \@reservedata,
260 "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
261 DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
262 dateformat => C4::Context->preference("dateformat"),
265 output_html_with_http_headers $input, $cookie, $template->output;