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