1 CREATE OR REPLACE FUNCTION asset.record_has_holdable_copy ( rid BIGINT ) RETURNS BOOL AS $f$
6 JOIN asset.call_number acn ON acp.call_number = acn.id
7 JOIN asset.copy_location acpl ON acp.location = acpl.id
8 JOIN config.copy_status ccs ON acp.status = ccs.id
11 AND acp.holdable = true
12 AND acpl.holdable = true
13 AND ccs.holdable = true
14 AND acp.deleted = false
23 CREATE OR REPLACE FUNCTION asset.metarecord_has_holdable_copy ( rid BIGINT ) RETURNS BOOL AS $f$
28 JOIN asset.call_number acn ON acp.call_number = acn.id
29 JOIN asset.copy_location acpl ON acp.location = acpl.id
30 JOIN config.copy_status ccs ON acp.status = ccs.id
31 JOIN metabib.metarecord_source_map mmsm ON acn.record = mmsm.source
34 AND acp.holdable = true
35 AND acpl.holdable = true
36 AND ccs.holdable = true
37 AND acp.deleted = false
46 CREATE OR REPLACE FUNCTION unapi.holdings_xml (
50 depth INT DEFAULT NULL,
51 includes TEXT[] DEFAULT NULL::TEXT[],
52 slimit HSTORE DEFAULT NULL,
53 soffset HSTORE DEFAULT NULL,
54 include_xmlns BOOL DEFAULT TRUE,
55 pref_lib INT DEFAULT NULL
61 CASE WHEN $8 THEN 'http://open-ils.org/spec/holdings/v1' ELSE NULL END AS xmlns,
62 CASE WHEN ('bre' = ANY ($5)) THEN 'tag:open-ils.org:U2@bre/' || $1 || '/' || $3 ELSE NULL END AS id,
63 (SELECT record_has_holdable_copy FROM asset.record_has_holdable_copy($1)) AS has_holdable
67 (SELECT XMLAGG(XMLELEMENT::XML) FROM (
70 XMLATTRIBUTES('public' as type, depth, org_unit, coalesce(transcendant,0) as transcendant, available, visible as count, unshadow)
72 FROM asset.opac_ou_record_copy_count($2, $1)
76 XMLATTRIBUTES('staff' as type, depth, org_unit, coalesce(transcendant,0) as transcendant, available, visible as count, unshadow)
78 FROM asset.staff_ou_record_copy_count($2, $1)
82 XMLATTRIBUTES('pref_lib' as type, depth, org_unit, coalesce(transcendant,0) as transcendant, available, visible as count, unshadow)
84 FROM asset.opac_ou_record_copy_count($9, $1)
89 WHEN ('bmp' = ANY ($5)) THEN
92 (SELECT XMLAGG(bmp) FROM (
93 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)
94 FROM biblio.monograph_part
102 (SELECT XMLAGG(acn ORDER BY rank, name, label_sortkey) FROM (
104 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
105 FROM evergreen.ranked_volumes($1, $2, $4, $6, $7, $9) AS y
108 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), 0, name, label_sortkey
109 FROM evergreen.located_uris($1, $2, $9) AS uris
112 CASE WHEN ('ssub' = ANY ($5)) THEN
115 (SELECT XMLAGG(ssub) FROM (
116 SELECT unapi.ssub(id,'xml','subscription','{}'::TEXT[], $3, $4, $6, $7, FALSE)
117 FROM serial.subscription
118 WHERE record_entry = $1
122 CASE WHEN ('acp' = ANY ($5)) THEN
125 (SELECT XMLAGG(acp) FROM (
126 SELECT unapi.acp(p.target_copy,'xml','copy',evergreen.array_remove_item_by_value($5,'acp'), $3, $4, $6, $7, FALSE)
127 FROM biblio.peer_bib_copy_map p
128 JOIN asset.copy c ON (p.target_copy = c.id)
129 WHERE NOT c.deleted AND p.peer_record = $1
130 LIMIT ($6 -> 'acp')::INT
131 OFFSET ($7 -> 'acp')::INT
136 $F$ LANGUAGE SQL STABLE;