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