[Koha-cvs] koha/circ reserve.pl [rel_2_2]
Ryan Higgins
rch at liblime.com
Fri Aug 10 00:18:53 CEST 2007
CVSROOT: /sources/koha
Module name: koha
Branch: rel_2_2
Changes by: Ryan Higgins <rych> 07/08/09 22:18:53
Modified files:
circ : reserve.pl
Log message:
add date selector and cancelled reserves/shelf pull options
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/circ/reserve.pl?cvsroot=koha&only_with_tag=rel_2_2&r1=1.1.2.8&r2=1.1.2.9
Patches:
Index: reserve.pl
===================================================================
RCS file: /sources/koha/koha/circ/Attic/reserve.pl,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -u -b -r1.1.2.8 -r1.1.2.9
--- reserve.pl 26 Apr 2007 14:10:42 -0000 1.1.2.8
+++ reserve.pl 9 Aug 2007 22:18:52 -0000 1.1.2.9
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-# $Id: reserve.pl,v 1.1.2.8 2007/04/26 14:10:42 hdl Exp $
+# $Id: reserve.pl,v 1.1.2.9 2007/08/09 22:18:52 rych Exp $
# Copyright 2000-2002 Katipo Communications
#
@@ -22,6 +22,7 @@
use strict;
use C4::Context;
use C4::Output;
+use C4::Search;
use CGI;
use HTML::Template;
use C4::Auth;
@@ -30,32 +31,26 @@
my $input = new CGI;
my $type=$input->param('type');
my $order=$input->param('order');
+my $startdate=$input->param('from');
+my $enddate=$input->param('to');
+my $op = $input->param('op');
+my $borrowernumber=$input->param('borrower');
+my $biblionumber=$input->param('biblionum');
my $theme = $input->param('theme'); # only used if allowthemeoverride is set
+my $tmpl_name = ($op eq 'slip') ? "circ/reserve-slip.tmpl" : "circ/reserve.tmpl" ;
+
my ($template, $loggedinuser, $cookie)
- = get_template_and_user({template_name => "circ/reserve.tmpl",
+ = get_template_and_user({template_name => $tmpl_name,
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 $dbh = C4::Context->dbh;
my $duedate;
-my $bornum;
my $itemnum;
my $data1;
my $data2;
@@ -63,36 +58,107 @@
my $name;
my $phone;
my $email;
-my $biblionumber;
my $title;
my $author;
# my @datearr = localtime(time());
-my $todaysdate = POSIX::strftime("%Y-%m-%d", localtime);;
+#my $todaysdate = POSIX::strftime("%Y-%m-%d", localtime);;
-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 $twodaysago = (1900+$datearr[5]).'-'.sprintf ("%0.2d", ($datearr[4]+1)).'-'.sprintf ("%0.2d", ($datearr[3] - 2) );
my @reservedata;
+if ($op eq 'cancelled') {
+
+######
+#get cancelled reserves.
+# we assume items.timestamp is updated before reserves.timestamp - this is because cancelling a 'W' reserve doesn't change the 'W', and returning such an item doesn't change reserves table. so this ignores cancelled reserves that have already been pulled from the reserves shelf.
+
+my $sthCancel= $dbh->prepare("select reserves.borrowernumber, reserves.biblionumber, reserves.itemnumber, itemcallnumber, barcode, firstname, surname, biblio.title, reservedate from reserves, biblio, borrowers, items where reserves.borrowernumber=borrowers.borrowernumber && reserves.biblionumber=biblio.biblionumber && reserves.itemnumber=items.itemnumber && reserves.timestamp > items.timestamp && found = 'W' && cancellationdate is not null");
+
+$sthCancel->execute();
+#( $bornum, $bibnum, $itemnum, $itemcallnum , $barcode, $firstname, $surname, $title )
+while ( my $cancelled = $sthCancel->fetchrow_hashref() ) {
+ push @reservedata , $cancelled ;
+}
+$template->param( cancelledreserves => 1 );
+
+} elsif ($op eq 'open') {
+
+#get biblionumbers with open reserves.
+my $sthAll= $dbh->prepare("select reserves.biblionumber, count(borrowernumber), title, author, reservenotes from reserves, biblio where reserves.biblionumber=biblio.biblionumber && found is null && priority > 0 && cancellationdate is null group by reserves.biblionumber ");
+
+## Find items on shelf
+my $sthItems = $dbh->prepare("select items.biblionumber, items.itemnumber, barcode, itemcallnumber, location from items left join issues USING (itemnumber) where ( items.notforloan = 0 || items.notforloan is null ) && ( items.itemlost = 0 || items.itemlost is null ) && items.biblionumber = ? && ( issues.returndate is not null || issues.itemnumber is null ) && items.itemnumber not in ( select itemnumber from reserves where biblionumber= ? && found = 'W' ) ");
+
+$sthAll->execute();
+my $item_info;
+while ( my ($bibnum, $numreserves, $title, $author, $notes) = $sthAll->fetchrow_array) {
+ $sthItems->execute($bibnum,$bibnum);
+ my %reserve = ( biblionumber => $bibnum, title => $title, author =>$author, numreserves =>$numreserves , notes => $notes );
+ my @resloop;
+ while ( my $res = $sthItems->fetchrow_hashref()) {
+ push @resloop, $res ;
+ }
+ if (scalar @resloop > 0) {
+ $reserve{iteminfo} = \@resloop ;
+ push @reservedata, \%reserve ;
+ }
+}
+$template->param( openreserves => 1 );
+
+} else {
+
+$startdate = $twodaysago unless ($startdate);
+$enddate = $todaysdate unless ($enddate);
+
+my ($sqlorderby, $sqldatewhere, $sqlwhowhere) = ("","", "");
+
+if ($op eq 'slip') {
+ $sqlwhowhere .= " && reserves.borrowernumber = " . $dbh->quote($borrowernumber) ;
+ $sqlwhowhere .= " && reserves.biblionumber = " . $dbh->quote($biblionumber) ;
+} else {
+
+ $sqldatewhere .= " && reservedate >= " . $dbh->quote($startdate) if ($startdate) ;
+ $sqldatewhere .= " && reservedate <= " . $dbh->quote($enddate) if ($enddate) ;
+
+ if ($order eq "borrower") {
+ $sqlorderby = " order by surname, reservedate";
+ } elsif ($order eq "biblio") {
+ $sqlorderby = " order by biblio.title, priority,reservedate";
+ } else {
+ $sqlorderby = " order by reservedate, surname";
+ }
+}
+
+my $strsth="select reservedate,reserves.borrowernumber as bornum, firstname,surname , borrowers.phone,phoneday, borrowers.emailaddress, borrowers.streetaddress, borrowers.cardnumber, borrowers.city, borrowers.zipcode, reserves.biblionumber, reserves.branchcode as branch, items.holdingbranch, items.itemcallnumber, items.itemnumber, barcode, 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 " . $sqlwhowhere . $sqldatewhere . $sqlorderby ;
+
+my $sth = $dbh->prepare($strsth); # or die $dbh->errstr;
+$sth->execute();
+
while (my $data=$sth->fetchrow_hashref) {
push (@reservedata,
{
reservedate => format_date($data->{reservedate}),
priority => $data->{priority},
- name => $data->{borrower},
+ name => "$data->{firstname} $data->{surname}",
+ firstname => $data->{firstname},
+ surname => $data->{surname},
title => $data->{title},
author => $data->{author},
bornum => $data->{bornum},
+ barcode => $data->{barcode},
itemnum => $data->{itemnumber},
phone => $data->{phone},
+ phoneday => $data->{phoneday},
+ city => $data->{city},
+ zip => $data->{zipcode},
+ streetaddress => $data->{streetaddress},
+ cardnumber => $data->{cardnumber},
email => $data->{email},
biblionumber => $data->{biblionumber},
- statusw => ($data->{found} eq "w"),
- statusf => ($data->{found} eq "f"),
+ statusw => ($data->{found} eq "W"),
+ statusf => ($data->{found} eq "F"),
holdingbranch => $data->{holdingbranch},
branch => $data->{branch},
itemcallnumber => $data->{itemcallnumber},
@@ -106,8 +172,11 @@
}
$sth->finish;
+} # endif op
$template->param(todaysdate => format_date($todaysdate),
+ from => $startdate,
+ to => $enddate,
reserveloop => \@reservedata,
intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
intranetstylesheet => C4::Context->preference("intranetstylesheet"),
More information about the Koha-cvs
mailing list