[Patches] [PATCH] Bug 7162: Factorize code for order cancellation

koha-patchbot at kohaaloha.com koha-patchbot at kohaaloha.com
Mon Jan 2 21:30:03 NZDT 2012


From: Julian Maurice <julian.maurice at biblibre.com>
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  |    4 +-
 6 files changed, 185 insertions(+), 67 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 7127f24..df876cd 100644
--- a/C4/Acquisition.pm
+++ b/C4/Acquisition.pm
@@ -1208,21 +1208,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 121d20d..93b6423 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 7bf1843..081886c 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
@@ -25,19 +25,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";
-                    }
-            }
 
 //]]>
 </script>
@@ -298,10 +285,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 %]
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' %]
+<title>Koha › Acquisition › 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> › <a href="/cgi-bin/koha/acqui/acqui-home.pl">Acquisition</a> › 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' %]
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 eb5492e..af7b20f 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt
@@ -138,14 +138,14 @@
             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;
+                    window.location = "/cgi-bin/koha/acqui/cancelorder.pl?ordernumber="+ordernumber+"&biblionumber="+biblionumber+"&referrer=/cgi-bin/koha/acqui/parcel.pl%3Fsupplierid=[% supplierid %]%26datereceived=[% datereceived %]%26invoice=[% invoice %]";
                 }
             }
             
             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";
+                    window.location = "/cgi-bin/koha/acqui/cancelorder.pl?ordernumber="+ordernumber+"&biblionumber="+biblionumber+"&del_biblio=1&referrer=/cgi-bin/koha/acqui/parcel.pl%3Fsupplierid=[% supplierid %]%26datereceived=[% datereceived %]%26invoice=[% invoice %]";
                     }
             }
 
-- 
1.7.7.3




More information about the Patches mailing list