Bug 12495 - Include streetnumber in hold alert address
[koha_fer] / C4 / Breeding.pm
index 876ea19..03f3ed5 100644 (file)
@@ -35,7 +35,7 @@ BEGIN {
     $VERSION = 3.07.00.049;
        require Exporter;
        @ISA = qw(Exporter);
-    @EXPORT = qw(&ImportBreeding &BreedingSearch &Z3950Search &Z3950SearchAuth);
+    @EXPORT = qw(&BreedingSearch &Z3950Search &Z3950SearchAuth);
 }
 
 =head1 NAME
@@ -45,114 +45,13 @@ C4::Breeding : module to add biblios to import_records via
 
 =head1 SYNOPSIS
 
-    use C4::Scan;
-    &ImportBreeding($marcrecords,$overwrite_biblio,$filename,$z3950random,$batch_type);
-
-    C<$marcrecord> => the MARC::Record
-    C<$overwrite_biblio> => if set to 1 a biblio with the same ISBN will be overwritted.
-                                if set to 0 a biblio with the same isbn will be ignored (the previous will be kept)
-                                if set to -1 the biblio will be added anyway (more than 1 biblio with the same ISBN 
-                                possible in the breeding
-    C<$encoding> => USMARC
-                        or UNIMARC. used for char_decoding.
-                        If not present, the parameter marcflavour is used instead
-    C<$z3950random> => the random value created during a z3950 search result.
+    Z3950Search($pars, $template);
+    ($count, @results) = &BreedingSearch($title,$isbn,$random);
 
 =head1 DESCRIPTION
 
-    ImportBreeding import MARC records in the reservoir (import_records/import_batches tables).
-    the records can be properly encoded or not, we try to reencode them in utf-8 if needed.
-    works perfectly with BNF server, that sends UNIMARC latin1 records. Should work with other servers too.
-
-=head2 ImportBreeding
-
-       ImportBreeding($marcrecords,$overwrite_biblio,$filename,$encoding,$z3950random,$batch_type);
-
-       TODO description
-
-=cut
-
-sub ImportBreeding {
-    my ($marcrecords,$overwrite_biblio,$filename,$encoding,$z3950random,$batch_type) = @_;
-    my @marcarray = split /\x1D/, $marcrecords;
-    
-    my $dbh = C4::Context->dbh;
-    
-    my $batch_id = GetZ3950BatchId($filename);
-    my $searchisbn = $dbh->prepare("select biblioitemnumber from biblioitems where isbn=?");
-    my $searchissn = $dbh->prepare("select biblioitemnumber from biblioitems where issn=?");
-    # FIXME -- not sure that this kind of checking is actually needed
-    my $searchbreeding = $dbh->prepare("select import_record_id from import_biblios where isbn=? and title=?");
-    
-#     $encoding = C4::Context->preference("marcflavour") unless $encoding;
-    # fields used for import results
-    my $imported=0;
-    my $alreadyindb = 0;
-    my $alreadyinfarm = 0;
-    my $notmarcrecord = 0;
-    my $breedingid;
-    for (my $i=0;$i<=$#marcarray;$i++) {
-        my ($marcrecord, $charset_result, $charset_errors);
-        ($marcrecord, $charset_result, $charset_errors) = 
-            MarcToUTF8Record($marcarray[$i]."\x1D", C4::Context->preference("marcflavour"), $encoding);
-        
-        # Normalize the record so it doesn't have separated diacritics
-        SetUTF8Flag($marcrecord);
-
-#         warn "$i : $marcarray[$i]";
-        # FIXME - currently this does nothing 
-        my @warnings = $marcrecord->warnings();
-        
-        if (scalar($marcrecord->fields()) == 0) {
-            $notmarcrecord++;
-        } else {
-            my $oldbiblio = TransformMarcToKoha($dbh,$marcrecord,'');
-            # if isbn found and biblio does not exist, add it. If isbn found and biblio exists, 
-            # overwrite or ignore depending on user choice
-            # drop every "special" char : spaces, - ...
-            $oldbiblio->{isbn} = C4::Koha::_isbn_cleanup($oldbiblio->{isbn}); # FIXME C4::Koha::_isbn_cleanup should be public
-            # search if biblio exists
-            my $biblioitemnumber;
-            if ($oldbiblio->{isbn}) {
-                $searchisbn->execute($oldbiblio->{isbn});
-                ($biblioitemnumber) = $searchisbn->fetchrow;
-            } else {
-                if ($oldbiblio->{issn}) {
-                    $searchissn->execute($oldbiblio->{issn});
-                       ($biblioitemnumber) = $searchissn->fetchrow;
-                }
-            }
-            if ($biblioitemnumber && $overwrite_biblio ne 2) {
-                $alreadyindb++;
-            } else {
-                # FIXME - in context of batch load,
-                # rejecting records because already present in the reservoir
-                # not correct in every case.
-                # search in breeding farm
-                if ($oldbiblio->{isbn}) {
-                    $searchbreeding->execute($oldbiblio->{isbn},$oldbiblio->{title});
-                    ($breedingid) = $searchbreeding->fetchrow;
-                } elsif ($oldbiblio->{issn}){
-                    $searchbreeding->execute($oldbiblio->{issn},$oldbiblio->{title});
-                    ($breedingid) = $searchbreeding->fetchrow;
-                }
-                if ($breedingid && $overwrite_biblio eq '0') {
-                    $alreadyinfarm++;
-                } else {
-                    if ($breedingid && $overwrite_biblio eq '1') {
-                        ModBiblioInBatch($breedingid, $marcrecord);
-                    } else {
-                        my $import_id = AddBiblioToBatch($batch_id, $imported, $marcrecord, $encoding, $z3950random);
-                        $breedingid = $import_id;
-                    }
-                    $imported++;
-                }
-            }
-        }
-    }
-    return ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported,$breedingid);
-}
-
+This module contains routines related to Koha's Z39.50 search into
+cataloguing reservoir features.
 
 =head2 BreedingSearch
 
