From d38d0e7fb744b914b5df952b79becb17eae44df6 Mon Sep 17 00:00:00 2001 From: Thomas Berezansky Date: Tue, 26 Aug 2014 12:14:11 -0400 Subject: [PATCH] LP#778989: Add circ lib to location fixer Because the circ lib is valid for picking locations. Signed-off-by: Thomas Berezansky Signed-off-by: Chris Sharp Signed-off-by: Ben Shum --- Open-ILS/src/sql/Pg/040.schema.asset.sql | 7 +++++-- Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Open-ILS/src/sql/Pg/040.schema.asset.sql b/Open-ILS/src/sql/Pg/040.schema.asset.sql index 3eaea6b38a..2381fdb543 100644 --- a/Open-ILS/src/sql/Pg/040.schema.asset.sql +++ b/Open-ILS/src/sql/Pg/040.schema.asset.sql @@ -175,11 +175,14 @@ DECLARE new_copy_location INT; BEGIN IF (TG_OP = 'UPDATE') THEN - IF NEW.location = OLD.location AND NEW.call_number = OLD.call_number THEN + IF NEW.location = OLD.location AND NEW.call_number = OLD.call_number AND NEW.circ_lib = OLD.circ_lib THEN RETURN NEW; END IF; END IF; SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance((SELECT owning_lib FROM asset.call_number WHERE id = NEW.call_number)) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; + IF new_copy_location IS NULL THEN + SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance(NEW.circ_lib) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; + END IF; IF new_copy_location IS NOT NULL THEN NEW.location = new_copy_location; END IF; @@ -188,7 +191,7 @@ END; $$ LANGUAGE plpgsql; CREATE TRIGGER acp_location_fixer_trig - BEFORE INSERT OR UPDATE ON asset.copy + BEFORE INSERT OR UPDATE OF location, call_number, circ_lib ON asset.copy FOR EACH ROW EXECUTE PROCEDURE asset.acp_location_fixer(); CREATE TABLE asset.stat_cat_sip_fields ( diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql index 4a5d4d0a37..c0a8fc5fb4 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql @@ -4,11 +4,14 @@ DECLARE new_copy_location INT; BEGIN IF (TG_OP = 'UPDATE') THEN - IF NEW.location = OLD.location AND NEW.call_number = OLD.call_number THEN + IF NEW.location = OLD.location AND NEW.call_number = OLD.call_number AND NEW.circ_lib = OLD.circ_lib THEN RETURN NEW; END IF; END IF; SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance((SELECT owning_lib FROM asset.call_number WHERE id = NEW.call_number)) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; + IF new_copy_location IS NULL THEN + SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance(NEW.circ_lib) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; + END IF; IF new_copy_location IS NOT NULL THEN NEW.location = new_copy_location; END IF; @@ -17,6 +20,6 @@ END; $$ LANGUAGE plpgsql; CREATE TRIGGER acp_location_fixer_trig - BEFORE INSERT OR UPDATE ON asset.copy + BEFORE INSERT OR UPDATE OF location, call_number, circ_lib ON asset.copy FOR EACH ROW EXECUTE PROCEDURE asset.acp_location_fixer(); -- 2.43.2