LP#1422379 Upgrade Script for moved money.billing timestamps user/dbwells/lp1422379_move_billing_timestamps_rebase_v3
authorRemington Steed <rjs7@calvin.edu>
Thu, 29 Jan 2015 21:12:08 +0000 (16:12 -0500)
committerDan Wells <dbw2@calvin.edu>
Thu, 29 Sep 2016 20:28:58 +0000 (16:28 -0400)
Signed-off-by: Remington Steed <rjs7@calvin.edu>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Open-ILS/src/sql/Pg/upgrade/XXXX.data.move_fine_timestamps_back.sql [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.move_fine_timestamps_back.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.move_fine_timestamps_back.sql
new file mode 100644 (file)
index 0000000..659c194
--- /dev/null
@@ -0,0 +1,38 @@
+BEGIN;
+
+--SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+--Limit to btype=1 / 'Overdue Materials'
+--Update day-granular fines first (i.e. 24 hour, 1 day, 2 day, etc., all of which are multiples of 86400 seconds), and simply remove the time portion of timestamp
+UPDATE money.billing mb
+       SET billing_ts = date_trunc('day', billing_ts)
+       FROM action.circulation ac
+WHERE mb.xact = ac.id
+       AND mb.btype = 1
+       AND (EXTRACT(EPOCH FROM ac.fine_interval))::integer % 86400 = 0;
+
+UPDATE money.materialized_billable_xact_summary mmbxs
+       SET last_billing_ts = date_trunc('day', last_billing_ts)
+       FROM action.circulation ac
+WHERE mmbxs.id = ac.id
+       AND mmbxs.last_billing_type = 'Overdue materials'
+       AND mmbxs.xact_type = 'circulation'
+       AND (EXTRACT(EPOCH FROM ac.fine_interval))::integer % 86400 = 0;
+
+--Update fines for non-day intervals
+UPDATE money.billing mb
+       SET billing_ts = billing_ts - ac.fine_interval + interval '1 sec'
+       FROM action.circulation ac
+WHERE mb.xact = ac.id
+       AND mb.btype = 1
+       AND (EXTRACT(EPOCH FROM ac.fine_interval))::integer % 86400 > 0;
+
+UPDATE money.materialized_billable_xact_summary mmbxs
+       SET last_billing_ts = last_billing_ts - ac.fine_interval + interval '1 sec'
+       FROM action.circulation ac
+WHERE mmbxs.id = ac.id
+       AND mmbxs.last_billing_type = 'Overdue materials'
+       AND mmbxs.xact_type = 'circulation'
+       AND (EXTRACT(EPOCH FROM ac.fine_interval))::integer % 86400 > 0;
+
+COMMIT;