Bug 29658: Fix crash on cancelling cancelled order

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 <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Joonas Kylmälä <joonas.kylmala@iki.fi>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 2a3ba5f825)

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Marcel de Rooy 2021-12-08 13:44:38 +00:00 committed by Lucas Gass
parent 9651875981
commit 22e6fd7cd8
2 changed files with 16 additions and 2 deletions

View file

@ -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 )

View file

@ -62,6 +62,11 @@
[% ELSE %]
<div class="dialog alert">
An error has occurred.
[% IF error_order_already_cancelled %]
<p>The order has been cancelled already.</p>
[% ELSIF error_order_not_found %]
<p>The order could not be found.</p>
[% END %]
[% IF ( error_delitem ) %]
<p>The order has been cancelled, although one or more items could not have been deleted.</p>
[% END %]