]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0366.schema.copy-visibility-count-as-stored-proc.sql
LP#1206936 - Fix wrong billing info in money.transaction_billing_summary
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0366.schema.copy-visibility-count-as-stored-proc.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0366'); -- 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 BEGIN
9     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
10         RETURN QUERY
11         SELECT  ans.depth,
12                 ans.id,
13                 COUNT( av.id ),
14                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
15                 COUNT( av.id ),
16                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END
17           FROM  
18                 actor.org_unit_descendants(ans.id) d
19                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
20                 JOIN asset.copy cp ON (cp.id = av.id)
21                 JOIN biblio.record_entry b ON (b.id = av.record)
22                 LEFT JOIN config.bib_source src ON (b.source = src.id)
23           GROUP BY 1,2,6;
24     END LOOP;
25
26     RETURN;
27 END;
28 $f$ LANGUAGE PLPGSQL;
29
30 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$
31 DECLARE
32     ans RECORD;
33 BEGIN
34     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
35         RETURN QUERY
36         SELECT  -1,
37                 ans.id,
38                 COUNT( av.id ),
39                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
40                 COUNT( av.id ),
41                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END
42           FROM
43                 actor.org_unit_descendants(ans.id) d
44                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
45                 JOIN asset.copy cp ON (cp.id = av.id)
46                 JOIN biblio.record_entry b ON (b.id = av.record)
47                 LEFT JOIN config.bib_source src ON (b.source = src.id)
48           GROUP BY 1,2,6;
49     END LOOP;   
50                 
51     RETURN;     
52 END;            
53 $f$ LANGUAGE PLPGSQL;
54
55 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$
56 DECLARE         
57     ans RECORD; 
58 BEGIN           
59     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
60         RETURN QUERY
61         SELECT  ans.depth,
62                 ans.id,
63                 COUNT( cp.id ),
64                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
65                 COUNT( cp.id ),
66                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END 
67           FROM
68                 actor.org_unit_descendants(ans.id) d
69                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
70                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
71                 JOIN biblio.record_entry b ON (b.id = cn.record)
72                 LEFT JOIN config.bib_source src ON (b.source = src.id)
73           GROUP BY 1,2,6;
74     END LOOP;
75
76     RETURN;
77 END;
78 $f$ LANGUAGE PLPGSQL;
79
80 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$
81 DECLARE
82     ans RECORD;
83 BEGIN
84     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
85         RETURN QUERY
86         SELECT  -1,
87                 ans.id,
88                 COUNT( cp.id ),
89                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
90                 COUNT( cp.id ),
91                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END
92           FROM
93                 actor.org_unit_descendants(ans.id) d
94                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
95                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
96                 JOIN biblio.record_entry b ON (b.id = cn.record)
97                 LEFT JOIN config.bib_source src ON (b.source = src.id)
98           GROUP BY 1,2,6;
99     END LOOP;
100
101     RETURN;
102 END;
103 $f$ LANGUAGE PLPGSQL;
104
105 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$
106 BEGIN
107     IF staff IS TRUE THEN
108         IF place > 0 THEN
109             RETURN QUERY SELECT * FROM asset.staff_ou_record_copy_count( place, record );
110         ELSE
111             RETURN QUERY SELECT * FROM asset.staff_lasso_record_copy_count( -place, record );
112         END IF;
113     ELSE
114         IF place > 0 THEN
115             RETURN QUERY SELECT * FROM asset.opac_ou_record_copy_count( place, record );
116         ELSE
117             RETURN QUERY SELECT * FROM asset.opac_lasso_record_copy_count( -place, record );
118         END IF;
119     END IF;
120
121     RETURN;
122 END;
123 $f$ LANGUAGE PLPGSQL;
124
125 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$
126 DECLARE
127     ans RECORD;
128 BEGIN
129     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
130         RETURN QUERY
131         SELECT  ans.depth,
132                 ans.id,
133                 COUNT( av.id ),
134                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
135                 COUNT( av.id ),
136                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END
137           FROM  
138                 actor.org_unit_descendants(ans.id) d
139                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
140                 JOIN asset.copy cp ON (cp.id = av.id)
141                 JOIN biblio.record_entry b ON (b.id = av.record)
142                 JOIN metabib.metarecord_source_map m ON (m.source = av.record)
143                 LEFT JOIN config.bib_source src ON (b.source = src.id)
144           GROUP BY 1,2,6;
145     END LOOP;
146
147     RETURN;
148 END;
149 $f$ LANGUAGE PLPGSQL;
150
151 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$
152 DECLARE
153     ans RECORD;
154 BEGIN
155     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
156         RETURN QUERY
157         SELECT  -1,
158                 ans.id,
159                 COUNT( av.id ),
160                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
161                 COUNT( av.id ),
162                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END
163           FROM
164                 actor.org_unit_descendants(ans.id) d
165                 JOIN asset.opac_visible_copies av ON (av.record = record AND av.circ_lib = d.id)
166                 JOIN asset.copy cp ON (cp.id = av.id)
167                 JOIN biblio.record_entry b ON (b.id = av.record)
168                 JOIN metabib.metarecord_source_map m ON (m.source = av.record)
169                 LEFT JOIN config.bib_source src ON (b.source = src.id)
170           GROUP BY 1,2,6;
171     END LOOP;   
172                 
173     RETURN;     
174 END;            
175 $f$ LANGUAGE PLPGSQL;
176
177 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$
178 DECLARE         
179     ans RECORD; 
180 BEGIN           
181     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
182         RETURN QUERY
183         SELECT  ans.depth,
184                 ans.id,
185                 COUNT( cp.id ),
186                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
187                 COUNT( cp.id ),
188                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END 
189           FROM
190                 actor.org_unit_descendants(ans.id) d
191                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
192                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
193                 JOIN biblio.record_entry b ON (b.id = cn.record)
194                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
195                 LEFT JOIN config.bib_source src ON (b.source = src.id)
196           GROUP BY 1,2,6;
197     END LOOP;
198
199     RETURN;
200 END;
201 $f$ LANGUAGE PLPGSQL;
202
203 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$
204 DECLARE
205     ans RECORD;
206 BEGIN
207     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
208         RETURN QUERY
209         SELECT  -1,
210                 ans.id,
211                 COUNT( cp.id ),
212                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
213                 COUNT( cp.id ),
214                 CASE WHEN src.transcendant THEN 1 ELSE NULL::INT END
215           FROM
216                 actor.org_unit_descendants(ans.id) d
217                 JOIN asset.copy cp ON (cp.circ_lib = d.id)
218                 JOIN asset.call_number cn ON (cn.record = record AND cn.id = cp.call_number)
219                 JOIN biblio.record_entry b ON (b.id = cn.record)
220                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
221                 LEFT JOIN config.bib_source src ON (b.source = src.id)
222           GROUP BY 1,2,6;
223     END LOOP;
224
225     RETURN;
226 END;
227 $f$ LANGUAGE PLPGSQL;
228
229 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$
230 BEGIN
231     IF staff IS TRUE THEN
232         IF place > 0 THEN
233             RETURN QUERY SELECT * FROM asset.staff_ou_metarecord_copy_count( place, record );
234         ELSE
235             RETURN QUERY SELECT * FROM asset.staff_lasso_metarecord_copy_count( -place, record );
236         END IF;
237     ELSE
238         IF place > 0 THEN
239             RETURN QUERY SELECT * FROM asset.opac_ou_metarecord_copy_count( place, record );
240         ELSE
241             RETURN QUERY SELECT * FROM asset.opac_lasso_metarecord_copy_count( -place, record );
242         END IF;
243     END IF;
244
245     RETURN;
246 END;
247 $f$ LANGUAGE PLPGSQL;
248
249  COMMIT;
250