From 2b20f57b847ab4579f723535db841df4fc6e3941 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Sat, 5 Nov 2011 12:29:25 +0530 Subject: [PATCH] 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) --- C4/Acquisition.pm | 47 +++++++++++-- acqui/addorder.pl | 48 +------------ acqui/cancelorder.pl | 74 ++++++++++++++++++++ .../intranet-tmpl/prog/en/modules/acqui/basket.tt | 17 +---- .../prog/en/modules/acqui/cancelorder.tt | 62 ++++++++++++++++ .../intranet-tmpl/prog/en/modules/acqui/parcel.tt | 22 +----- 6 files changed, 185 insertions(+), 85 deletions(-) create mode 100755 acqui/cancelorder.pl create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 19c4f08..97b9b4e 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -1211,21 +1211,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() - 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( $dbh, $bibnum, $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 $error; } =head2 FUNCTIONS ABOUT PARCELS diff --git a/acqui/addorder.pl b/acqui/addorder.pl index d7f7e96..9b615f7 100755 --- a/acqui/addorder.pl +++ b/acqui/addorder.pl @@ -123,7 +123,7 @@ use strict; use warnings; use CGI; use C4::Auth; # get_template_and_user -use C4::Acquisition; # NewOrder DelOrder ModOrder +use C4::Acquisition; # NewOrder ModOrder use C4::Suggestions; # ModStatus use C4::Biblio; # AddBiblio TransformKohaToMarc use C4::Items; @@ -153,44 +153,9 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $orderinfo = $input->Vars; $orderinfo->{'list_price'} ||= 0; $orderinfo->{'uncertainprice'} ||= 0; -#my $ordernumber = $input->param('ordernumber'); -#my $basketno = $input->param('basketno'); -#my $booksellerid = $input->param('booksellerid'); -#my $existing = $input->param('existing'); # existing biblio, (not basket or order) -#my $title = $input->param('title'); -#my $author = $input->param('author'); -#my $publicationyear= $input->param('publicationyear'); -#my $isbn = $input->param('ISBN'); -#my $itemtype = $input->param('format'); -#my $quantity = $input->param('quantity'); # FIXME: else ERROR! -#my $branch = $input->param('branch'); -#my $series = $input->param('series'); -#my $notes = $input->param('notes'); -#my $budget_id = $input->param('budget_id'); -#my $sort1 = $input->param('sort1'); -#my $sort2 = $input->param('sort2'); -#my $rrp = $input->param('rrp'); -#my $ecost = $input->param('ecost'); -#my $gst = $input->param('GST'); -#my $budget = $input->param('budget'); -#my $cost = $input->param('cost'); -#my $sub = $input->param('sub'); -#my $purchaseorder = $input->param('purchaseordernumber'); -#my $invoice = $input->param('invoice'); -#my $publishercode = $input->param('publishercode'); -#my $suggestionid = $input->param('suggestionid'); -#my $biblionumber = $input->param('biblionumber'); -#my $uncertainprice = $input->param('uncertainprice'); -#my $import_batch_id= $input->param('import_batch_id'); -# -#my $createbibitem = $input->param('createbibitem'); -# -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' my $bibitemnum; if ( $orderinfo->{quantity} ne '0' ) { #TODO:check to see if biblio exists @@ -269,13 +234,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}) { diff --git a/acqui/cancelorder.pl b/acqui/cancelorder.pl new file mode 100755 index 0000000..c45b8da --- /dev/null +++ b/acqui/cancelorder.pl @@ -0,0 +1,74 @@ +#!/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; +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; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt index 90ddacb..e043137 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt @@ -33,19 +33,6 @@ window.location = "[% script_name %]?op=delete_confirm&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"; - } - } //]]> @@ -287,10 +274,10 @@ [% IF ( books_loo.left_holds_on_order ) %] Can't delete order
[% ELSE %] - Delete order
+ Delete order
[% END %] [% IF ( books_loo.can_del_bib ) %] - Delete order and catalog record
+ Delete order and catalog record
[% ELSE %] Can't delete order and catalog record
[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt new file mode 100644 index 0000000..4ac1f82 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/cancelorder.tt @@ -0,0 +1,62 @@ +[% INCLUDE 'doc-head-open.inc' %] +Koha › Acquisition › Cancel order +[% INCLUDE 'doc-head-close.inc' %] + + + +[% INCLUDE 'header.inc' %] + + + +
+ +
+
+
+ [% UNLESS ( confirmcancel ) %] +
+
+

Are you sure you want to cancel this order ([% ordernumber %])

+

+ [% IF (del_biblio) %] + Bibliographic record will be deleted too. + [% ELSE %] + Bibliographic record will not be deleted. + [% END %] +

+

+ +

+ + + + + [% IF (del_biblio) %] + + [% END %] + + +
+
+ [% ELSE %] + [% IF ( success_cancelorder ) %] +
+ The order has been successfully canceled + [% ELSE %] +
+ An error has occured. + [% IF ( error_delitem ) %] +

The order has been canceled, although one or more items could not have been deleted.

+ [% END %] + [% IF ( error_delbiblio ) %] +

The order has been canceled, although the record has not been deleted.

+ [% END %] + [% END %] +

Click here to return to previous page

+
+ [% END %] + +
+
+
+[% INCLUDE 'intranet-bottom.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt index 45eb591..94f9640 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt @@ -133,24 +133,6 @@ //]]> - @@ -254,10 +236,10 @@ [% IF ( loop_order.left_holds_on_order ) %] Can't delete order
[% ELSE %] - Delete order
+ Delete order
[% END %] [% IF ( loop_order.can_del_bib ) %] - Delete order and catalog record
+ Delete order and catalog record
[% ELSE %] Can't delete order and catalog record
[% END %] -- 1.7.7.1