@@ -175,6 +74,9 @@ sub BreedingSearch {
     my $sth;
     my @results;
 
+    # normalise ISBN like at import
+    $isbn = C4::Koha::GetNormalizedISBN($isbn);
+
     $query = "SELECT import_record_id, file_name, isbn, title, author
               FROM  import_biblios 
               JOIN import_records USING (import_record_id)
@@ -349,7 +251,7 @@ sub Z3950Search {
             my ($error)= $oConnection[$k]->error_x(); #ignores errmsg, addinfo, diagset
             if ($error) {
                 if ($error =~ m/^(10000|10007)$/ ) {
-                    push(@errconn, { 'server' => $serverinfo[$k]->{host} } );
+                    push(@errconn, { server => $serverinfo[$k]->{host}, error => $error } );
                 }
             }
             else {
@@ -405,7 +307,6 @@ sub _handle_one_result {
     my ($marcrecord) = MarcToUTF8Record($raw, C4::Context->preference('marcflavour'), $servhref->{encd}); #ignores charset return values
     SetUTF8Flag($marcrecord);
 
-    #call to ImportBreeding replaced by next two calls for optimization
     my $batch_id = GetZ3950BatchId($servhref->{name});
     my $breedingid = AddBiblioToBatch($batch_id, $seq, $marcrecord, 'UTF-8', 0, 0);
         #FIXME passing 0 for z3950random
@@ -457,7 +358,8 @@ sub _isbn_replace {
 
 ImportBreedingAuth($marcrecords,$overwrite_auth,$filename,$encoding,$z3950random,$batch_type);
 
-TODO description
+    ImportBreedingAuth imports MARC records in the reservoir (import_records table).
+    ImportBreedingAuth is based on the ImportBreeding subroutine.
 
 =cut
 
@@ -485,10 +387,6 @@ sub ImportBreedingAuth {
         # Normalize the record so it doesn't have separated diacritics
         SetUTF8Flag($marcrecord);
 
-#         warn "$i : $marcarray[$i]";
-        # FIXME - currently this does nothing
-        my @warnings = $marcrecord->warnings();
-
         if (scalar($marcrecord->fields()) == 0) {
             $notmarcrecord++;
         } else {
@@ -509,10 +407,6 @@ sub ImportBreedingAuth {
 
             if ($duplicateauthid && $overwrite_auth ne 2) {
                 #If the authority record exists and $overwrite_auth doesn't equal 2, then mark it as already in the DB
-                #FIXME: What does $overwrite_auth = 2 even mean?
-
-                #FIXME: Should we bother with $overwrite_auth values? Currently, the hard-coded $overwrite_auth value is 2, which means the database gets filled with import_records...
-                #^^ of course, we might not want to reject records if their control number/heading exist in the db or breeding/import pool...as we might be wanting to update existing authority records...
                 $alreadyindb++;
             } else {
                 if ($controlnumber && $heading) {
@@ -520,11 +414,9 @@ sub ImportBreedingAuth {
                     ($breedingid) = $searchbreeding->fetchrow;
                 }
                 if ($breedingid && $overwrite_auth eq '0') {
-                    #FIXME: What does $overwrite_auth = 0 even mean?
                     $alreadyinfarm++;
                 } else {
                     if ($breedingid && $overwrite_auth eq '1') {
-                        #FIXME: What does $overwrite_auth = 1 even mean?
                         ModAuthorityInBatch($breedingid, $marcrecord);
                     } else {
                         my $import_id = AddAuthToBatch($batch_id, $imported, $marcrecord, $encoding, $z3950random);