package C4::Reserves;
# Copyright 2000-2002 Katipo Communications
+# 2006 SAN Ouest Provence
+# 2007 BibLibre Paul POULAIN
#
# This file is part of Koha.
#
# 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::Biblio;
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 ); };
+$VERSION = 3.00;
=head1 NAME
=head1 DESCRIPTION
-this modules provides somes functions to deal with reservations.
-
+ this modules provides somes functions to deal with reservations.
+
+ Reserves are stored in reserves table.
+ The following columns contains important values :
+ - priority >0 : then the reserve is at 1st stage, and not yet affected to any item.
+ =0 : then the reserve is being dealed
+ - found : NULL : means the patron requested the 1st available, and we haven't choosen the item
+ W(aiting) : the reserve has an itemnumber affected, and is on the way
+ F(inished) : the reserve has been completed, and is done
+ - itemnumber : empty : the reserve is still unaffected to an item
+ filled: the reserve is attached to an item
+ The complete workflow is :
+ ==== 1st use case ====
+ patron request a document, 1st available : P >0, F=NULL, I=NULL
+ a library having it run "transfertodo", and clic on the list
+ if there is no transfer to do, the reserve waiting
+ patron can pick it up P =0, F=W, I=filled
+ if there is a transfer to do, write in branchtransfer P =0, F=NULL, I=filled
+ The pickup library recieve the book, it check in P =0, F=W, I=filled
+ The patron borrow the book P =0, F=F, I=filled
+
+ ==== 2nd use case ====
+ patron requests a document, a given item,
+ If pickup is holding branch P =0, F=W, I=filled
+ If transfer needed, write in branchtransfer P =0, F=NULL, I=filled
+ The pickup library recieve the book, it checks it in P =0, F=W, I=filled
+ The patron borrow the book P =0, F=F, I=filled
+
=head1 FUNCTIONS
=over 2
&GetReservesFromItemnumber
&GetReservesFromBiblionumber
&GetReservesFromBorrowernumber
- GetReservesForBranch
- GetReservesToBranch
+ &GetReservesForBranch
+ &GetReservesToBranch
&GetReserveCount
&GetReserveFee
- GetReservesForBranch
- GetReservesToBranch
+ &GetReservesForBranch
+ &GetReservesToBranch
&GetOtherReserves
&ModReserveFill
=item AddReserve
-AddReserve($branch,$borrowernumber,$biblionumber,$constraint,$bibitems,$priority,$notes,$title,$checkitem,$found)
+ AddReserve($branch,$borrowernumber,$biblionumber,$constraint,$bibitems,$priority,$notes,$title,$checkitem,$found)
=cut
return ( $#results + 1, \@results );
}
+=item GetReservesFromItemnumber
+
+ ( $reservedate, $borrowernumber, $branchcode ) = GetReservesFromItemnumber($itemnumber);
+
+ TODO :: Description here
+
+=cut
+
sub GetReservesFromItemnumber {
my ( $itemnumber ) = @_;
my $dbh = C4::Context->dbh;
return ( $reservedate, $borrowernumber, $branchcode );
}
+=item GetReservesFromBorrowernumber
+
+ $borrowerreserv = GetReservesFromBorrowernumber($borrowernumber,$tatus);
+
+ TODO :: Descritpion
+
+=cut
+
sub GetReservesFromBorrowernumber {
my ( $borrowernumber, $status ) = @_;
my $dbh = C4::Context->dbh;
return ( $messages, $nextreservinfo );
}
+=item GetReserveFee
+
+$fee = GetReserveFee($borrowernumber,$biblionumber,$constraint,$biblionumber);
+
+Calculate the fee for a reserve
+
+=cut
+
sub GetReserveFee {
my ($borrowernumber, $biblionumber, $constraint, $bibitems ) = @_;
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 ) {
}
}
}
-
- # print "fee $fee";
return $fee;
}
-=head2 GetReservesToBranch
+=item GetReservesToBranch
@transreserv = GetReservesToBranch( $frombranch );
return (@transreserv);
}
-=head2 GetReservesForBranch
+=item GetReservesForBranch
@transreserv = GetReservesForBranch($frombranch);
# 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;
with the biblionumber & the borrowernumber, we can affect the itemnumber
to the correct reserve.
-if $transferToDo is set, then the status is set to "Waiting" as well.
+if $transferToDo is not set, then the status is set to "Waiting" as well.
otherwise, a transfer is on the way, and the end of the transfer will
take care of the waiting status
=cut
$sth = $dbh->prepare($query);
$sth->execute( $itemnumber, $borrowernumber,$biblionumber);
$sth->finish;
-
- # now fix up the remaining priorities....
-# _FixPriority( $data->{'priority'}, $biblio ); # can't work, 1st parameter should be $biblionumbern NOT priority. FIXME : remove this line if no problem seen once it is commented.
return;
}
return @results;
}
-=item GetReserveFee
-
-$fee = GetReserveFee($borrowernumber,$biblionumber,$constraint,$biblionumber);
-
-Calculate the fee for a reserve
-
-=cut
-
=back
=head1 AUTHOR