3 # This file is part of Koha.
5 # Copyright (C) 2007 LibLime
6 # Parts Copyright BSZ 2011
7 # Parts Copyright C & P Bibliography Services 2012
9 # Koha is free software; you can redistribute it and/or modify it under the
10 # terms of the GNU General Public License as published by the Free Software
11 # Foundation; either version 2 of the License, or (at your option) any later
14 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License along
19 # with this program; if not, write to the Free Software Foundation, Inc.,
20 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 # find Koha's Perl modules
26 # test carefully before changing this
28 eval { require "$FindBin::Bin/kohalib.pl" };
38 # command-line parameters
39 my $record_type = "biblio";
45 my $batch_comment = "";
48 my $item_action = 'always_add';
50 my $result = GetOptions(
51 'encoding:s' => \$encoding,
52 'file:s' => \$input_file,
53 'match|match-bibs:s' => \$match,
54 'add-items' => \$add_items,
55 'item-action:s' => \$item_action,
56 'no-replace' => \$no_replace,
57 'no-create' => \$no_create,
58 'comment:s' => \$batch_comment,
59 'authorities' => \$authorities,
60 'h|help' => \$want_help
63 $record_type = 'auth' if ($authorities);
65 if ($encoding eq "") {
69 if (not $result or $input_file eq "" or $want_help) {
74 unless (-r $input_file) {
75 die "$0: cannot open input file $input_file: $!\n";
78 my $dbh = C4::Context->dbh;
79 $dbh->{AutoCommit} = 0;
80 process_batch($input_file, $record_type, $match, $add_items, $batch_comment);
86 my ($input_file, $record_type, $match, $add_items, $batch_comment) = @_;
88 open IN, "<$input_file" or die "$0: cannot open input file $input_file: $!\n";
89 my $marc_records = "";
91 my $num_input_records = 0;
95 next unless $_; # skip if record has only whitespace, as might occur
96 # if file includes newlines between each MARC record
97 $marc_records .= $_; # FIXME - this sort of string concatenation
98 # is probably rather inefficient
103 print "... staging MARC records -- please wait\n";
104 #FIXME: We should really allow the use of marc modification frameworks and to_marc plugins here if possible
105 my ($batch_id, $num_valid_records, $num_items, @import_errors) =
106 BatchStageMarcRecords($record_type, $encoding, $marc_records, $input_file, undef, undef, $batch_comment, '', $add_items, 0,
107 100, \&print_progress_and_commit);
108 print "... finished staging MARC records\n";
110 my $num_with_matches = 0;
112 my $matcher = C4::Matcher->fetch($match) ;
113 if (defined $matcher) {
114 SetImportBatchMatcher($batch_id, $match);
115 } elsif ($record_type eq 'biblio') {
116 $matcher = C4::Matcher->new($record_type);
117 $matcher->add_simple_matchpoint('isbn', 1000, '020', 'a', -1, 0, '');
118 $matcher->add_simple_required_check('245', 'a', -1, 0, '',
119 '245', 'a', -1, 0, '');
121 # set default record overlay behavior
122 SetImportBatchOverlayAction($batch_id, ($no_replace) ? 'ignore' : 'replace');
123 SetImportBatchNoMatchAction($batch_id, ($no_create) ? 'ignore' : 'create_new');
124 SetImportBatchItemAction($batch_id, $item_action);
125 print "... looking for matches with records already in database\n";
126 $num_with_matches = BatchFindDuplicates($batch_id, $matcher, 10, 100, \&print_progress_and_commit);
127 print "... finished looking for matches\n";
130 my $num_invalid_records = scalar(@import_errors);
133 MARC record staging report
134 ------------------------------------
135 Input file: $input_file
136 Record type: $record_type
137 Number of input records: $num_input_records
138 Number of valid records: $num_valid_records
139 Number of invalid records: $num_invalid_records
142 print "Number of records matched: $num_with_matches\n";
144 print "Incoming records not matched against existing records (--match option not supplied)\n";
146 if ($record_type eq 'biblio') {
148 print "Number of items parsed: $num_items\n";
150 print "No items parsed (--add-items option not supplied)\n";
155 print "Batch number assigned: $batch_id\n";
159 sub print_progress_and_commit {
162 print "... processed $recs records\n";
167 $0: stage MARC file into reservoir.
169 Use this batch job to load a file of MARC bibliographic
170 (with optional item information) or authority records into
173 After running this program to stage your file, you can use
174 either the batch job commit_file.pl or the Koha
175 Tools option "Manage Staged MARC Records" to load the
176 records into the main Koha database.
179 --file <file_name> name of input MARC bib file
180 --authorities stage authority records instead of bibs
181 --encoding <encoding> encoding of MARC records, default is utf8.
182 Other possible options are: MARC-8,
183 ISO_5426, ISO_6937, ISO_8859-1, EUC-KR
184 --match <match_id> use this option to match records
185 in the file with records already in
186 the database for future overlay.
187 If <match_id> isn't defined, a default
188 MARC21 ISBN & title match rule will be applied
190 --add-items use this option to specify that
191 item data is embedded in the MARC
192 bibs and should be parsed.
193 --item-action action to take if --add-items is specifed;
194 choices are 'always_add',
195 'add_only_for_matches', 'add_only_for_new',
196 'ignore', or 'replace'
197 --no-replace overlay action for record: default is to
198 replace extant with the imported record.
199 --no-create nomatch action for record: default is to
200 create new record with imported record.
201 --comment <comment> optional comment to describe
202 the record batch; if the comment
203 has spaces in it, surround the
204 comment with quotation marks.
205 --help or -h show this message.