specifying bib source
[migration-tools.git] / mig-bin / mig-stagebibs
index 46244ec..f3d29eb 100755 (executable)
@@ -3,19 +3,33 @@
 ###############################################################################
 =pod
 
-=item B<stagebibs> --file foo.xml
+=item B<stagebibs> --file foo.mrc.xml
 
 Takes a load of bibs from a UTF-8 MARC XML  file and loads them into mig staging 
-table of bibio_record_entry.  This is done with no checking of file validity 
+table of bibio_record_entry_legacy.  This is done with no checking of file validity 
 so records should be checked before hand and cleaned.
 
-Takes one  optional arguments:
+Takes three optional arguments:
 
---source
+
+--source 
+
+Takes a numeric value and set the x_source of the bib record to that.  Defaults to 
+2 which is local system.
+
+--x_source
 
 Sets an x_source value on the staging table to the one supplied instead of the 
 default of none.
 
+--auth foo.mrc.xml
+
+This will load bibs into the authority_record_entry_legacy.
+
+--serial foo.mrc.xml
+
+This will load bibs into the serial_record_entry_legacy.
+
 =back
 
 =cut
@@ -40,45 +54,49 @@ use UNIVERSAL;
 my $mig_bin = "$FindBin::Bin/";
 use lib "$FindBin::Bin/";
 use Mig;
+use Getopt::Long;
 
 pod2usage(-verbose => 2) if defined $ARGV[0] && $ARGV[0] eq '--help';
 pod2usage(-verbose => 1) if ! $ARGV[1];
 
-my $next_arg_is_file = 0;
 my $append = 0;
-my $next_arg_is_source = 0;
-my $next_arg_is_stage = 0;
 my $base_table = 'biblio_record_entry';
 my $stage_table = 'biblio_record_entry_legacy';
-my $source = 'default';
-my $file_is_xml = 0;
+my $auth = '';
+my $serial = '';
+my $source = 2;
+my $x_source = 'default';
 my $dbh = Mig::db_connect();
 my $infile;
 my $i = 0;
 my $batch;
 binmode STDIN, ':utf8';
 
-foreach my $arg (@ARGV) {
-    if ($arg eq '--file') {
-        $next_arg_is_file = 1;
-        next;
-    }
-    if ($next_arg_is_file) {
-        $infile = $arg;
-        $next_arg_is_file = 0;
-        next;
-    }
-    if ($arg eq '--source') {
-        $next_arg_is_source = 1;
-        next;
-    }
-    if ($next_arg_is_source) {
-        $source = $arg;
-        $next_arg_is_source = 0;
-        next;
-    }
+my $ret = GetOptions(
+    'file:s'              => \$infile,
+    'serial:s'            => \$serial,
+    'auth:s'              => \$auth,
+    'x_source:s'          => \$x_source,
+    'source:i'            => \$source,
+    'base_table:s'        => \$base_table,
+    'stage_table:s'       => \$stage_table
+);
+
+#if in file is empty then fail
+#if auth and serial = 1 fail 
+
+if ($serial == 1) { 
+    $base_table = 'authority_record_entry';
+    $stage_table = 'authority_record_entry_legacy';
+}
+
+if ($auth == 1) {
+    $base_table = 'serial_record_entry';
+    $stage_table = 'serial_record_entry_legacy';       
 }
 
+if ($auth == 1 and $serial == 1) { abort('are you sure you want to load these as authorities and serials?'); }
+
 my $bre_test = check_for_table($dbh,$base_table);
 my $bre_legacy_test = check_for_table($dbh,$stage_table);
 if ($bre_test == 0 and $bre_legacy_test == 0 ) { create_bre($dbh); create_child_bre($dbh); }
@@ -87,8 +105,8 @@ if ($bre_test == 1 and $bre_legacy_test == 0 ) { create_child_bre($dbh); }
 my $xmig_test = check_for_column($dbh,$stage_table,'x_migrate');
 if ($xmig_test == 0) { add_column($dbh,$stage_table,'x_migrate','BOOLEAN DEFAULT TRUE'); }
 
-my $xsource_test = check_for_column($dbh,$stage_table,'x_source');
-if ($xsource_test == 0) { add_column($dbh,$stage_table,'x_source','TEXT'); }
+my $xx_source_test = check_for_column($dbh,$stage_table,'x_source');
+if ($xx_source_test == 0) { add_column($dbh,$stage_table,'x_source','TEXT'); }
 
 #flatten out MARC XML FILE
 open my $xml, "<:encoding(utf8)", $infile or abort('could not open MARC XML file');
@@ -99,7 +117,7 @@ while(my $line = <$xml>) {
        chomp $line;
        $record = $record . $line;
        if ($line =~ /<\/record>$/) {
-               stage_record($dbh,$record,$source); 
+               stage_record($dbh,$record,$x_source,$source); 
                $record = '';
                $i++;
                if (($i % 100) == 0) { report_progress('Records stage', $i); }
@@ -155,12 +173,13 @@ sub report_progress {
 sub stage_record {
     my $dbh = shift;
     my $record = shift;
-       my $source = shift;
+       my $x_source = shift;
+    my $source = shift;
        my $last_xact = "'$MIGSCHEMA'";
        $record = '$_$' . $record . '$_$';
        my $sql;
-       if ($source eq 'default') { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc) VALUES ($last_xact,$record);"; }
-               else { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc,x_source) VALUES ($last_xact,$record,'$source');";  }
+       if ($x_source eq 'default') { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc,source) VALUES ($last_xact,$record,$source);"; }
+               else { $sql = "INSERT INTO $MIGSCHEMA.$stage_table (last_xact_id,marc,x_source,source) VALUES ($last_xact,$record,'$x_source',$source);";  }
     my $sth = $dbh->prepare($sql);
     $sth->execute();
        return;