@@ -, +, @@ and item-type fields in 952 during staged import --> There is no message for the missing branches --> The importation failed --> There is a warning message showing the missing branches in a link --> The records are imported --> The items with wrong branches are ignored --- C4/ImportBatch.pm | 56 +++++++++++++++++++ .../en/modules/tools/manage-marc-import.tt | 9 +++ tools/manage-marc-import.pl | 10 +++- 3 files changed, 74 insertions(+), 1 deletion(-) --- a/C4/ImportBatch.pm +++ a/C4/ImportBatch.pm @@ -39,6 +39,7 @@ use Koha::SearchEngine; use Koha::SearchEngine::Indexer; use Koha::Plugins::Handler; use Koha::Logger; +use List::MoreUtils qw( uniq ); our (@ISA, @EXPORT_OK); BEGIN { @@ -69,6 +70,7 @@ BEGIN { GetImportBiblios GetImportRecordsRange GetItemNumbersFromImportBatch + GetImportItemsBranches GetImportBatchStatus SetImportBatchStatus @@ -812,6 +814,26 @@ sub _batchCommitItems { my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" ); $item_marc->field($itemtag)->delete_subfield( code => $itemsubfield ); + my ( $homebranchfield, $homebranchsubfield ) = GetMarcFromKohaField('items.homebranch'); + my $homebranch = $item_marc->subfield( $homebranchfield, $homebranchsubfield ); + my ( $holdingbranchfield, $holdingbranchsubfield ) = GetMarcFromKohaField('items.holdingbranch'); + my $holdingbranch = $item_marc->subfield( $holdingbranchfield, $holdingbranchsubfield ); + + my @branches = map { $_->branchcode } Koha::Libraries->search->as_list; + my %branches = map { $_ => 1 } @branches; + + my $missing_branchcode; + $missing_branchcode = $homebranch if ( !exists( $branches{$homebranch} ) ); + $missing_branchcode = $holdingbranch if ( !exists( $branches{$holdingbranch} ) ); + if ($missing_branchcode) { + $updsth->bind_param( 1, 'error' ); + $updsth->bind_param( 2, undef ); + $updsth->bind_param( 3, "Branch code $missing_branchcode missing" ); + $updsth->bind_param( 4, $row->{'import_items_id'} ); + $updsth->execute(); + $num_items_errored++; + next; + } my ( $item_biblionumber, $biblioitemnumber, $itemnumber ) = AddItemFromMarc( $item_marc, $biblionumber, { biblioitemnumber => $biblioitemnumber, skip_record_index => 1 } ); if( $itemnumber ) { $updsth->bind_param( 1, 'imported' ); @@ -1195,6 +1217,40 @@ sub GetImportRecordsRange { } +=head2 GetImportItemsBranches + + my @results = GetImportItemsBranches($batch_id); + +Returns an array of imported item branches. + +=cut + +sub GetImportItemsBranches { + my ( $batch_id ) = @_; + + my $dbh = C4::Context->dbh; + my $query = "SELECT import_items_id, import_items.marcxml, encoding + FROM import_items + JOIN import_records USING (import_record_id) + WHERE import_batch_id = ? + ORDER BY import_items_id"; + my @params; + push( @params, $batch_id ); + my $sth = $dbh->prepare_cached($query); + $sth->execute(@params); + my $results = $sth->fetchall_arrayref( {} ); + my @branch; + my ( $homebranchfield, $homebranchsubfield ) = GetMarcFromKohaField('items.homebranch'); + my ( $holdingbranchfield, $holdingbranchsubfield ) = GetMarcFromKohaField('items.holdingbranch'); + foreach my $row (@$results) { + my $item_marc = MARC::Record->new_from_xml( StripNonXmlChars( $row->{'marcxml'} ), 'UTF-8', $row->{'encoding'} ); + push @branch, $item_marc->subfield( $homebranchfield, $homebranchsubfield ); + push @branch, $item_marc->subfield( $holdingbranchfield, $holdingbranchsubfield );; + } + $sth->finish(); + return uniq @branch; +} + =head2 GetBestRecordMatch my $record_id = GetBestRecordMatch($import_record_id); --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/manage-marc-import.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/manage-marc-import.tt @@ -287,6 +287,15 @@
+ [% IF ( missing_branches ) %] +