]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/reporter-schema.sql
adding reporter.simple_record
[working/Evergreen.git] / Open-ILS / src / sql / Pg / reporter-schema.sql
1 DROP SCHEMA reporter CASCADE;
2
3 BEGIN;
4
5 CREATE SCHEMA reporter;
6
7 CREATE TABLE reporter.template_folder (
8         id              SERIAL                          PRIMARY KEY,
9         parent          INT                             REFERENCES reporter.template_folder (id) DEFERRABLE INITIALLY DEFERRED,
10         owner           INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
11         create_time     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT NOW(),
12         name            TEXT                            NOT NULL,
13         shared          BOOL                            NOT NULL DEFAULT FALSE,
14         share_with      INT                             REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
15 );
16 CREATE INDEX rpt_tmpl_fldr_owner_idx ON reporter.template_folder (owner);
17
18 CREATE TABLE reporter.report_folder (
19         id              SERIAL                          PRIMARY KEY,
20         parent          INT                             REFERENCES reporter.report_folder (id) DEFERRABLE INITIALLY DEFERRED,
21         owner           INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
22         create_time     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT NOW(),
23         name            TEXT                            NOT NULL,
24         shared          BOOL                            NOT NULL DEFAULT FALSE,
25         share_with      INT                             REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
26 );
27 CREATE INDEX rpt_rpt_fldr_owner_idx ON reporter.report_folder (owner);
28
29 CREATE TABLE reporter.output_folder (
30         id              SERIAL                          PRIMARY KEY,
31         parent          INT                             REFERENCES reporter.output_folder (id) DEFERRABLE INITIALLY DEFERRED,
32         owner           INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
33         create_time     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT NOW(),
34         name            TEXT                            NOT NULL,
35         shared          BOOL                            NOT NULL DEFAULT FALSE,
36         share_with      INT                             REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
37 );
38 CREATE INDEX rpt_output_fldr_owner_idx ON reporter.output_folder (owner);
39
40
41 CREATE TABLE reporter.template (
42         id              SERIAL                          PRIMARY KEY,
43         owner           INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
44         create_time     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT NOW(),
45         name            TEXT                            NOT NULL,
46         description     TEXT                            NOT NULL,
47         data            TEXT                            NOT NULL,
48         folder          INT                             NOT NULL REFERENCES reporter.template_folder (id)
49 );
50 CREATE INDEX rpt_tmpl_owner_idx ON reporter.template (owner);
51 CREATE INDEX rpt_tmpl_fldr_idx ON reporter.template (folder);
52
53 CREATE TABLE reporter.report (
54         id              SERIAL                          PRIMARY KEY,
55         owner           INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
56         create_time     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT NOW(),
57         name            TEXT                            NOT NULL DEFAULT '',
58         description     TEXT                            NOT NULL DEFAULT '',
59         template        INT                             NOT NULL REFERENCES reporter.template (id) DEFERRABLE INITIALLY DEFERRED,
60         data            TEXT                            NOT NULL,
61         folder          INT                             NOT NULL REFERENCES reporter.report_folder (id),
62         recur           BOOL                            NOT NULL DEFAULT FALSE,
63         recurance       INTERVAL
64 );
65 CREATE INDEX rpt_rpt_owner_idx ON reporter.report (owner);
66 CREATE INDEX rpt_rpt_fldr_idx ON reporter.report (folder);
67
68 CREATE TABLE reporter.schedule (
69         id              SERIAL                          PRIMARY KEY,
70         report          INT                             NOT NULL REFERENCES reporter.report (id) DEFERRABLE INITIALLY DEFERRED,
71         folder          INT                             NOT NULL REFERENCES reporter.output_folder (id),
72         runner          INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
73         run_time        TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT NOW(),
74         start_time      TIMESTAMP WITH TIME ZONE,
75         complete_time   TIMESTAMP WITH TIME ZONE,
76         email           TEXT,
77         excel_format    BOOL                            NOT NULL DEFAULT TRUE,
78         html_format     BOOL                            NOT NULL DEFAULT TRUE,
79         csv_format      BOOL                            NOT NULL DEFAULT TRUE,
80         chart_pie       BOOL                            NOT NULL DEFAULT FALSE,
81         chart_bar       BOOL                            NOT NULL DEFAULT FALSE,
82         chart_line      BOOL                            NOT NULL DEFAULT FALSE,
83         error_code      INT,
84         error_text      TEXT
85 );
86 CREATE INDEX rpt_sched_runner_idx ON reporter.schedule (runner);
87 CREATE INDEX rpt_sched_folder_idx ON reporter.schedule (folder);
88
89 CREATE OR REPLACE VIEW reporter.simple_record AS
90 SELECT  r.id,
91         s.metarecord,
92         r.fingerprint,
93         r.quality,
94         r.tcn_source,
95         r.tcn_value,
96         title.value AS title,
97         uniform_title.value AS uniform_title,
98         author.value AS author,
99         publisher.value AS publisher,
100         SUBSTRING(pubdate.value FROM $$\d+$$) AS pubdate,
101         series_title.value AS series_title,
102         series_statement.value AS series_statement,
103         summary.value AS summary,
104         ARRAY_ACCUM( SUBSTRING(isbn.value FROM $$^\S+$$) ) AS isbn,
105         ARRAY_ACCUM( SUBSTRING(issn.value FROM $$^\S+$$) ) AS issn,
106         ARRAY((SELECT DISTINCT value FROM metabib.full_rec WHERE tag = '650' AND subfield = 'a' AND record = r.id)) AS topic_subject,
107         ARRAY((SELECT DISTINCT value FROM metabib.full_rec WHERE tag = '651' AND subfield = 'a' AND record = r.id)) AS geographic_subject,
108         ARRAY((SELECT DISTINCT value FROM metabib.full_rec WHERE tag = '655' AND subfield = 'a' AND record = r.id)) AS genre,
109         ARRAY((SELECT DISTINCT value FROM metabib.full_rec WHERE tag = '600' AND subfield = 'a' AND record = r.id)) AS name_subject,
110         ARRAY((SELECT DISTINCT value FROM metabib.full_rec WHERE tag = '610' AND subfield = 'a' AND record = r.id)) AS corporate_subject,
111         ARRAY((SELECT value FROM metabib.full_rec WHERE tag = '856' AND subfield IN ('3','y','u') AND record = r.id ORDER BY CASE WHEN subfield IN ('3','y') THEN 0 ELSE 1 END)) AS external_uri
112   FROM  biblio.record_entry r
113         JOIN metabib.metarecord_source_map s ON (s.source = r.id)
114         LEFT JOIN metabib.full_rec uniform_title ON (r.id = uniform_title.record AND uniform_title.tag = '240' AND uniform_title.subfield = 'a')
115         LEFT JOIN metabib.full_rec title ON (r.id = title.record AND title.tag = '245' AND title.subfield = 'a')
116         LEFT JOIN metabib.full_rec author ON (r.id = author.record AND author.tag = '100' AND author.subfield = 'a')
117         LEFT JOIN metabib.full_rec publisher ON (r.id = publisher.record AND publisher.tag = '260' AND publisher.subfield = 'b')
118         LEFT JOIN metabib.full_rec pubdate ON (r.id = pubdate.record AND pubdate.tag = '260' AND pubdate.subfield = 'c')
119         LEFT JOIN metabib.full_rec isbn ON (r.id = isbn.record AND isbn.tag IN ('024', '020') AND isbn.subfield IN ('a','z'))
120         LEFT JOIN metabib.full_rec issn ON (r.id = issn.record AND issn.tag = '022' AND issn.subfield = 'a')
121         LEFT JOIN metabib.full_rec series_title ON (r.id = series_title.record AND series_title.tag IN ('830','440') AND series_title.subfield = 'a')
122         LEFT JOIN metabib.full_rec series_statement ON (r.id = series_statement.record AND series_statement.tag = '490' AND series_statement.subfield = 'a')
123         LEFT JOIN metabib.full_rec summary ON (r.id = summary.record AND summary.tag = '520' AND summary.subfield = 'a')
124   WHERE r.deleted IS FALSE
125   GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14;
126
127
128 COMMIT;
129