LP 1198465: More tests for conditional negative balances
[working/Evergreen.git] / Open-ILS / src / sql / Pg / live_t / lp1198465_run_this_before_livetests.sql
1 BEGIN;
2
3 -- DATA FOR LIVE TESTING LP#1198465:
4 --   Support for Conditional Negative Balances
5 --
6 -- Assume stock data has been loaded.
7 --
8 -- Dates are relative when necessary; otherwise they may be hardcoded.
9 -- NOTE: Org unit settings will be handled in the perl code
10
11
12 -- clear bills and payments for our test circs
13 DELETE FROM money.billing WHERE xact <= 16;
14 DELETE FROM money.payment WHERE xact <= 16;
15
16 -- clear any non-stock settings
17 -- XXX This will need adjusting if new stock settings are added, so
18 -- TODO: Pad out org_unit_settings with a SETVAL like we do for other
19 -- settings
20 DELETE FROM actor.org_unit_setting WHERE id >= 14;
21
22 -- clear out the test workstation (just in case)
23 DELETE FROM actor.workstation WHERE name = 'BR1-test-09-lp1198465_neg_balances.t';
24
25 -- Setup some LOST circs, and change copy status to LOST
26 UPDATE action.circulation SET
27     xact_start = '2014-05-14 08:39:13.070326-04',
28     due_date = '2014-05-21 23:59:59-04',
29     stop_fines_time = '2014-05-28 08:39:13.070326-04',
30     create_time = '2014-05-14 08:39:13.070326-04',
31     max_fine = '3.00',
32     stop_fines = 'LOST',
33     checkin_staff = NULL,
34     checkin_lib = NULL,
35     checkin_time = NULL,
36     checkin_scan_time = NULL
37 WHERE id IN (1,2,3,4,5,6,12,13,15);
38 UPDATE asset.copy SET status = 3 WHERE id IN (2,3,4,5,6,7,13,14,16);
39
40 -- relative LOST circ
41 UPDATE action.circulation SET
42     xact_start = NOW() - '24 days'::interval,
43     due_date = (DATE(NOW() - '10 days'::interval) || ' 23:59:59')::TIMESTAMP,
44     stop_fines_time = NOW() - '3 days'::interval,
45     create_time = NOW() - '24 days'::interval,
46     max_fine = '5.00',
47     stop_fines = 'LOST',
48     checkin_staff = NULL,
49     checkin_lib = NULL,
50     checkin_time = NULL,
51     checkin_scan_time = NULL
52 WHERE id = 10;
53 UPDATE asset.copy SET status = 3 WHERE id = 11;
54
55 -- Two recently LOST items for Case 10: Interval Testing (1 hour interval)
56 -- - Item 1: Lost, paid more than 1 hour later, to be returned LESS than 1 hour after payment (via perl test)
57 -- - Item 2: Lost, paid more than 1 hour later, to be returned MORE than 1 hour after payment (via perl test)
58 UPDATE action.circulation SET
59     create_time = NOW() - '1 week'::interval,
60     xact_start = NOW() - '1 week'::interval,
61     due_date = NOW() + '1 day'::interval,
62     stop_fines_time = NOW() - '3 hours'::interval,
63     max_fine = '3.00',
64     stop_fines = 'LOST',
65     checkin_staff = NULL,
66     checkin_lib = NULL,
67     checkin_time = NULL,
68     checkin_scan_time = NULL
69 WHERE id IN (8, 9);
70 UPDATE asset.copy SET status = 3 WHERE id IN (9, 10);
71
72 -- non-lost circs, used for Amnesty Mode check-ins
73 UPDATE action.circulation SET
74     xact_start = '2014-05-14 08:39:13.070326-04',
75     due_date = '2014-05-21 23:59:59-04',
76     stop_fines_time = '2014-05-28 08:39:13.070326-04',
77     create_time = '2014-05-14 08:39:13.070326-04',
78     max_fine = '0.70',
79     stop_fines = 'MAXFINES',
80     checkin_staff = NULL,
81     checkin_lib = NULL,
82     checkin_time = NULL,
83     checkin_scan_time = NULL
84 WHERE id IN (7, 14, 16);
85 UPDATE asset.copy SET status = 1 WHERE id IN (8, 15, 17);
86
87 -- Setup a non-lost, maxfines circ
88 UPDATE action.circulation SET
89     xact_start = '2014-05-14 08:39:13.070326-04',
90     due_date = '2014-05-21 23:59:59-04',
91     stop_fines_time = '2014-05-28 08:39:13.070326-04',
92     create_time = '2014-05-14 08:39:13.070326-04',
93     max_fine = '0.70',
94     stop_fines = 'MAXFINES',
95     checkin_staff = NULL,
96     checkin_lib = NULL,
97     checkin_time = NULL,
98     checkin_scan_time = NULL
99 WHERE id = 11;
100 UPDATE asset.copy SET status = 1 WHERE id = 12;
101
102
103 -- Create LOST and overdue fines
104 INSERT INTO money.billing (id, xact, billing_ts, voided, voider, void_time, amount, billing_type, btype, note) VALUES
105     (DEFAULT, 1, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
106     (DEFAULT, 2, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
107     (DEFAULT, 3, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
108     (DEFAULT, 4, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
109     (DEFAULT, 5, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
110     (DEFAULT, 6, '2014-05-22 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
111     (DEFAULT, 6, '2014-05-23 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
112     (DEFAULT, 6, '2014-05-24 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
113     (DEFAULT, 6, '2014-05-25 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
114     (DEFAULT, 6, '2014-05-26 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
115     (DEFAULT, 6, '2014-05-27 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
116     (DEFAULT, 6, '2014-05-28 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
117     (DEFAULT, 6, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
118     (DEFAULT, 7, '2014-05-22 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
119     (DEFAULT, 7, '2014-05-23 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
120     (DEFAULT, 7, '2014-05-24 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
121     (DEFAULT, 7, '2014-05-25 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
122     (DEFAULT, 7, '2014-05-26 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
123     (DEFAULT, 7, '2014-05-27 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
124     (DEFAULT, 7, '2014-05-28 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
125     (DEFAULT, 8, NOW() - '2 hours'::interval, false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
126     (DEFAULT, 9, NOW() - '4 hours'::interval, false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
127     (DEFAULT, 11, '2014-05-22 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
128     (DEFAULT, 11, '2014-05-23 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
129     (DEFAULT, 11, '2014-05-24 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
130     (DEFAULT, 11, '2014-05-25 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
131     (DEFAULT, 11, '2014-05-26 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
132     (DEFAULT, 11, '2014-05-27 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
133     (DEFAULT, 11, '2014-05-28 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
134     (DEFAULT, 12, '2014-05-22 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
135     (DEFAULT, 12, '2014-05-23 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
136     (DEFAULT, 12, '2014-05-24 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
137     (DEFAULT, 12, '2014-05-25 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
138     (DEFAULT, 12, '2014-05-26 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
139     (DEFAULT, 12, '2014-05-27 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
140     (DEFAULT, 12, '2014-05-28 23:59:59-04', true, 1, '2014-05-28 08:39:13.070326-04', 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
141     (DEFAULT, 12, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
142     (DEFAULT, 13, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
143     (DEFAULT, 14, '2014-05-22 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
144     (DEFAULT, 14, '2014-05-23 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
145     (DEFAULT, 14, '2014-05-24 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
146     (DEFAULT, 14, '2014-05-25 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
147     (DEFAULT, 14, '2014-05-26 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
148     (DEFAULT, 14, '2014-05-27 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
149     (DEFAULT, 14, '2014-05-28 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
150     (DEFAULT, 15, '2014-05-28 08:39:13.070326-04', false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED'),
151     (DEFAULT, 16, '2014-05-22 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
152     (DEFAULT, 16, '2014-05-23 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
153     (DEFAULT, 16, '2014-05-24 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
154     (DEFAULT, 16, '2014-05-25 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
155     (DEFAULT, 16, '2014-05-26 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
156     (DEFAULT, 16, '2014-05-27 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
157     (DEFAULT, 16, '2014-05-28 23:59:59-04', false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
158     -- XACT 10 must be last, because we use CURRVAL() to put their IDs in the adjustment payments
159     (DEFAULT, 10, (DATE(NOW() - '9 days'::interval) || ' 23:59:59')::TIMESTAMP, false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
160     (DEFAULT, 10, (DATE(NOW() - '8 days'::interval) || ' 23:59:59')::TIMESTAMP, false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
161     (DEFAULT, 10, (DATE(NOW() - '7 days'::interval) || ' 23:59:59')::TIMESTAMP, false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
162     (DEFAULT, 10, (DATE(NOW() - '6 days'::interval) || ' 23:59:59')::TIMESTAMP, false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
163     (DEFAULT, 10, (DATE(NOW() - '5 days'::interval) || ' 23:59:59')::TIMESTAMP, false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
164     (DEFAULT, 10, (DATE(NOW() - '4 days'::interval) || ' 23:59:59')::TIMESTAMP, false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
165     (DEFAULT, 10, (DATE(NOW() - '3 days'::interval) || ' 23:59:59')::TIMESTAMP, false, NULL, NULL, 0.10, 'Overdue materials', 1, 'System Generated Overdue Fine'),
166     (DEFAULT, 10, NOW() - '3 days'::interval, false, NULL, NULL, 50.00, 'Lost Materials', 3, 'SYSTEM GENERATED');
167
168
169 INSERT INTO money.adjustment_payment (id, xact, payment_ts, voided, amount, note, amount_collected, accepting_usr, billing) VALUES
170     (DEFAULT, 10, NOW() - '3 days'::interval, false, 0.10, '', 0.10, 1, CURRVAL('money.billing_id_seq') - 7),
171     (DEFAULT, 10, NOW() - '3 days'::interval, false, 0.10, '', 0.10, 1, CURRVAL('money.billing_id_seq') - 6),
172     (DEFAULT, 10, NOW() - '3 days'::interval, false, 0.10, '', 0.10, 1, CURRVAL('money.billing_id_seq') - 5),
173     (DEFAULT, 10, NOW() - '3 days'::interval, false, 0.10, '', 0.10, 1, CURRVAL('money.billing_id_seq') - 4),
174     (DEFAULT, 10, NOW() - '3 days'::interval, false, 0.10, '', 0.10, 1, CURRVAL('money.billing_id_seq') - 3),
175     (DEFAULT, 10, NOW() - '3 days'::interval, false, 0.10, '', 0.10, 1, CURRVAL('money.billing_id_seq') - 2),
176     (DEFAULT, 10, NOW() - '3 days'::interval, false, 0.10, '', 0.10, 1, CURRVAL('money.billing_id_seq') - 1);
177
178 INSERT INTO money.cash_payment (id, xact, payment_ts, voided, amount, note, amount_collected, accepting_usr, cash_drawer) VALUES
179     (DEFAULT, 8, NOW() - '30 minutes'::interval, false, 50.00, 'LOST payment', 50.00, 1, 51),
180     (DEFAULT, 9, NOW() - '2 hours'::interval, false, 50.00, 'LOST payment', 50.00, 1, 51),
181     (DEFAULT, 10, NOW() - '2 days'::interval, false, 10.00, 'Partial LOST payment', 10.00, 1, 51);
182
183 -- if rerunning, make sure our mangled bills have the right total in the summary
184 UPDATE money.materialized_billable_xact_summary SET balance_owed = 50.00
185     WHERE id IN (1,2,3,4,5,6,12,13,15);
186 UPDATE money.materialized_billable_xact_summary SET balance_owed = 0.70
187     WHERE id IN (7, 14, 16);
188 UPDATE money.materialized_billable_xact_summary SET balance_owed = 0.00
189     WHERE id IN (8, 9);
190 UPDATE money.materialized_billable_xact_summary SET balance_owed = 40.00
191     WHERE id = 10;
192 UPDATE money.materialized_billable_xact_summary SET balance_owed = 0.70
193     WHERE id = 11;
194 COMMIT;