# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
-# $Id$
use strict;
-require Exporter;
use C4::Context;
use C4::Biblio;
+use C4::Items;
use C4::Search;
use C4::Circulation;
use C4::Accounts;
-our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,%EXPORT_TAGS);
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
my $library_name = C4::Context->preference("LibraryName");
-# set the version for version checking
-$VERSION = do { my @v = '$Revision$' =~ /\d+/g; shift(@v) . "." . join( "_", map { sprintf "%03d", $_ } @v ); };
-
=head1 NAME
C4::Reserves - Koha functions for dealing with reservation.
=cut
-@ISA = qw(Exporter);
-
-@EXPORT = qw(
- &AddReserve
+BEGIN {
+ # set the version for version checking
+ $VERSION = 3.01;
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT = qw(
+ &AddReserve
- &GetReservesFromItemnumber
- &GetReservesFromBiblionumber
- &GetReservesFromBorrowernumber
- &GetReservesForBranch
- &GetReservesToBranch
- &GetReserveCount
- &GetReserveFee
- &GetReservesForBranch
- &GetReservesToBranch
- &GetOtherReserves
-
- &ModReserveFill
- &ModReserveAffect
- &ModReserve
- &ModReserveStatus
- &ModReserveCancelAll
- &ModReserveMinusPriority
-
- &CheckReserves
- &CancelReserve
-);
-
+ &GetReservesFromItemnumber
+ &GetReservesFromBiblionumber
+ &GetReservesFromBorrowernumber
+ &GetReservesForBranch
+ &GetReservesToBranch
+ &GetReserveCount
+ &GetReserveFee
+
+ &GetOtherReserves
+
+ &ModReserveFill
+ &ModReserveAffect
+ &ModReserve
+ &ModReserveStatus
+ &ModReserveCancelAll
+ &ModReserveMinusPriority
+
+ &CheckReserves
+ &CancelReserve
+ );
+}
=item AddReserve
reservedate,
constrainttype,
found,
- itemnumber
+ itemnumber,
+ reservenotes
FROM reserves
WHERE cancellationdate IS NULL
AND (found <> \'F\' OR found IS NULL)
my $dbh = C4::Context->dbh;
my $const = lc substr( $constraint, 0, 1 );
my $query = qq/
- SELECT * FROM borrowers,categories
+ SELECT * FROM borrowers
+ LEFT JOIN categories ON borrowers.categorycode = categories.categorycode
WHERE borrowernumber = ?
- AND borrowers.categorycode = categories.categorycode
/;
my $sth = $dbh->prepare($query);
$sth->execute($borrowernumber);
# first find biblioitem records
my @biblioitems;
my $sth1 = $dbh->prepare(
- "SELECT * FROM biblio,biblioitems
- WHERE (biblio.biblionumber = ?)
- AND (biblio.biblionumber = biblioitems.biblionumber)"
+ "SELECT * FROM biblio LEFT JOIN biblioitems on biblio.biblionumber = biblioitems.biblionumber
+ WHERE (biblio.biblionumber = ?)"
);
$sth1->execute($biblionumber);
while ( my $data1 = $sth1->fetchrow_hashref ) {
sub GetReservesForBranch {
my ($frombranch) = @_;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare( "
- SELECT borrowernumber,reservedate,itemnumber,waitingdate
+ my $query = "SELECT borrowernumber,reservedate,itemnumber,waitingdate
FROM reserves
WHERE priority='0'
AND cancellationdate IS NULL
- AND found='W'
- AND branchcode=?
- ORDER BY waitingdate" );
- $sth->execute($frombranch);
+ AND found='W' ";
+ if ($frombranch){
+ $query .= " AND branchcode=? ";
+ }
+ $query .= "ORDER BY waitingdate" ;
+ my $sth = $dbh->prepare($query);
+ if ($frombranch){
+ $sth->execute($frombranch);
+ }
+ else {
+ $sth->execute();
+ }
my @transreserv;
my $i = 0;
while ( my $data = $sth->fetchrow_hashref ) {
# Look up the item by itemnumber
my $query = "
SELECT items.biblionumber, items.biblioitemnumber, itemtypes.notforloan
- FROM items, biblioitems, itemtypes
- WHERE items.biblioitemnumber = biblioitems.biblioitemnumber
- AND biblioitems.itemtype = itemtypes.itemtype
- AND itemnumber=$qitem
+ FROM items
+ LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
+ LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype
+ WHERE itemnumber=$qitem
";
$sth = $dbh->prepare($query);
}
# Look up the item by barcode
my $query = "
SELECT items.biblionumber, items.biblioitemnumber, itemtypes.notforloan
- FROM items, biblioitems, itemtypes
+ FROM items
+ LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
+ LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype
WHERE items.biblioitemnumber = biblioitems.biblioitemnumber
AND biblioitems.itemtype = itemtypes.itemtype
AND barcode=$qbc
sub CancelReserve {
my ( $biblio, $item, $borr ) = @_;
my $dbh = C4::Context->dbh;
- if ( ( $item and $borr ) and ( not $biblio ) ) {
+ if ( $item and $borr ) {
# removing a waiting reserve record....
# update the database...
my $query = "
$sth->execute( $item, $borr );
$sth->finish;
}
- if ( ( $biblio and $borr ) and ( not $item ) ) {
+ else {
# removing a reserve record....
# get the prioritiy on this record....
my $priority;
# get whats left
# FIXME adding a new security in returned elements for changing priority,
# now, we don't care anymore any reservations with itemnumber linked (suppose a waiting reserve)
+ # This is wrong a waiting reserve has W set
+ # The assumption that having an itemnumber set means waiting is wrong and should be corrected any place it occurs
my $query = qq/
SELECT borrowernumber, reservedate, constrainttype
FROM reserves
WHERE biblionumber = ?
AND cancellationdate IS NULL
- AND itemnumber IS NULL
AND ((found <> 'F' and found <> 'W') or found is NULL)
ORDER BY priority ASC
/;
=cut
+1;