Marcel de Rooy
2a3ba5f825
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>
94 lines
3.2 KiB
Perl
Executable file
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;
|