Browse Source

Bug 7162: Factorize code for order cancellation

Some code was duplicated, all is now in cancelorder.pl
Added possibility to provide a reason for cancellation (or other things,
this is saved in aqorders.notes)

Signed-off-by: Corinne Bulac <corinne.hayet@bulac.fr>
Signed-off-by: Paola Rossi <paola.rossi@cineca.it>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
3.18.x
Julian Maurice 10 years ago
committed by Tomas Cohen Arazi
parent
commit
c4aaca9496
  1. 51
      C4/Acquisition.pm
  2. 15
      acqui/addorder.pl
  3. 79
      acqui/cancelorder.pl
  4. 18
      koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
  5. 62
      koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt
  6. 18
      koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt

51
C4/Acquisition.pm

@ -1785,25 +1785,58 @@ cancelled.
=cut
sub DelOrder {
my ( $bibnum, $ordernumber ) = @_;
my ( $bibnum, $ordernumber, $delete_biblio, $reason ) = @_;
my $error;
my $dbh = C4::Context->dbh;
my $query = "
UPDATE aqorders
SET datecancellationprinted=now(), orderstatus='cancelled'
WHERE biblionumber=? AND ordernumber=?
";
if($reason) {
$query .= "
, notes = IF(notes IS NULL,
CONCAT('Cancellation reason: ', ?),
CONCAT(notes, ' - Cancellation reason: ', ?)
)
";
}
$query .= "
WHERE biblionumber=? AND ordernumber=?
";
my $sth = $dbh->prepare($query);
$sth->execute( $bibnum, $ordernumber );
if($reason) {
$sth->execute($reason, $reason, $bibnum, $ordernumber);
} else {
$sth->execute( $bibnum, $ordernumber );
}
$sth->finish;
my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
foreach my $itemnumber (@itemnumbers){
C4::Items::DelItem(
{
biblionumber => $bibnum,
itemnumber => $itemnumber
my $delcheck = C4::Items::DelItemCheck( $dbh, $bibnum, $itemnumber );
if($delcheck != 1) {
$error->{'delitem'} = 1;
}
}
if($delete_biblio) {
# We get the number of remaining items
my $itemcount = C4::Items::GetItemsCount($bibnum);
# If there are no items left,
if ( $itemcount == 0 ) {
# We delete the record
my $delcheck = DelBiblio($bibnum);
if($delcheck) {
$error->{'delbiblio'} = 1;
}
);
}
}
return;
return $error;
}
=head3 TransferOrder

15
acqui/addorder.pl

@ -123,7 +123,7 @@ use strict;
use warnings;
use CGI;
use C4::Auth; # get_template_and_user
use C4::Acquisition; # DelOrder ModOrder
use C4::Acquisition; # ModOrder
use C4::Suggestions; # ModStatus
use C4::Biblio; # AddBiblio TransformKohaToMarc
use C4::Budgets;
@ -230,10 +230,8 @@ $orderinfo->{subscriptionid} ||= undef;
my $user = $input->remote_user;
# create, modify or delete biblio
# create if $quantity>=0 and $existing='no'
# modify if $quantity>=0 and $existing='yes'
# delete if $quantity has been set to 0 by the librarian
# delete biblio if delbiblio has been set to 1 by the librarian
# create if $quantity>0 and $existing='no'
# modify if $quantity>0 and $existing='yes'
if ( $orderinfo->{quantity} ne '0' ) {
#TODO:check to see if biblio exists
unless ( $$orderinfo{biblionumber} ) {
@ -321,13 +319,6 @@ if ( $orderinfo->{quantity} ne '0' ) {
}
else { # qty=0, delete the line
my $biblionumber = $input->param('biblionumber');
DelOrder( $biblionumber, $$orderinfo{ordernumber} );
if ($orderinfo->{delbiblio} == 1){
DelBiblio($biblionumber);
}
}
my $basketno=$$orderinfo{basketno};
my $booksellerid=$$orderinfo{booksellerid};
if (my $import_batch_id=$$orderinfo{import_batch_id}) {

79
acqui/cancelorder.pl

@ -0,0 +1,79 @@
#!/usr/bin/perl
# Copyright 2011 BibLibre SARL
# 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 2 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=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;
use C4::Output;
# FIXME: C4::Search is needed by C4::Items::GetAnalyticsCount, which is called
# by C4::Acquisition::DelOrder. But C4::Search is not imported by C4::Items.
# Once this problem is resolved, the following line can be removed.
# See Bug 7847.
use C4::Search;
use C4::Acquisition;
my $input = new CGI;
my ($template, $loggedinuser, $cookie, $flags) = get_template_and_user( {
template_name => 'acqui/cancelorder.tt',
query => $input,
type => 'intranet',
authnotrequired => 0,
flagsrequired => { 'acquisition' => 'order_manage' },
debug => 1,
} );
my $action = $input->param('action');
my $ordernumber = $input->param('ordernumber');
my $biblionumber = $input->param('biblionumber');
my $referrer = $input->param('referrer') || $input->referer;
my $del_biblio = $input->param('del_biblio') ? 1 : 0;
if($action and $action eq "confirmcancel") {
my $reason = $input->param('reason');
my $error = DelOrder($biblionumber, $ordernumber, $del_biblio, $reason);
if($error) {
$template->param(error_delitem => 1) if $error->{'delitem'};
$template->param(error_delbiblio => 1) if $error->{'delbiblio'};
} else {
$template->param(success_cancelorder => 1);
}
$template->param(confirmcancel => 1);
}
$template->param(
ordernumber => $ordernumber,
biblionumber => $biblionumber,
referrer => $referrer,
del_biblio => $del_biblio,
);
output_html_with_http_headers $input, $cookie, $template->output;

18
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt

@ -48,20 +48,6 @@
window.location = "[% script_name %]?op=delete_confirm&delbiblio="+delbiblio+"&basketno="+basketno+"&booksellerid="+booksellerid;
}
function confirm_delete_item(ordernumber, biblionumber) {
var is_confirmed = confirm(_("Are you sure you want to delete this order ?"));
if (is_confirmed) {
window.location = "addorder.pl?ordernumber="+ordernumber+"&basketno=[% basketno %]&quantity=0&biblionumber="+biblionumber;
}
}
function confirm_delete_biblio(ordernumber, biblionumber) {
var is_confirmed = confirm(_("Are you sure you want to delete this catalog record and order ?"));
if (is_confirmed) {
window.location = "addorder.pl?ordernumber="+ordernumber+"&basketno=[% basketno %]&quantity=0&biblionumber="+biblionumber+"&delbiblio=1";
}
}
function transfer_order_popup(ordernumber) {
var url = "/cgi-bin/koha/acqui/transferorder.pl?"
+ "ordernumber=" + ordernumber
@ -539,10 +525,10 @@
[% IF ( books_loo.left_holds_on_order ) %]
<span class="button" title="Can't delete order, ([% books_loo.holds_on_order %]) holds are linked with this order cancel holds first">Can't delete order</span><br>
[% ELSE %]
<a href="javascript:confirm_delete_item([% books_loo.ordernumber %],[% books_loo.biblionumber %])" class="button">Delete order</a><br>
<a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% books_loo.ordernumber %]&biblionumber=[% books_loo.biblionumber %]&referrer=/cgi-bin/koha/acqui/basket.pl%3Fbasketno=[% basketno %]" class="button">Delete order</a><br>
[% END %]
[% IF ( books_loo.can_del_bib ) %]
<a href="javascript:confirm_delete_biblio([% books_loo.ordernumber %],[% books_loo.biblionumber %])" class="button">Delete order and catalog record</a><br>
<a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% books_loo.ordernumber %]&biblionumber=[% books_loo.biblionumber %]&del_biblio=1&referrer=/cgi-bin/koha/acqui/basket.pl%3Fbasketno=[% basketno %]" class="button">Delete order and catalog record</a><br>
[% ELSE %]
<span class="button" title="Can't delete catalog record, see constraints below">Can't delete order and catalog record</span><br>
[% END %]

62
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt

@ -0,0 +1,62 @@
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha &rsaquo; Acquisition &rsaquo; Cancel order</title>
[% INCLUDE 'doc-head-close.inc' %]
</head>
<body>
[% INCLUDE 'header.inc' %]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/acqui/acqui-home.pl">Acquisition</a> &rsaquo; Cancel order</div>
<div id="doc3" class="yui-t2">
<div id="bd">
<div id="yui-main">
<div class="yui-b">
[% UNLESS ( confirmcancel ) %]
<form method="post" action="">
<div class="dialog alert">
<h3>Are you sure you want to cancel this order ([% ordernumber %])</h3>
<p>
[% IF (del_biblio) %]
Bibliographic record will be deleted too.
[% ELSE %]
Bibliographic record will not be deleted.
[% END %]
</p>
<p>
<textarea name="reason" placeholder="Reason of cancellation"></textarea>
</p>
<input type="hidden" name="action" value="confirmcancel" />
<input type="hidden" value="[% ordernumber %]" name="ordernumber" />
<input type="hidden" value="[% biblionumber %]" name="biblionumber" />
<input type="hidden" value="[% referrer %]" name="referrer" />
[% IF (del_biblio) %]
<input type="hidden" value="1" name="del_biblio" />
[% END %]
<input type="submit" class="approve" value="Yes, Cancel (Y)" accesskey="y" />
<input type="submit" class="deny" value="No, Don't Cancel (N)" accesskey="n" onclick="window.location='[% referrer %]';return false;" />
</div>
</form>
[% ELSE %]
[% IF ( success_cancelorder ) %]
<div class="dialog message">
The order has been successfully canceled
[% ELSE %]
<div class="dialog alert">
An error has occured.
[% IF ( error_delitem ) %]
<p>The order has been canceled, although one or more items could not have been deleted.</p>
[% END %]
[% IF ( error_delbiblio ) %]
<p>The order has been canceled, although the record has not been deleted.</p>
[% END %]
[% END %]
<p>Click <a href="[% referrer %]">here</a> to return to previous page</p>
</div>
[% END %]
</div>
</div>
</div>
[% INCLUDE 'intranet-bottom.inc' %]

18
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt

@ -118,20 +118,6 @@
</script>
<script type="text/javascript">
//<![CDATA[
function confirm_delete_item(ordernumber, basketno, biblionumber) {
var is_confirmed = confirm(_("Are you sure you want to delete this order ?"));
if (is_confirmed) {
window.location = "addorder.pl?ordernumber="+ordernumber+"&basketno="+basketno+"&quantity=0&biblionumber="+biblionumber+"&invoiceid=[% invoiceid %]";
}
}
function confirm_delete_biblio(ordernumber, basketno, biblionumber) {
var is_confirmed = confirm(_("Are you sure you want to delete this catalog record and order ?"));
if (is_confirmed) {
window.location = "addorder.pl?ordernumber="+ordernumber+"&basketno="+basketno+"&quantity=0&biblionumber="+biblionumber+"&delbiblio=1&invoiceid=[% invoiceid %]";
}
}
function transfer_order_popup(ordernumber) {
var url = "/cgi-bin/koha/acqui/transferorder.pl?"
+ "ordernumber=" + ordernumber
@ -301,10 +287,10 @@
[% IF ( loop_order.left_holds_on_order ) %]
<span class="button" title="Can't delete order, ([% loop_order.holds_on_order %]) holds are linked with this order cancel holds first">Can't delete order</span><br>
[% ELSE %]
<a href="javascript:confirm_delete_item([% loop_order.ordernumber %], [% loop_order.basketno %], [% loop_order.biblionumber %])" class="button">Delete order</a><br>
<a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% loop_order.ordernumber %]&biblionumber=[% loop_order.biblionumber %]&referrer=[% "/cgi-bin/koha/acqui/parcel.pl?booksellerid=$booksellerid&datereceived=$datereceived&invoice=$invoice" | uri %]">Delete order</a><br />
[% END %]
[% IF ( loop_order.can_del_bib ) %]
<a href="javascript:confirm_delete_biblio([% loop_order.ordernumber %], [% loop_order.basketno %], [% loop_order.biblionumber %])" class="button">Delete order and catalog record</a><br>
<a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% loop_order.ordernumber %]&biblionumber=[% loop_order.biblionumber %]&del_biblio=1&referrer=[% "/cgi-bin/koha/acqui/parcel.pl?booksellerid=$booksellerid&datereceived=$datereceived&invoice=$invoice" | uri %]">Delete order and catalog record</a><br />
[% ELSE %]
<span class="button" title="Can't delete catalog record, see constraints below">Can't delete order and catalog record</span><br>
[% END %]

Loading…
Cancel
Save