[RT17143] Added 008 date entered and date type cleanup
authorLiam Whalen <liam.whalen@bc.libraries.coop>
Wed, 30 Sep 2015 23:41:09 +0000 (16:41 -0700)
committerLiam Whalen <liam.whalen@bc.libraries.coop>
Wed, 30 Sep 2015 23:41:09 +0000 (16:41 -0700)
The 00-05 and 06 fields of 008 needed to be populated when empty.

data_cleanup/date1/date1_cleanup.pl

index 37ff8f0..6f50771 100644 (file)
@@ -74,7 +74,12 @@ sub clean_date1_records {
     for (@$records) {
         print "Getting MARC for record: " . $_->[0] . "\n";
         $record_id = $_->[0];
-        $marc = MARC::Record->new_from_xml(get_marc_by_id($authtoken, $record_id), 'UTF-8');
+        my ($xml, $create_date) = get_marc_by_id($authtoken, $record_id);    
+        $marc = MARC::Record->new_from_xml($xml, 'UTF-8');
+
+        my ($year, $month, $day) = $create_date =~ /(\d+)-(\d+)-(\d*)/;
+
+        my $date_entered = "$year$month$day";
 
         my $field_260 = $marc->field('260');
         my $field_264 = $marc->field('264');
@@ -88,13 +93,28 @@ sub clean_date1_records {
             $pubdate = $field_260->subfield('c');
         }
             
-        $pubdate =~ s/(\d{4}).*/$1/;
+        $pubdate =~ s/.*(\d{4}).*/$1/;
 
         my $field_008 = $marc->field('008');
 
         my $data_008 =  $field_008->data();
 
         my $data_008_00_to_06 = substr($data_008, 0, 7);
+
+        #If we have less than 6 characters at the start
+        #then we have bad data.  Replace it with the
+        #create_date from the BRE object.
+        if (length($data_008_00_to_06) < 6) {
+            $data_008_00_to_06 = $date_entered;
+        }
+
+        #If we have less than 7 characters at the start
+        #then we have bad data.  Add an n as the 7th character
+        #which indicates Dates unknown
+        if (length($data_008_00_to_06) < 7) {
+            $data_008_00_to_06 .= 'n';
+        }
+            
         my $data_008_after_10 = substr($data_008, 11);
 
         my $data_008_with_pubdate =  "$data_008_00_to_06$pubdate$data_008_after_10";
@@ -103,6 +123,8 @@ sub clean_date1_records {
 
         update_marc_by_id($authtoken, $record_id, $marc->as_xml());
 
+        clear_auth_token($authtoken);
+
         exit;
     }
 }
@@ -198,7 +220,7 @@ sub get_marc_by_id {
         }
     );
 
-    return $bre->marc;
+    return ($bre->marc, $bre->create_date);
 }
 
 sub update_marc_by_id {