]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0251.schema.vandelay.905u-support.sql
LP#1178377: Make bib source optional element from unapi.bre
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0251.schema.vandelay.905u-support.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0251'); --miker
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     merge_profile   vandelay.merge_profile%ROWTYPE;
8     dyn_profile     vandelay.compile_profile%ROWTYPE;
9     editor_string   TEXT;
10     editor_id       INT;
11     source_marc     TEXT;
12     target_marc     TEXT;
13     eg_marc         TEXT;
14     v_marc          TEXT;
15     replace_rule    TEXT;
16     match_count     INT;
17 BEGIN
18
19     SELECT  b.marc INTO eg_marc
20       FROM  biblio.record_entry b
21             JOIN vandelay.bib_match m ON (m.eg_record = b.id AND m.queued_record = import_id)
22       LIMIT 1;
23
24     SELECT  q.marc INTO v_marc
25       FROM  vandelay.queued_record q
26             JOIN vandelay.bib_match m ON (m.queued_record = q.id AND q.id = import_id)
27       LIMIT 1;
28
29     IF eg_marc IS NULL OR v_marc IS NULL THEN
30         -- RAISE NOTICE 'no marc for vandelay or bib record';
31         RETURN FALSE;
32     END IF;
33
34     dyn_profile := vandelay.compile_profile( v_marc );
35
36     IF merge_profile_id IS NOT NULL THEN
37         SELECT * INTO merge_profile FROM vandelay.merge_profile WHERE id = merge_profile_id;
38         IF FOUND THEN
39             dyn_profile.add_rule := BTRIM( dyn_profile.add_rule || ',' || COALESCE(merge_profile.add_spec,''), ',');
40             dyn_profile.strip_rule := BTRIM( dyn_profile.strip_rule || ',' || COALESCE(merge_profile.strip_spec,''), ',');
41             dyn_profile.replace_rule := BTRIM( dyn_profile.replace_rule || ',' || COALESCE(merge_profile.replace_spec,''), ',');
42             dyn_profile.preserve_rule := BTRIM( dyn_profile.preserve_rule || ',' || COALESCE(merge_profile.preserve_spec,''), ',');
43         END IF;
44     END IF;
45
46     IF dyn_profile.replace_rule <> '' AND dyn_profile.preserve_rule <> '' THEN
47         -- RAISE NOTICE 'both replace [%] and preserve [%] specified', dyn_profile.replace_rule, dyn_profile.preserve_rule;
48         RETURN FALSE;
49     END IF;
50
51     IF dyn_profile.replace_rule <> '' THEN
52         source_marc = v_marc;
53         target_marc = eg_marc;
54         replace_rule = dyn_profile.replace_rule;
55     ELSE
56         source_marc = eg_marc;
57         target_marc = v_marc;
58         replace_rule = dyn_profile.preserve_rule;
59     END IF;
60
61     UPDATE  biblio.record_entry
62       SET   marc = vandelay.merge_record_xml( target_marc, source_marc, dyn_profile.add_rule, replace_rule, dyn_profile.strip_rule )
63       WHERE id = eg_id;
64
65     IF FOUND THEN
66         UPDATE  vandelay.queued_bib_record
67           SET   imported_as = eg_id,
68                 import_time = NOW()
69           WHERE id = import_id;
70
71         editor_string := (oils_xpath('//*[@tag="905"]/*[@code="u"]/text()',v_marc))[1];
72
73         IF editor_string IS NOT NULL AND editor_string <> '' THEN
74             SELECT usr INTO editor_id FROM actor.card WHERE barcode = editor_string;
75
76             IF editor_id IS NULL THEN
77                 SELECT id INTO editor_id FROM actor.usr WHERE usrname = editor_string;
78             END IF;
79
80             IF editor_id IS NOT NULL THEN
81                 UPDATE biblio.record_entry SET editor = editor_id WHERE id = eg_id;
82             END IF;
83         END IF;
84
85         RETURN TRUE;
86     END IF;
87
88     -- RAISE NOTICE 'update of biblio.record_entry failed';
89
90     RETURN FALSE;
91
92 END;
93 $$ LANGUAGE PLPGSQL;
94
95 COMMIT;