From d322e76606b8a70a935684c7cbd858eeb960a0f4 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Thu, 18 May 2023 11:09:18 +0000 Subject: [PATCH] Bug 33761: Alter query to remove items with active transfers from available list Current code removes all items without an active transfer, and any with completed transfers. This patch moves the conditionals for transfers into the join, then adds a new condition to remove items with active transfers. To test: 1 - Apply unit test patch only 2 - prove -v t/db_dependent/HoldsQueue.t 3 - It fails 4 - Apply second patch 5 - prove -v t/db_dependent/HoldsQueue.t 6 - Success! Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi (cherry picked from commit d95312328dc83aa98728ac77ef55104ea820adfd) Signed-off-by: Matt Blenkinsop --- C4/HoldsQueue.pm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm index 8255fdbd13..f2a400c651 100644 --- a/C4/HoldsQueue.pm +++ b/C4/HoldsQueue.pm @@ -326,13 +326,14 @@ sub GetItemsAvailableToFillHoldRequestsForBib { $items_query .= "JOIN biblioitems USING (biblioitemnumber) LEFT JOIN itemtypes USING (itemtype) "; } - $items_query .= " LEFT JOIN branchtransfers ON (items.itemnumber = branchtransfers.itemnumber)"; + $items_query .= " LEFT JOIN branchtransfers ON ( + items.itemnumber = branchtransfers.itemnumber + AND branchtransfers.datearrived IS NULL AND branchtransfers.datecancelled IS NULL + )"; $items_query .= " WHERE items.notforloan = 0 AND holdingbranch IS NOT NULL AND itemlost = 0 AND withdrawn = 0"; - $items_query .= " AND branchtransfers.datearrived IS NULL - AND branchtransfers.datecancelled IS NULL"; $items_query .= " AND damaged = 0" unless C4::Context->preference('AllowHoldsOnDamagedItems'); $items_query .= " AND items.onloan IS NULL AND (itemtypes.notforloan IS NULL OR itemtypes.notforloan = 0) @@ -343,7 +344,8 @@ sub GetItemsAvailableToFillHoldRequestsForBib { AND itemnumber IS NOT NULL AND (found IS NOT NULL OR priority = 0) ) - AND items.biblionumber = ?"; + AND items.biblionumber = ? + AND branchtransfers.itemnumber IS NULL"; my @params = ($biblionumber, $biblionumber); if ($branches_to_use && @$branches_to_use) { -- 2.39.5