Alter asset.acp_status_changed function.
authorJason Stephenson <jstephenson@mvlc.org>
Sun, 8 Sep 2013 17:20:56 +0000 (13:20 -0400)
committerJason Stephenson <jstephenson@mvlc.org>
Sun, 8 Sep 2013 17:20:56 +0000 (13:20 -0400)
It should only change status_changed_time if NEW.status_changed_time
is NULL or equal to OLD.status_changed_time.

Signed-off-by: Jason Stephenson <jstephenson@mvlc.org>
Open-ILS/src/sql/Pg/040.schema.asset.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.function.acp_status_changed.sql [new file with mode: 0644]

index dea51fd..8996f5b 100644 (file)
@@ -138,7 +138,9 @@ CREATE OR REPLACE FUNCTION asset.acp_status_changed()
 RETURNS TRIGGER AS $$
 BEGIN
        IF NEW.status <> OLD.status AND NOT (NEW.status = 0 AND OLD.status = 7) THEN
-        NEW.status_changed_time := now();
+        IF NEW.status_changed_time IS NULL OR OLD.status_changed_time = NEW.status_changed_time THEN
+            NEW.status_changed_time := now();
+        END IF;
         IF NEW.active_date IS NULL AND NEW.status IN (SELECT id FROM config.copy_status WHERE copy_active = true) THEN
             NEW.active_date := now();
         END IF;
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.function.acp_status_changed.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.function.acp_status_changed.sql
new file mode 100644 (file)
index 0000000..1ea718f
--- /dev/null
@@ -0,0 +1,14 @@
+CREATE OR REPLACE FUNCTION asset.acp_status_changed()
+RETURNS TRIGGER AS $$
+BEGIN
+    IF NEW.status <> OLD.status AND NOT (NEW.status = 0 AND OLD.status = 7) THEN
+        IF NEW.status_changed_time IS NULL OR OLD.status_changed_time = NEW.status_changed_time THEN
+            NEW.status_changed_time := now();
+        END IF;
+        IF NEW.active_date IS NULL AND NEW.status IN (SELECT id FROM config.copy_status WHERE copy_active = true) THEN
+            NEW.active_date := now();
+        END IF;
+    END IF;
+    RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;