From a1ec37cd76783b31eff061d6ef2b57cbd0d0f20b Mon Sep 17 00:00:00 2001 From: Lisette Scheer Date: Tue, 12 Aug 2025 20:59:01 +0000 Subject: [PATCH] Bug 40620: Holds Queue will assign to the lowest item number if multiple branches have the same transport cost To Test: Before applying: 1. Turn on the UseTransportCostMatrix system preference 2. Create holds on a record with multiple items. (I used Lanark in KTD) 3. Set the item location to all be the same (I used MID) 4. Set the holds to pickup at Centerville, Fairfield, and Pleasant Valley 5. Set the transport cost matrix to Centerville\fairfield 1 Centerville\Midway 1 Fairfield\Centerville 1 Fairfield\Midway 1 Midway\Centerville 1 Midway\Fairfield 1 Midway\Pleasant Valley 4 6. Build the holds queue (either turn on realtime hold queue and then edit the bib to update or run the cron on the command line) 7. Run a report: select * from hold_fill_targets where biblionumber=9 order by borrowernumber; 8. Rebuild the hold queue 9. Run the report again, the results should be the same. 10. Apply the patch 11. Run the hold queue again 12. Observe the results should now be different. 13. Try a few more times and ensure the numbers are changing, create some more items at midway and try again to see more variety in numbers. Signed-off-by: David Flater Signed-off-by: Pedro Amorim --- C4/HoldsQueue.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm index c0ffd43ac2f..79373937dc5 100644 --- a/C4/HoldsQueue.pm +++ b/C4/HoldsQueue.pm @@ -442,8 +442,9 @@ sub _allocateWithTransportCostMatrix { my @allocated; - my @remaining_items = grep { !exists $allocated_items->{ $_->{itemnumber} } && $_->{holdallowed} ne 'not_allowed'; } - @$available_items; + my @remaining_items = + shuffle( grep { !exists $allocated_items->{ $_->{itemnumber} } && $_->{holdallowed} ne 'not_allowed'; } + @$available_items ); my @requests = grep { !defined $_->{itemnumber} && !defined $_->{allocated} } @$hold_requests; my @remaining = (); -- 2.39.5