]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/xxxx.purge_messages_curbside_notes.sql
LP#1934162: delete user messages and curbside notes
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / xxxx.purge_messages_curbside_notes.sql
1 BEGIN;
2   
3 SELECT evergreen.upgrade_deps_block_check('xxxx', :eg_version);
4
5 CREATE OR REPLACE FUNCTION actor.usr_purge_data(
6         src_usr  IN INTEGER,
7         specified_dest_usr IN INTEGER
8 ) RETURNS VOID AS $$
9 DECLARE
10         suffix TEXT;
11         renamable_row RECORD;
12         dest_usr INTEGER;
13 BEGIN
14
15         IF specified_dest_usr IS NULL THEN
16                 dest_usr := 1; -- Admin user on stock installs
17         ELSE
18                 dest_usr := specified_dest_usr;
19         END IF;
20
21         -- acq.*
22         UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
23         UPDATE acq.lineitem SET creator = dest_usr WHERE creator = src_usr;
24         UPDATE acq.lineitem SET editor = dest_usr WHERE editor = src_usr;
25         UPDATE acq.lineitem SET selector = dest_usr WHERE selector = src_usr;
26         UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
27         UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
28     UPDATE acq.invoice SET closed_by = dest_usr WHERE closed_by = src_usr;
29         DELETE FROM acq.lineitem_usr_attr_definition WHERE usr = src_usr;
30
31         -- Update with a rename to avoid collisions
32         FOR renamable_row in
33                 SELECT id, name
34                 FROM   acq.picklist
35                 WHERE  owner = src_usr
36         LOOP
37                 suffix := ' (' || src_usr || ')';
38                 LOOP
39                         BEGIN
40                                 UPDATE  acq.picklist
41                                 SET     owner = dest_usr, name = name || suffix
42                                 WHERE   id = renamable_row.id;
43                         EXCEPTION WHEN unique_violation THEN
44                                 suffix := suffix || ' ';
45                                 CONTINUE;
46                         END;
47                         EXIT;
48                 END LOOP;
49         END LOOP;
50
51         UPDATE acq.picklist SET creator = dest_usr WHERE creator = src_usr;
52         UPDATE acq.picklist SET editor = dest_usr WHERE editor = src_usr;
53         UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
54         UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
55         UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
56         UPDATE acq.purchase_order SET creator = dest_usr WHERE creator = src_usr;
57         UPDATE acq.purchase_order SET editor = dest_usr WHERE editor = src_usr;
58         UPDATE acq.claim_event SET creator = dest_usr WHERE creator = src_usr;
59
60         -- action.*
61         DELETE FROM action.circulation WHERE usr = src_usr;
62         UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
63         UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
64         UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
65         UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
66         UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
67         DELETE FROM action.hold_request WHERE usr = src_usr;
68         UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
69         UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
70         DELETE FROM action.non_cataloged_circulation WHERE patron = src_usr;
71         UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
72         DELETE FROM action.survey_response WHERE usr = src_usr;
73         UPDATE action.fieldset SET owner = dest_usr WHERE owner = src_usr;
74         DELETE FROM action.usr_circ_history WHERE usr = src_usr;
75         UPDATE action.curbside SET notes = NULL WHERE patron = src_usr;
76
77         -- actor.*
78         DELETE FROM actor.card WHERE usr = src_usr;
79         DELETE FROM actor.stat_cat_entry_usr_map WHERE target_usr = src_usr;
80         DELETE FROM actor.usr_privacy_waiver WHERE usr = src_usr;
81         DELETE FROM actor.usr_message WHERE usr = src_usr;
82
83         -- The following update is intended to avoid transient violations of a foreign
84         -- key constraint, whereby actor.usr_address references itself.  It may not be
85         -- necessary, but it does no harm.
86         UPDATE actor.usr_address SET replaces = NULL
87                 WHERE usr = src_usr AND replaces IS NOT NULL;
88         DELETE FROM actor.usr_address WHERE usr = src_usr;
89         DELETE FROM actor.usr_note WHERE usr = src_usr;
90         UPDATE actor.usr_note SET creator = dest_usr WHERE creator = src_usr;
91         DELETE FROM actor.usr_org_unit_opt_in WHERE usr = src_usr;
92         UPDATE actor.usr_org_unit_opt_in SET staff = dest_usr WHERE staff = src_usr;
93         DELETE FROM actor.usr_setting WHERE usr = src_usr;
94         DELETE FROM actor.usr_standing_penalty WHERE usr = src_usr;
95         UPDATE actor.usr_standing_penalty SET staff = dest_usr WHERE staff = src_usr;
96
97         -- asset.*
98         UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
99         UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
100         UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
101         UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
102         UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
103         UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
104
105         -- auditor.*
106         DELETE FROM auditor.actor_usr_address_history WHERE id = src_usr;
107         DELETE FROM auditor.actor_usr_history WHERE id = src_usr;
108         UPDATE auditor.asset_call_number_history SET creator = dest_usr WHERE creator = src_usr;
109         UPDATE auditor.asset_call_number_history SET editor  = dest_usr WHERE editor  = src_usr;
110         UPDATE auditor.asset_copy_history SET creator = dest_usr WHERE creator = src_usr;
111         UPDATE auditor.asset_copy_history SET editor  = dest_usr WHERE editor  = src_usr;
112         UPDATE auditor.biblio_record_entry_history SET creator = dest_usr WHERE creator = src_usr;
113         UPDATE auditor.biblio_record_entry_history SET editor  = dest_usr WHERE editor  = src_usr;
114
115         -- biblio.*
116         UPDATE biblio.record_entry SET creator = dest_usr WHERE creator = src_usr;
117         UPDATE biblio.record_entry SET editor = dest_usr WHERE editor = src_usr;
118         UPDATE biblio.record_note SET creator = dest_usr WHERE creator = src_usr;
119         UPDATE biblio.record_note SET editor = dest_usr WHERE editor = src_usr;
120
121         -- container.*
122         -- Update buckets with a rename to avoid collisions
123         FOR renamable_row in
124                 SELECT id, name
125                 FROM   container.biblio_record_entry_bucket
126                 WHERE  owner = src_usr
127         LOOP
128                 suffix := ' (' || src_usr || ')';
129                 LOOP
130                         BEGIN
131                                 UPDATE  container.biblio_record_entry_bucket
132                                 SET     owner = dest_usr, name = name || suffix
133                                 WHERE   id = renamable_row.id;
134                         EXCEPTION WHEN unique_violation THEN
135                                 suffix := suffix || ' ';
136                                 CONTINUE;
137                         END;
138                         EXIT;
139                 END LOOP;
140         END LOOP;
141
142         FOR renamable_row in
143                 SELECT id, name
144                 FROM   container.call_number_bucket
145                 WHERE  owner = src_usr
146         LOOP
147                 suffix := ' (' || src_usr || ')';
148                 LOOP
149                         BEGIN
150                                 UPDATE  container.call_number_bucket
151                                 SET     owner = dest_usr, name = name || suffix
152                                 WHERE   id = renamable_row.id;
153                         EXCEPTION WHEN unique_violation THEN
154                                 suffix := suffix || ' ';
155                                 CONTINUE;
156                         END;
157                         EXIT;
158                 END LOOP;
159         END LOOP;
160
161         FOR renamable_row in
162                 SELECT id, name
163                 FROM   container.copy_bucket
164                 WHERE  owner = src_usr
165         LOOP
166                 suffix := ' (' || src_usr || ')';
167                 LOOP
168                         BEGIN
169                                 UPDATE  container.copy_bucket
170                                 SET     owner = dest_usr, name = name || suffix
171                                 WHERE   id = renamable_row.id;
172                         EXCEPTION WHEN unique_violation THEN
173                                 suffix := suffix || ' ';
174                                 CONTINUE;
175                         END;
176                         EXIT;
177                 END LOOP;
178         END LOOP;
179
180         FOR renamable_row in
181                 SELECT id, name
182                 FROM   container.user_bucket
183                 WHERE  owner = src_usr
184         LOOP
185                 suffix := ' (' || src_usr || ')';
186                 LOOP
187                         BEGIN
188                                 UPDATE  container.user_bucket
189                                 SET     owner = dest_usr, name = name || suffix
190                                 WHERE   id = renamable_row.id;
191                         EXCEPTION WHEN unique_violation THEN
192                                 suffix := suffix || ' ';
193                                 CONTINUE;
194                         END;
195                         EXIT;
196                 END LOOP;
197         END LOOP;
198
199         DELETE FROM container.user_bucket_item WHERE target_user = src_usr;
200
201         -- money.*
202         DELETE FROM money.billable_xact WHERE usr = src_usr;
203         DELETE FROM money.collections_tracker WHERE usr = src_usr;
204         UPDATE money.collections_tracker SET collector = dest_usr WHERE collector = src_usr;
205
206         -- permission.*
207         DELETE FROM permission.usr_grp_map WHERE usr = src_usr;
208         DELETE FROM permission.usr_object_perm_map WHERE usr = src_usr;
209         DELETE FROM permission.usr_perm_map WHERE usr = src_usr;
210         DELETE FROM permission.usr_work_ou_map WHERE usr = src_usr;
211
212         -- reporter.*
213         -- Update with a rename to avoid collisions
214         BEGIN
215                 FOR renamable_row in
216                         SELECT id, name
217                         FROM   reporter.output_folder
218                         WHERE  owner = src_usr
219                 LOOP
220                         suffix := ' (' || src_usr || ')';
221                         LOOP
222                                 BEGIN
223                                         UPDATE  reporter.output_folder
224                                         SET     owner = dest_usr, name = name || suffix
225                                         WHERE   id = renamable_row.id;
226                                 EXCEPTION WHEN unique_violation THEN
227                                         suffix := suffix || ' ';
228                                         CONTINUE;
229                                 END;
230                                 EXIT;
231                         END LOOP;
232                 END LOOP;
233         EXCEPTION WHEN undefined_table THEN
234                 -- do nothing
235         END;
236
237         BEGIN
238                 UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
239         EXCEPTION WHEN undefined_table THEN
240                 -- do nothing
241         END;
242
243         -- Update with a rename to avoid collisions
244         BEGIN
245                 FOR renamable_row in
246                         SELECT id, name
247                         FROM   reporter.report_folder
248                         WHERE  owner = src_usr
249                 LOOP
250                         suffix := ' (' || src_usr || ')';
251                         LOOP
252                                 BEGIN
253                                         UPDATE  reporter.report_folder
254                                         SET     owner = dest_usr, name = name || suffix
255                                         WHERE   id = renamable_row.id;
256                                 EXCEPTION WHEN unique_violation THEN
257                                         suffix := suffix || ' ';
258                                         CONTINUE;
259                                 END;
260                                 EXIT;
261                         END LOOP;
262                 END LOOP;
263         EXCEPTION WHEN undefined_table THEN
264                 -- do nothing
265         END;
266
267         BEGIN
268                 UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
269         EXCEPTION WHEN undefined_table THEN
270                 -- do nothing
271         END;
272
273         BEGIN
274                 UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
275         EXCEPTION WHEN undefined_table THEN
276                 -- do nothing
277         END;
278
279         -- Update with a rename to avoid collisions
280         BEGIN
281                 FOR renamable_row in
282                         SELECT id, name
283                         FROM   reporter.template_folder
284                         WHERE  owner = src_usr
285                 LOOP
286                         suffix := ' (' || src_usr || ')';
287                         LOOP
288                                 BEGIN
289                                         UPDATE  reporter.template_folder
290                                         SET     owner = dest_usr, name = name || suffix
291                                         WHERE   id = renamable_row.id;
292                                 EXCEPTION WHEN unique_violation THEN
293                                         suffix := suffix || ' ';
294                                         CONTINUE;
295                                 END;
296                                 EXIT;
297                         END LOOP;
298                 END LOOP;
299         EXCEPTION WHEN undefined_table THEN
300         -- do nothing
301         END;
302
303         -- vandelay.*
304         -- Update with a rename to avoid collisions
305         FOR renamable_row in
306                 SELECT id, name
307                 FROM   vandelay.queue
308                 WHERE  owner = src_usr
309         LOOP
310                 suffix := ' (' || src_usr || ')';
311                 LOOP
312                         BEGIN
313                                 UPDATE  vandelay.queue
314                                 SET     owner = dest_usr, name = name || suffix
315                                 WHERE   id = renamable_row.id;
316                         EXCEPTION WHEN unique_violation THEN
317                                 suffix := suffix || ' ';
318                                 CONTINUE;
319                         END;
320                         EXIT;
321                 END LOOP;
322         END LOOP;
323
324     UPDATE vandelay.session_tracker SET usr = dest_usr WHERE usr = src_usr;
325
326     -- NULL-ify addresses last so other cleanup (e.g. circ anonymization)
327     -- can access the information before deletion.
328         UPDATE actor.usr SET
329                 active = FALSE,
330                 card = NULL,
331                 mailing_address = NULL,
332                 billing_address = NULL
333         WHERE id = src_usr;
334
335 END;
336 $$ LANGUAGE plpgsql;
337
338 COMMIT;