]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/XXXX.schema.fake-delete-parts.sql
LP#937789: Hide 'deleted' from parts table & editor
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.fake-delete-parts.sql
1 BEGIN;
2
3 ALTER TABLE biblio.monograph_part ADD COLUMN deleted BOOL NOT NULL DEFAULT FALSE;
4 CREATE RULE protect_mono_part_delete AS ON DELETE TO biblio.monograph_part DO INSTEAD (
5     UPDATE biblio.monograph_part SET deleted = TRUE WHERE OLD.id = biblio.monograph_part.id;
6     DELETE FROM asset.copy_part_map WHERE part = OLD.id
7 );
8
9 CREATE OR REPLACE FUNCTION unapi.holdings_xml (
10     bid BIGINT,
11     ouid INT,
12     org TEXT,
13     depth INT DEFAULT NULL,
14     includes TEXT[] DEFAULT NULL::TEXT[],
15     slimit HSTORE DEFAULT NULL,
16     soffset HSTORE DEFAULT NULL,
17     include_xmlns BOOL DEFAULT TRUE,
18     pref_lib INT DEFAULT NULL
19 )
20 RETURNS XML AS $F$
21      SELECT  XMLELEMENT(
22                  name holdings,
23                  XMLATTRIBUTES(
24                     CASE WHEN $8 THEN 'http://open-ils.org/spec/holdings/v1' ELSE NULL END AS xmlns,
25                     CASE WHEN ('bre' = ANY ($5)) THEN 'tag:open-ils.org:U2@bre/' || $1 || '/' || $3 ELSE NULL END AS id,
26                     (SELECT record_has_holdable_copy FROM asset.record_has_holdable_copy($1)) AS has_holdable
27                  ),
28                  XMLELEMENT(
29                      name counts,
30                      (SELECT  XMLAGG(XMLELEMENT::XML) FROM (
31                          SELECT  XMLELEMENT(
32                                      name count,
33                                      XMLATTRIBUTES('public' as type, depth, org_unit, coalesce(transcendant,0) as transcendant, available, visible as count, unshadow)
34                                  )::text
35                            FROM  asset.opac_ou_record_copy_count($2,  $1)
36                                      UNION
37                          SELECT  XMLELEMENT(
38                                      name count,
39                                      XMLATTRIBUTES('staff' as type, depth, org_unit, coalesce(transcendant,0) as transcendant, available, visible as count, unshadow)
40                                  )::text
41                            FROM  asset.staff_ou_record_copy_count($2, $1)
42                                      UNION
43                          SELECT  XMLELEMENT(
44                                      name count,
45                                      XMLATTRIBUTES('pref_lib' as type, depth, org_unit, coalesce(transcendant,0) as transcendant, available, visible as count, unshadow)
46                                  )::text
47                            FROM  asset.opac_ou_record_copy_count($9,  $1)
48                                      ORDER BY 1
49                      )x)
50                  ),
51                  CASE 
52                      WHEN ('bmp' = ANY ($5)) THEN
53                         XMLELEMENT(
54                             name monograph_parts,
55                             (SELECT XMLAGG(bmp) FROM (
56                                 SELECT  unapi.bmp( id, 'xml', 'monograph_part', evergreen.array_remove_item_by_value( evergreen.array_remove_item_by_value($5,'bre'), 'holdings_xml'), $3, $4, $6, $7, FALSE)
57                                   FROM  biblio.monograph_part
58                                   WHERE NOT deleted AND record = $1
59                             )x)
60                         )
61                      ELSE NULL
62                  END,
63                  XMLELEMENT(
64                      name volumes,
65                      (SELECT XMLAGG(acn ORDER BY rank, name, label_sortkey) FROM (
66                         -- Physical copies
67                         SELECT  unapi.acn(y.id,'xml','volume',evergreen.array_remove_item_by_value( evergreen.array_remove_item_by_value($5,'holdings_xml'),'bre'), $3, $4, $6, $7, FALSE), y.rank, name, label_sortkey
68                         FROM evergreen.ranked_volumes($1, $2, $4, $6, $7, $9, $5) AS y
69                         UNION ALL
70                         -- Located URIs
71                         SELECT unapi.acn(uris.id,'xml','volume',evergreen.array_remove_item_by_value( evergreen.array_remove_item_by_value($5,'holdings_xml'),'bre'), $3, $4, $6, $7, FALSE), uris.rank, name, label_sortkey
72                         FROM evergreen.located_uris($1, $2, $9) AS uris
73                      )x)
74                  ),
75                  CASE WHEN ('ssub' = ANY ($5)) THEN 
76                      XMLELEMENT(
77                          name subscriptions,
78                          (SELECT XMLAGG(ssub) FROM (
79                             SELECT  unapi.ssub(id,'xml','subscription','{}'::TEXT[], $3, $4, $6, $7, FALSE)
80                               FROM  serial.subscription
81                               WHERE record_entry = $1
82                         )x)
83                      )
84                  ELSE NULL END,
85                  CASE WHEN ('acp' = ANY ($5)) THEN 
86                      XMLELEMENT(
87                          name foreign_copies,
88                          (SELECT XMLAGG(acp) FROM (
89                             SELECT  unapi.acp(p.target_copy,'xml','copy',evergreen.array_remove_item_by_value($5,'acp'), $3, $4, $6, $7, FALSE)
90                               FROM  biblio.peer_bib_copy_map p
91                                     JOIN asset.copy c ON (p.target_copy = c.id)
92                               WHERE NOT c.deleted AND p.peer_record = $1
93                             LIMIT ($6 -> 'acp')::INT
94                             OFFSET ($7 -> 'acp')::INT
95                         )x)
96                      )
97                  ELSE NULL END
98              );
99 $F$ LANGUAGE SQL STABLE;
100
101 CREATE OR REPLACE FUNCTION unapi.bmp ( obj_id BIGINT, format TEXT,  ename TEXT, includes TEXT[], org TEXT, depth INT DEFAULT NULL, slimit HSTORE DEFAULT NULL, soffset HSTORE DEFAULT NULL, include_xmlns BOOL DEFAULT TRUE ) RETURNS XML AS $F$
102         SELECT  XMLELEMENT(
103                     name monograph_part,
104                     XMLATTRIBUTES(
105                         CASE WHEN $9 THEN 'http://open-ils.org/spec/holdings/v1' ELSE NULL END AS xmlns,
106                         'tag:open-ils.org:U2@bmp/' || id AS id,
107                         id AS ident,
108                         label,
109                         label_sortkey,
110                         'tag:open-ils.org:U2@bre/' || record AS record
111                     ),
112                     CASE 
113                         WHEN ('acp' = ANY ($4)) THEN
114                             XMLELEMENT( name copies,
115                                 (SELECT XMLAGG(acp) FROM (
116                                     SELECT  unapi.acp( cp.id, 'xml', 'copy', evergreen.array_remove_item_by_value($4,'bmp'), $5, $6, $7, $8, FALSE)
117                                       FROM  asset.copy cp
118                                             JOIN asset.copy_part_map cpm ON (cpm.target_copy = cp.id)
119                                       WHERE cpm.part = $1
120                                           AND cp.deleted IS FALSE
121                                       ORDER BY COALESCE(cp.copy_number,0), cp.barcode
122                                       LIMIT ($7 -> 'acp')::INT
123                                       OFFSET ($8 -> 'acp')::INT
124
125                                 )x)
126                             )
127                         ELSE NULL
128                     END,
129                     CASE WHEN ('bre' = ANY ($4)) THEN unapi.bre( record, 'marcxml', 'record', evergreen.array_remove_item_by_value($4,'bmp'), $5, $6, $7, $8, FALSE) ELSE NULL END
130                 )
131           FROM  biblio.monograph_part
132           WHERE NOT deleted AND id = $1
133           GROUP BY id, label, label_sortkey, record;
134 $F$ LANGUAGE SQL STABLE;
135
136 COMMIT;
137