[Koha-cvs] koha/C4 Reserves2.pm [dev_week]
Chris Cormack
crc at liblime.com
Tue Jun 12 01:48:26 CEST 2007
CVSROOT: /sources/koha
Module name: koha
Branch: dev_week
Changes by: Chris Cormack <rangi> 07/06/11 23:48:26
Modified files:
C4 : Reserves2.pm
Log message:
Merging in code to do item level reserves
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/C4/Reserves2.pm?cvsroot=koha&only_with_tag=dev_week&r1=1.38.4.3&r2=1.38.4.4
Patches:
Index: Reserves2.pm
===================================================================
RCS file: /sources/koha/koha/C4/Attic/Reserves2.pm,v
retrieving revision 1.38.4.3
retrieving revision 1.38.4.4
diff -u -b -r1.38.4.3 -r1.38.4.4
--- Reserves2.pm 11 Jun 2007 22:36:40 -0000 1.38.4.3
+++ Reserves2.pm 11 Jun 2007 23:48:25 -0000 1.38.4.4
@@ -3,9 +3,10 @@
package C4::Reserves2;
-# $Id: Reserves2.pm,v 1.38.4.3 2007/06/11 22:36:40 rangi Exp $
+# $Id: Reserves2.pm,v 1.38.4.4 2007/06/11 23:48:25 rangi Exp $
# Copyright 2000-2002 Katipo Communications
+# Copyright 2007 Liblime
#
# This file is part of Koha.
#
@@ -107,7 +108,7 @@
my ($bib,$bor)=@_;
my $dbh = C4::Context->dbh;
# Find the desired items in the reserves
- my $query="SELECT *,reserves.branchcode,biblio.title AS btitle, reserves.timestamp as rtimestamp FROM reserves,borrowers,biblio ";
+ my $query="SELECT *,reserves.branchcode,biblio.title AS btitle, reserves.timestamp as rtimestamp,itemnumber FROM reserves,borrowers,biblio ";
# FIXME - These three bits of SQL seem to contain a fair amount of
# redundancy. Wouldn't it be better to have a @clauses array, add
# one or two clauses as necessary, then join(" AND ", @clauses) ?
@@ -249,18 +250,28 @@
# FIXME - $item might be undefined or empty: the caller
# might be searching by barcode.
if ($res->{'itemnumber'} == $item) {
- # Found it
- return ("Waiting", $res);
- } else {
+ if ( C4::Context->preference('itemlevelreserves') && $res->{'Found'} ne 'W' ) {
+ return ( "Reserved", $res );
+ }
+ else {
+ return ( "Waiting", $res );
+
+ }
+ }
+ else {
# See if this item is more important than what we've got
# so far.
if ($res->{'priority'} != 0 && $res->{'priority'} < $priority) {
+ if ( C4::Context->preference('itemlevelreserves') ){
+ }
+ else {
$priority = $res->{'priority'};
$highest = $res;
}
}
}
}
+ }
# If we get this far, then no exact match was found. Print the
# most important item on the list. I think this tells us who's
@@ -514,7 +525,28 @@
OR reserves.constrainttype='a' )
AND reserves.cancellationdate is NULL
AND (reserves.found <> 'F' or reserves.found is NULL)");
+ if (C4::Context->preference('itemlevelreserves')){
+ $sth = $dbh->prepare(
+ "SELECT reserves.biblionumber AS biblionumber,
+ reserves.borrowernumber AS borrowernumber,
+ reserves.reservedate AS reservedate,
+ reserves.branchcode AS branchcode,
+ reserves.cancellationdate AS cancellationdate,
+ reserves.found AS found,
+ reserves.reservenotes AS reservenotes,
+ reserves.priority AS priority,
+ reserves.timestamp AS timestamp,
+ reserves.itemnumber AS itemnumber,
+ FROM reserves
+ WHERE reserves.biblionumber = ?
+ AND reserves.cancellationdate is NULL
+ AND (reserves.found <> 'F' or reserves.found is NULL)"
+ );
+ $sth->execute($biblio);
+ }
+ else {
$sth->execute($biblio, $bibitem);
+ }
my @results;
while (my $data=$sth->fetchrow_hashref){
push(@results,$data);
@@ -528,7 +560,7 @@
# XXX - POD
sub CreateReserve {
my
-($env,$branch,$borrnum,$biblionumber,$constraint,$bibitems,$priority,$notes,$title)= @_;
+($env,$branch,$borrnum,$biblionumber,$constraint,$bibitems,$priority,$notes,$title,$itemnumbers)= @_;
my $fee=CalcReserveFee($env,$borrnum,$biblionumber,$constraint,$bibitems);
my $dbh = C4::Context->dbh;
my $const = lc substr($constraint,0,1);
@@ -546,28 +578,49 @@
$usth->execute($borrnum,$nextacctno,$fee,'Reserve Charge -'.$title,$fee);
$usth->finish;
}
- #if ($const eq 'a'){
- my $sth = $dbh->prepare("insert into reserves
- (borrowernumber,biblionumber,reservedate,branchcode,constrainttype,priority,reservenotes)
- values (?,?,?,?,?,?,?)");
- $sth->execute($borrnum,$biblionumber,$resdate,$branch,$const,$priority,$notes);
+
+ if ( C4::Context->preference('itemlevelreserves') ) {
+ my $sth = $dbh->prepare(
+ "INSERT INTO reserves (borrowernumber,biblionumber,reservedate,branchcode,constrainttype,priority,reservenotes,itemnumber) VALUES (?,?,?,?,?,?,?,?)"
+ );
+ if ( $constraint ne 'a' ) {
+ foreach my $item (@$bibitems) {
+ $sth->execute( $borrnum, $biblionumber, $resdate, $branch,
+ $const, $priority, $notes, $item );
+ $priority++;
+ }
+ $sth->finish();
+ }
+ else {
+ $sth->execute( $borrnum, $biblionumber, $resdate, $branch, $const,
+ $priority, $notes, '' );
+ $priority++;
+
+ }
+ }
+ else {
+ my $sth = $dbh->prepare(
+ "INSERT INTO reserves (borrowernumber,biblionumber,reservedate,branchcode,constrainttype,priority,reservenotes) VALUES (?,?,?,?,?,?,?)"
+ );
+
+ $sth->execute( $borrnum, $biblionumber, $resdate, $branch, $const,
+ $priority, $notes );
$sth->finish;
- #}
- if (($const eq "o") || ($const eq "e")) {
+
+ if ( ( $const eq "o" ) || ( $const eq "e" ) ) {
my $numitems = @$bibitems;
my $i = 0;
- while ($i < $numitems) {
+ while ( $i < $numitems ) {
my $biblioitem = @$bibitems[$i];
- my $sth = $dbh->prepare("insert into
- reserveconstraints
- (borrowernumber,biblionumber,reservedate,biblioitemnumber)
- values (?,?,?,?)");
- $sth->execute($borrnum,$biblionumber,$resdate,$biblioitem);
+ my $sth = $dbh->prepare(
+ "INSERT INTO reserveconstraints (borrowernumber,biblionumber,reservedate,biblioitemnumber) VALUES (?,?,?,?)"
+ );
+ $sth->execute( $borrnum, $biblionumber, $resdate, $biblioitem );
$sth->finish;
$i++;
}
}
-# print $query;
+ }
return();
}
@@ -707,27 +760,42 @@
# XXX - POD
sub UpdateReserve {
#subroutine to update a reserve
- my ($rank,$biblio,$borrower,$branch)=@_;
+ my ($rank,$biblio,$borrower,$branch,$itemnumber)=@_;
return if $rank eq "W";
return if $rank eq "n";
my $dbh = C4::Context->dbh;
- if ($rank eq "del") {
- my $sth=$dbh->prepare("UPDATE reserves SET cancellationdate=now()
- WHERE biblionumber = ?
- AND borrowernumber = ?
- AND cancellationdate is NULL
- AND (found <> 'F' or found is NULL)");
- $sth->execute($biblio, $borrower);
+ if ( $rank eq "del" ) {
+ if ( C4::Context->preference('itemlevelreserves') ) {
+ my $sth = $dbh->prepare(
+ "UPDATE reserves SET cancellationdate=now() WHERE itemnumber=? AND borrowernumber=? AND cancellationdate is NULL AND (found <> 'F' or found is NULL)"
+ );
+ $sth->execute( $itemnumber, $borrower );
+ $sth->finish();
+ }
+ else {
+ my $sth = $dbh->prepare(
+ "UPDATE reserves SET cancellationdate=now() WHERE biblionumber = ? AND borrowernumber = ? AND cancellationdate is NULL AND (found <> 'F' or found is NULL)"
+ );
+ $sth->execute( $biblio, $borrower );
$sth->finish;
- } else {
- my $sth=$dbh->prepare("UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = NULL, found = NULL
- WHERE biblionumber = ?
- AND borrowernumber = ?
- AND cancellationdate is NULL
- AND (found <> 'F' or found is NULL)");
- $sth->execute($rank, $branch, $biblio, $borrower);
+ }
+ }
+ else {
+ if ( C4::Context->preference('itemlevelreserves') ) {
+ my $sth = $dbh->prepare(
+ "UPDATE reserves SET priority = ? ,branchcode = ? WHERE biblionumber = ? AND borrowernumber = ? AND itemnumber= ? AND cancellationdate is NULL AND (found <> 'F' or found is NULL)"
+ );
+ $sth->execute( $rank, $branch, $biblio, $borrower, $itemnumber );
+ $sth->finish;
+ }
+ else {
+ my $sth = $dbh->prepare(
+ "UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = NULL, found = NULL WHERE biblionumber = ? AND borrowernumber = ? AND cancellationdate is NULL AND (found <> 'F' or found is NULL)"
+ );
+ $sth->execute( $rank, $branch, $biblio, $borrower );
$sth->finish;
}
+ }
}
# XXX - POD
More information about the Koha-cvs
mailing list