add bom
authorMason James <mtj@kohaaloha.com>
Thu, 17 Sep 2015 02:02:46 +0000 (14:02 +1200)
committerMason James <mtj@kohaaloha.com>
Thu, 17 Sep 2015 02:02:46 +0000 (14:02 +1200)
Signed-off-by: Mason James <mtj@kohaaloha.com>
bom-1539/add-008-marc.pl [new file with mode: 0644]
bom-1539/fix-isbns.pl [new file with mode: 0644]
bom-1539/fix-issns.pl [new file with mode: 0644]

diff --git a/bom-1539/add-008-marc.pl b/bom-1539/add-008-marc.pl
new file mode 100644 (file)
index 0000000..fcaac1e
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/perl
+
+use strict;
+
+use C4::Context;
+use C4::Biblio;
+use C4::Items;
+
+use Data::Dumper;
+
+#use Smart::Comments;
+
+#use Business::ISSN qw( valid_issn_checksum  %ERROR_TEXT  );
+use Business::ISSN;
+
+#use DDP alias => 'zzz', colored => 0, caller_info => 1;
+
+my @fails;
+
+my $dbh = C4::Context->dbh();
+
+my $q1 = q| 
+SELECT biblionumber, issn   from biblioitems 
+ |;
+
+#where biblionumber = 757
+
+my $sth1 = $dbh->prepare($q1);
+$sth1->execute();
+
+my @bs;
+while ( my $rec = $sth1->fetchrow_hashref() ) {
+
+    my $marc = GetMarcBiblio( $rec->{biblionumber} );
+
+    # ----------------------
+    my $f260c = $marc->subfield( '260', "c" );
+
+    my $f260_org = $f260c;
+    $f260c =~ s/\D//g;
+
+    $f260c = substr $f260c, 0, 4;
+
+    my $yyyy = $f260c;
+
+    $yyyy = '||||' if length $yyyy != 4;
+
+    # ----------------------
+    my $bt = "      t$yyyy       |||||||||||||| ||   |d";
+    my $ct = "      t$yyyy       || ||||   ||   ||   |d";
+
+#    warn "$rec->{biblionumber}, $yyyy $f260_org";
+
+    #    push @bs, $rec->{biblionumber};
+
+    #    next unless  $rec->{issn1}  or  $rec->{issn1} !~ / |\|/ and
+    my $count = ( $rec->{issn} =~ tr/|// );
+
+    #    warn $rec->{issn};
+    #    warn $count;
+
+    my $f008;
+
+    my $leader;
+
+    #    if ( $count > 0 ) {
+    if ( $rec->{issn} ) {
+        $leader = $ct;
+    }
+    else {
+        $leader = $bt;
+    }
+
+    #    warn $leader;
+    $f008 = MARC::Field->new( '008', $leader );
+
+    my @notes = $marc->field('008');
+    $marc->delete_fields(@notes);
+
+    $marc->insert_fields_ordered($f008);
+
+    #            &ModBiblioMarc( $marc, $rec->{biblionumber}, '' );
+    &ModBiblio( $marc, $rec->{biblionumber}, '' );
+
+    warn $rec->{biblionumber};
+
+    #exit;
+
+}
+
diff --git a/bom-1539/fix-isbns.pl b/bom-1539/fix-isbns.pl
new file mode 100644 (file)
index 0000000..2cb5d28
--- /dev/null
@@ -0,0 +1,118 @@
+#!/usr/bin/perl
+
+use C4::Context;
+use C4::Biblio;
+use C4::Items;
+
+use Data::Dumper;
+
+#use Smart::Comments;
+
+use List::MoreUtils qw(uniq);
+use Business::ISBN qw( valid_isbn_checksum  %ERROR_TEXT  );
+
+#use DDP alias => 'zzz', colored => 0, caller_info => 1;
+
+use strict;
+
+my @fails;
+
+my $dbh = C4::Context->dbh();
+
+my $q1 = q| 
+SELECT biblionumber, isbn  , ExtractValue(marcxml, '//datafield[@tag="020"]/subfield[@code="a"]')    AS isbn1 from biblioitems 
+
+|;
+
+#where biblionumber = 8
+
+my $sth1 = $dbh->prepare($q1);
+$sth1->execute();
+
+my @bs;
+while ( my $rec = $sth1->fetchrow_hashref() ) {
+
+    #    push @bs, $rec->{biblionumber};
+
+    #    next unless  $rec->{isbn1}  or  $rec->{isbn1} !~ / |\|/ and
+    next unless ( $rec->{isbn} or $rec->{isbn1} );
+
+    # split
+    my @i1s = split / |\||\:/, $rec->{isbn};
+    my @i2s = split / |\||\:/, $rec->{isbn1};
+
+    my @newISBN;
+    foreach my $i ( @i1s, @i2s ) {
+
+        $i =~ s/\D//g;
+
+        #        $i  = 9781846636868;
+
+        if ( $i =~ /^\d/ and length $i >= 10 ) {
+            push @newISBN, $i;
+
+        }
+
+    }
+
+    @newISBN = uniq @newISBN;
+
+    my @f020s;
+
+    foreach my $i (@newISBN) {
+
+        my $isbn = Business::ISBN->new($i);
+
+        if ($isbn) {
+            if ( $isbn->is_valid ) {
+
+                my $i2 = $isbn->as_string;
+
+                #                warn $isbn->as_string;
+
+                my $f020 =
+                  MARC::Field->new( '020', '', '', 'a' => $isbn->as_string );
+
+                push @f020s, $f020;
+
+            }
+            else {
+
+#                warn $ERROR_TEXT{ $isbn->error };
+
+                my $fx = {
+                    'bib' => $rec->{biblionumber},
+                    ii    => $isbn,
+                    err   => $ERROR_TEXT{ $isbn->error },
+
+                };
+
+                #                warn $isbn->is_valid;
+                #                warn $isbn->as_string;
+                #                warn $isbn->error;
+
+                #                warn %ERROR_TEXT{ $isbn->error };
+                push @fails, $fx;
+            }
+
+        }
+
+        #    $f942 = MARC::Field->new( 942, '', '', 'n' => '1' );
+        if (@f020s) {
+
+            my $marc = GetMarcBiblio( $rec->{biblionumber} );
+
+            my @notes = $marc->field('020');
+            $marc->delete_fields(@notes);
+            $marc->insert_fields_ordered(@f020s);
+
+            #            &ModBiblioMarc( $marc, $rec->{biblionumber}, '' );
+            &ModBiblio( $marc, $rec->{biblionumber}, '' );
+
+            warn $rec->{biblionumber};
+
+        }
+
+    }    # goods
+}
+
diff --git a/bom-1539/fix-issns.pl b/bom-1539/fix-issns.pl
new file mode 100644 (file)
index 0000000..8450de0
--- /dev/null
@@ -0,0 +1,145 @@
+#!/usr/bin/perl
+
+use C4::Context;
+use C4::Biblio;
+use C4::Items;
+
+use Data::Dumper;
+
+#use Smart::Comments;
+
+#use Business::ISSN qw( valid_issn_checksum  %ERROR_TEXT  );
+use Business::ISSN;
+use List::MoreUtils qw(uniq);
+
+#use List::Util qw/shuffle/;
+
+#use DDP alias => 'zzz', colored => 0, caller_info => 1;
+
+use strict;
+
+my @fails;
+
+my $dbh = C4::Context->dbh();
+
+my $q1 = q| 
+SELECT biblionumber, issn  , ExtractValue(marcxml, '//datafield[@tag="022"]/subfield[@code="a"]')    AS issn1 from biblioitems 
+|;
+
+my $sth1 = $dbh->prepare($q1);
+$sth1->execute();
+
+my @bs;
+while ( my $rec = $sth1->fetchrow_hashref() ) {
+
+    #    zzz $rec;
+
+    #    push @bs, $rec->{biblionumber};
+
+    #    next unless  $rec->{issn1}  or  $rec->{issn1} !~ / |\|/ and
+    next unless ( $rec->{issn} or $rec->{issn1} );
+
+    #    zzz $record;
+
+    #    zzz $rec;
+
+    # split
+    my @i1s = split / |\||\:/, $rec->{issn};
+    my @i2s = split / |\||\:/, $rec->{issn1};
+
+    #    warn $rec->{biblionumber};
+    #    zzz @i1s;
+
+    my @newissn;
+    foreach my $i ( @i1s, @i2s ) {
+
+        $i =~ s/\D//g;
+
+        #        $i  = 9781846636868;
+
+        if ( length $i >= 8 ) {
+            push @newissn, $i;
+
+        }
+
+    }
+
+    #    zzz @newissn;
+    my @f022s;
+
+    @newissn = uniq @newissn;
+
+    foreach my $i (@newissn) {
+
+        #        zzz $i;
+
+        #        warn valid_issn_checksum($i);
+
+        my $issn = Business::ISSN->new($i);
+
+        #        zzz $issn;
+
+        #        warn $issn->error;
+
+        #warn zzz %ERROR_TEXT;
+
+        if ($issn) {
+            if ( $issn->is_valid ) {
+
+                #        my $i2 = $issn->as_string;
+
+                #                warn $issn->as_string;
+
+                my $f022 =
+                  MARC::Field->new( '022', '', '', 'a' => $issn->as_string );
+
+                push @f022s, $f022;
+
+            }
+            else {
+
+                #                warn $ERROR_TEXT{ $issn->error };
+
+                my $fx = {
+                    'bib' => $rec->{biblionumber},
+                    ii    => $issn,
+
+                    #                    err   => $ERROR_TEXT{ $issn->error },
+                    #   err1 => $issn->error,
+
+                };
+
+                #                warn $issn->is_valid;
+                #                warn $issn->as_string;
+                #                warn $issn->error;
+
+                #                warn %ERROR_TEXT{ $issn->error };
+                push @fails, $fx;
+            }
+
+        }
+
+        #    $f942 = MARC::Field->new( 942, '', '', 'n' => '1' );
+        if (@f022s) {
+
+            my $marc = GetMarcBiblio( $rec->{biblionumber} );
+
+            #            zzz @f022s;
+
+            my @notes = $marc->field('022');
+            $marc->delete_fields(@notes);
+            $marc->insert_fields_ordered(@f022s);
+
+            #            &ModBiblioMarc( $marc, $rec->{biblionumber}, '' );
+            &ModBiblio( $marc, $rec->{biblionumber}, '' );
+            warn $rec->{biblionumber};
+
+            #exit;
+
+        }
+
+    }    # goods
+}
+
+#zzz @fails;
+