SQL fix to properly ensure that if an item is on
the hold shelf, it will not be used for request
targeting, which applies only to items that are
not already on the hold shelf.

Prior to this fix, when checking out an item on the
hold shelf that fills patron A's hold request, it
was possible for that request to not be marked as
filled if another patron had an item-level request
on the item; the second patron's request was
incorrectly targeted by that item.
---
 misc/cronjobs/holds/build_holds_queue.pl |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/misc/cronjobs/holds/build_holds_queue.pl 
b/misc/cronjobs/holds/build_holds_queue.pl
index ae075b7..26a2dba 100755
--- a/misc/cronjobs/holds/build_holds_queue.pl
+++ b/misc/cronjobs/holds/build_holds_queue.pl
@@ -162,18 +162,22 @@ sub GetItemsAvailableToFillHoldRequestsForBib {
         $items_query .=   "JOIN biblioitems USING (biblioitemnumber)
                            LEFT JOIN itemtypes USING (itemtype) ";
     }
-    $items_query .=   "LEFT JOIN reserves USING (itemnumber)
-                       WHERE items.notforloan = 0
+    $items_query .=   "WHERE items.notforloan = 0
                        AND holdingbranch IS NOT NULL
                        AND itemlost = 0
                        AND wthdrawn = 0
                        AND items.onloan IS NULL
                        AND (itemtypes.notforloan IS NULL OR 
itemtypes.notforloan = 0)
-                       AND (priority IS NULL OR priority > 0)
-                       AND found IS NULL
+                       AND itemnumber NOT IN (
+                           SELECT itemnumber
+                           FROM reserves
+                           WHERE biblionumber = ?
+                           AND itemnumber IS NOT NULL
+                           AND (found IS NOT NULL OR priority = 0)
+                        )
                        AND biblionumber = ?";
     my $sth = $dbh->prepare($items_query);
-    $sth->execute($biblionumber);
+    $sth->execute($biblionumber, $biblionumber);
 
     my $items = $sth->fetchall_arrayref({});
     return [ grep { my @transfers = GetTransfers($_->{itemnumber}); 
$#transfers == -1; } @$items ]; 
-- 
1.5.5.GIT

_______________________________________________
Koha-patches mailing list
Koha-patches@lists.koha.org
http://lists.koha.org/mailman/listinfo/koha-patches

Reply via email to