LP#1521693 Cross-porting Sqitch SQL for LP#1319998
authorBill Erickson <berickxx@gmail.com>
Tue, 29 Dec 2015 15:21:02 +0000 (10:21 -0500)
committerBill Erickson <berickxx@gmail.com>
Fri, 25 Mar 2016 17:59:16 +0000 (13:59 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/sql/schema/deploy/schema.materialized_billing_summary_delete_trigger.sql [new file with mode: 0644]
Open-ILS/src/sql/schema/revert/schema.materialized_billing_summary_delete_trigger.sql [new file with mode: 0644]
Open-ILS/src/sql/schema/sqitch.plan
Open-ILS/src/sql/schema/verify/schema.materialized_billing_summary_delete_trigger.sql [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/schema/deploy/schema.materialized_billing_summary_delete_trigger.sql b/Open-ILS/src/sql/schema/deploy/schema.materialized_billing_summary_delete_trigger.sql
new file mode 100644 (file)
index 0000000..59a32e4
--- /dev/null
@@ -0,0 +1,30 @@
+BEGIN;
+
+CREATE OR REPLACE FUNCTION money.materialized_summary_billing_del () RETURNS TRIGGER AS $$
+DECLARE
+        prev_billing    money.billing%ROWTYPE;
+        old_billing     money.billing%ROWTYPE;
+BEGIN
+        SELECT * INTO prev_billing FROM money.billing WHERE xact = OLD.xact AND NOT voided ORDER BY billing_ts DESC LIMIT 1 OFFSET 1;
+        SELECT * INTO old_billing FROM money.billing WHERE xact = OLD.xact AND NOT voided ORDER BY billing_ts DESC LIMIT 1;
+
+        IF OLD.id = old_billing.id THEN
+                UPDATE  money.materialized_billable_xact_summary
+                  SET   last_billing_ts = prev_billing.billing_ts,
+                        last_billing_note = prev_billing.note,
+                        last_billing_type = prev_billing.billing_type
+                  WHERE id = OLD.xact;
+        END IF;
+
+        IF NOT OLD.voided THEN
+                UPDATE  money.materialized_billable_xact_summary
+                  SET   total_owed = total_owed - OLD.amount,
+                        balance_owed = balance_owed - OLD.amount
+                  WHERE id = OLD.xact;
+        END IF;
+
+        RETURN OLD;
+END;
+$$ LANGUAGE PLPGSQL;
+
+COMMIT;
diff --git a/Open-ILS/src/sql/schema/revert/schema.materialized_billing_summary_delete_trigger.sql b/Open-ILS/src/sql/schema/revert/schema.materialized_billing_summary_delete_trigger.sql
new file mode 100644 (file)
index 0000000..9f9a7ff
--- /dev/null
@@ -0,0 +1,39 @@
+-- Revert evergreen:schema.materialized_billing_summary_delete_trigger from pg
+
+BEGIN;
+
+/* Recover previous version of money.materialized_summary_billing_del */
+
+CREATE OR REPLACE FUNCTION money.materialized_summary_billing_del () RETURNS TRIGGER AS $$
+DECLARE
+        prev_billing    money.billing%ROWTYPE;
+        old_billing     money.billing%ROWTYPE;
+BEGIN
+        SELECT * INTO prev_billing FROM money.billing
+            WHERE xact = OLD.xact AND NOT voided
+            ORDER BY billing_ts DESC LIMIT 1 OFFSET 1;
+
+        SELECT * INTO old_billing FROM money.billing
+            WHERE xact = OLD.xact AND NOT voided
+            ORDER BY billing_ts DESC LIMIT 1;
+
+        IF OLD.id = old_billing.id THEN
+                UPDATE  money.materialized_billable_xact_summary
+                  SET   last_billing_ts = prev_billing.billing_ts,
+                        last_billing_note = prev_billing.note,
+                        last_billing_type = prev_billing.billing_type
+                  WHERE id = OLD.xact;
+        END IF;
+
+        IF NOT OLD.voided THEN
+                UPDATE  money.materialized_billable_xact_summary
+                  SET   total_owed = total_owed - OLD.amount,
+                        balance_owed = balance_owed + OLD.amount
+                  WHERE id = OLD.xact;
+        END IF;
+
+        RETURN OLD;
+END;
+$$ LANGUAGE PLPGSQL;
+
+COMMIT;
index 93a3955..0ea7baa 100644 (file)
@@ -76,3 +76,4 @@ schema.batch_settings_retrieve_function [schema.dob-as-date] 2015-11-30T20:37:22
 function.lpad_number_fix [schema.batch_settings_retrieve_function] 2015-11-30T20:38:26Z Bill Erickson <berickxx@gmail.com> # function.lpad_number_fix
 schema.fake-delete-parts [function.lpad_number_fix] 2015-11-30T20:38:51Z Bill Erickson <berickxx@gmail.com> # schema.fake-delete-parts
 schema.no_delete_acq_cancel_reasons [schema.fake-delete-parts] 2015-11-30T20:39:23Z Bill Erickson <berickxx@gmail.com> # schema.no_delete_acq_cancel_reasons
+schema.materialized_billing_summary_delete_trigger [schema.no_delete_acq_cancel_reasons] 2015-12-29T15:15:30Z Bill Erickson <berickxx@gmail.com> # Cross porting LP#1319998 schema.materialized_billing_summary_delete_trigger
diff --git a/Open-ILS/src/sql/schema/verify/schema.materialized_billing_summary_delete_trigger.sql b/Open-ILS/src/sql/schema/verify/schema.materialized_billing_summary_delete_trigger.sql
new file mode 100644 (file)
index 0000000..36c4481
--- /dev/null
@@ -0,0 +1,17 @@
+-- Verify evergreen:schema.materialized_billing_summary_delete_trigger on pg
+
+BEGIN;
+
+/* 
+Confirm modified money.materialized_summary_billing_del deployed.
+
+The SELECT below will die with a divide-by-zero and fail 
+verification if the function was not successfully modified.
+*/
+
+SELECT 1/COUNT(*)
+    FROM pg_catalog.pg_proc
+    WHERE proname = 'materialized_summary_billing_del' AND
+        pg_get_functiondef(oid) LIKE $$%balance_owed - OLD.amount%$$;
+
+ROLLBACK;