-@ISA = qw(Exporter);
-@EXPORT = qw(&ImportBreeding &BreedingSearch);
-
-sub ImportBreeding {
- my ($marcrecords,$overwrite_biblio,$filename,$encoding,$z3950random) = @_;
-## use marc:batch send them in one by one
-# my @marcarray = split /\x1D/, $marcrecords;
- my $dbh = C4::Context->dbh;
-my @kohafields;
-my @values;
-my @relations;
-my $sort;
-my @and_or;
-my @results;
-my $count;
- my $searchbreeding = $dbh->prepare("select id from marc_breeding where isbn=? and title=?");
-my $findbreedingid = $dbh->prepare("select max(id) from marc_breeding");
-
- my $insertsql = $dbh->prepare("insert into marc_breeding (file,isbn,title,author,marc,encoding,z3950random,classification,subclass) values(?,?,?,?,?,?,?,?,?)");
- my $replacesql = $dbh->prepare("update marc_breeding set file=?,isbn=?,title=?,author=?,marc=?,encoding=?,z3950random=?,classification=?,subclass=? where id=?");
- $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 = MARC::File::USMARC::decode($marcrecords);
- my $marcxml=$marcrecord->as_xml_record($marcrecord);
- $marcxml=Encode::encode('utf8',$marcxml);
- my @warnings = $marcrecord->warnings();
- if (scalar($marcrecord->fields()) == 0) {
- $notmarcrecord++;
- } else {
- my $xmlhash=XML_xml2hash_onerecord($marcxml);
- my $oldbiblio = XMLmarc2koha_onerecord($dbh,$xmlhash,'biblios');
- # 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} =~ s/ |-|\.//g,
- $oldbiblio->{isbn} = substr($oldbiblio->{isbn},0,10);
- $oldbiblio->{issn} =~ s/ |-|\.//g,
- $oldbiblio->{issn} = substr($oldbiblio->{issn},0,10);
- # search if biblio exists
- my $biblioitemnumber;
- my $facets;
- if ( !$z3950random){
- if ($oldbiblio->{isbn}) {
- push @kohafields,"isbn";
- push @values,$oldbiblio->{isbn};
- push @relations,"";
- push @and_or,"";
-
- ($count,$facets,@results)=ZEBRAsearch_kohafields(\@kohafields,\@values,\@relations);
- } else {
- push @kohafields,"issn";
- push @values,$oldbiblio->{issn};
- push @relations,"";
- push @and_or,"";
- $sort="";
- ($count,$facets,@results)=ZEBRAsearch_kohafields(\@kohafields,\@values,\@relations);
- }
- }
- if ($count>0 && !$z3950random) {
- $alreadyindb++;
- } else {
- # 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 {
- my $recoded=MARC::Record->new_from_xml($marcxml,"UTF-8");
- $recoded->encoding('UTF-8');
-
- if ($breedingid && $overwrite_biblio eq 1) {
- $replacesql ->execute($filename,substr($oldbiblio->{isbn}.$oldbiblio->{issn},0,10),$oldbiblio->{title},$oldbiblio->{author},$recoded->as_usmarc,$encoding,$z3950random,$oldbiblio->{classification},$oldbiblio->{subclass},$breedingid);
- } else {
- $insertsql ->execute($filename,substr($oldbiblio->{isbn}.$oldbiblio->{issn},0,10),$oldbiblio->{title},$oldbiblio->{author},$recoded->as_usmarc,$encoding,$z3950random,$oldbiblio->{classification},$oldbiblio->{subclass});
- $findbreedingid->execute;
- $breedingid=$findbreedingid->fetchrow;
- }
- $imported++;
- }
- }
- }
- #}
- return ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported,$breedingid);
+sub ImportBreeding {
+ my ($marcrecords,$overwrite_biblio,$filename,$encoding,$z3950random,$batch_type) = @_;
+ my @marcarray = split /\x1D/, $marcrecords;
+
+ my $dbh = C4::Context->dbh;
+
+ my $batch_id = 0;
+ if ($batch_type eq 'z3950') {
+ $batch_id = GetZ3950BatchId($filename);
+ } else {
+ # create a new one
+ $batch_id = AddImportBatch('create_new', 'staging', 'batch', $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);
+
+# 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);