Koha/acqui/cancelorder.pl
Marcel de Rooy 2a3ba5f825
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>
2022-09-12 16:14:47 -03:00

94 lines
3.2 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2014 BibLibre
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
=head1 NAME
cancelorder.pl
=head1 DESCRIPTION
Ask confirmation for cancelling an order line
and add possibility to indicate a reason for cancellation
(saved in aqorders.notes)
=cut
use Modern::Perl;
use CGI;
use C4::Auth qw( get_template_and_user );
use C4::Output qw( output_html_with_http_headers );
use C4::Log qw(logaction);
use Koha::Acquisition::Baskets;
my $input = CGI->new;
my ($template, $loggedinuser, $cookie, $flags) = get_template_and_user( {
template_name => 'acqui/cancelorder.tt',
query => $input,
type => 'intranet',
flagsrequired => { 'acquisition' => 'order_manage' },
} );
my $action = $input->param('action');
my $ordernumber = $input->param('ordernumber');
my $biblionumber = $input->param('biblionumber');
my $basketno = $input->param('basketno');
my $basket = Koha::Acquisition::Baskets->find({ basketno => $basketno }, { prefetch => 'booksellerid' });
my $referrer = $input->param('referrer') || $input->referer;
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);
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 )
if $messages[0]->message eq 'error_delitem';
$template->param( error_delbiblio => 1 )
if $messages[0]->message eq 'error_delbiblio';
} else {
# Log the cancellation of the order
if (C4::Context->preference("AcquisitionLog")) {
logaction('ACQUISITIONS', 'CANCEL_ORDER', $ordernumber);
}
$template->param(success_cancelorder => 1);
}
$template->param(confirmcancel => 1);
}
$template->param(
ordernumber => $ordernumber,
biblionumber => $biblionumber,
basket => $basket,
referrer => $referrer,
del_biblio => $delete_biblio,
);
output_html_with_http_headers $input, $cookie, $template->output;