Bug 6679 - [SIGNED-OFF] fix 3 perlcritic violations in C4/Items.pm
[koha.git] / circ / pendingreserves.pl
1 #!/usr/bin/perl
2
3
4 # Copyright 2000-2002 Katipo Communications
5 #
6 # This file is part of Koha.
7 #
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.
12 #
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.
16 #
17 # You should have received a copy of the GNU General Public License along
18 # with Koha; if not, write to the Free Software Foundation, Inc.,
19 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
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
23 #
24 #               The reserve pull lists *works* as long as not for indepencdant branches, I can fix!
25
26 use strict;
27 #use warnings; FIXME - Bug 2505
28 use C4::Context;
29 use C4::Output;
30 use CGI;
31 use C4::Auth;
32 use C4::Dates qw/format_date format_date_in_iso/;
33 use C4::Debug;
34 use Date::Calc qw/Today Add_Delta_YMD/;
35
36 my $input = new CGI;
37 my $startdate=$input->param('from');
38 my $enddate=$input->param('to');
39 my $run_report=$input->param('run_report');
40
41 my $theme = $input->param('theme');    # only used if allowthemeoverride is set
42
43 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
44     {
45         template_name   => "circ/pendingreserves.tmpl",
46         query           => $input,
47         type            => "intranet",
48         authnotrequired => 0,
49         flagsrequired   => { circulate => "circulate_remaining_permissions" },
50         debug           => 1,
51     }
52 );
53
54 my $duedate;
55 my $borrowernumber;
56 my $itemnum;
57 my $data1;
58 my $data2;
59 my $data3;
60 my $name;
61 my $phone;
62 my $email;
63 my $biblionumber;
64 my $title;
65 my $author;
66
67 my ( $year, $month, $day ) = Today();
68 my $todaysdate     = sprintf("%-04.4d-%-02.2d-%02.2d", $year, $month, $day);
69 my $yesterdaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", Add_Delta_YMD($year, $month, $day,   0, 0, -1));
70 # changed from delivered range of 10 years-yesterday to 2 days ago-today
71 # Find two days ago for the default shelf pull start and end dates
72 my $pastdate       = sprintf("%-04.4d-%-02.2d-%02.2d", Add_Delta_YMD($year, $month, $day, 0, 0, -2));
73
74 # Predefine the start and end dates if they are not already defined
75 $startdate =~ s/^\s+//;
76 $startdate =~ s/\s+$//;
77 $enddate =~ s/^\s+//;
78 $enddate =~ s/\s+$//;
79 # Check if null, should string match, if so set start and end date to yesterday
80 if (!defined($startdate) or $startdate eq "") {
81     $startdate = format_date($pastdate);
82 }
83 if (!defined($enddate) or $enddate eq "") {
84     $enddate = format_date($todaysdate);
85 }
86
87
88 my @reservedata;
89 if ( $run_report ) {
90     my $dbh    = C4::Context->dbh;
91     my $sqldatewhere = "";
92     $debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate);
93     my @query_params = ();
94     if ($startdate) {
95         $sqldatewhere .= " AND reservedate >= ?";
96         push @query_params, format_date_in_iso($startdate);
97     }
98     if ($enddate) {
99         $sqldatewhere .= " AND reservedate <= ?";
100         push @query_params, format_date_in_iso($enddate);
101     }
102
103     my $strsth =
104     "SELECT min(reservedate) as l_reservedate,
105             reserves.borrowernumber as borrowernumber,
106             GROUP_CONCAT(DISTINCT items.holdingbranch 
107                     ORDER BY items.itemnumber SEPARATOR '<br/>') l_holdingbranch,
108             reserves.biblionumber,
109             reserves.branchcode,
110             GROUP_CONCAT(DISTINCT reserves.branchcode 
111                     ORDER BY items.itemnumber SEPARATOR ', ') l_branch,
112             items.holdingbranch as branch,
113             GROUP_CONCAT(DISTINCT items.itype 
114                     ORDER BY items.itemnumber SEPARATOR '<br/>') l_itype,
115             GROUP_CONCAT(DISTINCT items.location 
116                     ORDER BY items.itemnumber SEPARATOR '<br/>') l_location,
117             GROUP_CONCAT(DISTINCT items.itemcallnumber 
118                     ORDER BY items.itemnumber SEPARATOR '<br/>') l_itemcallnumber,
119             GROUP_CONCAT(DISTINCT items.enumchron
120                     ORDER BY items.itemnumber SEPARATOR '<br/>') l_enumchron,
121             GROUP_CONCAT(DISTINCT items.copynumber
122                     ORDER BY items.itemnumber SEPARATOR '<br/>') l_copynumber,
123             items.itemnumber,
124             notes,
125             notificationdate,
126             reminderdate,
127             max(priority) as priority,
128             reserves.found,
129             biblio.title,
130             biblio.author,
131             count(DISTINCT items.itemnumber) as icount,
132             count(DISTINCT reserves.borrowernumber) as rcount
133     FROM  reserves
134         LEFT JOIN items ON items.biblionumber=reserves.biblionumber 
135         LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber
136         LEFT JOIN branchtransfers ON items.itemnumber=branchtransfers.itemnumber
137         LEFT JOIN issues ON items.itemnumber=issues.itemnumber
138     WHERE
139     reserves.found IS NULL
140     $sqldatewhere
141     AND (reserves.itemnumber IS NULL OR reserves.itemnumber = items.itemnumber)
142     AND items.itemnumber NOT IN (SELECT itemnumber FROM branchtransfers where datearrived IS NULL)
143     AND issues.itemnumber IS NULL
144     AND reserves.priority <> 0 
145     AND reserves.suspend = 0
146     AND notforloan = 0 AND damaged = 0 AND itemlost = 0 AND wthdrawn = 0
147     ";
148     # GROUP BY reserves.biblionumber allows only items that are not checked out, else multiples occur when 
149     #    multiple patrons have a hold on an item
150
151
152     if (C4::Context->preference('IndependantBranches')){
153         $strsth .= " AND items.holdingbranch=? ";
154         push @query_params, C4::Context->userenv->{'branch'};
155     }
156     $strsth .= " GROUP BY reserves.biblionumber ORDER BY biblio.title ";
157
158     my $sth = $dbh->prepare($strsth);
159     $sth->execute(@query_params);
160
161     while ( my $data = $sth->fetchrow_hashref ) {
162         push(
163             @reservedata,
164             {
165                 reservedate             => format_date( $data->{l_reservedate} ),
166                 priority                => $data->{priority},
167                 name                    => $data->{l_patron},
168                 title                   => $data->{title},
169                 author                  => $data->{author},
170                 borrowernumber          => $data->{borrowernumber},
171                 itemnum                 => $data->{itemnumber},
172                 phone                   => $data->{phone},
173                 email                   => $data->{email},
174                 biblionumber            => $data->{biblionumber},
175                 statusw                 => ( $data->{found} eq "W" ),
176                 statusf                 => ( $data->{found} eq "F" ),
177                 holdingbranch           => $data->{l_holdingbranch},
178                 branch                  => $data->{l_branch},
179                 itemcallnumber          => $data->{l_itemcallnumber},
180                 enumchron               => $data->{l_enumchron},
181                 copyno                  => $data->{l_copynumber},
182                 notes                   => $data->{notes},
183                 notificationdate        => $data->{notificationdate},
184                 reminderdate            => $data->{reminderdate},
185                 count                   => $data->{icount},
186                 rcount                  => $data->{rcount},
187                 pullcount               => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount},
188                 itype                   => $data->{l_itype},
189                 location                => $data->{l_location}
190             }
191         );
192     }
193     $sth->finish;
194 }
195
196 $template->param(
197     todaysdate          => format_date($todaysdate),
198     from                => $startdate,
199     to                  => $enddate,
200     run_report          => $run_report,
201     reserveloop         => \@reservedata,
202     "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
203     DHTMLcalendar_dateformat =>  C4::Dates->DHTMLcalendar(),
204     dateformat    => C4::Context->preference("dateformat"),
205 );
206
207 output_html_with_http_headers $input, $cookie, $template->output;