From 8624b45fc2427deec910cdaaafb7f3dc254e97b3 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 | 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 d40571d3bd..1aae2253a7 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.20.1