</actions>
</permacrud>
</class>
+ <class id="asfg" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::search_filter_group" oils_persist:tablename="actor.search_filter_group" reporter:label="Org Address">
+ <fields oils_persist:primary="id" oils_persist:sequence="actor.search_filter_group_id_seq">
+ <field name="id" reporter:datatype="id" reporter:selector="label"/>
+ <field name="owner" reporter:datatype="org_unit"/>
+ <field name="code" reporter:datatype="text"/>
+ <field name="label" reporter:datatype="text" oils_persist:i18n="true"/>
+ <field name="create_date" reporter:datatype="timestamp"/>
+ <field name="entries" oils_persist:virtual="true" reporter:datatype="link"/>
+ </fields>
+ <links>
+ <link field="owner" reltype="has_a" key="id" map="" class="aou"/>
+ <link field="entries" reltype="has_many" key="grp" map="" class="asfge"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="ADMIN_SEARCH_FILTER_GROUP" context_field="owner"/>
+ <retrieve/>
+ <update permission="ADMIN_SEARCH_FILTER_GROUP" context_field="owner"/>
+ <delete permission="ADMIN_SEARCH_FILTER_GROUP" context_field="owner"/>
+ </actions>
+ </permacrud>
+ </class>
+ <class id="asfge" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="actor::search_filter_group_entry" oils_persist:tablename="actor.search_filter_group_entry" reporter:label="Org Address">
+ <fields oils_persist:primary="id" oils_persist:sequence="actor.search_filter_group_entry_id_seq">
+ <field name="id" reporter:datatype="id" reporter:selector="label"/>
+ <field name="grp" reporter:datatype="link"/>
+ <field name="label" reporter:datatype="text" oils_persist:i18n="true"/>
+ <field name="query_text" reporter:datatype="text"/>
+ </fields>
+ <links>
+ <link field="grp" reltype="has_a" key="id" map="" class="asfge"/>
+ </links>
+ <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+ <actions>
+ <create permission="ADMIN_SEARCH_FILTER_GROUP">
+ <context link="grp" field="owner"/>
+ </create>
+ <retrieve/>
+ <update permission="ADMIN_SEARCH_FILTER_GROUP" context_field="owner">
+ <context link="grp" field="owner"/>
+ </update>
+ <delete permission="ADMIN_SEARCH_FILTER_GROUP" context_field="owner">
+ <context link="grp" field="owner"/>
+ </delete>
+ </actions>
+ </permacrud>
+ </class>
+
<!-- A note: Please update alhr when updating ahr -->
<class id="ahr" controller="open-ils.cstore" oils_obj:fieldmapper="action::hold_request" oils_persist:tablename="action.hold_request" reporter:core="true" reporter:label="Hold Request">
<fields oils_persist:primary="id" oils_persist:sequence="action.hold_request_id_seq">
parent_node INTEGER REFERENCES actor.org_unit_custom_tree_node (id) DEFERRABLE INITIALLY DEFERRED,
sibling_order INTEGER NOT NULL DEFAULT 0,
CONSTRAINT aouctn_once_per_org UNIQUE (tree, org_unit)
+
+CREATE TABLE actor.search_filter_group (
+ id SERIAL PRIMARY KEY,
+ owner INT NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ code TEXT NOT NULL, -- use in templates / CGI params
+ label TEXT NOT NULL, -- i18n
+ create_date TIMESTAMPTZ NOT NULL DEFAULT now(),
+ CONSTRAINT code_once_per_org UNIQUE (owner, code)
+);
+
+CREATE TABLE actor.search_filter_group_entry (
+ id SERIAL PRIMARY KEY,
+ grp INT NOT NULL REFERENCES actor.search_filter_group(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ label TEXT NOT NULL, -- i18n
+ query_text TEXT NOT NULL, -- QP text
+ CONSTRAINT query_once_per_group UNIQUE (grp, query_text)
);
COMMIT;
--- /dev/null
+
+BEGIN;
+
+CREATE TABLE actor.search_filter_group (
+ id SERIAL PRIMARY KEY,
+ owner INT NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ code TEXT NOT NULL, -- use in templates / CGI params
+ label TEXT NOT NULL, -- i18n
+ create_date TIMESTAMPTZ NOT NULL DEFAULT now(),
+ CONSTRAINT code_once_per_org UNIQUE (owner, code)
+);
+
+
+CREATE TABLE actor.search_filter_group_entry (
+ id SERIAL PRIMARY KEY,
+ grp INT NOT NULL REFERENCES actor.search_filter_group(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ label TEXT NOT NULL, -- i18n
+ query_text TEXT NOT NULL, -- QP text
+ CONSTRAINT query_once_per_group UNIQUE (grp, query_text)
+);
+
+COMMIT;
+
+/*
+-- Fictional Example
+INSERT INTO actor.search_filter_group (owner, code, label) VALUES (4, 'reading_level', 'Reading Level');
+INSERT INTO actor.search_filter_group_entry (grp, label, query_text) VALUES (1, 'Children', 'audience(a,b,c) || locations(3,4,5,6)');
+INSERT INTO actor.search_filter_group_entry (grp, label, query_text) VALUES (1, 'Juvenile', '(audience(j,d) && locations(1,2,7,8)) || locations(10, 11, 12, 13)');
+INSERT INTO actor.search_filter_group_entry (grp, label, query_text) VALUES (1, 'General', 'audience(e,f,g)');
+*/
+
+/* UNDO
+DROP TABLE actor.search_filter_group_entry;
+DROP TABLE actor.search_filter_group;
+*/