From e9e97f62b62f82401b19b18e9a51f92e4eebdf73 Mon Sep 17 00:00:00 2001
From: erickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Date: Fri, 30 Apr 2010 15:43:10 +0000
Subject: [PATCH] Added global_flag and support for using the internal record
 identifier as the tcn_value for newly imported records TODO: add support to
 vandelay stored import procedures

git-svn-id: svn://svn.open-ils.org/ILS/trunk@16361 dcc99617-32d9-48b4-a31d-7c20da2025e4
---
 .../perlmods/OpenILS/Application/Cat/BibCommon.pm  | 26 ++++++++++++++++++++--
 Open-ILS/src/sql/Pg/002.schema.config.sql          |  2 +-
 Open-ILS/src/sql/Pg/950.data.seed-values.sql       | 13 +++++++++++
 .../Pg/upgrade/0249.data.id_as_tcn_global_flag.sql | 16 +++++++++++++
 4 files changed, 54 insertions(+), 3 deletions(-)
 create mode 100644 Open-ILS/src/sql/Pg/upgrade/0249.data.id_as_tcn_global_flag.sql

diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Cat/BibCommon.pm b/Open-ILS/src/perlmods/OpenILS/Application/Cat/BibCommon.pm
index 3dd3d32118..c19c5b952b 100644
--- a/Open-ILS/src/perlmods/OpenILS/Application/Cat/BibCommon.pm
+++ b/Open-ILS/src/perlmods/OpenILS/Application/Cat/BibCommon.pm
@@ -78,7 +78,10 @@ sub biblio_record_xml_import {
 
 	my( $evt, $tcn, $tcn_source, $marcdoc );
 
-	if( $auto_tcn ) {
+    my $use_id = $e->retrieve_config_global_flag('cat.bib.use_id_for_tcn');
+    $use_id = ($use_id and $U->is_true($use_id->enabled));
+
+	if( $auto_tcn or $use_id ) {
 		# auto_tcn forces a blank TCN value so the DB will have to generate one for us
 		$marcdoc = __make_marc_doc($xml);
 	} else {
@@ -101,8 +104,27 @@ sub biblio_record_xml_import {
 	$record->marc($U->entityize($marcdoc->documentElement->toString));
 
     $record = $e->create_biblio_record_entry($record) or return $e->die_event;
-	$logger->info("marc create/import created new record ".$record->id);
 
+    if($use_id) {
+        my $existing = $e->search_biblio_record_entry(
+            {   
+                tcn_value => $record->id,
+                deleted => 'f'
+            }, { 
+                idlist => 1 
+            }
+        );
+
+        if(@$existing) {
+            # leave the auto-generated tcn_value in place
+            $logger->warn("Collision using internal ID as tcn_value for record " . $record->id);
+        } else {
+            $record->tcn_value($record->id);
+            $e->update_biblio_record_entry($record) or return $e->die_event;
+        }
+    }
+
+	$logger->info("marc create/import created new record ".$record->id);
 	return $record;
 }
 
diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql
index 94c61c784a..6e69762522 100644
--- a/Open-ILS/src/sql/Pg/002.schema.config.sql
+++ b/Open-ILS/src/sql/Pg/002.schema.config.sql
@@ -65,7 +65,7 @@ CREATE TABLE config.upgrade_log (
     install_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
 );
 
-INSERT INTO config.upgrade_log (version) VALUES ('0248'); -- miker
+INSERT INTO config.upgrade_log (version) VALUES ('0249'); -- berick
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql
index e20a41bb5e..0fd9936d65 100644
--- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql
+++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql
@@ -4716,3 +4716,16 @@ INSERT INTO config.org_unit_setting_type ( name, label, description, datatype )
         'bool'
     );
 
+INSERT INTO config.global_flag (name, label) -- defaults to enabled=FALSE
+    VALUES (
+        'cat.bib.use_id_for_tcn',
+        oils_i18n_gettext(
+            'cat.bib.use_id_for_tcn',
+            'Cat: Use Internal ID for TCN Value',
+            'cgf', 
+            'label'
+        )
+    );
+
+
+
diff --git a/Open-ILS/src/sql/Pg/upgrade/0249.data.id_as_tcn_global_flag.sql b/Open-ILS/src/sql/Pg/upgrade/0249.data.id_as_tcn_global_flag.sql
new file mode 100644
index 0000000000..de7b7de61f
--- /dev/null
+++ b/Open-ILS/src/sql/Pg/upgrade/0249.data.id_as_tcn_global_flag.sql
@@ -0,0 +1,16 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('0249');
+
+INSERT INTO config.global_flag (name, label) -- defaults to enabled=FALSE
+    VALUES (
+        'cat.bib.use_id_for_tcn',
+        oils_i18n_gettext(
+            'cat.bib.use_id_for_tcn',
+            'Cat: Use Internal ID for TCN Value',
+            'cgf', 
+            'label'
+        )
+    );
+
+COMMIT;
-- 
2.11.0