From c7e6a795d2db65fbd221c2599d8aae7638c6ad3b Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Tue, 16 Mar 2021 16:52:28 +1300 Subject: [PATCH] Bug 15516: (follow-up) Remove other holds in hold_group from holds_queue When one hold is fulfilled or set waiting Signed-off-by: Michal Denar --- C4/Reserves.pm | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index a92ba79d90..ef7c4fb122 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -1199,6 +1199,9 @@ sub ModReserveAffect { $hold->itemnumber($itemnumber); + my @reserve_ids; + push @reserve_ids, $hold->reserve_id; + if ($transferToDo) { $hold->set_transfer(); } elsif (C4::Context->preference('HoldsNeedProcessingSIP') @@ -1215,6 +1218,7 @@ sub ModReserveAffect { # if this hold was part of a group, cancel other holds in the group my @holds = Koha::Holds->search({ hold_group_id => $hold->hold_group_id }); foreach my $h ( @holds ) { + push @reserve_ids, $h->reserve_id; $h->cancel unless $h->reserve_id == $hold->reserve_id; } } @@ -1226,18 +1230,20 @@ sub ModReserveAffect { CartToShelf( $itemnumber ); } - my $std = $dbh->prepare(q{ - DELETE q, t - FROM tmp_holdsqueue q - INNER JOIN hold_fill_targets t - ON q.borrowernumber = t.borrowernumber - AND q.biblionumber = t.biblionumber - AND q.itemnumber = t.itemnumber - AND q.item_level_request = t.item_level_request - AND q.holdingbranch = t.source_branchcode - WHERE t.reserve_id = ? - }); - $std->execute($hold->reserve_id); + foreach my $id ( @reserve_ids ) { + my $std = $dbh->prepare(q{ + DELETE q, t + FROM tmp_holdsqueue q + INNER JOIN hold_fill_targets t + ON q.borrowernumber = t.borrowernumber + AND q.biblionumber = t.biblionumber + AND q.itemnumber = t.itemnumber + AND q.item_level_request = t.item_level_request + AND q.holdingbranch = t.source_branchcode + WHERE t.reserve_id = ? + }); + $std->execute($id); + } logaction( 'HOLDS', 'MODIFY', $hold->reserve_id, Dumper($hold->unblessed) ) if C4::Context->preference('HoldsLog'); -- 2.11.0