From 6791229273848f8d6d655f124d06ba6d0f2e7655 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 Content-Type: text/plain; charset=utf-8 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 --- acqui/cancelorder.pl | 10 ++++++++-- .../intranet-tmpl/prog/en/modules/acqui/cancelorder.tt | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/acqui/cancelorder.pl b/acqui/cancelorder.pl index b0eb8edb07..fd5291222d 100755 --- a/acqui/cancelorder.pl +++ b/acqui/cancelorder.pl @@ -56,10 +56,16 @@ 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->messages }; + my @messages; + if( $order && !$order->datecancellationprinted ) { + $order->cancel({ reason => $reason, delete_biblio => $delete_biblio }); + @messages = @{ $order->messages }; + } else { # combining missing order and cancelled order + push @messages, Koha::Object::Message->new({ message => 'error_already_cancelled', type => 'error' }); + } if ( scalar @messages > 0 ) { + $template->param( error_already_cancelled => 1) if $messages[0]->message eq 'error_already_cancelled'; $template->param( error_delitem => 1 ) if $messages[0]->message eq 'error_delitem'; $template->param( error_delbiblio => 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..a008c3281d 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,9 @@ [% ELSE %]
An error has occurred. + [% IF error_already_cancelled %] +

The order has been cancelled already.

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

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

[% END %] -- 2.20.1