]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/1181.schema.aged-billing-payment.sql
LP1858448 Disable inititial aged money migration
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 1181.schema.aged-billing-payment.sql
1
2 BEGIN;
3
4 SELECT evergreen.upgrade_deps_block_check('1181', :eg_version);
5
6 \qecho Migrating aged billing and payment data.  This might take a while.
7
8 CREATE TABLE money.aged_payment (LIKE money.payment INCLUDING INDEXES);
9 ALTER TABLE money.aged_payment ADD COLUMN payment_type TEXT NOT NULL;
10
11 CREATE TABLE money.aged_billing (LIKE money.billing INCLUDING INDEXES);
12
13
14 /* LP 1858448 : Disable initial aged money migration
15
16 INSERT INTO money.aged_payment 
17     SELECT  mp.* FROM money.payment_view mp
18     JOIN action.aged_circulation circ ON (circ.id = mp.xact);
19
20 INSERT INTO money.aged_billing
21     SELECT mb.* FROM money.billing mb
22     JOIN action.aged_circulation circ ON (circ.id = mb.xact);
23 */
24
25 CREATE OR REPLACE VIEW money.all_payments AS
26     SELECT * FROM money.payment_view 
27     UNION ALL
28     SELECT * FROM money.aged_payment;
29
30 CREATE OR REPLACE VIEW money.all_billings AS
31     SELECT * FROM money.billing
32     UNION ALL
33     SELECT * FROM money.aged_billing;
34
35 CREATE OR REPLACE FUNCTION action.age_circ_on_delete () RETURNS TRIGGER AS $$
36 DECLARE
37 found char := 'N';
38 BEGIN
39
40     -- If there are any renewals for this circulation, don't archive or delete
41     -- it yet.   We'll do so later, when we archive and delete the renewals.
42
43     SELECT 'Y' INTO found
44     FROM action.circulation
45     WHERE parent_circ = OLD.id
46     LIMIT 1;
47
48     IF found = 'Y' THEN
49         RETURN NULL;  -- don't delete
50         END IF;
51
52     -- Archive a copy of the old row to action.aged_circulation
53
54     INSERT INTO action.aged_circulation
55         (id,usr_post_code, usr_home_ou, usr_profile, usr_birth_year, copy_call_number, copy_location,
56         copy_owning_lib, copy_circ_lib, copy_bib_record, xact_start, xact_finish, target_copy,
57         circ_lib, circ_staff, checkin_staff, checkin_lib, renewal_remaining, grace_period, due_date,
58         stop_fines_time, checkin_time, create_time, duration, fine_interval, recurring_fine,
59         max_fine, phone_renewal, desk_renewal, opac_renewal, duration_rule, recurring_fine_rule,
60         max_fine_rule, stop_fines, workstation, checkin_workstation, checkin_scan_time, parent_circ)
61       SELECT
62         id,usr_post_code, usr_home_ou, usr_profile, usr_birth_year, copy_call_number, copy_location,
63         copy_owning_lib, copy_circ_lib, copy_bib_record, xact_start, xact_finish, target_copy,
64         circ_lib, circ_staff, checkin_staff, checkin_lib, renewal_remaining, grace_period, due_date,
65         stop_fines_time, checkin_time, create_time, duration, fine_interval, recurring_fine,
66         max_fine, phone_renewal, desk_renewal, opac_renewal, duration_rule, recurring_fine_rule,
67         max_fine_rule, stop_fines, workstation, checkin_workstation, checkin_scan_time, parent_circ
68         FROM action.all_circulation WHERE id = OLD.id;
69
70     -- Migrate billings and payments to aged tables
71
72
73 /* LP 1858448 : Disable initial aged money migration
74     INSERT INTO money.aged_billing
75         SELECT * FROM money.billing WHERE xact = OLD.id;
76
77     INSERT INTO money.aged_payment 
78         SELECT * FROM money.payment_view WHERE xact = OLD.id;
79
80     DELETE FROM money.payment WHERE xact = OLD.id;
81     DELETE FROM money.billing WHERE xact = OLD.id;
82 */
83
84     RETURN OLD;
85 END;
86 $$ LANGUAGE 'plpgsql';
87
88
89 /* LP 1858448 : Disable initial aged money migration
90
91 -- NOTE you could COMMIT here then start a new TRANSACTION if desired.
92
93 \qecho Deleting aged payments and billings from active payment/billing
94 \qecho tables.  This may take a while...
95
96 ALTER TABLE money.payment DISABLE TRIGGER mat_summary_del_tgr;
97 ALTER TABLE money.cash_payment DISABLE TRIGGER mat_summary_del_tgr;
98 ALTER TABLE money.check_payment DISABLE TRIGGER mat_summary_del_tgr;
99 ALTER TABLE money.credit_card_payment DISABLE TRIGGER mat_summary_del_tgr;
100 ALTER TABLE money.forgive_payment DISABLE TRIGGER mat_summary_del_tgr;
101 ALTER TABLE money.credit_payment DISABLE TRIGGER mat_summary_del_tgr;
102 ALTER TABLE money.goods_payment DISABLE TRIGGER mat_summary_del_tgr;
103
104 DELETE FROM money.payment WHERE id IN (SELECT id FROM money.aged_payment);
105
106 ALTER TABLE money.payment ENABLE TRIGGER mat_summary_del_tgr;
107 ALTER TABLE money.cash_payment ENABLE TRIGGER mat_summary_del_tgr;
108 ALTER TABLE money.check_payment ENABLE TRIGGER mat_summary_del_tgr;
109 ALTER TABLE money.credit_card_payment ENABLE TRIGGER mat_summary_del_tgr;
110 ALTER TABLE money.forgive_payment ENABLE TRIGGER mat_summary_del_tgr;
111 ALTER TABLE money.credit_payment ENABLE TRIGGER mat_summary_del_tgr;
112 ALTER TABLE money.goods_payment ENABLE TRIGGER mat_summary_del_tgr;
113
114 -- TODO: This approach assumes most of the money.billing rows have been
115 -- copied to money.aged_billing.  If that is not the case, which would
116 -- happen if circ anonymization is not enabled, it will be faster to
117 -- perform a simple delete instead of a truncate/rebuild.
118
119 -- Copy all money.billing rows that are not represented in money.aged_billing
120 CREATE TEMPORARY TABLE tmp_money_billing ON COMMIT DROP AS
121     SELECT mb.* FROM money.billing mb
122     LEFT JOIN money.aged_billing mab USING (id)
123     WHERE mab.id IS NULL;
124
125 ALTER TABLE money.billing DISABLE TRIGGER ALL;
126
127 -- temporarily remove the foreign key constraint to money.billing on
128 -- account adjusment.  Needed for money.billing truncate.
129 ALTER TABLE money.account_adjustment 
130     DROP CONSTRAINT account_adjustment_billing_fkey;
131
132 TRUNCATE money.billing;
133
134 INSERT INTO money.billing SELECT * FROM tmp_money_billing;
135
136 ALTER TABLE money.billing ENABLE TRIGGER ALL;
137 ALTER TABLE money.account_adjustment 
138     ADD CONSTRAINT account_adjustment_billing_fkey 
139     FOREIGN KEY (billing) REFERENCES money.billing (id);
140
141 */
142
143 COMMIT;
144
145 -- Good to run after truncating -- OK to run after COMMIT.
146 /* LP 1858448 : Disable initial aged money migration
147 ANALYZE money.billing;
148 */
149