1 CREATE OR REPLACE FUNCTION migration_tools.change_call_number(copy_id BIGINT, new_label TEXT, cn_class BIGINT) RETURNS VOID AS $$
13 -- Bail out if asked to change the label to ##URI##
14 IF new_label = '##URI##' THEN
19 SELECT call_number INTO old_volume FROM asset.copy WHERE id = copy_id;
20 SELECT record INTO bib FROM asset.call_number WHERE id = old_volume;
21 SELECT owning_lib, label INTO owner, old_label FROM asset.call_number WHERE id = old_volume;
23 -- Bail out if the label already is ##URI##
24 IF old_label = '##URI##' THEN
28 -- Bail out if the call number label is already correct
29 IF new_volume = old_volume THEN
33 -- Check whether we already have a destination volume available
34 SELECT id INTO new_volume FROM asset.call_number
37 owning_lib = owner AND
41 -- Create destination volume if needed
43 INSERT INTO asset.call_number (creator, editor, record, owning_lib, label, label_class)
44 VALUES (1, 1, bib, owner, new_label, cn_class);
45 SELECT id INTO new_volume FROM asset.call_number
48 owning_lib = owner AND
53 -- Move copy to destination
54 UPDATE asset.copy SET call_number = new_volume WHERE id = copy_id;
56 -- Delete source volume if it is now empty
57 SELECT id INTO remainder FROM asset.copy WHERE call_number = old_volume AND NOT deleted;
59 DELETE FROM asset.call_number WHERE id = old_volume;
66 CREATE OR REPLACE FUNCTION migration_tools.change_owning_lib(copy_id BIGINT, new_owning_lib INTEGER) RETURNS VOID AS $$
72 old_owning_lib INTEGER;
79 SELECT call_number INTO old_volume FROM asset.copy WHERE id = copy_id;
80 SELECT record INTO bib FROM asset.call_number WHERE id = old_volume;
81 SELECT owning_lib, label INTO old_owning_lib, old_label FROM asset.call_number WHERE id = old_volume;
83 -- Bail out if the new_owning_lib is not the ID of an org_unit
84 IF new_owning_lib NOT IN (SELECT id FROM actor.org_unit) THEN
86 '% is not a valid actor.org_unit ID; no change made.',
91 -- Bail out discreetly if the owning_lib is already correct
92 IF new_owning_lib = old_owning_lib THEN
96 -- Check whether we already have a destination volume available
97 SELECT id INTO new_volume FROM asset.call_number
100 owning_lib = new_owning_lib AND
101 label = old_label AND
104 -- Create destination volume if needed
106 INSERT INTO asset.call_number (creator, editor, record, owning_lib, label)
107 VALUES (1, 1, bib, new_owning_lib, old_label);
108 SELECT id INTO new_volume FROM asset.call_number
111 owning_lib = new_owning_lib AND
112 label = old_label AND
116 -- Move copy to destination
117 UPDATE asset.copy SET call_number = new_volume WHERE id = copy_id;
119 -- Delete source volume if it is now empty
120 SELECT id INTO remainder FROM asset.copy WHERE call_number = old_volume AND NOT deleted;
122 DELETE FROM asset.call_number WHERE id = old_volume;
130 CREATE OR REPLACE FUNCTION migration_tools.change_owning_lib(copy_id BIGINT, new_owner TEXT) RETURNS VOID AS $$
132 -- You can use shortnames with this function, which looks up the org unit ID and passes it to change_owning_lib(BIGINT,INTEGER).
135 new_owning_lib INTEGER;
139 -- Parse the new_owner as an org unit ID or shortname
140 IF new_owner IN (SELECT shortname FROM actor.org_unit) THEN
141 SELECT id INTO new_owning_lib FROM actor.org_unit WHERE shortname = new_owner;
142 PERFORM migration_tools.change_owning_lib(copy_id, new_owning_lib);
143 ELSIF new_owner ~ E'^[0-9]+$' THEN
144 IF new_owner::INTEGER IN (SELECT id FROM actor.org_unit) THEN
147 E'You don\'t need to put the actor.org_unit ID in quotes; '
148 || E'if you put it in quotes, I\'m going to try to parse it as a shortname first.';
149 new_owning_lib := new_owner::INTEGER;
150 PERFORM migration_tools.change_owning_lib(copy_id, new_owning_lib);
154 '% is not a valid actor.org_unit shortname or ID; no change made.',