[Koha-patches] [PATCH 1/1] [PATCH] Bug 5860: Order cancelling improvement : delete attached items & biblio if avalaible

Christophe Croullebois christophe.croullebois at biblibre.com
Tue May 24 17:14:19 CEST 2011


- all items attached to the order are deleted
- if there is no more items, and if the biblio is not in other orders then the biblio is proposed to deletion
Now whe have 2 links : delete order and delete order and biblio, the second one appears only if the deletion is possible.
---
 C4/Acquisition.pm                                  |    2 +
 C4/Biblio.pm                                       |   25 +++++++++++++++++++-
 acqui/addorder.pl                                  |    4 +++
 acqui/basket.pl                                    |   10 +++++--
 .../intranet-tmpl/prog/en/modules/acqui/basket.tt  |   12 ++++++++-
 5 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm
index e431bd2..2e5f4bc 100644
--- a/C4/Acquisition.pm
+++ b/C4/Acquisition.pm
@@ -1223,6 +1223,8 @@ sub DelOrder {
     my $sth = $dbh->prepare($query);
     $sth->execute( $bibnum, $ordernumber );
     $sth->finish;
+    my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
+    C4::Items::DelItem( $dbh, $bibnum, $_ ) for @itemnumbers;
 }
 
 =head2 FUNCTIONS ABOUT PARCELS
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index c9590c2..5b918e1 100755
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -89,8 +89,8 @@ BEGIN {
       &GetMarcFromKohaField
       &GetFrameworkCode
       &TransformKohaToMarc
-
       &CountItemsIssued
+      &CountBiblioInOrders
     );
 
     # To modify something
@@ -3630,6 +3630,29 @@ sub get_biblio_authorised_values {
     return $authorised_values;
 }
 
+=head2 CountBiblioInOrders
+
+=over 4
+$count = &CountBiblioInOrders( $biblionumber);
+
+=back
+
+This function return count of biblios in orders with $biblionumber 
+
+=cut
+
+sub CountBiblioInOrders {
+ my ($biblionumber) = @_;
+    my $dbh            = C4::Context->dbh;
+    my $query          = "SELECT count(*)
+          FROM  aqorders 
+          WHERE biblionumber=? AND (datecancellationprinted IS NULL OR datecancellationprinted='0000-00-00')";
+    my $sth = $dbh->prepare($query);
+    $sth->execute($biblionumber);
+    my $count = $sth->fetchrow;
+    return ($count);
+}
+
 1;
 
 __END__
diff --git a/acqui/addorder.pl b/acqui/addorder.pl
index 44623ec..b8d0e21 100755
--- a/acqui/addorder.pl
+++ b/acqui/addorder.pl
@@ -190,6 +190,7 @@ my $user          = $input->remote_user;
 # 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
 my $bibitemnum;
 if ( $orderinfo->{quantity} ne '0' ) {
     #TODO:check to see if biblio exists
@@ -270,6 +271,9 @@ 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) if (C4::Items::GetItemsCount($biblionumber) == 0 && CountBiblioInOrders($biblionumber) <= 1);
+    }
 }
 my $basketno=$$orderinfo{basketno};
 my $booksellerid=$$orderinfo{booksellerid};
diff --git a/acqui/basket.pl b/acqui/basket.pl
index 0261e86..99956cf 100755
--- a/acqui/basket.pl
+++ b/acqui/basket.pl
@@ -28,12 +28,12 @@ use C4::Output;
 use CGI;
 use C4::Acquisition;
 use C4::Budgets;
-
 use C4::Bookseller qw( GetBookSellerFromId);
 use C4::Dates qw/format_date/;
 use C4::Debug;
-
+use C4::Biblio;
 use C4::Members qw/GetMember/;  #needed for permissions checking for changing basketgroup of a basket
+use C4::Items;
 =head1 NAME
 
 basket.pl
@@ -253,7 +253,11 @@ if ( $op eq 'delete_confirm' ) {
 		# FIXME: what about the "actual cost" field?
         $qty_total += $qty;
         my %line = %{ $order };
-
+        my $biblionumber = $order->{'biblionumber'};
+        my $countbiblio = CountBiblioInOrders($biblionumber);
+        my $ordernumber = $order->{'ordernumber'};
+        # if the biblio is not in other orders and if there is no items elsewhere we can show the link "Delete order and Biblio" see bug 5680
+        $line{can_del_bib}    = 1 if $countbiblio <= 1 && GetItemsCount($biblionumber) == scalar GetItemnumbersFromOrder( $ordernumber );
         $line{order_received} = ( $qty == $order->{'quantityreceived'} );
         $line{basketno}       = $basketno;
         $line{budget_name}    = $budget->{budget_name};
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 d34e3d5..c1e574a 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
@@ -39,6 +39,13 @@
                     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 order with his biblio ?'));
+                if (is_confirmed) {
+                    window.location = "addorder.pl?ordernumber="+ordernumber+"&basketno=[% basketno %]&quantity=0&biblionumber="+biblionumber+"&delbiblio=1";
+                    }
+            }
 
 //]]>
 </script>
@@ -278,9 +285,12 @@
                                 <a href="neworderempty.pl?ordernumber=[% books_loo.ordernumber %]&amp;booksellerid=[% booksellerid %]&amp;basketno=[% basketno %]">Modify</a>
                             </td>
                             <td>
-                            <a href="javascript:confirm_delete_item([% books_loo.ordernumber %],[% books_loo.biblionumber %])" class="button">Delete</a>
+                            <a href="javascript:confirm_delete_item([% books_loo.ordernumber %],[% books_loo.biblionumber %])" class="button">Delete order</a><br>
+                            [% IF ( books_loo.can_del_bib ) %]
+                            <a href="javascript:confirm_delete_biblio([% books_loo.ordernumber %],[% books_loo.biblionumber %])" class="button">Delete order and Biblio</a>
                             </td>
                             [% END %]
+                            [% END %]
                         [% END %]
                     </tr>
                 [% END %]
-- 
1.7.0.4



More information about the Koha-patches mailing list