new file: fix-090-to-999.pl
authorMason James <mtj@kohaaloha.com>
Mon, 9 Jun 2014 23:49:41 +0000 (11:49 +1200)
committerMason James <mtj@kohaaloha.com>
Mon, 9 Jun 2014 23:49:41 +0000 (11:49 +1200)
fix-090-to-999.pl [new file with mode: 0755]

diff --git a/fix-090-to-999.pl b/fix-090-to-999.pl
new file mode 100755 (executable)
index 0000000..c168f15
--- /dev/null
@@ -0,0 +1,81 @@
+#!/usr/bin/perl
+# This script finds and fixes missing 090 fields in Koha for MARC21
+use strict;
+
+BEGIN {
+
+    # find Koha's Perl modules
+    # test carefully before changing this
+    use FindBin;
+    eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
+
+# Koha modules used
+
+use C4::Context;
+use C4::Biblio;
+use MARC::Record;
+use MARC::File::USMARC;
+
+#use Smart::Comments '####';
+
+$| = 1;
+my $dbh = C4::Context->dbh;
+
+my $sth = $dbh->prepare("select m.biblionumber,b.biblioitemnumber from biblio m left join biblioitems b on b.biblionumber=m.biblionumber");
+$sth->execute();
+
+my $i = 1;
+while ( my ( $biblionumber, $biblioitemnumber ) = $sth->fetchrow ) {
+    my $record = GetMarcBiblio($biblionumber);
+    print ".";
+    print "\r$i" unless $i % 100;
+    MARCmodbiblionumber( $biblionumber, $biblioitemnumber, $record );
+}
+
+sub MARCmodbiblionumber {
+    my ( $biblionumber, $biblioitemnumber, $record ) = @_;
+
+    my ( $tagfield, $biblionumtagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", "" );
+
+    #    my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField("biblio.biblioitemnumber","");
+    my ( $tagfield2,  $biblioitemtagsubfield ) = &GetMarcFromKohaField( "biblioitems.biblioitemnumber", "" );
+    my ( $tag_field3, $item_tag_subfield )     = &GetMarcFromKohaField( "items.itemnumber",             "" );
+
+#### 'rr'
+    warn "$tagfield,$biblionumtagsubfield\n";
+    warn "$tagfield2,$biblioitemtagsubfield\n";
+
+    my $update = 0;
+    my ($tag, $f090, $f999, $f999x);
+
+    next unless $record;
+
+
+
+    eval { $f090  = $record->field('090'); };
+    eval { $f999x   = $record->field('999'); };
+
+    my $f999 = MARC::Field->new(
+       999, '', '',
+       'c' =>   $biblionumber , 
+       'd' =>  $biblioitemnumber 
+    );
+
+#    $f999->add_subfields( 'c' => $f090->subfield('c'), 'd' => $f090->subfield('d') );
+#### $f090
+#### $f999
+
+#### $record
+     $record->delete_field($f999x)  if  $f999x;
+     $record->delete_field($f090)   if $f090;
+#### $record
+
+    $record->insert_fields_ordered($f999);
+#### $record
+    &ModBiblioMarc( $record, $biblionumber, '' );
+    print "\n modified : $biblionumber \n";
+
+}
+
+END;