Bug 31115: Add additional_attributes support to GetInvoices

This patch adds support for searching additional_fields when retrieving
invoices using C4::Acquisition::Invoices.

To test:
1. Apply this patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/Acquisition.t
=> SUCCESS: Tests pass!
3. Sign off :-D

Sponsored-by: The Research University in the Helmholtz Association (KIT)
Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu>

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Tomas Cohen Arazi 2022-10-19 17:13:13 -03:00
parent 45515c021a
commit 77eba5d1b2
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
2 changed files with 96 additions and 2 deletions

View File

@ -30,6 +30,7 @@ use C4::Templates qw(gettemplate);
use Koha::DateUtils qw( dt_from_string );
use Koha::Acquisition::Baskets;
use Koha::Acquisition::Booksellers;
use Koha::Acquisition::Invoices;
use Koha::Acquisition::Orders;
use Koha::Biblios;
use Koha::Exceptions;
@ -2412,6 +2413,18 @@ asc is the default if omitted
sub GetInvoices {
my %args = @_;
my $additional_fields = $args{additional_fields} // [];
my $matching_invoice_ids_for_additional_fields = [];
if ( @$additional_fields ) {
my @invoices = Koha::Acquisition::Invoices->filter_by_additional_fields($additional_fields)->as_list;
return () unless @invoices;
$matching_invoice_ids_for_additional_fields = [ map {
$_->id
} @invoices ];
}
my @columns = qw(invoicenumber booksellerid shipmentdate billingdate
closedate shipmentcost shipmentcost_budgetid);
@ -2504,6 +2517,18 @@ sub GetInvoices {
}
$query .= " WHERE " . join(" AND ", @bind_strs) if @bind_strs;
# Handle additional fields filtering
if ( @$additional_fields ) {
my $operator = ' WHERE';
if ( @bind_strs ) { # there's a WHERE already
$operator = ' AND';
}
$query .= "$operator aqinvoices.invoiceid IN ("
. join( ', ', @$matching_invoice_ids_for_additional_fields )
. ')';
}
$query .= " GROUP BY aqinvoices.invoiceid, aqinvoices.invoicenumber, aqinvoices.booksellerid, aqinvoices.shipmentdate, aqinvoices.billingdate, aqinvoices.closedate, aqinvoices.shipmentcost, aqinvoices.shipmentcost_budgetid, aqinvoices.message_id, aqbooksellers.name";
if($args{order_by}) {

View File

@ -19,7 +19,7 @@ use Modern::Perl;
use POSIX qw(strftime);
use Test::More tests => 70;
use Test::More tests => 71;
use t::lib::Mocks;
use Koha::Database;
use Koha::DateUtils qw(dt_from_string output_pref);
@ -28,7 +28,7 @@ use Koha::Acquisition::Basket;
use MARC::File::XML ( BinaryEncoding => 'utf8', RecordFormat => 'MARC21' );
BEGIN {
use_ok('C4::Acquisition', qw( NewBasket GetBasket AddInvoice GetInvoice ModReceiveOrder SearchOrders GetOrder GetHistory ModOrder get_rounding_sql get_rounded_price ReopenBasket ModBasket ModBasketHeader ModBasketUsers ));
use_ok('C4::Acquisition', qw( NewBasket GetBasket AddInvoice GetInvoice GetInvoices ModReceiveOrder SearchOrders GetOrder GetHistory ModOrder get_rounding_sql get_rounded_price ReopenBasket ModBasket ModBasketHeader ModBasketUsers ));
use_ok('C4::Biblio', qw( AddBiblio GetMarcSubfieldStructure ));
use_ok('C4::Budgets', qw( AddBudgetPeriod AddBudget GetBudget GetBudgetByOrderNumber GetBudgetsReport GetBudgets GetBudgetReport ));
use_ok('Koha::Acquisition::Orders');
@ -983,3 +983,72 @@ subtest 'Acquisition logging' => sub {
};
$schema->storage->txn_rollback();
subtest 'GetInvoices() tests with additional fields' => sub {
plan tests => 7;
$schema->storage->txn_begin;
my $builder = t::lib::TestBuilder->new;
my $invoice_1 = $builder->build_object(
{
class => 'Koha::Acquisition::Invoices',
value => {
invoicenumber => 'whataretheodds1'
}
}
);
my $invoice_2 = $builder->build_object(
{
class => 'Koha::Acquisition::Invoices',
value => {
invoicenumber => 'whataretheodds2'
}
}
);
my $invoices = [ GetInvoices( invoicenumber => 'whataretheodds' ) ];
is( scalar @{$invoices}, 2, 'Two invoices retrieved' );
is( $invoices->[0]->{invoiceid}, $invoice_1->id );
is( $invoices->[1]->{invoiceid}, $invoice_2->id );
my $additional_field_1 = $builder->build_object(
{ class => 'Koha::AdditionalFields',
value => {
tablename => 'aqinvoices',
authorised_value_category => "",
}
}
);
my $additional_field_2 = $builder->build_object(
{ class => 'Koha::AdditionalFields',
value => {
tablename => 'aqinvoices',
authorised_value_category => "",
}
}
);
$invoice_1->set_additional_fields([ { id => $additional_field_1->id, value => 'Ya-Hey' } ]);
$invoice_2->set_additional_fields([ { id => $additional_field_2->id, value => "Hey ho let's go" } ]);
$invoices = [ GetInvoices(
invoicenumber => 'whataretheodds',
additional_fields => [{ id => $additional_field_1->id, value => 'Ya-Hey' }]
)];
is( scalar @{$invoices}, 1, 'One invoice retrieved' );
is( $invoices->[0]->{invoiceid}, $invoice_1->id, 'Ya-Hey' );
$invoices = [ GetInvoices(
invoicenumber => 'whataretheodds',
additional_fields => [{ id => $additional_field_2->id, value => "Hey ho let's go" }]
)];
is( scalar @{$invoices}, 1, 'One invoice retrieved' );
is( $invoices->[0]->{invoiceid}, $invoice_2->id, "Hey ho let's go" );
$schema->storage->txn_rollback;
};