From 30f12f7dece8e2f214781df824f45e83b5243c67 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 4 Mar 2020 12:08:29 -0500 Subject: [PATCH] Bug 24802: Updating holds can cause suspensions to apply to wrong hold On request.pl, the table of holds shows a suspend_until date picker for each hold, *unless* that hold is waiting or in transit. The script reserve/modrequest.pl assumes that there will be a suspend_until input for each hold, but that is incorrect. Assume there are 20 holds on a record, and 10 of them are waiting or in transit. If you were to then set the suspend until date on the 10 open holds, and use the "Update hold(s)" button, those 10 suspensions would apply to the 10 found holds and not the holds they should apply to! Test Plan: 1) Place two holds on a record 2) Check in an item and trap it for the first hold 3) Now that one hold is waiting and the other is not, attempt to set a suspension date using the "Update hold(s)" button 4) Note your hold does not get suspended! 5) Apply this patch 6) Restart all the things! 7) Repeat steps 1-3 8) Your hold should now be suspended! Signed-off-by: Andrew Fuerste-Henry Signed-off-by: Marcel de Rooy Signed-off-by: Martin Renvoize Signed-off-by: Joy Nelson --- koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc | 4 ++-- reserve/modrequest.pl | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc index a189c01dc3..4bdb96f6dd 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc @@ -201,10 +201,10 @@ [% IF Koha.Preference('AutoResumeSuspendedHolds') %] - + Clear date [% ELSE %] - + [% END %] [% END %] [% END # IF SuspendHoldsIntranet %] diff --git a/reserve/modrequest.pl b/reserve/modrequest.pl index e75fac73ac..40c390297f 100755 --- a/reserve/modrequest.pl +++ b/reserve/modrequest.pl @@ -49,7 +49,6 @@ my @reservedates = $query->multi_param('reservedate'); my @expirationdates = $query->multi_param('expirationdate'); my @branch = $query->multi_param('pickup'); my @itemnumber = $query->multi_param('itemnumber'); -my @suspend_until=$query->multi_param('suspend_until'); my $multi_hold = $query->param('multi_hold'); my $biblionumbers = $query->param('biblionumbers'); my $count=@rank; @@ -70,13 +69,14 @@ if ($CancelBorrowerNumber) { else { for (my $i=0;$i<$count;$i++){ undef $itemnumber[$i] if !$itemnumber[$i]; + my $suspend_until = $query->param( "suspend_until_" . $reserve_id[$i] ); my $params = { rank => $rank[$i], reserve_id => $reserve_id[$i], expirationdate => $expirationdates[$i] ? dt_from_string($expirationdates[$i]) : undef, branchcode => $branch[$i], itemnumber => $itemnumber[$i], - suspend_until => $suspend_until[$i] + defined $suspend_until ? ( suspend_until => $suspend_until ) : (), }; if (C4::Context->preference('AllowHoldDateInFuture')) { $params->{reservedate} = $reservedates[$i] ? dt_from_string($reservedates[$i]) : undef; -- 2.39.5