search filter group : DB / IDL
authorBill Erickson <berick@esilibrary.com>
Thu, 23 Feb 2012 19:28:50 +0000 (14:28 -0500)
committerMike Rylander <mrylander@gmail.com>
Wed, 18 Apr 2012 17:27:51 +0000 (13:27 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/examples/fm_IDL.xml
Open-ILS/src/sql/Pg/005.schema.actors.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.search_query_groups.sql [new file with mode: 0644]

index 9d9b30f..2887cea 100644 (file)
@@ -4766,6 +4766,54 @@ SELECT  usr,
             </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">
index 21363b9..5d1bd92 100644 (file)
@@ -679,6 +679,22 @@ CREATE TABLE actor.org_unit_custom_tree_node (
        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;
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.search_query_groups.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.search_query_groups.sql
new file mode 100644 (file)
index 0000000..89b23a3
--- /dev/null
@@ -0,0 +1,35 @@
+
+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;
+*/