rel_3_0 moved to HEAD
[koha.git] / circ / reserve.pl
index 6752688..576dc93 100755 (executable)
@@ -23,39 +23,30 @@ use strict;
 use C4::Context;
 use C4::Output;
 use CGI;
-use HTML::Template;
 use C4::Auth;
 use C4::Date;
+use C4::Interface::CGI::Output;
 
 my $input = new CGI;
-my $type=$input->param('type');
-my $order=$input->param('order');
-
-my $theme = $input->param('theme'); # only used if allowthemeoverride is set
-
-my ($template, $loggedinuser, $cookie)
-      = get_template_and_user({template_name => "circ/reserve.tmpl",
-                                        query => $input,
-                                        type => "intranet",
-                                        authnotrequired => 0,
-                                        flagsrequired => {borrowers => 1},
-                                        debug => 1,
-                                        });
-# borrowernumber       int(11) 
-#       reservedate    date    
-#       biblionumber   int(11) 
-#       constrainttype         char(1)
-#       branchcode     varchar(4) 
-#       notificationdate       date    
-#       reminderdate   date            
-#       cancellationdate       date    
-#       reservenotes   text    
-#       priority       smallint(6) 
-#       found          char(1)         
-#       timestamp      timestamp               ON UPDATE CURRENT_TIMESTAMP     Oui     CURRENT_TIMESTAMP               Modifier        Supprimer       Primaire        Index   Unique  Texte entier
-#       itemnumber     int(11)         
+my $order = $input->param('order');
+my $startdate=$input->param('from');
+my $enddate=$input->param('to');
+
+my $theme = $input->param('theme');    # only used if allowthemeoverride is set
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+    {
+        template_name   => "circ/reserve.tmpl",
+        query           => $input,
+        type            => "intranet",
+        authnotrequired => 0,
+        flagsrequired   => { circulate => 1 },
+        debug           => 1,
+    }
+);
+
 my $duedate;
-my $bornum;
+my $borrowernumber;
 my $itemnum;
 my $data1;
 my $data2;
@@ -66,52 +57,106 @@ my $email;
 my $biblionumber;
 my $title;
 my $author;
-my @datearr = localtime(time());
-my $todaysdate = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", $datearr[3]);
 
-my $dbh = C4::Context->dbh;
-my $strsth="select reservedate,reserves.borrowernumber as bornum, concat(firstname,' ',surname) as borrower, borrowers.phone, borrowers.emailaddress,reserves.biblionumber, reserves.branchcode as branch, items.holdingbranch, items.itemcallnumber, items.itemnumber, notes, notificationdate, reminderdate, priority, reserves.found, biblio.title, biblio.author from reserves left join items on items.itemnumber=reserves.itemnumber, borrowers,biblio where isnull(cancellationdate) && reserves.borrowernumber=borrowers.borrowernumber && reserves.biblionumber=biblio.biblionumber order by reservedate, borrower ";
-$strsth="select reservedate,reserves.borrowernumber as bornum,concat(firstname,' ',surname) as borrower, borrowers.phone, borrowers.emailaddress,reserves.biblionumber, reserves.branchcode as branch, items.holdingbranch, items.itemcallnumber, items.itemnumber, notes, notificationdate, reminderdate, priority, reserves.found, biblio.title, biblio.author from reserves left join items on  items.itemnumber=reserves.itemnumber , borrowers,biblio where isnull(cancellationdate) && reserves.borrowernumber=borrowers.borrowernumber && reserves.biblionumber=biblio.biblionumber order by borrower,reservedate " if ($order eq "borrower");
-$strsth="select reservedate,reserves.borrowernumber as bornum,concat(firstname,' ',surname) as borrower, borrowers.phone, borrowers.emailaddress,reserves.biblionumber, reserves.branchcode as branch, items.holdingbranch, items.itemcallnumber, items.itemnumber, notes, notificationdate, reminderdate, priority, reserves.found, biblio.title, biblio.author from reserves left join items on items.itemnumber=reserves.itemnumber, borrowers,biblio where isnull(cancellationdate) && reserves.borrowernumber=borrowers.borrowernumber && reserves.biblionumber=biblio.biblionumber order by biblio.title, priority,reservedate " if ($order eq "biblio");
-my $sth=$dbh->prepare($strsth);
-warn "".$strsth;
-$sth->execute();
+my @datearr    = localtime( time() );
+my $todaysdate =
+    ( 1900 + $datearr[5] ) . '-'
+  . sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-'
+  . sprintf( "%0.2d", $datearr[3] );
 
