From: Galen Charlton Date: Fri, 12 Aug 2011 16:18:54 +0000 (-0400) Subject: lp#825303: fix cat.default_classification_scheme lookup X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=1de396bceb1a22ba828f49d1f85bf52f1dec115a;p=Evergreen.git 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 --- diff --git a/Open-ILS/src/sql/Pg/040.schema.asset.sql b/Open-ILS/src/sql/Pg/040.schema.asset.sql index acfa065c90..cfdb46f6f0 100644 --- a/Open-ILS/src/sql/Pg/040.schema.asset.sql +++ b/Open-ILS/src/sql/Pg/040.schema.asset.sql @@ -194,9 +194,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;