From e1517fc8c8d7c70a5d20004dc7c8c260c1183828 Mon Sep 17 00:00:00 2001 From: Emily Lamancusa Date: Tue, 6 Aug 2024 16:12:51 -0400 Subject: [PATCH] Bug 37587: Fix priority of multiple item-level holds The rank parameter is passed per biblio record, not per item. When placing multiple item-level holds on one bib record, only $rank[0] is defined. To test: 1. System preference and circulation rule setup i. Set the system preference DisplayMultiItemHolds to Enable ii. Edit the default circulation rule to allow 5 holds per record 2. Find or create a bib with 4 or more items 3. Place several bib-level holds 4. Place 4 or more item-level holds at once on that same record i. Search for a patron to place the holds for (not one of the patrons you used in step 3) ii. Select "Hold a specific item" iii. Check the checkboxes for 4 or more items iv. Click Place hold --> Note that one of the new item-level holds is at the end of the list as it should be, but the rest are out of order 5. Cancel the item-level holds from step 4 6. Apply patch and restart_all 7. Repeat step 4 --> All the new item-level holds are now at the end of the list Signed-off-by: Roman Dolny Signed-off-by: Paul Derscheid Signed-off-by: Katrin Fischer --- reserve/placerequest.pl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl index 85c0d3f1eb..72b604565d 100755 --- a/reserve/placerequest.pl +++ b/reserve/placerequest.pl @@ -73,6 +73,9 @@ if ( $op eq 'cud-placerequest' && $patron ) { my $can_override = C4::Context->preference('AllowHoldPolicyOverride'); if ( @checkitems ) { + + my $hold_priority = $rank[0]; + for ( my $i = 0 ; $i < scalar @checkitems ; $i++ ) { my $checkitem = $checkitems[$i]; if ( my $item_pickup_location = $input->param("item_pickup_$checkitem") ) { @@ -93,7 +96,7 @@ if ( $op eq 'cud-placerequest' && $patron ) { branchcode => $item_pickup_location, borrowernumber => $patron->borrowernumber, biblionumber => $biblionumber, - priority => $rank[$i], + priority => $hold_priority, reservation_date => $startdate, expiration_date => $expirationdate, notes => $notes, @@ -105,6 +108,8 @@ if ( $op eq 'cud-placerequest' && $patron ) { } ); + $hold_priority++; + } else { $failed_holds{$can_item_be_reserved} = 1; }