Add print slip to hold confirmation dialog.
[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 with
18 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19 # Suite 330, Boston, MA  02111-1307 USA
20
21 use strict;
22 use C4::Context;
23 use C4::Output;
24 use CGI;
25 use C4::Auth;
26 use C4::Dates qw/format_date format_date_in_iso/;
27
28 use vars qw($debug);
29
30 BEGIN {
31     $debug = $ENV{DEBUG} || 0;
32 }
33
34 my $input = new CGI;
35 my $order = $input->param('order');
36 my $startdate = $input->param('from');
37 my $enddate = $input->param('to');
38 my $theme = $input->param('theme');    # only used if allowthemeoverride is set
39 my $op = $input->param('op');
40 my $biblionumber = $input->param('biblionumber');
41 my $borrowernumber = $input->param('borrowernumber');
42
43 my $tmpl_name = ($op eq 'slip') ? "circ/hold-transfer-slip.tmpl" : "circ/pendingreserves.tmpl" ;
44
45 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
46     {
47         template_name   => $tmpl_name,
48         query           => $input,
49         type            => "intranet",
50         authnotrequired => 0,
51         flagsrequired   => { circulate => 1 },
52         debug           => 1,
53     }
54 );
55
56 my $duedate;
57 my $itemnum;
58 my $data1;
59 my $data2;
60 my $data3;
61 my $name;
62 my $phone;
63 my $email;
64 my $title;
65 my $author;
66 warn $op;
67 warn $biblionumber;
68 warn $borrowernumber;
69 my @datearr    = localtime( time() );
70 my $todaysdate =
71     ( 1900 + $datearr[5] ) . '-'
72   . sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-'
73   . sprintf( "%0.2d", $datearr[3] );
74
75 my $dbh    = C4::Context->dbh;
76 my ($sqlorderby, $sqldatewhere, $sqlwhowhere) = ("","","");
77 $debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate);
78 if ($op eq 'slip') {        
79         $sqlwhowhere .= " && reserves.borrowernumber = " . $dbh->quote($borrowernumber) ;
80     $sqlwhowhere .= " && reserves.biblionumber = " . $dbh->quote($biblionumber) ;
81 } else {
82         $sqldatewhere .= " AND reservedate >= " . $dbh->quote(format_date_in_iso($startdate))  if ($startdate) ;
83         $sqldatewhere .= " AND reservedate <= " . $dbh->quote(format_date_in_iso($enddate))  if ($enddate) ;
84 }
85 if ($order eq "borrower") {
86         $sqlorderby = " order by  borrower, reservedate";
87 } elsif ($order eq "biblio") {
88         $sqlorderby = " order by biblio.title, priority,reservedate";
89 } elsif ($order eq "priority") {
90     $sqlorderby = "order by priority DESC";
91 } else {
92         $sqlorderby = " order by reservedate, borrower";
93 }
94 my $strsth =
95 "SELECT reservedate,
96         reserves.borrowernumber as borrowernumber,
97         concat(firstname,' ',surname) as borrower,
98         borrowers.phone,
99         borrowers.email,
100         reserves.biblionumber,
101         reserves.branchcode as branch,
102         items.holdingbranch,
103         items.itemcallnumber,
104         items.itemnumber,
105         notes,
106         notificationdate,
107         reminderdate,
108         priority,
109         reserves.found,
110         biblio.title,
111         biblio.author
112  FROM  reserves
113  LEFT JOIN items ON items.biblionumber=reserves.biblionumber 
114  LEFT JOIN borrowers ON reserves.borrowernumber=borrowers.borrowernumber
115  LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber
116  WHERE reserves.found is NULL 
117  $sqlwhowhere
118  $sqldatewhere
119  AND items.itemnumber NOT IN (SELECT itemnumber FROM issues)
120  AND reserves.itemnumber is NULL";
121
122 if (C4::Context->preference('IndependantBranches')){
123         $strsth .= " AND items.holdingbranch=? ";
124 }
125 $strsth .= $sqlorderby;
126 warn $strsth;
127
128 my $sth = $dbh->prepare($strsth);
129
130 if (C4::Context->preference('IndependantBranches')){
131         $sth->execute(C4::Context->userenv->{'branch'});
132 }
133 else {
134         $sth->execute();
135 }       
136 my @reservedata;
137 my $previous;
138 my $this;
139 while ( my $data = $sth->fetchrow_hashref ) {
140     $this=$data->{biblionumber}.":".$data->{borrowernumber};
141     my @itemlist;
142     push(
143         @reservedata,
144         {
145             reservedate      => $previous eq $this?"":format_date( $data->{reservedate} ),
146             priority         => $previous eq $this?"":$data->{priority},
147             name             => $previous eq $this?"":$data->{borrower},
148             title            => $previous eq $this?"":$data->{title},
149             author           => $previous eq $this?"":$data->{author},
150             borrowernumber   => $previous eq $this?"":$data->{borrowernumber},
151             itemnum          => $previous eq $this?"":$data->{itemnumber},
152             phone            => $previous eq $this?"":$data->{phone},
153             email            => $previous eq $this?"":$data->{email},
154             biblionumber     => $previous eq $this?"":$data->{biblionumber},
155             statusw          => ( $data->{found} eq "W" ),
156             statusf          => ( $data->{found} eq "F" ),
157             holdingbranch    => $data->{holdingbranch},
158             branch           => $previous eq $this?"":$data->{branch},
159             itemcallnumber   => $data->{itemcallnumber},
160             notes            => $previous eq $this?"":$data->{notes},
161             notificationdate => $previous eq $this?"":$data->{notificationdate},
162             reminderdate     => $previous eq $this?"":$data->{reminderdate}
163         }
164     );
165     $previous=$this;
166 }
167
168 $sth->finish;
169 $strsth=~ s/AND reserves.itemnumber is NULL/AND reserves.itemnumber is NOT NULL/;
170 $strsth=~ s/LEFT JOIN items ON items.biblionumber=reserves.biblionumber/LEFT JOIN items ON items.biblionumber=reserves.itemnumber/;
171 $sth = $dbh->prepare($strsth);                                                                                                                          
172 if (C4::Context->preference('IndependantBranches')){
173         $sth->execute(C4::Context->userenv->{'branch'});
174 }     
175 else {
176         $sth->execute(); 
177 }              
178 while ( my $data = $sth->fetchrow_hashref ) {
179     $this=$data->{biblionumber}.":".$data->{borrowernumber};
180     my @itemlist;
181     push(
182         @reservedata,
183         {
184             reservedate      => $previous eq $this?"":format_date( $data->{reservedate} ),
185             priority         => $previous eq $this?"":$data->{priority},
186             name             => $previous eq $this?"":$data->{borrower},
187             title            => $previous eq $this?"":$data->{title},
188             author           => $previous eq $this?"":$data->{author},
189             borrowernumber   => $previous eq $this?"":$data->{borrowernumber},
190             itemnum          => $previous eq $this?"":$data->{itemnumber},
191             phone            => $previous eq $this?"":$data->{phone},
192             email            => $previous eq $this?"":$data->{email},
193             biblionumber     => $previous eq $this?"":$data->{biblionumber},
194             statusw          => ( $data->{found} eq "W" ),
195             statusf          => ( $data->{found} eq "F" ),
196             holdingbranch    => $data->{holdingbranch},
197             branch           => $previous eq $this?"":$data->{branch},
198             itemcallnumber   => $data->{itemcallnumber},
199             notes            => $previous eq $this?"":$data->{notes},
200             notificationdate => $previous eq $this?"":$data->{notificationdate},
201             reminderdate     => $previous eq $this?"":$data->{reminderdate},
202                         thisitemonly     => 1,
203         }
204     );
205     $previous=$this;
206 }
207
208 $sth->finish;
209
210 $template->param(
211     todaysdate      => format_date($todaysdate),
212     from             => $startdate,
213     to              => $enddate,
214     reserveloop     => \@reservedata,
215     "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
216     DHTMLcalendar_dateformat =>  C4::Dates->DHTMLcalendar(),
217 );
218
219 output_html_with_http_headers $input, $cookie, $template->output;