Copy Location Groups : sort to top option
authorBill Erickson <berick@esilibrary.com>
Thu, 1 Mar 2012 18:51:53 +0000 (13:51 -0500)
committerDan Scott <dan@coffeecode.net>
Sun, 11 Mar 2012 00:57:32 +0000 (19:57 -0500)
Adds a 'top' flag to copy_location_groups which, when enabled, will
cause the location group to sort above the child org units in the org
unit selector in the tpac.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Dan Scott <dan@coffeecode.net>
Open-ILS/examples/fm_IDL.xml
Open-ILS/src/sql/Pg/040.schema.asset.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.copy_loc_search_groups.sql
Open-ILS/src/templates/opac/parts/org_selector.tt2

index c7bb14d..94e1aa2 100644 (file)
@@ -3935,6 +3935,7 @@ SELECT  usr,
                        <field reporter:label="Is OPAC Visible?" name="opac_visible" reporter:datatype="bool"/>
                        <field reporter:label="Owning Org Unit" name="owner"  reporter:datatype="org_unit"/>
             <field reporter:label="Position" name="pos" reporter:datatype="int"/>
                        <field reporter:label="Is OPAC Visible?" name="opac_visible" reporter:datatype="bool"/>
                        <field reporter:label="Owning Org Unit" name="owner"  reporter:datatype="org_unit"/>
             <field reporter:label="Position" name="pos" reporter:datatype="int"/>
+            <field reporter:label="Display Above Orgs" name="top" reporter:datatype="bool"/>
             <field reporter:label="Copy Location Mappings" name="location_maps" oils_persist:virtual="true" reporter:datatype="link"/>
                </fields>
                <links>
             <field reporter:label="Copy Location Mappings" name="location_maps" oils_persist:virtual="true" reporter:datatype="link"/>
                </fields>
                <links>
index 85d58f6..d98fc75 100644 (file)
@@ -55,6 +55,7 @@ CREATE TABLE asset.copy_location_group (
     name            TEXT    NOT NULL, -- i18n
     owner           INT     NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
     pos             INT     NOT NULL DEFAULT 0,
     name            TEXT    NOT NULL, -- i18n
     owner           INT     NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
     pos             INT     NOT NULL DEFAULT 0,
+    top             BOOL    NOT NULL DEFAULT FALSE,
     opac_visible    BOOL    NOT NULL DEFAULT TRUE,
     CONSTRAINT lgroup_once_per_owner UNIQUE (owner,name)
 );
     opac_visible    BOOL    NOT NULL DEFAULT TRUE,
     CONSTRAINT lgroup_once_per_owner UNIQUE (owner,name)
 );
index a6dd74a..9e393d9 100644 (file)
@@ -7,6 +7,7 @@ CREATE TABLE asset.copy_location_group (
     name            TEXT    NOT NULL, -- i18n
     owner           INT     NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
     pos             INT     NOT NULL DEFAULT 0,
     name            TEXT    NOT NULL, -- i18n
     owner           INT     NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
     pos             INT     NOT NULL DEFAULT 0,
+    top             BOOL    NOT NULL DEFAULT FALSE,
     opac_visible    BOOL    NOT NULL DEFAULT TRUE,
     CONSTRAINT lgroup_once_per_owner UNIQUE (owner,name)
 );
     opac_visible    BOOL    NOT NULL DEFAULT TRUE,
     CONSTRAINT lgroup_once_per_owner UNIQUE (owner,name)
 );
index a2c222e..5b55e90 100644 (file)
@@ -29,15 +29,30 @@ BLOCK build_org_selector;
 
             NEXT UNLESS ctx.is_staff || org_unit.opac_visible == 't';
 
 
             NEXT UNLESS ctx.is_staff || org_unit.opac_visible == 't';
 
-            IF !loc_grp;
+            IF !loc_grp; # processing an org unit
+
+                top_loc_groups = [];
                 IF show_loc_groups;
                 IF show_loc_groups;
+                    # add the location groups that sort below the child org units
                     FOR grp IN ctx.copy_location_groups.$ou_id.reverse;
                     FOR grp IN ctx.copy_location_groups.$ou_id.reverse;
-                        node_stack.push({org => org_unit, loc_grp => grp});
+                        IF grp.top == 't';
+                            top_loc_groups.push(grp);
+                        ELSE;
+                            node_stack.push({org => org_unit, loc_grp => grp});
+                        END;
                     END;
                 END;
                     END;
                 END;
+
+                # add the child org units
                 FOR child IN org_unit.children.reverse;
                     node_stack.push({org => child});
                 END;
                 FOR child IN org_unit.children.reverse;
                     node_stack.push({org => child});
                 END;
+
+                # add the location groups that sort to the top
+                # above the child org units
+                FOR grp IN top_loc_groups;
+                    node_stack.push({org => org_unit, loc_grp => grp});
+                END;
             END;
 
             node_value = ou_id;
             END;
 
             node_value = ou_id;