]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0367.schema.copy-visibility-count-as-stored-proc_output-sanity.sql
LP#1842940: Improve Alert
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0367.schema.copy-visibility-count-as-stored-proc_output-sanity.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0367'); -- miker
4
5 CREATE OR REPLACE FUNCTION asset.opac_ou_record_copy_count (org INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
6 DECLARE
7     ans RECORD;
8     trans INT;
9 BEGIN
10     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
11
12     FOR ans IN SELECT u.id, t.depth FROM actor.org_unit_ancestors(org) AS u JOIN actor.org_unit_type t ON (u.ou_type = t.id) LOOP
13         RETURN QUERY
14         SELECT  ans.depth,
15                 ans.id,
16                 COUNT( av.id ),
17                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
18                 COUNT( av.id ),
19                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END
20           FROM
21                 actor.org_unit_descendants(ans.id) d
22                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
23                 JOIN asset.copy cp ON (cp.id = av.id)
24           GROUP BY 1,2,6;
25
26         IF NOT FOUND THEN
27             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
28         END IF;
29
30     END LOOP;
31
32     RETURN;
33 END;
34 $f$ LANGUAGE PLPGSQL;
35
36 CREATE OR REPLACE FUNCTION asset.opac_lasso_record_copy_count (i_lasso INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
37 DECLARE
38     ans RECORD;
39     trans INT;
40 BEGIN
41     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
42
43     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
44         RETURN QUERY
45         SELECT  -1,
46                 ans.id,
47                 COUNT( av.id ),
48                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
49                 COUNT( av.id ),
50                 trans
51           FROM
52                 actor.org_unit_descendants(ans.id) d
53                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
54                 JOIN asset.copy cp ON (cp.id = av.id)
55           GROUP BY 1,2,6;
56
57         IF NOT FOUND THEN
58             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
59         END IF;
60
61     END LOOP;
62
63     RETURN;
64 END;
65 $f$ LANGUAGE PLPGSQL;
66
67 CREATE OR REPLACE FUNCTION asset.staff_ou_record_copy_count (org INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
68 DECLARE
69     ans RECORD;
70     trans INT;
71 BEGIN
72     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
73
74     FOR ans IN SELECT u.id, t.depth FROM actor.org_unit_ancestors(org) AS u JOIN actor.org_unit_type t ON (u.ou_type = t.id) LOOP
75         RETURN QUERY
76         SELECT  ans.depth,
77                 ans.id,
78                 COUNT( cp.id ),
79                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
80                 COUNT( cp.id ),
81                 trans
82           FROM
83                 actor.org_unit_descendants(ans.id) d
84                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
85                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
86           GROUP BY 1,2,6;
87
88         IF NOT FOUND THEN
89             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
90         END IF;
91
92     END LOOP;
93
94     RETURN;
95 END;
96 $f$ LANGUAGE PLPGSQL;
97
98 CREATE OR REPLACE FUNCTION asset.staff_lasso_record_copy_count (i_lasso INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
99 DECLARE
100     ans RECORD;
101     trans INT;
102 BEGIN
103     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
104
105     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
106         RETURN QUERY
107         SELECT  -1,
108                 ans.id,
109                 COUNT( cp.id ),
110                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
111                 COUNT( cp.id ),
112                 trans
113           FROM
114                 actor.org_unit_descendants(ans.id) d
115                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
116                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
117           GROUP BY 1,2,6;
118
119         IF NOT FOUND THEN
120             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
121         END IF;
122
123     END LOOP;
124
125     RETURN;
126 END;
127 $f$ LANGUAGE PLPGSQL;
128
129 CREATE OR REPLACE FUNCTION asset.record_copy_count ( place INT, record BIGINT, staff BOOL) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
130 BEGIN
131     IF staff IS TRUE THEN
132         IF place > 0 THEN
133             RETURN QUERY SELECT * FROM asset.staff_ou_record_copy_count( place, record );
134         ELSE
135             RETURN QUERY SELECT * FROM asset.staff_lasso_record_copy_count( -place, record );
136         END IF;
137     ELSE
138         IF place > 0 THEN
139             RETURN QUERY SELECT * FROM asset.opac_ou_record_copy_count( place, record );
140         ELSE
141             RETURN QUERY SELECT * FROM asset.opac_lasso_record_copy_count( -place, record );
142         END IF;
143     END IF;
144
145     RETURN;
146 END;
147 $f$ LANGUAGE PLPGSQL;
148
149 CREATE OR REPLACE FUNCTION asset.opac_ou_metarecord_copy_count (org INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
150 DECLARE
151     ans RECORD;
152     trans INT;
153 BEGIN
154     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
155
156     FOR ans IN SELECT u.id, t.depth FROM actor.org_unit_ancestors(org) AS u JOIN actor.org_unit_type t ON (u.ou_type = t.id) LOOP
157         RETURN QUERY
158         SELECT  ans.depth,
159                 ans.id,
160                 COUNT( av.id ),
161                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
162                 COUNT( av.id ),
163                 trans
164           FROM
165                 actor.org_unit_descendants(ans.id) d
166                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
167                 JOIN asset.copy cp ON (cp.id = av.id)
168                 JOIN metabib.metarecord_source_map m ON (m.source = av.record)
169           GROUP BY 1,2,6;
170
171         IF NOT FOUND THEN
172             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
173         END IF;
174
175     END LOOP;
176
177     RETURN;
178 END;
179 $f$ LANGUAGE PLPGSQL;
180
181 CREATE OR REPLACE FUNCTION asset.opac_lasso_metarecord_copy_count (i_lasso INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
182 DECLARE
183     ans RECORD;
184     trans INT;
185 BEGIN
186     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
187
188     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
189         RETURN QUERY
190         SELECT  -1,
191                 ans.id,
192                 COUNT( av.id ),
193                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
194                 COUNT( av.id ),
195                 trans
196           FROM
197                 actor.org_unit_descendants(ans.id) d
198                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
199                 JOIN asset.copy cp ON (cp.id = av.id)
200                 JOIN metabib.metarecord_source_map m ON (m.source = av.record)
201           GROUP BY 1,2,6;
202
203         IF NOT FOUND THEN
204             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
205         END IF;
206
207     END LOOP;
208
209     RETURN;
210 END;
211 $f$ LANGUAGE PLPGSQL;
212
213 CREATE OR REPLACE FUNCTION asset.staff_ou_metarecord_copy_count (org INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
214 DECLARE
215     ans RECORD;
216     trans INT;
217 BEGIN
218     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
219
220     FOR ans IN SELECT u.id, t.depth FROM actor.org_unit_ancestors(org) AS u JOIN actor.org_unit_type t ON (u.ou_type = t.id) LOOP
221         RETURN QUERY
222         SELECT  ans.depth,
223                 ans.id,
224                 COUNT( cp.id ),
225                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
226                 COUNT( cp.id ),
227                 trans
228           FROM
229                 actor.org_unit_descendants(ans.id) d
230                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
231                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
232                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
233           GROUP BY 1,2,6;
234
235         IF NOT FOUND THEN
236             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
237         END IF;
238
239     END LOOP;
240
241     RETURN;
242 END;
243 $f$ LANGUAGE PLPGSQL;
244
245 CREATE OR REPLACE FUNCTION asset.staff_lasso_metarecord_copy_count (i_lasso INT, record BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
246 DECLARE
247     ans RECORD;
248     trans INT;
249 BEGIN
250     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = record;
251
252     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
253         RETURN QUERY
254         SELECT  -1,
255                 ans.id,
256                 COUNT( cp.id ),
257                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
258                 COUNT( cp.id ),
259                 trans
260           FROM
261                 actor.org_unit_descendants(ans.id) d
262                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
263                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
264                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
265           GROUP BY 1,2,6;
266
267         IF NOT FOUND THEN
268             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
269         END IF;
270
271     END LOOP;
272
273     RETURN;
274 END;
275 $f$ LANGUAGE PLPGSQL;
276
277 CREATE OR REPLACE FUNCTION asset.metarecord_copy_count ( place INT, record BIGINT, staff BOOL) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
278 BEGIN
279     IF staff IS TRUE THEN
280         IF place > 0 THEN
281             RETURN QUERY SELECT * FROM asset.staff_ou_metarecord_copy_count( place, record );
282         ELSE
283             RETURN QUERY SELECT * FROM asset.staff_lasso_metarecord_copy_count( -place, record );
284         END IF;
285     ELSE
286         IF place > 0 THEN
287             RETURN QUERY SELECT * FROM asset.opac_ou_metarecord_copy_count( place, record );
288         ELSE
289             RETURN QUERY SELECT * FROM asset.opac_lasso_metarecord_copy_count( -place, record );
290         END IF;
291     END IF;
292
293     RETURN;
294 END;
295 $f$ LANGUAGE PLPGSQL;
296
297 COMMIT;
298