Merge remote-tracking branch 'origin/new/bug_2629'
[srvgit] / misc / migration_tools / 22_to_30 / missing090field.pl
index 9e95f8a..bfa8576 100755 (executable)
@@ -3,6 +3,13 @@
 #  Written by TG on 01/10/2005
 #  Revised by Joshua Ferraro on 03/31/2006
 use strict;
+#use warnings; FIXME - Bug 2505
+BEGIN {
+    # find Koha's Perl modules
+    # test carefully before changing this
+    use FindBin;
+    eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
 
 # Koha modules used
 
@@ -14,13 +21,13 @@ use MARC::File::USMARC;
 $|=1;
 my $dbh = C4::Context->dbh;
 
-my $sth=$dbh->prepare("select m.biblionumber,b.biblioitemnumber from marc_biblio m left join biblioitems b on b.biblionumber=m.biblionumber");
-       $sth->execute();
+my $sth=$dbh->prepare("SELECT biblionumber, biblioitemnumber FROM biblioitems");
+$sth->execute();
 
 my $i=1;
 while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
  my $record = GetMarcBiblio($biblionumber);
-    print "."; 
+    print ".";
     print "\r$i" unless $i %100;
     MARCmodbiblionumber($biblionumber,$biblioitemnumber,$record);
 }
@@ -28,22 +35,46 @@ while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
 sub MARCmodbiblionumber{
     my ($biblionumber,$biblioitemnumber,$record)=@_;
     
-    my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField($dbh,"biblio.biblionumber","");
-    my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField($dbh,"biblio.biblioitemnumber","");
+    return unless $record;
+
+    my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField("biblio.biblionumber","");
+    my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField("biblio.biblioitemnumber","");
         
     my $update=0;
-        my @tags = $record->field($tagfield);
+    if (defined $record) {
+        my $tag = $record->field($tagfield);
+        #warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
     
-    if (!@tags){
-        my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
-            $record->append_fields($newrec);
-        $update=1;
+        # check that we have biblionumber at the right place, otherwise, update or create the field.
+        if ($tagfield <10) {
+            unless ($tag && $tag->data() == $biblionumber) {
+                if ($tag) {
+                    $tag->update($biblionumber);
+                } else {
+                    my $newrec = MARC::Field->new( $tagfield, $biblionumber);
+                    $record->insert_fields_ordered($newrec);
+                }
+                $update=1;
+            }
+        } else {
+            unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
+                if($tag) {
+                    $tag->update($tagfield => $biblionumber);
+                } else {
+                    my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
+                    $record->insert_fields_ordered($newrec);
+                }
+                $update=1;
+            }
+        }
+    } else {
+        warn "problem with :".$biblionumber." , record undefined";
     }
-    
-    
-    if ($update){      
-        &ModBiblioMarc($record,'',$biblionumber);
-        print "\n modified : $biblionumber \n";        
+
+
+    if ($update){
+        &ModBiblioMarc($record,$biblionumber,'');
+        print "\n modified : $biblionumber \n";
     }
     
 }