From 58d5f00142e5aab4b06bbf39b2c380be43cfbb34 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Wed, 8 Dec 2021 13:44:38 +0000 Subject: [PATCH] Bug 29658: Fix crash on cancelling cancelled order MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Found this crash in our 20.11 logs: Cannot insert order: Mandatory parameter biblionumber is missing at /usr/share/koha/acqui/cancelorder.pl line 60. at /usr/share/perl/5.28/Carp.pm line 289 Carp::croak('Cannot insert order: Mandatory parameter biblionumber is missing') called at /usr/share/koha/Koha/Acquisition/Order.pm line 79 Koha::Acquisition::Order::store('Koha::Acquisition::Order=HASH(0x55f3760e2860)') called at /usr/share/koha/Koha/Acquisition/Order.pm line 189 Koha::Acquisition::Order::cancel('Koha::Acquisition::Order=HASH(0x55f3760e2860)', 'HASH(0x55f375a17ec0)') called at /usr/share/koha/acqui/cancelorder.pl line 60 Not sure how to reproduce this one as it happened. But might be related to repeated clicking, backspacing etc. Test plan: Create a new basket and order. Open this same basket in two browser tabs. Cancel the order line (delete catalog record) in tab 1. Go to second tab, try again. Without this patch, it will crash. With this patch, an error message. Signed-off-by: Marcel de Rooy Signed-off-by: Joonas Kylmälä Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi (cherry picked from commit 2a3ba5f8253c6bafef17caf03645d70a90a96dea) Signed-off-by: Lucas Gass (cherry picked from commit 22e6fd7cd86087bd6a938955ed4d2df678090432) Signed-off-by: Arthur Suzuki --- acqui/cancelorder.pl | 13 +++++++++++-- .../prog/en/modules/acqui/cancelorder.tt | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/acqui/cancelorder.pl b/acqui/cancelorder.pl index 2d0d36741e..50165c5911 100755 --- a/acqui/cancelorder.pl +++ b/acqui/cancelorder.pl @@ -56,8 +56,17 @@ my $delete_biblio = $input->param('del_biblio') ? 1 : 0; if( $action and $action eq "confirmcancel" ) { my $reason = $input->param('reason'); my $order = Koha::Acquisition::Orders->find($ordernumber); - $order->cancel({ reason => $reason, delete_biblio => $delete_biblio }); - my @messages = @{ $order->object_messages }; + my @messages; + if( !$order ) { + push @messages, Koha::Object::Message->new({ message => 'error_order_not_found', type => 'error' }); + $template->param( error_order_not_found => 1 ); + } elsif( $order->datecancellationprinted ) { + push @messages, Koha::Object::Message->new({ message => 'error_order_already_cancelled', type => 'error' }); + $template->param( error_order_already_cancelled => 1 ); + } else { + $order->cancel({ reason => $reason, delete_biblio => $delete_biblio }); + @messages = @{ $order->object_messages }; + } if ( scalar @messages > 0 ) { $template->param( error_delitem => 1 ) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt index b8d6a35861..520e33bb1e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt @@ -62,6 +62,11 @@ [% ELSE %]
An error has occurred. + [% IF error_order_already_cancelled %] +

The order has been cancelled already.

+ [% ELSIF error_order_not_found %] +

The order could not be found.

+ [% END %] [% IF ( error_delitem ) %]

The order has been cancelled, although one or more items could not have been deleted.

[% END %] -- 2.39.5