diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 03a55cca08..88a968a7b3 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -2204,11 +2204,11 @@ sub GetInvoices { } if($args{shipmentdatefrom}) { push @bind_strs, " aqinvoices.shipementdate >= ? "; - push @bind_args, $args{shipementdatefrom}; + push @bind_args, $args{shipmentdatefrom}; } if($args{shipmentdateto}) { push @bind_strs, " aqinvoices.shipementdate <= ? "; - push @bind_args, $args{shipementdateto}; + push @bind_args, $args{shipmentdateto}; } if($args{billingdatefrom}) { push @bind_strs, " aqinvoices.billingdate >= ? "; diff --git a/acqui/invoice.pl b/acqui/invoice.pl index 1dc97ee7e6..7c51ebcd39 100755 --- a/acqui/invoice.pl +++ b/acqui/invoice.pl @@ -79,6 +79,11 @@ elsif ( $op && $op eq 'mod' ) { shipmentcost => $shipmentcost, shipmentcost_budgetid => $shipment_budget_id ); + if ($input->param('reopen')) { + ReopenInvoice($invoiceid); + } elsif ($input->param('close')) { + CloseInvoice($invoiceid); + } $template->param( modified => 1 ); } 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 c03a4d7af1..7b28b875d1 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoice.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoice.tt @@ -42,46 +42,48 @@

Supplier: [% suppliername %]

- - -

- - -

- - - - +

+ + +

+ + + + +

+ + [% IF ( invoiceclosedate ) %] + Closed on [% invoiceclosedate | $KohaDates %]. +

+ + + [% ELSE %] + Open. +

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

Status: - [% IF ( invoiceclosedate ) %] - Closed on [% invoiceclosedate | $KohaDates %]. - - Reopen - - [% ELSE %] - Open. - - Close - - [% END %] -

Go to receipt page

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 554f0afff1..825fb33cf7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt @@ -192,7 +192,6 @@

Invoice number: [% invoice %] Received by: [% loggedinusername %] On: [% formatteddatereceived %]

-

Go to invoice details

[% UNLESS (invoiceclosedate) %] [% ELSE %]

- Invoice is close, so you can't receive orders. + Invoice is closed, so you can't receive orders anymore. Reopen it.

[% END %] @@ -405,12 +404,16 @@ -
- -
- -
-
+[% IF (invoiceclosedate) %] + View invoice +[% ELSE %] +
+ +
+ +
+
+[% END %] diff --git a/t/Acquisition/Invoice.t b/t/Acquisition/Invoice.t new file mode 100755 index 0000000000..a88796505f --- /dev/null +++ b/t/Acquisition/Invoice.t @@ -0,0 +1,131 @@ +#!/usr/bin/perl + +use Modern::Perl; +use C4::Context; + +use Test::More tests => 47; +use Test::MockModule; + +use_ok('C4::Acquisition'); + +my $module = new Test::MockModule('C4::Context'); +$module->mock('_new_dbh', sub { + my $dbh = DBI->connect( 'DBI:Mock:', '', '' ) + || die "Cannot create handle: $DBI::errstr\n"; + return $dbh; +}); + +my $dbh = C4::Context->dbh; + +# We need to add a resultset to avoid DBI fail +# ("DBI bind_columns: invalid number of arguments...") +my $rs = [ + [qw(one two three four)], + [1, 2, 3, 4] +]; + +$dbh->{mock_add_resultset} = $rs; +my @invoices = C4::Acquisition::GetInvoices( + supplierid => "supplierid", + invoicenumber => "invoicenumber", + suppliername => "suppliername", + shipmentdatefrom => "shipmentdatefrom", + shipmentdateto => "shipmentdateto", + billingdatefrom => "billingdatefrom", + billingdateto => "billingdateto", + isbneanissn => "isbneanissn", + title => "title", + author => "author", + publisher => "publisher", + publicationyear => "publicationyear", + branchcode => "branchcode", +); +my $history = $dbh->{mock_all_history}; + +is(scalar(@$history), 1); +my @bound_params = @{ $history->[0]->{bound_params} }; +is(scalar(@bound_params), 15); +is($bound_params[0], 'supplierid'); +is($bound_params[1], '%invoicenumber%'); +is($bound_params[2], '%suppliername%'); +is($bound_params[3], 'shipmentdatefrom'); +is($bound_params[4], 'shipmentdateto'); +is($bound_params[5], 'billingdatefrom'); +is($bound_params[6], 'billingdateto'); +is($bound_params[7], 'isbneanissn'); +is($bound_params[8], 'isbneanissn'); +is($bound_params[9], 'isbneanissn'); +is($bound_params[10], 'title'); +is($bound_params[11], 'author'); +is($bound_params[12], 'publisher'); +is($bound_params[13], 'publicationyear'); +is($bound_params[14], 'branchcode'); + +$dbh->{mock_clear_history} = 1; +$dbh->{mock_add_resultset} = $rs; +GetInvoice(42); +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 1); +@bound_params = @{ $history->[0]->{bound_params} }; +is(scalar(@bound_params), 1); +is($bound_params[0], 42); + +$dbh->{mock_clear_history} = 1; +$dbh->{mock_add_resultset} = $rs; +$dbh->{mock_add_resultset} = $rs; +my $invoice = GetInvoiceDetails(42); +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 2); +@bound_params = @{ $history->[0]->{bound_params} }; +is(scalar(@bound_params), 1); +is($bound_params[0], 42); +@bound_params = @{ $history->[1]->{bound_params} }; +is(scalar(@bound_params), 1); +is($bound_params[0], 42); +ok(exists $invoice->{orders}); + +$dbh->{mock_clear_history} = 1; +is(AddInvoice(booksellerid => 1), undef); # Fails because of a missing parameter +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 0); + +$dbh->{mock_clear_history} = 1; +AddInvoice(invoicenumber => 'invoice', booksellerid => 1, unknown => "unknown"); +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 1); +@bound_params = @{ $history->[0]->{bound_params} }; +is(scalar(@bound_params), 2); +ok(grep /^1$/, @bound_params); +ok(grep /^invoice$/, @bound_params); +ok(not grep /unknown/, @bound_params); + +$dbh->{mock_clear_history} = 1; +is(ModInvoice(booksellerid => 1), undef); # Fails because of a missing parameter +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 0); + +$dbh->{mock_clear_history} = 1; +ModInvoice(invoiceid => 3, invoicenumber => 'invoice', unknown => "unknown"); +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 1); +@bound_params = @{ $history->[0]->{bound_params} }; +is(scalar(@bound_params), 2); +ok(grep /^3$/, @bound_params); +ok(grep /^invoice$/, @bound_params); +ok(not grep /unknown/, @bound_params); + +$dbh->{mock_clear_history} = 1; +CloseInvoice(42); +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 1); +@bound_params = @{ $history->[0]->{bound_params} }; +is(scalar(@bound_params), 1); +is($bound_params[0], 42); + +$dbh->{mock_clear_history} = 1; +ReopenInvoice(42); +$history = $dbh->{mock_all_history}; +is(scalar(@$history), 1); +@bound_params = @{ $history->[0]->{bound_params} }; +is(scalar(@bound_params), 1); +is($bound_params[0], 42); diff --git a/t/db_dependent/Acquisition.t b/t/db_dependent/Acquisition.t index 2c39128b68..4ef80e5ed3 100755 --- a/t/db_dependent/Acquisition.t +++ b/t/db_dependent/Acquisition.t @@ -47,7 +47,7 @@ SKIP: { my @expectedfields = qw( basketno biblioitemnumber biblionumber - booksellerinvoicenumber + invoiceid budgetdate cancelledby closedate