5 # find Koha's Perl modules
6 # test carefully before changing this
8 eval { require "$FindBin::Bin/kohalib.pl" };
18 # command-line parameters
22 my $batch_comment = "";
25 my $result = GetOptions(
26 'file:s' => \$input_file,
27 'match-bibs:s' => \$match_bibs,
28 'add-items' => \$add_items,
29 'comment:s' => \$batch_comment,
30 'h|help' => \$want_help
33 if (not $result or $input_file eq "" or $want_help) {
38 unless (-r $input_file) {
39 die "$0: cannot open input file $input_file: $!\n";
42 my $dbh = C4::Context->dbh;
43 $dbh->{AutoCommit} = 0;
44 process_batch($input_file, $match_bibs, $add_items, $batch_comment);
50 my ($input_file, $match_bibs, $add_items, $batch_comment) = @_;
52 open IN, "<$input_file" or die "$0: cannot open input file $input_file: $!\n";
53 my $marc_records = "";
55 my $num_input_records = 0;
59 next unless $_; # skip if record has only whitespace, as might occur
60 # if file includes newlines between each MARC record
61 $marc_records .= $_; # FIXME - this sort of string concatenation
62 # is probably rather inefficient
67 my $marc_flavor = C4::Context->preference('marcflavour');
69 print "... staging MARC records -- please wait\n";
70 my ($batch_id, $num_valid, $num_items, @import_errors) =
71 BatchStageMarcRecords($marc_flavor, $marc_records, $input_file, $batch_comment, '', $add_items, 0,
72 100, \&print_progress_and_commit);
73 print "... finished staging MARC records\n";
75 my $num_with_matches = 0;
77 my $matcher = C4::Matcher->fetch($match_bibs) ;
78 if (! defined $matcher) {
79 $matcher = C4::Matcher->new('biblio');
80 $matcher->add_simple_matchpoint('isbn', 1000, '020', 'a', -1, 0, '');
81 $matcher->add_simple_required_check('245', 'a', -1, 0, '',
82 '245', 'a', -1, 0, '');
84 SetImportBatchMatcher($batch_id, $match_bibs);
86 # set default record overlay behavior
87 SetImportBatchOverlayAction($batch_id, 'replace');
88 SetImportBatchNoMatchAction($batch_id, 'create_new');
89 SetImportBatchItemAction($batch_id, 'always_add');
90 print "... looking for matches with records already in database\n";
91 $num_with_matches = BatchFindBibDuplicates($batch_id, $matcher, 10, 100, \&print_progress_and_commit);
92 print "... finished looking for matches\n";
95 my $num_invalid_bibs = scalar(@import_errors);
98 MARC record staging report
99 ------------------------------------
100 Input file: $input_file
101 Number of input bibs: $num_input_records
102 Number of valid bibs: $num_valid
103 Number of invalid bibs: $num_invalid_bibs
106 print "Number of bibs matched: $num_with_matches\n";
108 print "Incoming bibs not matched against existing bibs (--match-bibs option not supplied)\n";
111 print "Number of items parsed: $num_items\n";
113 print "No items parsed (--add-items option not supplied)\n";
117 print "Batch number assigned: $batch_id\n";
121 sub print_progress_and_commit {
124 print "... processed $recs records\n";
129 $0: stage MARC bib file into reservoir.
131 Use this batch job to load a file of MARC bibliographic records
132 (with optional item information) into the Koha reservoir.
134 After running this program to stage your file, you can use
135 either the batch job commit_biblios_file.pl or the Koha
136 Tools option "Manage Staged MARC Records" to load the
137 records into the main Koha database.
140 --file <file_name> name of input MARC bib file
141 --match-bibs <match_id> use this option to match bibs
142 in the file with bibs already in
143 the database for future overlay.
144 If <match_id> isn't defined, a default
145 MARC21 ISBN & title match rule will be applied.
146 --add-items use this option to specify that
147 item data is embedded in the MARC
148 bibs and should be parsed.
149 --comment <comment> optional comment to describe
150 the record batch; if the comment
151 has spaces in it, surround the
152 comment with quotation marks.
153 --help or -h show this message.