Bug 31115: Add additional field filtering for invoice search

This patch adds support for filtering invoice searches on additional
fields. To test:

1. Generate additional fields for invoices
2. Have invoices with additional fields
3. Use invoice searching and play with filtering by additional fields.
=> SUCCESS: It works!
4. 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:
Tomás Cohen Arazi 2022-10-20 16:10:25 +02:00 committed by Tomas Cohen Arazi
parent 77eba5d1b2
commit c02a1ea2a0
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
2 changed files with 56 additions and 13 deletions

View File

@ -36,6 +36,7 @@ use C4::Acquisition qw( GetInvoices GetInvoice );
use C4::Budgets qw( GetBudget GetBudgets CanUserUseBudget );
use Koha::DateUtils qw( dt_from_string );
use Koha::Acquisition::Booksellers;
use Koha::AdditionalFields;
my $input = CGI->new;
my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user(
@ -62,25 +63,47 @@ my $branch = $input->param('branch');
my $message_id = $input->param('message_id');
my $op = $input->param('op');
my @additional_fields = Koha::AdditionalFields->search(
{ tablename => 'aqinvoices',
searchable => 1
}
)->as_list;
my @additional_field_filters;
for my $field (@additional_fields) {
my $value = $input->param( 'additional_field_' . $field->id );
if ( defined $value and $value ne '' ) {
push @additional_field_filters,
{ id => $field->id,
value => $value,
};
}
}
my $invoices = [];
if ( $op and $op eq 'do_search' ) {
@{$invoices} = GetInvoices(
invoicenumber => $invoicenumber,
supplierid => $supplierid,
shipmentdatefrom => $shipmentdatefrom,
shipmentdateto => $shipmentdateto,
billingdatefrom => $billingdatefrom,
billingdateto => $billingdateto,
isbneanissn => $isbneanissn,
title => $title,
author => $author,
publisher => $publisher,
publicationyear => $publicationyear,
branchcode => $branch,
message_id => $message_id,
invoicenumber => $invoicenumber,
supplierid => $supplierid,
shipmentdatefrom => $shipmentdatefrom,
shipmentdateto => $shipmentdateto,
billingdatefrom => $billingdatefrom,
billingdateto => $billingdateto,
isbneanissn => $isbneanissn,
title => $title,
author => $author,
publisher => $publisher,
publicationyear => $publicationyear,
branchcode => $branch,
message_id => $message_id,
additional_fields => \@additional_field_filters,
);
}
$template->param(
additional_field_filters => { map { $_->{id} => $_->{value} } @additional_field_filters },
additional_fields_for_invoice => \@additional_fields,
);
# Build suppliers list
my @suppliers = Koha::Acquisition::Booksellers->search( undef, { order_by => { -asc => 'name' } } )->as_list;
my $suppliers_loop = [];

View File

@ -1,5 +1,6 @@
[% USE raw %]
[% USE Asset %]
[% USE AuthorisedValues %]
[% USE KohaDates %]
[% USE Branches %]
[% SET footerjs = 1 %]
@ -385,6 +386,25 @@
[% PROCESS options_for_libraries libraries => Branches.all( selected => branch, unfiltered => 1 ) %]
</select>
</li>
[% FOR field IN additional_fields_for_invoice %]
<li>
<label for="additional_field_[% field.id | html %]ID"> [% field.name | html %]: </label>
[% IF field.authorised_value_category %]
<select id="additional_field_[% field.id | html %]" name="additional_field_[% field.id | html %]">
<option value="">All</option>
[% FOREACH av IN AuthorisedValues.GetAuthValueDropbox(field.authorised_value_category) %]
[% IF av.authorised_value == additional_field_filters.${field.id} %]
<option value="[% av.authorised_value | html %]" selected="selected">[% av.lib | html %]</option>
[% ELSE %]
<option value="[% av.authorised_value | html %]">[% av.lib | html %]</option>
[% END %]
[% END %]
</select>
[% ELSE %]
<input id="additional_field_[% field.id | html %]" type="text" value="[% additional_field_filters.${field.id} | html %]" name="additional_field_[% field.id | html %]" />
[% END %]
</li>
[% END %]
</ol>
<fieldset class="action">
<input type="submit" value="Search" />