1 DROP SCHEMA reporter CASCADE;
5 CREATE SCHEMA reporter;
7 CREATE TABLE reporter.template_folder (
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(),
13 shared BOOL NOT NULL DEFAULT FALSE,
14 share_with INT REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
16 CREATE INDEX rpt_tmpl_fldr_owner_idx ON reporter.template_folder (owner);
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(),
24 shared BOOL NOT NULL DEFAULT FALSE,
25 share_with INT REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
27 CREATE INDEX rpt_rpt_fldr_owner_idx ON reporter.report_folder (owner);
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(),
35 shared BOOL NOT NULL DEFAULT FALSE,
36 share_with INT REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
38 CREATE INDEX rpt_output_fldr_owner_idx ON reporter.output_folder (owner);
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(),
46 description TEXT NOT NULL,
48 folder INT NOT NULL REFERENCES reporter.template_folder (id)
50 CREATE INDEX rpt_tmpl_owner_idx ON reporter.template (owner);
51 CREATE INDEX rpt_tmpl_fldr_idx ON reporter.template (folder);
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,
61 folder INT NOT NULL REFERENCES reporter.report_folder (id),
62 recur BOOL NOT NULL DEFAULT FALSE,
65 CREATE INDEX rpt_rpt_owner_idx ON reporter.report (owner);
66 CREATE INDEX rpt_rpt_fldr_idx ON reporter.report (folder);
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,
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,
86 CREATE INDEX rpt_sched_runner_idx ON reporter.schedule (runner);
87 CREATE INDEX rpt_sched_folder_idx ON reporter.schedule (folder);
89 CREATE OR REPLACE VIEW reporter.simple_record AS
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;