From 2a3ba5f8253c6bafef17caf03645d70a90a96dea 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 --- 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.39.5