Signed-off-by: Mason James <mtj@kohaaloha.com>
authorMason James <mtj@kohaaloha.com>
Wed, 8 Jul 2015 03:43:33 +0000 (15:43 +1200)
committerMason James <mtj@kohaaloha.com>
Wed, 8 Jul 2015 03:43:33 +0000 (15:43 +1200)
new file:   remap3.pl

remap3.pl [new file with mode: 0644]

diff --git a/remap3.pl b/remap3.pl
new file mode 100644 (file)
index 0000000..5f62ddc
--- /dev/null
+++ b/remap3.pl
@@ -0,0 +1,221 @@
+#!/usr/bin/perlĀ·
+
+use strict;
+use warnings;
+
+use MARC::File::USMARC;
+
+use MARC::File::XML ( BinaryEncoding => 'utf8' );
+use MARC::Record;
+use MARC::Batch;
+use MARC::Charset;
+
+use Smart::Comments;
+
+my $f  = $ARGV[0];
+my $f2 = $ARGV[1];
+### $f;
+
+my $file = MARC::File::XML->in($f);
+
+my $i  = 1;
+my $i2 = 1;
+
+my $out = MARC::File::XML->out($f2);
+
+while ( my $r = $file->next() ) {
+
+    # ## $r;
+    #    warn $i++;
+
+    my @items = $r->field(952);
+
+    my $set = 0;
+
+    foreach my $item (@items) {
+
+        # get format, itype, cc
+        #    my $item = $r->field('952');
+        my $title = $r->subfield( '245', 'a' );
+
+        my $format = $item->subfield('5');
+        my $itype  = $item->subfield('y');
+        my $cc     = $item->subfield('8');
+        my $bc     = $item->subfield('p');
+
+        warn $bc;
+        warn $cc;
+        $item->delete_subfield( code => '8' ); # del cc
+        $item->delete_subfield( code => '5' ); # del format
+
+        #    next unless $itype;
+        #    warn '--------------------------------';
+
+        #warn  $title;
+        #warn  $format;
+        #warn  $itype;
+        #    warn $cc;
+
+=c
+
+--------------------------------------
+
+
+Item Types
+The source of this is 'BibType' in Liberty's LIBRARY file, but note:
+ - MX is a new category and there is no existing data to be mapped into it;
+ - bibtypes M (and m) will map to 'BK' except:
+where Liberty's ISSUES.Format value is 'Limited Loan' then item type becomes BL (Book Limited Loan);
+ - bibtype S maps to CR (Journal);
+ - bibtypes V, R and C map to VM (Visual Materials).
+
+
+
+=cut
+
+        $itype = 'M' if $itype eq 'm';
+
+        if ( $itype eq 'M' ) {
+
+            if ( $format =~ /Limited.*Loan/i ) {
+
+                $item->update( y => 'BL' );
+
+            }
+            else {
+
+                $item->update( y => 'BK' );
+            }
+
+        }
+        elsif ( $itype eq 'S' ) {
+
+            $item->update( y => 'CR' );
+
+        }
+        elsif ($itype eq 'V'
+            or $itype eq 'C'
+            or $itype eq 'R' )
+        {
+
+            #            warn $title;
+            warn $i2++;
+            $item->update( y => 'VM' );
+
+            $set++;
+
+        }
+
+        #-----------------------------------------------------------
+
+=c
+
+
+
+Collections
+- Where Liberty's ISSUES.Collection value is (or contains) 'ART THERAPY' then
+ items.ccode becomes 'AT'.
+- Where Liberty's ISSUES.Collection value is 'NZ&P' then items.ccode becomes
+'NZP'.
+- Else items.ccode becomes 'GEN'.
+
+
+=cut
+
+        if ( defined $cc and $cc =~ /ART.*THERAPY/i ) {
+
+            #exit;
+
+            $item->update( 8 => 'AT' );
+
+        }
+
+        elsif (
+            defined $cc
+            and (  $cc =~ /New Zealand.*Pacific/i
+                or $cc =~ /NZ.*P/i )
+          )
+        {
+
+            $item->update( 8 => 'NZP' );
+
+        }
+        else {
+
+            #            warn $title;
+            $item->update( 8 => 'GEN' );
+
+        }
+
+        # ----------------------------------------
+
+=c
+
+
+Locations
+- Where Liberty's LIBRARY.BibType value is C, R or V then items.location
+becomes  'AV'
+- Where Liberty's ISSUES.Collection value is (or contains) 'ART THERAPY' then
+ items.location becomes 'AT'
+- if there is a conflict, 'AT' prevails
+- for everything else, items.location becomes GS
+
+
+=cut
+
+        my $set_loc;
+
+        if (   $itype eq 'V'
+            or $itype eq 'C'
+            or $itype eq 'R' )
+        {
+
+            #            warn $title;
+            # update LOC
+            $item->update( c => 'AV' );
+            $set_loc = 1;
+
+        }
+        if ( defined $cc and $cc =~ /ART.*THERAPY/i ) {
+
+            #exit;
+
+            $item->update( c => 'AT' );
+            $set_loc = 1;
+
+        }
+
+        $item->update( c => 'GS' ) unless $set_loc;
+
+        # --------------------------------------------------
+
+=c
+
+Therefore, dealing with the various columns from the Liberty ISSUES file:
+COLLECTION is used to identify the 'Art Therapy' collection items (CCODE = AT);
+COLLECTION is also used to identify 'New Zealand and Pacific' collection items (CCODE = NZP);
+Everything else in ISSUES.COLLECTION is discarded;
+
+FORMAT values 'Fiction', 'Non-Fiction' and 'General' determine the Collection Code (CCODE) 'GEN';
+- however if there is conflict, AT and NZP prevail over GEN;
+FORMAT value 'Limited Loan' determines the item type BL which is also in the 'GEN' Collection (again, unless there is conflict with AT or NZP; and
+FORMAT value ''Library Use Only' sets the NOT FOR LOAN flag (items.notforloan) = 3.
+
+=cut
+
+        if ( $format =~ /Library.*Only/i ) {
+
+            # notforloan
+            $item->update( 7 => '3' );
+            $set++;
+
+        }
+
+    }
+
+    ## write a bunch of records to a file
+    $out->write($r);
+
+    warn $i++;
+}
+$out->close();