@@ -, +, @@ during import 1 - Be using the sample data in koha testing docker 2 - Stage the sample file on this report 3 - Match on KohaBiblio(999$c) / Item processing: replace 4 - Note the biblio match is "The complete novels / Austen, Jane" 5 - View the staged marc, note the barcode 39999000004090 in an item 6 - Search for that barcode 7 - You find biblio "Five novels : complete and unabridged / Gustave Flaubert" 8 - Import the file 9 - Check the db: SELECT * FROM items WHERE biblionumber != biblioitemnumber; UPDATE items SET biblionumber = biblioitemnumber, itype='MU' WHERE biblionumber != biblioitemnumber; UPDATE items SET itype='MU', itemnumber=999 WHERE itemnumber=212; SELECT * FROM import_items WHERE barcode=39999000004090 --- C4/ImportBatch.pm | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) --- a/C4/ImportBatch.pm +++ a/C4/ImportBatch.pm @@ -750,13 +750,20 @@ sub _batchCommitItems { my $item = TransformMarcToKoha({ record => $item_marc, kohafields => ['items.barcode','items.itemnumber'] }); - my $duplicate_barcode = exists( $item->{'barcode'} ) && Koha::Items->find({ barcode => $item->{'barcode'} }); + my $item_match; + my $duplicate_barcode = exists( $item->{'barcode'} ); my $duplicate_itemnumber = exists( $item->{'itemnumber'} ); + # We assume that when replaicing tiems we do not want to move them - the onus is on the importer to + # ensure the correct items/records are being updated my $updsth = $dbh->prepare("UPDATE import_items SET status = ?, itemnumber = ?, import_error = ? WHERE import_items_id = ?"); - if ( $action eq "replace" && $duplicate_itemnumber ) { + if ( + $action eq "replace" && + $duplicate_itemnumber && + ( $item_match = Koha::Items->find( $item->{itemnumber} )) + ) { # Duplicate itemnumbers have precedence, that way we can update barcodes by overlaying - ModItemFromMarc( $item_marc, $biblionumber, $item->{itemnumber}, { skip_record_index => 1 } ); + ModItemFromMarc( $item_marc, $item_match->biblionumber, $item->{itemnumber}, { skip_record_index => 1 } ); $updsth->bind_param( 1, 'imported' ); $updsth->bind_param( 2, $item->{itemnumber} ); $updsth->bind_param( 3, undef ); @@ -764,9 +771,12 @@ sub _batchCommitItems { $updsth->execute(); $updsth->finish(); $num_items_replaced++; - } elsif ( $action eq "replace" && $duplicate_barcode ) { - my $itemnumber = $duplicate_barcode->itemnumber; - ModItemFromMarc( $item_marc, $biblionumber, $itemnumber, { skip_record_index => 1 } ); + } elsif ( + $action eq "replace" && + $duplicate_barcode && + ( $item_match = Koha::Items->find({ barcode => $item->{'barcode'} }) ) + ) { + ModItemFromMarc( $item_marc, $item_match->biblionumber, $item_match->itemnumber, { skip_record_index => 1 } ); $updsth->bind_param( 1, 'imported' ); $updsth->bind_param( 2, $item->{itemnumber} ); $updsth->bind_param( 3, undef ); --