@@ -, +, @@ cancellation --- C4/Reserves.pm | 5 ++++- reserve/modrequest.pl | 12 +++++++++++- t/db_dependent/Holds.t | 11 ++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) --- a/C4/Reserves.pm +++ a/C4/Reserves.pm @@ -1040,7 +1040,7 @@ sub ModReserve { my $cancellation_reason = $params->{'cancellation_reason'}; my $date = $params->{expirationdate}; - return if $rank eq "n"; + return if defined $rank && $rank eq "n"; return unless ( $reserve_id || ( $borrowernumber && ( $biblionumber || $itemnumber ) ) ); @@ -1054,6 +1054,9 @@ sub ModReserve { $hold ||= Koha::Holds->find($reserve_id); + # FIXME Other calls may fail + Koha::Exceptions::ObjectNotFound->throw( 'No hold with id ' . $reserve_id ) unless $hold; + if ( $rank eq "del" ) { $hold->cancel({ cancellation_reason => $cancellation_reason }); } --- a/reserve/modrequest.pl +++ a/reserve/modrequest.pl @@ -25,6 +25,8 @@ use Modern::Perl; use CGI qw ( -utf8 ); use List::MoreUtils qw( uniq ); +use Try::Tiny; + use C4::Output; use C4::Reserves qw( ModReserve ModReserveCancelAll ); use C4::Auth qw( get_template_and_user ); @@ -83,7 +85,15 @@ else { $params->{reservedate} = $reservedates[$i] ? dt_from_string($reservedates[$i]) : undef; } - ModReserve($params); + try { + ModReserve($params); + } catch { + if ($_->isa('Koha::Exceptions::ObjectNotFound')){ + warn $_; + } else { + $_->rethrow; + } + } } } --- a/t/db_dependent/Holds.t +++ a/t/db_dependent/Holds.t @@ -7,7 +7,9 @@ use t::lib::TestBuilder; use C4::Context; -use Test::More tests => 72; +use Test::More tests => 73; +use Test::Exception; + use MARC::Record; use C4::Biblio; @@ -221,6 +223,13 @@ AlterPriority( 'bottom', $hold->reserve_id, undef, 2, 1, 6 ); $hold = Koha::Holds->find( $reserveid ); is( $hold->priority, '6', "Test AlterPriority(), move to bottom" ); + +$hold->delete; +throws_ok + { C4::Reserves::ModReserve({ reserve_id => $hold->reserve_id }) } + 'Koha::Exceptions::ObjectNotFound', + 'No hold with id ' . $hold->reserve_id; + # Regression test for bug 2394 # # If IndependentBranches is ON and canreservefromotherbranches is OFF, --