Org unit sibling display sort order
authorBill Erickson <berick@esilibrary.com>
Mon, 12 Mar 2012 18:11:47 +0000 (14:11 -0400)
committerMike Rylander <mrylander@gmail.com>
Mon, 2 Apr 2012 16:15:49 +0000 (12:15 -0400)
Adds a new "sibling_order" column to actor.org_unit which specifies the
order in which an org unit should be sorted as compared to its sibling
org units in org unit trees.

This commit adds the IDL/DB components.  It also updates the tpac and
the generic get_org_tree API.  (Note, a follow-up commit will be pushed
to remove some deprecated / reduntant org tree retrievals).

Note that the sibling_order values do not have to be unique within each
set of siblings.  The org unit name is still used as a tie-breaker sort,
so if the sort order is left unset (i.e. all values are 0), org units
will fall back to name-only sorting.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/examples/fm_IDL.xml
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
Open-ILS/src/sql/Pg/005.schema.actors.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.org_unit_opac_vis_and_sorting.sql

index c9357ba..8de132d 100644 (file)
@@ -4944,6 +4944,7 @@ SELECT  usr,
                        <field reporter:label="Resource Attributes" name="rsrc_attrs" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="Attribute Values" name="attr_vals" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="Hours of Operation" name="hours_of_operation" oils_persist:virtual="true" reporter:datatype="link"/>
+                       <field reporter:label="Sibling Sort Order" name="sibling_order" reporter:datatype="int"/>
                </fields>
                <links>
                        <link field="billing_address" reltype="has_a" key="id" map="" class="aoa"/>
index f46587f..aa0be42 100644 (file)
@@ -87,7 +87,7 @@ sub init_ro_object_cache {
                            {   parent_ou => undef},
                            {   flesh            => -1,
                                    flesh_fields    => {aou =>  ['children']},
-                                   order_by        => {aou => 'name'}
+                                   order_by        => {aou => 'sibling_order, name'}
                            }
                    ])->[0];
 
index 4f9f39b..2a4429c 100644 (file)
@@ -295,7 +295,8 @@ CREATE TABLE actor.org_unit (
        email           TEXT,
        phone           TEXT,
        opac_visible    BOOL    NOT NULL DEFAULT TRUE,
-       fiscal_calendar INT     NOT NULL DEFAULT 1   -- foreign key constraint to be added later
+       fiscal_calendar INT     NOT NULL DEFAULT 1,   -- foreign key constraint to be added later
+       sibling_order   INT     NOT NULL DEFAULT 0 
 );
 CREATE INDEX actor_org_unit_parent_ou_idx ON actor.org_unit (parent_ou);
 CREATE INDEX actor_org_unit_ou_type_idx ON actor.org_unit (ou_type);
index 115613a..d387280 100644 (file)
@@ -14,11 +14,19 @@ INSERT INTO config.global_flag (name, enabled, label)
         )
     );
 
+ALTER TABLE actor.org_unit ADD COLUMN 
+    sibling_order INTEGER NOT NULL DEFAULT 0; 
+
+ALTER TABLE auditor.actor_org_unit_history ADD COLUMN 
+    sibling_order INTEGER NOT NULL DEFAULT 0;
+
 COMMIT;
 
 /* UNDO
 BEGIN;
 DELETE FROM config.global_flag WHERE name = 'opac.org_unit.non_inheritied_visibility';
+ALTER TABLE actor.org_unit DROP COLUMN sibling_order;
+ALTER TABLE auditor.actor_org_unit_history DROP COLUMN sibling_order;
 COMMIT;
 */