From: Bill Erickson Date: Tue, 29 Dec 2015 15:21:02 +0000 (-0500) Subject: LP#1521693 Cross-porting Sqitch SQL for LP#1319998 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=b23c59b14832b994afb3199551ece00d8756981d;p=working%2FEvergreen.git LP#1521693 Cross-porting Sqitch SQL for LP#1319998 Signed-off-by: Bill Erickson --- 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 index 0000000000..59a32e499c --- /dev/null +++ b/Open-ILS/src/sql/schema/deploy/schema.materialized_billing_summary_delete_trigger.sql @@ -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 index 0000000000..9f9a7ff60a --- /dev/null +++ b/Open-ILS/src/sql/schema/revert/schema.materialized_billing_summary_delete_trigger.sql @@ -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; diff --git a/Open-ILS/src/sql/schema/sqitch.plan b/Open-ILS/src/sql/schema/sqitch.plan index 93a3955f75..0ea7baaddd 100644 --- a/Open-ILS/src/sql/schema/sqitch.plan +++ b/Open-ILS/src/sql/schema/sqitch.plan @@ -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 # function.lpad_number_fix schema.fake-delete-parts [function.lpad_number_fix] 2015-11-30T20:38:51Z Bill Erickson # schema.fake-delete-parts schema.no_delete_acq_cancel_reasons [schema.fake-delete-parts] 2015-11-30T20:39:23Z Bill Erickson # 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 # 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 index 0000000000..36c4481edb --- /dev/null +++ b/Open-ILS/src/sql/schema/verify/schema.materialized_billing_summary_delete_trigger.sql @@ -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;