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=cd85e4df8aa1767d28fcc854386eed50db3b1c84;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 735cc64050..165eb7d7d8 100644 --- a/Open-ILS/src/sql/Pg/040.schema.asset.sql +++ b/Open-ILS/src/sql/Pg/040.schema.asset.sql @@ -204,9 +204,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;