From f51748797640dd689414c458753eaa89dd47e2b9 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 --- C4/HoldsQueue.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm index c0ffd43ac2..79373937dc 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