]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0908.function.vandelay-overlay_bib_record.sql
LP1779158 Vandelay workstation setting repairs/additions
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0908.function.vandelay-overlay_bib_record.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('0908', :eg_version);
4
5 CREATE OR REPLACE FUNCTION vandelay.overlay_bib_record ( import_id BIGINT, eg_id BIGINT, merge_profile_id INT ) RETURNS BOOL AS $$
6 DECLARE
7     editor_string   TEXT;
8     editor_id       INT;
9     v_marc          TEXT;
10     v_bib_source    INT;
11     update_fields   TEXT[];
12     update_query    TEXT;
13 BEGIN
14
15     SELECT  q.marc, q.bib_source INTO v_marc, v_bib_source
16       FROM  vandelay.queued_bib_record q
17             JOIN vandelay.bib_match m ON (m.queued_record = q.id AND q.id = import_id)
18       LIMIT 1;
19
20     IF v_marc IS NULL THEN
21         -- RAISE NOTICE 'no marc for vandelay or bib record';
22         RETURN FALSE;
23     END IF;
24
25     IF vandelay.template_overlay_bib_record( v_marc, eg_id, merge_profile_id) THEN
26         UPDATE  vandelay.queued_bib_record
27           SET   imported_as = eg_id,
28                 import_time = NOW()
29           WHERE id = import_id;
30
31         editor_string := (oils_xpath('//*[@tag="905"]/*[@code="u"]/text()',v_marc))[1];
32
33         IF editor_string IS NOT NULL AND editor_string <> '' THEN
34             SELECT usr INTO editor_id FROM actor.card WHERE barcode = editor_string;
35
36             IF editor_id IS NULL THEN
37                 SELECT id INTO editor_id FROM actor.usr WHERE usrname = editor_string;
38             END IF;
39
40             IF editor_id IS NOT NULL THEN
41                 --only update the edit date if we have a valid editor
42                 update_fields := ARRAY_APPEND(update_fields, 'editor = ' || editor_id || ', edit_date = NOW()');
43             END IF;
44         END IF;
45
46         IF v_bib_source IS NOT NULL THEN
47             update_fields := ARRAY_APPEND(update_fields, 'source = ' || v_bib_source);
48         END IF;
49
50         IF ARRAY_LENGTH(update_fields, 1) > 0 THEN
51             update_query := 'UPDATE biblio.record_entry SET ' || ARRAY_TO_STRING(update_fields, ',') || ' WHERE id = ' || eg_id || ';';
52             --RAISE NOTICE 'query: %', update_query;
53             EXECUTE update_query;
54         END IF;
55
56         RETURN TRUE;
57     END IF;
58
59     -- RAISE NOTICE 'update of biblio.record_entry failed';
60
61     RETURN FALSE;
62
63 END;
64 $$ LANGUAGE PLPGSQL;
65
66 COMMIT;