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 <roman.dolny@jezuici.pl>
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Emily Lamancusa 2024-08-06 16:12:51 -04:00 committed by Katrin Fischer
parent 1264ece1f9
commit e1517fc8c8
Signed by: kfischer
GPG key ID: 0EF6E2C03357A834

View file

@ -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;
}