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