From ac36c3a6a2cc00a41834b88979f2d2a2c061818a Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Fri, 12 Aug 2011 12:18:54 -0400 Subject: [PATCH] lp#825303: fix cat.default_classification_scheme lookup Fixes a bug where the wrong default classification scheme could be chosen when adding a new volume whose classification scheme was not explicitly set. Signed-off-by: Galen Charlton Signed-off-by: Mike Rylander --- Open-ILS/src/sql/Pg/040.schema.asset.sql | 4 +- .../XXXX.fix_cat_default_class_lookup.sql | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.fix_cat_default_class_lookup.sql diff --git a/Open-ILS/src/sql/Pg/040.schema.asset.sql b/Open-ILS/src/sql/Pg/040.schema.asset.sql index 4698e3f8d6..ca584a1964 100644 --- a/Open-ILS/src/sql/Pg/040.schema.asset.sql +++ b/Open-ILS/src/sql/Pg/040.schema.asset.sql @@ -262,9 +262,7 @@ BEGIN NEW.label_class := COALESCE( ( SELECT substring(value from E'\\d+')::integer - FROM actor.org_unit_setting - WHERE name = 'cat.default_classification_scheme' - AND org_unit = NEW.owning_lib + FROM actor.org_unit_ancestor_setting('cat.default_classification_scheme', NEW.owning_lib) ), 1 ); END IF; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.fix_cat_default_class_lookup.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.fix_cat_default_class_lookup.sql new file mode 100644 index 0000000000..5f52d891a3 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.fix_cat_default_class_lookup.sql @@ -0,0 +1,38 @@ +-- Evergreen DB patch XXXX.fix_cat_default_class_lookup.sql +-- +-- Fix LP#825303 by allowing for ancestor OUs to be checked +-- when retrieving the default classification scheme. +-- +BEGIN; + + +-- check whether patch can be applied +SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); + +CREATE OR REPLACE FUNCTION asset.label_normalizer() RETURNS TRIGGER AS $func$ +DECLARE + sortkey TEXT := ''; +BEGIN + sortkey := NEW.label_sortkey; + + IF NEW.label_class IS NULL THEN + NEW.label_class := COALESCE( + ( + SELECT substring(value from E'\\d+')::integer + FROM actor.org_unit_ancestor_setting('cat.default_classification_scheme', NEW.owning_lib) + ), 1 + ); + END IF; + + EXECUTE 'SELECT ' || acnc.normalizer || '(' || + quote_literal( NEW.label ) || ')' + FROM asset.call_number_class acnc + WHERE acnc.id = NEW.label_class + INTO sortkey; + NEW.label_sortkey = sortkey; + RETURN NEW; +END; +$func$ LANGUAGE PLPGSQL; + + +COMMIT; -- 2.43.2