From f72eb4861e84cac8a94d34b758908169751b9cc4 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 11 Nov 2019 11:09:45 +0100 Subject: [PATCH] Bug 23800: Does not order items by barcode in batch item modification They must be displayed in the same order they have been scanned (or they appear in the file) This is an alternative patch. Same behavior for barcodes or itemnumbers, as well as if a file has been used or items scanned. Code is duplicated, but refactoring is out of the scope. Signed-off-by: Andrew Fuerste-Henry Signed-off-by: Marcel de Rooy Signed-off-by: Martin Renvoize Signed-off-by: Joy Nelson --- tools/batchMod.pl | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/tools/batchMod.pl b/tools/batchMod.pl index ce7be79e76..6f67d63d40 100755 --- a/tools/batchMod.pl +++ b/tools/batchMod.pl @@ -262,19 +262,27 @@ if ($op eq "show"){ if ($filecontent eq 'barcode_file') { @contentlist = grep /\S/, ( map { split /[$split_chars]/ } @contentlist ); @contentlist = uniq @contentlist; - my $existing_items = Koha::Items->search({ barcode => \@contentlist }); - @itemnumbers = $existing_items->get_column('itemnumber'); - my %exists = map {lc($_)=>1} $existing_items->get_column('barcode'); + my @existing_items = @{ Koha::Items->search({ barcode => \@contentlist })->unblessed }; + @existing_items = map { + my $barcode = $_; + grep { $_->{barcode} eq $barcode ? $_ : () } @existing_items + } @contentlist; + @itemnumbers = map { $_->{itemnumber} } @existing_items; + my @barcodes = map { $_->{barcode} } @existing_items; # to avoid problems with case sensitivity - foreach my $barcode (@contentlist) { - $barcode = lc($barcode); - } + my %exists = map { lc($_) => 1 } @barcodes; + @contentlist = map { lc($_) } @contentlist; @notfoundbarcodes = grep { !$exists{$_} } @contentlist; } elsif ( $filecontent eq 'itemid_file') { @contentlist = uniq @contentlist; - @itemnumbers = Koha::Items->search({ itemnumber => \@contentlist })->get_column('itemnumber'); - my %exists = map {$_=>1} @itemnumbers; + my @existing_items = @{ Koha::Items->search({ itemnumber => \@contentlist })->unblessed }; + @existing_items = map { + my $barcode = $_; + grep { $_->{barcode} eq $barcode ? $_ : () } @existing_items + } @contentlist; + @itemnumbers = map { $_->{itemnumber} } @existing_items; + my %exists = map { $_ => 1 } @itemnumbers; @notfounditemnumbers = grep { !$exists{$_} } @contentlist; } } else { @@ -288,14 +296,16 @@ if ($op eq "show"){ my @barcodelist = grep /\S/, ( split /[$split_chars]/, $list ); @barcodelist = uniq @barcodelist; - my $existing_items = Koha::Items->search({ barcode => \@barcodelist }); - @itemnumbers = $existing_items->get_column('itemnumber'); - my @barcodes = $existing_items->get_column('barcode'); - my %exists = map {lc($_)=>1} @barcodes; + my @existing_items = @{ Koha::Items->search({ barcode => \@barcodelist })->unblessed }; + @existing_items = map { + my $barcode = $_; + grep { $_->{barcode} eq $barcode ? $_ : () } @existing_items + } @barcodelist; + @itemnumbers = map { $_->{itemnumber} } @existing_items; + my @barcodes = map { $_->{barcode} } @existing_items; # to avoid problems with case sensitivity - foreach my $barcode (@barcodelist) { - $barcode = lc($barcode); - } + my %exists = map { lc($_) => 1 } @barcodes; + @barcodelist = map { lc($_) } @barcodelist; @notfoundbarcodes = grep { !$exists{$_} } @barcodelist; } } -- 2.39.5