[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