KMAIN-695: Batch record modification to update last edit date
authorBill Erickson <berickxx@gmail.com>
Wed, 29 Oct 2014 21:09:09 +0000 (17:09 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
    Cross-port: 4bf867d

KCLS/sql/kmain-695/kmain-695-rollback.sql [new file with mode: 0644]
KCLS/sql/kmain-695/kmain-695.sql [new file with mode: 0644]

diff --git a/KCLS/sql/kmain-695/kmain-695-rollback.sql b/KCLS/sql/kmain-695/kmain-695-rollback.sql
new file mode 100644 (file)
index 0000000..6e8e5ae
--- /dev/null
@@ -0,0 +1,62 @@
+-- Function: vandelay.overlay_bib_record(bigint, bigint, integer)
+
+-- DROP FUNCTION vandelay.overlay_bib_record(bigint, bigint, integer);
+
+CREATE OR REPLACE FUNCTION vandelay.overlay_bib_record(import_id bigint, eg_id bigint, merge_profile_id integer)
+  RETURNS boolean AS
+$BODY$
+DECLARE
+    merge_profile   vandelay.merge_profile%ROWTYPE;
+    dyn_profile     vandelay.compile_profile%ROWTYPE;
+    editor_string   TEXT;
+    editor_id       INT;
+    source_marc     TEXT;
+    target_marc     TEXT;
+    eg_marc         TEXT;
+    v_marc          TEXT;
+    replace_rule    TEXT;
+BEGIN
+
+    SELECT  q.marc INTO v_marc
+      FROM  vandelay.queued_record q
+            JOIN vandelay.bib_match m ON (m.queued_record = q.id AND q.id = import_id)
+      LIMIT 1;
+
+    IF v_marc IS NULL THEN
+        -- RAISE NOTICE 'no marc for vandelay or bib record';
+        RETURN FALSE;
+    END IF;
+
+    IF vandelay.template_overlay_bib_record( v_marc, eg_id, merge_profile_id) THEN
+        UPDATE  vandelay.queued_bib_record
+          SET   imported_as = eg_id,
+                import_time = NOW()
+          WHERE id = import_id;
+
+        editor_string := (oils_xpath('//*[@tag="905"]/*[@code="u"]/text()',v_marc))[1];
+
+        IF editor_string IS NOT NULL AND editor_string <> '' THEN
+            SELECT usr INTO editor_id FROM actor.card WHERE barcode = editor_string;
+
+            IF editor_id IS NULL THEN
+                SELECT id INTO editor_id FROM actor.usr WHERE usrname = editor_string;
+            END IF;
+
+            IF editor_id IS NOT NULL THEN
+                UPDATE biblio.record_entry SET editor = editor_id WHERE id = eg_id;
+            END IF;
+        END IF;
+
+        RETURN TRUE;
+    END IF;
+
+    -- RAISE NOTICE 'update of biblio.record_entry failed';
+
+    RETURN FALSE;
+
+END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION vandelay.overlay_bib_record(bigint, bigint, integer)
+  OWNER TO evergreen;
diff --git a/KCLS/sql/kmain-695/kmain-695.sql b/KCLS/sql/kmain-695/kmain-695.sql
new file mode 100644 (file)
index 0000000..2fdf49a
--- /dev/null
@@ -0,0 +1,64 @@
+-- Function: vandelay.overlay_bib_record(bigint, bigint, integer)
+
+-- DROP FUNCTION vandelay.overlay_bib_record(bigint, bigint, integer);
+
+CREATE OR REPLACE FUNCTION vandelay.overlay_bib_record(import_id bigint, eg_id bigint, merge_profile_id integer)
+  RETURNS boolean AS
+$BODY$
+DECLARE
+    merge_profile   vandelay.merge_profile%ROWTYPE;
+    dyn_profile     vandelay.compile_profile%ROWTYPE;
+    editor_string   TEXT;
+    editor_id       INT;
+    source_marc     TEXT;
+    target_marc     TEXT;
+    eg_marc         TEXT;
+    v_marc          TEXT;
+    replace_rule    TEXT;
+BEGIN
+
+    SELECT  q.marc INTO v_marc
+      FROM  vandelay.queued_record q
+            JOIN vandelay.bib_match m ON (m.queued_record = q.id AND q.id = import_id)
+      LIMIT 1;
+
+    IF v_marc IS NULL THEN
+        -- RAISE NOTICE 'no marc for vandelay or bib record';
+        RETURN FALSE;
+    END IF;
+
+    IF vandelay.template_overlay_bib_record( v_marc, eg_id, merge_profile_id) THEN
+        UPDATE  vandelay.queued_bib_record
+          SET   imported_as = eg_id,
+                import_time = NOW()
+          WHERE id = import_id;
+
+        editor_string := (oils_xpath('//*[@tag="905"]/*[@code="u"]/text()',v_marc))[1];
+
+        IF editor_string IS NOT NULL AND editor_string <> '' THEN
+            SELECT usr INTO editor_id FROM actor.card WHERE barcode = editor_string;
+
+            IF editor_id IS NULL THEN
+                SELECT id INTO editor_id FROM actor.usr WHERE usrname = editor_string;
+            END IF;
+
+            IF editor_id IS NOT NULL THEN
+                UPDATE biblio.record_entry SET editor = editor_id, edit_date = NOW() WHERE id = eg_id;
+            END IF;
+        ELSE
+            UPDATE biblio.record_entry SET edit_date = NOW() WHERE id = eg_id;
+        END IF;
+
+        RETURN TRUE;
+    END IF;
+
+    -- RAISE NOTICE 'update of biblio.record_entry failed';
+
+    RETURN FALSE;
+
+END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE
+  COST 100;
+ALTER FUNCTION vandelay.overlay_bib_record(bigint, bigint, integer)
+  OWNER TO evergreen;