From dc4630b94103c2a2e1a9a7a3e1454d12938c155a Mon Sep 17 00:00:00 2001 From: Jared Camins-Esakov Date: Sun, 2 Jun 2013 07:50:43 -0400 Subject: [PATCH] [SIGNED-OFF] Bug 10390: Add ability to delete empty invoices There is currently no way to delete unused invoices (for example, invoices created by mistake), and there really should be, since errors and absent-mindedness can result in numerous empty invoices over the course of years. Signed-off-by: Srdjan --- C4/Acquisition.pm | 34 ++++++++++++++++++++++ acqui/invoice.pl | 8 +++++ .../intranet-tmpl/prog/en/modules/acqui/invoice.tt | 3 ++ .../prog/en/modules/acqui/invoices.tt | 3 ++ t/Acquisition/Invoice.t | 23 ++++++++++++++- 5 files changed, 70 insertions(+), 1 deletion(-) diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index b6fab5d..dd7069a 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -71,6 +71,7 @@ BEGIN { &ModInvoice &CloseInvoice &ReopenInvoice + &DelInvoice &GetItemnumbersFromOrder @@ -2607,6 +2608,39 @@ sub ReopenInvoice { $sth->execute($invoiceid); } +=head3 DelInvoice + + DelInvoice($invoiceid); + +Delete an invoice if there are no items attached to it. + +=cut + +sub DelInvoice { + my ($invoiceid) = @_; + + return unless $invoiceid; + + my $dbh = C4::Context->dbh; + my $query = qq{ + SELECT COUNT(*) + FROM aqorders + WHERE invoiceid = ? + }; + my $sth = $dbh->prepare($query); + $sth->execute($invoiceid); + my $res = $sth->fetchrow_arrayref; + if ( $res && $res->[0] == 0 ) { + $query = qq{ + DELETE FROM aqinvoices + WHERE invoiceid = ? + }; + my $sth = $dbh->prepare($query); + return ( $sth->execute($invoiceid) > 0 ); + } + return; +} + 1; __END__ diff --git a/acqui/invoice.pl b/acqui/invoice.pl index 1b6d97c..e38e02d 100755 --- a/acqui/invoice.pl +++ b/acqui/invoice.pl @@ -86,6 +86,14 @@ elsif ( $op && $op eq 'mod' ) { } $template->param( modified => 1 ); } +elsif ( $op && $op eq 'delete' ) { + DelInvoice($invoiceid); + my $referer = $input->param('referer') || 'invoices.pl'; + if ($referer) { + print $input->redirect($referer); + exit 0; + } +} my $details = GetInvoiceDetails($invoiceid); my $bookseller = GetBookSellerFromId( $details->{booksellerid} ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoice.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoice.tt index 96df8d1..1ce4cd8 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoice.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoice.tt @@ -84,6 +84,9 @@
+ [% UNLESS orders_loop.size %] + Delete + [% END %]

diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoices.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoices.tt index 52d2ecc..16c1b61 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoices.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoices.tt @@ -80,6 +80,9 @@ $(document).ready(function() { [% ELSE %] Close [% END %] + [% UNLESS invoice.receivedbiblios || invoice.receiveditems %] + / Delete + [% END %] [% END %] diff --git a/t/Acquisition/Invoice.t b/t/Acquisition/Invoice.t index a887965..0a37f44 100755 --- a/t/Acquisition/Invoice.t +++ b/t/Acquisition/Invoice.t @@ -3,7 +3,7 @@ use Modern::Perl; use C4::Context; -use Test::More tests => 47; +use Test::More tests => 49; use Test::MockModule; use_ok('C4::Acquisition'); @@ -129,3 +129,24 @@ is(scalar(@$history), 1); @bound_params = @{ $history->[0]->{bound_params} }; is(scalar(@bound_params), 1); is($bound_params[0], 42); +my $checkordersrs = [ + [qw(COUNT)], + [2] +]; + +$dbh->{mock_add_resultset} = $checkordersrs; +is(DelInvoice(42), undef, "Invoices with items don't get deleted"); + +$checkordersrs = [ + [qw(COUNT)], + [0] +]; + +my $deleters = [ + [qw(COUNT)], + [1] +]; + +$dbh->{mock_add_resultset} = $checkordersrs; +$dbh->{mock_add_resultset} = $deleters; +ok(DelInvoice(42), "Invoices with items do get deleted"); -- 1.8.1.2