added auth record number extractor
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 19 Jun 2009 20:50:33 +0000 (20:50 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 19 Jun 2009 20:50:33 +0000 (20:50 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@13419 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Cat/AuthCommon.pm

index a8ef1f0..a00dc5c 100644 (file)
@@ -36,6 +36,10 @@ sub import_authority_record {
        $rec->edit_date('now');
        $rec->marc($U->entityize($marc_doc->documentElement->toString));
 
+    my ($arn, $evt) = find_arn($e, $marc_doc);
+    return $evt if $evt;
+    $rec->arn_value($arn);
+
     $rec = $e->create_authority_record_entry($rec) or return $e->die_event;
 
     # we don't care about the result, just fire off the request
@@ -64,4 +68,24 @@ sub overlay_authority_record {
        return $rec;
 }
 
+sub find_arn {
+    my($e, $marc_doc) = @_;
+
+    my $xpath = '//marc:controlfield[@tag="001"]';
+    my ($arn) = $marc_doc->documentElement->findvalue($xpath);
+
+    if(my $existing_rec = $e->search_authority_record_entry({arn_value => $arn, deleted => 'f'})->[0]) {
+        # this arn is taken
+        return (
+            undef, 
+            OpenILS::Event->new(
+                'AUTHORITY_RECORD_NUMBER_EXISTS', 
+                payload => {existing_record => $existing_rec, arn => $arn}
+            )
+        );
+    }
+
+    return ($arn);
+}
+
 1;