LP#778989: Add circ lib to location fixer
authorThomas Berezansky <tsbere@mvlc.org>
Tue, 26 Aug 2014 16:14:11 +0000 (12:14 -0400)
committerBen Shum <bshum@biblio.org>
Tue, 11 Nov 2014 01:31:18 +0000 (20:31 -0500)
Because the circ lib is valid for picking locations.

Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Ben Shum <bshum@biblio.org>
Open-ILS/src/sql/Pg/040.schema.asset.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql

index 3eaea6b..2381fdb 100644 (file)
@@ -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 (
index 4a5d4d0..c0a8fc5 100644 (file)
@@ -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();