]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0490.schema.staff-client-copy-counts.sql
LP#1806968 Teach Vandelay to pass correct auth tracker type
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0490.schema.staff-client-copy-counts.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0490'); -- miker
4
5 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$
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 = rid;
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( cp.id ),
17                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
18                 COUNT( cp.id ),
19                 trans
20           FROM
21                 actor.org_unit_descendants(ans.id) d
22                 JOIN asset.copy cp ON (cp.circ_lib = d.id AND NOT cp.deleted)
23                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
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.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$
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 = rid;
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( cp.id ),
48                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
49                 COUNT( cp.id ),
50                 trans
51           FROM
52                 actor.org_unit_descendants(ans.id) d
53                 JOIN asset.copy cp ON (cp.circ_lib = d.id AND NOT cp.deleted)
54                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
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_metarecord_copy_count (org INT, rid 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 = rid;
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 AND NOT cp.deleted)
85                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
86                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
87           GROUP BY 1,2,6;
88
89         IF NOT FOUND THEN
90             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
91         END IF;
92
93     END LOOP;
94
95     RETURN;
96 END;
97 $f$ LANGUAGE PLPGSQL;
98
99 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$
100 DECLARE
101     ans RECORD;
102     trans INT;
103 BEGIN
104     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;
105
106     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
107         RETURN QUERY
108         SELECT  -1,
109                 ans.id,
110                 COUNT( cp.id ),
111                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
112                 COUNT( cp.id ),
113                 trans
114           FROM
115                 actor.org_unit_descendants(ans.id) d
116                 JOIN asset.copy cp ON (cp.circ_lib = d.id AND NOT cp.deleted)
117                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
118                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
119           GROUP BY 1,2,6;
120
121         IF NOT FOUND THEN
122             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
123         END IF;
124
125     END LOOP;
126
127     RETURN;
128 END;
129 $f$ LANGUAGE PLPGSQL;
130
131 COMMIT;
132