use warnings;
use C4::Context;
-use C4::Koha;
-use C4::Biblio;
-use C4::Items;
-use C4::Charset;
+use C4::Koha qw( GetNormalizedISBN );
+use C4::Biblio qw(
+ AddBiblio
+ DelBiblio
+ GetMarcFromKohaField
+ GetXmlBiblio
+ ModBiblio
+ TransformMarcToKoha
+);
+use C4::Items qw( AddItemFromMarc ModItemFromMarc );
+use C4::Charset qw( MarcToUTF8Record SetUTF8Flag StripNonXmlChars );
use C4::AuthoritiesMarc;
-use C4::MarcModificationTemplates;
+use C4::MarcModificationTemplates qw( ModifyRecordWithTemplate );
use Koha::Items;
use Koha::Plugins::Handler;
use Koha::Logger;
-use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-
+our (@ISA, @EXPORT_OK);
BEGIN {
- require Exporter;
- @ISA = qw(Exporter);
- @EXPORT = qw(
- GetZ3950BatchId
- GetWebserviceBatchId
- GetImportRecordMarc
- GetImportRecordMarcXML
- AddImportBatch
- GetImportBatch
- AddAuthToBatch
- AddBiblioToBatch
- AddItemsToImportBiblio
- ModAuthorityInBatch
- ModBiblioInBatch
-
- BatchStageMarcRecords
- BatchFindDuplicates
- BatchCommitRecords
- BatchRevertRecords
- CleanBatch
- DeleteBatch
-
- GetAllImportBatches
- GetStagedWebserviceBatches
- GetImportBatchRangeDesc
- GetNumberOfNonZ3950ImportBatches
- GetImportBiblios
- GetImportRecordsRange
- GetItemNumbersFromImportBatch
-
- GetImportBatchStatus
- SetImportBatchStatus
- GetImportBatchOverlayAction
- SetImportBatchOverlayAction
- GetImportBatchNoMatchAction
- SetImportBatchNoMatchAction
- GetImportBatchItemAction
- SetImportBatchItemAction
- GetImportBatchMatcher
- SetImportBatchMatcher
- GetImportRecordOverlayStatus
- SetImportRecordOverlayStatus
- GetImportRecordStatus
- SetImportRecordStatus
- GetImportRecordMatches
- SetImportRecordMatches
- );
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT_OK = qw(
+ GetZ3950BatchId
+ GetWebserviceBatchId
+ GetImportRecordMarc
+ GetImportRecordMarcXML
+ GetRecordFromImportBiblio
+ AddImportBatch
+ GetImportBatch
+ AddAuthToBatch
+ AddBiblioToBatch
+ AddItemsToImportBiblio
+ ModAuthorityInBatch
+ ModBiblioInBatch
+
+ BatchStageMarcRecords
+ BatchFindDuplicates
+ BatchCommitRecords
+ BatchRevertRecords
+ CleanBatch
+ DeleteBatch
+
+ GetAllImportBatches
+ GetStagedWebserviceBatches
+ GetImportBatchRangeDesc
+ GetNumberOfNonZ3950ImportBatches
+ GetImportBiblios
+ GetImportRecordsRange
+ GetItemNumbersFromImportBatch
+
+ GetImportBatchStatus
+ SetImportBatchStatus
+ GetImportBatchOverlayAction
+ SetImportBatchOverlayAction
+ GetImportBatchNoMatchAction
+ SetImportBatchNoMatchAction
+ GetImportBatchItemAction
+ SetImportBatchItemAction
+ GetImportBatchMatcher
+ SetImportBatchMatcher
+ GetImportRecordOverlayStatus
+ SetImportRecordOverlayStatus
+ GetImportRecordStatus
+ SetImportRecordStatus
+ SetMatchedBiblionumber
+ GetImportRecordMatches
+ SetImportRecordMatches
+
+ RecordsFromMARCXMLFile
+ RecordsFromISO2709File
+ RecordsFromMarcPlugin
+ );
}
=head1 NAME
my ($batch_id) = @_;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare_cached("SELECT b.*, p.name as profile FROM import_batches b LEFT JOIN import_batches_profile p ON p.id = b.profile_id WHERE import_batch_id = ?");
+ my $sth = $dbh->prepare_cached("SELECT b.*, p.name as profile FROM import_batches b LEFT JOIN import_batch_profiles p ON p.id = b.profile_id WHERE import_batch_id = ?");
$sth->bind_param(1, $batch_id);
$sth->execute();
my $result = $sth->fetchrow_hashref;
my $num_items_errored = 0;
my $num_ignored = 0;
# commit (i.e., save, all records in the batch)
- SetImportBatchStatus('importing');
+ SetImportBatchStatus($batch_id, 'importing');
my $overlay_action = GetImportBatchOverlayAction($batch_id);
my $nomatch_action = GetImportBatchNoMatchAction($batch_id);
my $item_action = GetImportBatchItemAction($batch_id);
if ($record_type eq 'biblio') {
my $biblioitemnumber;
($recordid, $biblioitemnumber) = AddBiblio($marc_record, $framework);
- $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?";
+ $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"; # FIXME call SetMatchedBiblionumber instead
if ($item_result eq 'create_new' || $item_result eq 'replace') {
my ($bib_items_added, $bib_items_replaced, $bib_items_errored) = BatchCommitItems($rowref->{'import_record_id'}, $recordid, $item_result);
$num_items_added += $bib_items_added;
$oldxml = $old_marc->as_xml($marc_type);
ModBiblio($marc_record, $recordid, $oldbiblio->frameworkcode);
- $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?";
+ $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"; # FIXME call SetMatchedBiblionumber instead
if ($item_result eq 'create_new' || $item_result eq 'replace') {
my ($bib_items_added, $bib_items_replaced, $bib_items_errored) = BatchCommitItems($rowref->{'import_record_id'}, $recordid, $item_result);
$num_items_errored += $bib_items_errored;
# still need to record the matched biblionumber so that the
# items can be reverted
- my $sth2 = $dbh->prepare_cached("UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?");
+ my $sth2 = $dbh->prepare_cached("UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"); # FIXME call SetMatchedBiblionumber instead
$sth2->execute($recordid, $rowref->{'import_record_id'});
SetImportRecordOverlayStatus($rowref->{'import_record_id'}, 'match_applied');
}
$updsth->execute();
$num_items_errored++;
} else {
+ # Remove the itemnumber if it exists, we want to create a new item
+ my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
+ $item_marc->field($itemtag)->delete_subfield( code => $itemsubfield );
+
my ( $item_biblionumber, $biblioitemnumber, $itemnumber ) = AddItemFromMarc( $item_marc, $biblionumber );
if( $itemnumber ) {
$updsth->bind_param( 1, 'imported' );
my $num_ignored = 0;
my $num_items_deleted = 0;
# commit (i.e., save, all records in the batch)
- SetImportBatchStatus('reverting');
+ SetImportBatchStatus($batch_id, 'reverting');
my $overlay_action = GetImportBatchOverlayAction($batch_id);
my $nomatch_action = GetImportBatchNoMatchAction($batch_id);
my $dbh = C4::Context->dbh;
my $query;
if ($record_type eq 'biblio') {
# remove matched_biblionumber only if there is no 'imported' item left
- $query = "UPDATE import_biblios SET matched_biblionumber = NULL WHERE import_record_id = ?";
+ $query = "UPDATE import_biblios SET matched_biblionumber = NULL WHERE import_record_id = ?"; # FIXME Remove me
$query = "UPDATE import_biblios SET matched_biblionumber = NULL WHERE import_record_id = ? AND NOT EXISTS (SELECT * FROM import_items WHERE import_items.import_record_id=import_biblios.import_record_id and status='imported')";
} else {
$query = "UPDATE import_auths SET matched_authid = NULL WHERE import_record_id = ?";
my $dbh = C4::Context->dbh;
my $query = "SELECT b.*, p.name as profile FROM import_batches b
- LEFT JOIN import_batches_profile p
+ LEFT JOIN import_batch_profiles p
ON b.profile_id = p.id
WHERE b.batch_type IN ('batch', 'webservice')
ORDER BY b.import_batch_id DESC";
}
+=head2 SetMatchedBiblionumber
+
+ SetMatchedBiblionumber($import_record_id, $biblionumber);
+
+=cut
+
+sub SetMatchedBiblionumber {
+ my ($import_record_id, $biblionumber) = @_;
+
+ my $dbh = C4::Context->dbh;
+ $dbh->do(
+ q|UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?|,
+ undef, $biblionumber, $import_record_id
+ );
+}
+
=head2 GetImportBatchOverlayAction
my $overlay_action = GetImportBatchOverlayAction($batch_id);