Bug 21141: Handle non-existent itemnumbers in batch item modification/deletion

The itemnumber list passed from a file in the batch item
modification/deletion tools is not tested.
Like barcodes we should make sure they refer to a valid items in the DB.

Test plan:
- Create a file with barcodes, itemnumbers and random lines
- Use the batch item modification and deletion tools with this file
You should see a table with a list of invalid barcodes and itemnumbers.

Without this patch you got the following error:
Can't call method "title" on an undefined value at
/home/vagrant/kohaclone/tools/batchMod.pl line 580

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
Jonathan Druart 2018-08-06 15:26:49 -03:00 committed by Nick Clemens
parent 6e7fd12214
commit e8e29d3140
3 changed files with 83 additions and 39 deletions

View file

@ -28,26 +28,48 @@
[% UNLESS ( action ) %]
[% IF ( notfoundbarcodes ) %]
[% IF ( notfoundbarcodes.size ) %]
<div class="dialog alert">
[% IF ( itemresults ) %]<p>Warning, the following barcodes were not found:</p>[% ELSE %]<p>Warning: no barcodes were found</p>[% END %]
[% IF ( itemresults ) %]<p>Warning, the following barcodes were not found:</p>[% ELSE %]<p>Warning: no barcodes were found</p>[% END %]
</div>
<table style="margin:auto;">
<thead>
<tr>
<th>Barcode</th>
</tr>
</thead>
<tbody>
[% FOREACH notfoundbarcode IN notfoundbarcodes %]
<tr><td>[% notfoundbarcode.barcode |html %]</td></tr>
[% END %]
</tbody>
<thead>
<tr><th>Barcodes not found</th></tr>
</thead>
<tbody>
[% FOREACH notfoundbarcode IN notfoundbarcodes %]
<tr><td>[% notfoundbarcode |html %]</td></td>
[% END %]
</tbody>
</table>
[% UNLESS ( too_many_items ) %]
[% IF ( item_loop ) %]<h4>The following barcodes were found: </h4>[% END %]
[% IF ( item_loop ) %]
[% UNLESS ( too_many_items ) %]
<h4>The following barcodes were found: </h4>
[% END %]
[% END %]
[% END %]
[% END %] <!-- /notfoundbarcodes -->
[% IF ( notfounditemnumbers.size ) %]
<div class="dialog alert">
[% IF ( itemresults ) %]<p>Warning, the following itemnumbers were not found:</p>[% ELSE %]<p>Warning: no itemnumbers were found</p>[% END %]
</div>
<table style="margin:auto;">
<thead>
<tr><th>Itemnumbers not found</th></tr>
</thead>
<tbody>
[% FOREACH notfounditemnumber IN notfounditemnumbers %]
<tr><td>[% notfounditemnumber |html %]</td></td>
[% END %]
</tbody>
</table>
[% IF ( item_loop ) %]
[% UNLESS ( too_many_items ) %]
<h4>The following itemnumbers were found: </h4>
[% END %]
[% END %]
[% END %] <!-- /notfounditemnumbers -->
<form name="f" action="batchMod.pl" method="post">

View file

@ -90,24 +90,44 @@ $(document).ready(function(){
[% IF ( book_on_loan ) %]<div class="dialog alert"><strong>Cannot Delete</strong>: item is checked out.</div>[% END %]
[% IF ( book_reserved ) %]<div class="dialogalert"><strong>Cannot Delete</strong>: item has a waiting hold.</div>[% END %]
[% IF ( notfoundbarcodes ) %]
<div class="dialog alert"><p>Warning, the following barcodes were not found:</p></div>
<table style="margin:auto;">
<thead>
<tr><th>Barcodes not found</th></tr>
</thead>
<tbody>
[% FOREACH notfoundbarcode IN notfoundbarcodes %]
<tr><td>[% notfoundbarcode.barcode |html %]</td></td>
[% IF ( notfoundbarcodes.size ) %]
<div class="dialog alert"><p>Warning, the following barcodes were not found:</p></div>
<table style="margin:auto;">
<thead>
<tr><th>Barcodes not found</th></tr>
</thead>
<tbody>
[% FOREACH notfoundbarcode IN notfoundbarcodes %]
<tr><td>[% notfoundbarcode |html %]</td></td>
[% END %]
</tbody>
</table>
[% IF ( item_loop ) %]
[% UNLESS ( too_many_items ) %]
<h4>The following barcodes were found: </h4>
[% END %]
[% END %]
</tbody>
</table>
[% IF ( item_loop ) %]
[% UNLESS ( too_many_items ) %]
<h4>The following barcodes were found: </h4>
[% END %]
[% END %]
[% END %] <!-- /notfoundbarcodes -->
[% END %] <!-- /notfoundbarcodes -->
[% IF ( notfounditemnumbers.size ) %]
<div class="dialog alert"><p>Warning, the following itemnumbers were not found:</p></div>
<table style="margin:auto;">
<thead>
<tr><th>Itemnumbers not found</th></tr>
</thead>
<tbody>
[% FOREACH notfounditemnumber IN notfounditemnumbers %]
<tr><td>[% notfounditemnumber |html %]</td></td>
[% END %]
</tbody>
</table>
[% IF ( item_loop ) %]
[% UNLESS ( too_many_items ) %]
<h4>The following itemnumbers were found: </h4>
[% END %]
[% END %]
[% END %] <!-- /notfounditemnumbers -->
<form name="f" action="batchMod.pl" method="post">
<input type="hidden" name="op" value="[% op %]" />

View file

@ -233,7 +233,7 @@ if ($op eq "action") {
if ($op eq "show"){
my $filefh = $input->upload('uploadfile');
my $filecontent = $input->param('filecontent');
my @notfoundbarcodes;
my ( @notfoundbarcodes, @notfounditemnumbers);
my @contentlist;
if ($filefh){
@ -255,7 +255,9 @@ if ($op eq "show"){
}
}
elsif ( $filecontent eq 'itemid_file') {
@itemnumbers = @contentlist;
@itemnumbers = Koha::Items->search({ itemnumber => \@contentlist })->get_column('itemnumber');
my %exists = map {$_=>1} @itemnumbers;
@notfounditemnumbers = grep { !$exists{$_} } @contentlist;
}
} else {
if (defined $biblionumber){
@ -496,11 +498,11 @@ $authorised_values_sth->finish;
# what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
$template->param(item => \@loop_data);
if (@notfoundbarcodes) {
my @notfoundbarcodesloop = map{{barcode=>$_}}@notfoundbarcodes;
$template->param(notfoundbarcodes => \@notfoundbarcodesloop);
}
$template->param(
item => \@loop_data,
notfoundbarcodes => \@notfoundbarcodes,
notfounditemnumbers => \@notfounditemnumbers
);
$nextop="action"
} # -- End action="show"