Koha/misc/commit_file.pl
Andreas Jonsson 8605082a78 Bug 26402: Add --framework parameter to commit_file.pl
This patch adds the option to pass a frameworkcode to the commit_file.pl
script.

To test:
1. Stage a MARC file using stage_file.pl.  For instance using the devbox:

   cd ~/kohaclone
   sudo koha-shell -c 'perl misc/stage_file.pl --file t/db_dependent/www/data/marc21record.mrc' kohadev

2. Note the assigned batch number and commit the batch using --framework parameter to commit_file.pl.  For example using the devbox:

   sudo koha-shell -c 'perl misc/commit_file.pl --batch-number 1 --framework ACQ' kohadev

3. Verify that the framework code was correctly assigned:

   sudo koha-mysql kohadev -e 'SELECT frameworkcode FROM biblio ORDER BY timestamp DESC LIMIT 1;'
=> SUCCESS: It picked it

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

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

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2021-11-03 15:40:52 +01:00

157 lines
4.9 KiB
Perl
Executable file

#!/usr/bin/perl
use strict;
use warnings;
BEGIN {
# find Koha's Perl modules
# test carefully before changing this
use FindBin ();
eval { require "$FindBin::Bin/kohalib.pl" };
}
use Koha::Script;
use C4::Context;
use C4::ImportBatch qw( GetAllImportBatches GetImportBatch BatchCommitRecords BatchRevertRecords );
use Getopt::Long qw( GetOptions );
$| = 1;
# command-line parameters
my $batch_number = "";
my $list_batches = 0;
my $revert = 0;
my $want_help = 0;
my $framework = '';
my $result = GetOptions(
'batch-number:s' => \$batch_number,
'list-batches' => \$list_batches,
'framework:s' => \$framework,
'revert' => \$revert,
'h|help' => \$want_help
);
if ($want_help or (not $batch_number and not $list_batches)) {
print_usage();
exit 0;
}
if ($list_batches) {
list_batches();
exit 0;
}
# FIXME dummy user so that logging won't fail
# in future, probably should tie to a real user account
C4::Context->set_userenv(0, 'batch', 0, 'batch', 'batch', 'batch', 'batch');
my $dbh = C4::Context->dbh;
$dbh->{AutoCommit} = 0;
if ($batch_number =~ /^\d+$/ and $batch_number > 0) {
my $batch = GetImportBatch($batch_number);
die "$0: import batch $batch_number does not exist in database\n" unless defined $batch;
if ($revert) {
die "$0: import batch $batch_number status is '" . $batch->{'import_status'} . "', and therefore cannot be imported\n"
unless $batch->{'import_status'} eq "imported";
revert_batch($batch_number);
} else {
die "$0: import batch $batch_number status is '" . $batch->{'import_status'} . "', and therefore cannot be imported\n"
unless $batch->{'import_status'} eq "staged" or $batch->{'import_status'} eq "reverted";
process_batch($batch_number);
}
$dbh->commit();
} else {
die "$0: please specify a numeric batch ID\n";
}
exit 0;
sub list_batches {
my $results = GetAllImportBatches();
print sprintf("%5.5s %-25.25s %-25.25s %-10.10s\n", "#", "File name", "Batch comments", "Status");
print '-' x 5, ' ' , '-' x 25, ' ', '-' x 25, ' ', '-' x 10, "\n" ;
foreach my $batch (@{ $results}) {
if ($batch->{'import_status'} eq "staged" or $batch->{'import_status'} eq "reverted") {
print sprintf("%5.5s %-25.25s %-25.25s %-10.10s\n",
$batch->{'import_batch_id'},
$batch->{'file_name'},
$batch->{'comments'},
$batch->{'import_status'});
}
}
}
sub process_batch {
my ($import_batch_id) = @_;
print "... importing MARC records -- please wait\n";
my ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored) =
BatchCommitRecords($import_batch_id, $framework, 100, \&print_progress_and_commit);
print "... finished importing MARC records\n";
print <<_SUMMARY_;
MARC record import report
----------------------------------------
Batch number: $import_batch_id
Number of new records added: $num_added
Number of records replaced: $num_updated
Number of records ignored: $num_ignored
Number of items added: $num_items_added
Number of items replaced: $num_items_replaced
Number of items ignored: $num_items_errored
Note: an item is ignored if its barcode is a
duplicate of one already in the database.
_SUMMARY_
}
sub revert_batch {
my ($import_batch_id) = @_;
print "... reverting batch -- please wait\n";
my ($num_deleted, $num_errors, $num_reverted, $num_items_deleted, $num_ignored) =
BatchRevertRecords($import_batch_id, 100, \&print_progress_and_commit);
print "... finished reverting batch\n";
print <<_SUMMARY_;
MARC record import report
----------------------------------------
Batch number: $import_batch_id
Number of records deleted: $num_deleted
Number of errors: $num_errors
Number of records reverted: $num_reverted
Number of records ignored: $num_ignored
Number of items added: $num_items_deleted
_SUMMARY_
}
sub print_progress_and_commit {
my $recs = shift;
print "... processed $recs records\n";
$dbh->commit();
}
sub print_usage {
print <<_USAGE_;
$0: import a batch of staged MARC records into database.
Use this batch job to complete the import of a batch of
MARC records that was staged either by the batch job
stage_file.pl or by the Koha Tools option
"Stage MARC Records for Import".
Parameters:
--batch-number <#> number of the record batch
to import
--framework <code> add new records using this framework. If
omitted, the default framework is used.
--list-batches print a list of record batches
available to commit
--revert revert a batch instead of importing it
--help or -h show this message.
_USAGE_
}