Inventory tool performance seems to be worst since 16.11.
I think it is because of authorized values computing changed by Bug 17249.
For each subfield of each item, we try to get the authorized value description with Koha::AuthorisedValues->search_by_marc_field.
But this method does not use cache like Koha::AuthorisedValues->get_description_by_koha_field.
I propose to use Koha::AuthorisedValues->get_description_by_koha_field and also to look for authorized value description only for item fields used in TT : location, notforloan, itemlost, damaged, withdrawn.
I have experimented inventory time on 100 items from 5s to 1s.
Test plan :
- Without patch
- Perform inventory with barcode file
- Check results and mesure execution time
- Apply patch
- Reperform inventory with same barcode file
- Check results is the same
- Compare execution time
- Run prove t/db_dependent/Items/GetItemsForInventory.t
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
# status, or are still checked out.
foreach my $item ( @scanned_items ) {
$item->{notforloancode} = $item->{notforloan}; # save for later use
# status, or are still checked out.
foreach my $item ( @scanned_items ) {
$item->{notforloancode} = $item->{notforloan}; # save for later use
-
- # Populating with authorised values
- foreach my $field ( keys %$item ) {
- # If the koha field is mapped to a marc field
- my $fc = $item->{'frameworkcode'} || '';
- my ($f, $sf) = GetMarcFromKohaField("items.$field", $fc);
- if ($f and $sf) {
- # We replace the code with it's description
- my $av = Koha::AuthorisedValues->search_by_marc_field({ frameworkcode => $fc, tagfield => $f, tagsubfield => $sf, });
- $av = $av->count ? $av->unblessed : [];
- my $authvals = { map { ( $_->{authorised_value} => $_->{lib} ) } @$av };
- if ($authvals and defined $item->{$field} and defined $authvals->{$item->{$field}}) {
- $item->{$field} = $authvals->{$item->{$field}};
- }
+ my $fc = $item->{'frameworkcode'} || '';
+
+ # Populating with authorised values description
+ foreach my $field (qw/ location notforloan itemlost damaged withdrawn /) {
+ my $av = Koha::AuthorisedValues->get_description_by_koha_field(
+ { frameworkcode => $fc, kohafield => "items.$field", authorised_value => $item->{$field} } );
+ if ( $av and defined $item->{$field} and defined $av->{lib} ) {
+ $item->{$field} = $av->{lib};
$csv->combine(@translated_keys);
print $csv->string, "\n";
$csv->combine(@translated_keys);
print $csv->string, "\n";
- my @keys = qw / title author barcode itemnumber homebranch location itemcallnumber notforloan lost damaged withdrawn stocknumber /;
+ my @keys = qw/ title author barcode itemnumber homebranch location itemcallnumber notforloan lost damaged withdrawn stocknumber /;
for my $item ( @$loop ) {
my @line;
for my $key (@keys) {
for my $item ( @$loop ) {
my @line;
for my $key (@keys) {