Bug 17600: Standardize our EXPORT_OK
[srvgit] / C4 / ImportBatch.pm
index d9e617d..9a4978f 100644 (file)
@@ -21,66 +21,78 @@ use strict;
 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
@@ -265,7 +277,7 @@ sub GetImportBatch {
     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;
@@ -576,7 +588,7 @@ sub BatchCommitRecords {
     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);
@@ -631,7 +643,7 @@ sub BatchCommitRecords {
             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;
@@ -664,7 +676,7 @@ sub BatchCommitRecords {
                 $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);
@@ -697,7 +709,7 @@ sub BatchCommitRecords {
                 $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');
             }
@@ -773,6 +785,10 @@ sub BatchCommitItems {
             $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' );
@@ -809,7 +825,7 @@ sub BatchRevertRecords {
     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;
@@ -877,7 +893,7 @@ sub BatchRevertRecords {
         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 = ?";
@@ -1024,7 +1040,7 @@ sub GetImportBatchRangeDesc {
 
     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";
@@ -1215,6 +1231,22 @@ sub SetImportBatchStatus {
 
 }
 
+=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);