From 2747668178294b9bb033d85af19fcda9796c9d58 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 29 Oct 2014 17:09:09 -0400 Subject: [PATCH] KMAIN-695: Batch record modification to update last edit date Cross-port: 4bf867d --- KCLS/sql/kmain-695/kmain-695-rollback.sql | 62 ++++++++++++++++++++++++++++++ KCLS/sql/kmain-695/kmain-695.sql | 64 +++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 KCLS/sql/kmain-695/kmain-695-rollback.sql create mode 100644 KCLS/sql/kmain-695/kmain-695.sql diff --git a/KCLS/sql/kmain-695/kmain-695-rollback.sql b/KCLS/sql/kmain-695/kmain-695-rollback.sql new file mode 100644 index 0000000000..6e8e5ae4f2 --- /dev/null +++ b/KCLS/sql/kmain-695/kmain-695-rollback.sql @@ -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 index 0000000000..2fdf49a9df --- /dev/null +++ b/KCLS/sql/kmain-695/kmain-695.sql @@ -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; -- 2.11.0