-my @reservedata;
-while (my $data=$sth->fetchrow_hashref) {
-  push (@reservedata, 
-                       {
-                               reservedate  => format_date($data->{reservedate}),
-                               priority         => $data->{priority},
-                               name         => $data->{borrower},
-                               title        => $data->{title},
-                               author       => $data->{author},
-                               bornum       => $data->{bornum},
-                               itemnum      => $data->{itemnumber},
-                               phone        => $data->{phone},
-                               email        => $data->{email},
-                               biblionumber => $data->{biblionumber},
-                               statusw          => ($data->{found} eq "w"),
-                               statusf          => ($data->{found} eq "f"),
-                               holdingbranch            => $data->{holdingbranch},
-                               branch           => $data->{branch},
-                               itemcallnumber => $data->{itemcallnumber},
-                               notes            => $data->{notes},
-                               notificationdate => $data->{notificationdate},
-                               reminderdate => $data->{reminderdate}
-                       }
-       
-       );
+my $dbh    = C4::Context->dbh;
+my ($sqlorderby, $sqldatewhere) = ("","");
+
+$sqldatewhere .= " && reservedate >= " . $dbh->quote($startdate)  if ($startdate) ;
+$sqldatewhere .= " && reservedate <= " . $dbh->quote($enddate)  if ($enddate) ;
 
+if ($order eq "borrower") {
+       $sqlorderby = " order by  borrower, reservedate";
+} elsif ($order eq "biblio") {
+       $sqlorderby = " order by biblio.title, priority,reservedate";
+} elsif ($order eq "priority") {
+    $sqlorderby = "order by priority DESC";
+} else {
+       $sqlorderby = " order by reservedate, borrower";
+}
+my $strsth =
+"SELECT reservedate,
+        reserves.borrowernumber as borrowernumber,
+        concat(firstname,' ',surname) as borrower,
+        borrowers.phone,
+        borrowers.email,
+        reserves.biblionumber,
+        reserves.branchcode as branch,
+        items.holdingbranch,
+        items.itemcallnumber,
+        items.itemnumber,
+        notes,
+        notificationdate,
+        reminderdate,
+        priority,
+        reserves.found,
+        biblio.title,
+        biblio.author
+ FROM  reserves
+ LEFT JOIN items ON items.biblionumber=reserves.biblionumber,
+  borrowers,biblio
+ WHERE isnull(cancellationdate)
+  && reserves.borrowernumber=borrowers.borrowernumber 
+  && reserves.biblionumber=biblio.biblionumber
+  && reserves.found is NULL
+  && items.holdingbranch=?
+ ";
+
+$strsth .= $sqlorderby;
+
+my $sth = $dbh->prepare($strsth);
+
+$sth->execute(C4::Context->userenv->{'branch'});
+
+my @reservedata;
+my $previous;
+my $this;
+while ( my $data = $sth->fetchrow_hashref ) {
+    $this=$data->{biblionumber}.":".$data->{borrowernumber};
+    my @itemlist;
+    push(
+        @reservedata,
+        {
+            reservedate      => $previous eq $this?"":format_date( $data->{reservedate} ),
+            priority         => $previous eq $this?"":$data->{priority},
+            name             => $previous eq $this?"":$data->{borrower},
+            title            => $previous eq $this?"":$data->{title},
+            author           => $previous eq $this?"":$data->{author},
+            borrowernumber   => $previous eq $this?"":$data->{borrowernumber},
+            itemnum          => $previous eq $this?"":$data->{itemnumber},
+            phone            => $previous eq $this?"":$data->{phone},
+            email            => $previous eq $this?"":$data->{email},
+            biblionumber     => $previous eq $this?"":$data->{biblionumber},
+            statusw          => ( $data->{found} eq "w" ),
+            statusf          => ( $data->{found} eq "f" ),
+            holdingbranch    => $data->{holdingbranch},
+            branch           => $previous eq $this?"":$data->{branch},
+            itemcallnumber   => $data->{itemcallnumber},
+            notes            => $previous eq $this?"":$data->{notes},
+            notificationdate => $previous eq $this?"":$data->{notificationdate},
+            reminderdate     => $previous eq $this?"":$data->{reminderdate}
+        }
+    );
+    $previous=$this;
 }
 
 $sth->finish;
 
-$template->param(todaysdate        => format_date($todaysdate),
-               reserveloop       => \@reservedata,
-               intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
-               intranetstylesheet => C4::Context->preference("intranetstylesheet"),
-               IntranetNav => C4::Context->preference("IntranetNav"),
-               );
+$template->param(
+    todaysdate              => format_date($todaysdate),
+       from                        => $startdate,
+       to                                  => $enddate,
+    reserveloop             => \@reservedata,
+    intranetcolorstylesheet =>
+      C4::Context->preference("intranetcolorstylesheet"),
+    intranetstylesheet => C4::Context->preference("intranetstylesheet"),
+    IntranetNav        => C4::Context->preference("IntranetNav"),
+    "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
+);
 
-print "Content-Type: text/html\n\n", $template->output;
+output_html_with_http_headers $input, $cookie, $template->output;