Bug 18690: Use MARC modification templates with bulkmarcimport.pl

When importing large numbers of MARC records from a legacy LMS to Koha
using bulkmarcimport.pl, it did not make use of the MARC modification
templates in the system (which can be useful for coversion of 852
fields to 952 fields for item holdings for example). This patch allows
MARC modification templates to be used with bulkmarcimport.pl.

To test:
1) Apply patch.
2) Set up a MARC modification template (in Home > Tools > MARC
modification templates) to make some changes to imported MARC
records (for example copy a subfield).
3) Take a test set of MARC records that have fields matching the
template and import them using the bulkmarcimport.pl tool. For example
if these MARC records are in testrecords.mrc and the MARC modification
template is called testtemplate use something like:

   perl misc/migration_tools/bulkmarcimport.pl -commit 1000 \\
     -file testrecords.mrc -marcmodtemplate testtemplate

4) Check the imported records in Koha to see that the required
modifications have been applied when the MARC records are imported.
5) Sign off.

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Jon Knight 2017-05-30 18:12:15 +01:00 committed by Jonathan Druart
parent 774b9d5fd8
commit ff23e78f7b

View file

@ -1,8 +1,7 @@
#!/usr/bin/perl #!/usr/bin/perl
# Import an iso2709 file into Koha 3 # Import an iso2709 file into Koha 3
use strict; use Modern::Perl;
use warnings;
#use diagnostics; #use diagnostics;
BEGIN { BEGIN {
# find Koha's Perl modules # find Koha's Perl modules
@ -24,6 +23,8 @@ use C4::Koha;
use C4::Debug; use C4::Debug;
use C4::Charset; use C4::Charset;
use C4::Items; use C4::Items;
use C4::MarcModificationTemplates;
use YAML; use YAML;
use Unicode::Normalize; use Unicode::Normalize;
use Time::HiRes qw(gettimeofday); use Time::HiRes qw(gettimeofday);
@ -44,6 +45,8 @@ my $cleanisbn = 1;
my ($sourcetag,$sourcesubfield,$idmapfl, $dedup_barcode); my ($sourcetag,$sourcesubfield,$idmapfl, $dedup_barcode);
my $framework = ''; my $framework = '';
my $localcust; my $localcust;
my $marc_mod_template = '';
my $marc_mod_template_id = -1;
$|=1; $|=1;
@ -80,6 +83,7 @@ GetOptions(
'dedupbarcode' => \$dedup_barcode, 'dedupbarcode' => \$dedup_barcode,
'framework=s' => \$framework, 'framework=s' => \$framework,
'custom:s' => \$localcust, 'custom:s' => \$localcust,
'marcmodtemplate:s' => \$marc_mod_template,
); );
$biblios ||= !$authorities; $biblios ||= !$authorities;
$insert ||= !$update; $insert ||= !$update;
@ -115,6 +119,19 @@ if(defined $localcust) { #local customize module
$localcust=\&customize if $localcust; $localcust=\&customize if $localcust;
} }
if($marc_mod_template ne '') {
my @templates = GetModificationTemplates();
foreach my $this_template (@templates) {
if($this_template->{'name'} eq $marc_mod_template) {
$marc_mod_template_id = $this_template->{'template_id'};
last;
}
}
if($marc_mod_template_id < 0) {
die "Can't located MARC modification template '$marc_mod_template'\n";
}
}
my $dbh = C4::Context->dbh; my $dbh = C4::Context->dbh;
my $heading_fields=get_heading_fields(); my $heading_fields=get_heading_fields();
@ -264,6 +281,10 @@ RECORD: while ( ) {
} }
} }
SetUTF8Flag($record); SetUTF8Flag($record);
if($marc_mod_template_id > 0) {
print "Modifying MARC\n";
ModifyRecordWithTemplate( $marc_mod_template_id, $record );
}
&$localcust($record) if $localcust; &$localcust($record) if $localcust;
my $isbn; my $isbn;
# remove trailing - in isbn (only for biblios, of course) # remove trailing - in isbn (only for biblios, of course)
@ -805,6 +826,13 @@ If no filename is passed, LocalChanges.pm is assumed to be in the
migration_tools subdirectory. You may pass an absolute file name or a file name migration_tools subdirectory. You may pass an absolute file name or a file name
from the migration_tools directory. from the migration_tools directory.
=item B<-marcmodtemplate>=I<TEMPLATE>
This parameter allows you to specify the name of an existing MARC
modification template to apply as the MARC records are imported (these
templates are created in the "MARC modification templates" tool in Koha).
If not specified, no MARC modification templates are used (default).
=back =back
=cut =cut