Advertisement
cmptrwz

Call Number DB functions

Oct 14th, 2015
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION mvlc_get_callnumber(
  2.     cn_id bigint,
  3.     target_lib integer)
  4.   RETURNS integer AS
  5. $BODY$
  6. DECLARE
  7.     existing_cn asset.call_number%ROWTYPE;
  8.     new_cn BIGINT;
  9. BEGIN
  10.     SELECT INTO existing_cn * FROM asset.call_number WHERE id = cn_id;
  11.     IF existing_cn.owning_lib = target_lib AND NOT existing_cn.deleted THEN
  12.         RETURN existing_cn.id;
  13.     ELSIF existing_cn.owning_lib = target_lib THEN
  14.         SELECT INTO new_cn id FROM asset.call_number
  15.             WHERE record = existing_cn.record
  16.             AND owning_lib = target_lib
  17.             AND label = existing_cn.label
  18.             AND prefix = existing_cn.prefix
  19.             AND suffix = existing_cn.suffix
  20.             AND NOT deleted;
  21.         IF FOUND THEN
  22.             RETURN new_cn;
  23.         ELSE
  24.             UPDATE asset.call_number SET deleted = false WHERE id = existing_cn.id;
  25.             RETURN existing_cn.id;
  26.         END IF;
  27.     ELSE
  28.         SELECT INTO new_cn id FROM asset.call_number
  29.             WHERE record = existing_cn.record
  30.             AND owning_lib = target_lib
  31.             AND label = existing_cn.label
  32.             AND prefix = existing_cn.prefix
  33.             AND suffix = existing_cn.suffix;
  34.         IF FOUND THEN
  35.             SELECT INTO new_cn evergreen.mvlc_get_callnumber(new_cn, target_lib); -- Let a recursive call handle "use or undelete"
  36.         ELSE
  37.             INSERT INTO asset.call_number (creator, editor, record, owning_lib, label, prefix, suffix, label_class)
  38.                 VALUES (existing_cn.creator, existing_cn.editor, existing_cn.record, target_lib, existing_cn.label, existing_cn.prefix, existing_cn.suffix, existing_cn.label_class)
  39.                 RETURNING id INTO new_cn;
  40.         END IF;
  41.         RETURN new_cn;
  42.     END IF;
  43.     RAISE EXCEPTION 'Something went wrong with mvlc_get_callnumber: % %', cn_id, target_lib;
  44.     RETURN -1; -- Bring back as pre-cat?
  45. END;
  46. $BODY$
  47.   LANGUAGE plpgsql VOLATILE
  48.   COST 100;
  49.  
  50. CREATE OR REPLACE FUNCTION mvlc_relabel_callnumber(
  51.     callnumber_id integer,
  52.     new_label text)
  53.   RETURNS integer AS
  54. $BODY$
  55. DECLARE
  56.     callnumber asset.call_number%ROWTYPE;
  57.     existing_cn asset.call_number%ROWTYPE;
  58. BEGIN
  59.     SELECT INTO callnumber *
  60.     FROM asset.call_number WHERE id = callnumber_id AND NOT deleted;
  61.     IF NOT FOUND THEN
  62.         RETURN NULL;
  63.     END IF;
  64.     IF callnumber.label = new_label THEN
  65.         RETURN callnumber.id;
  66.     END IF;
  67.     SELECT INTO existing_cn *
  68.     FROM asset.call_number
  69.     WHERE label = new_label
  70.     AND owning_lib = callnumber.owning_lib
  71.     AND record = callnumber.record
  72.     AND prefix = callnumber.prefix
  73.     AND suffix = callnumber.suffix
  74.     AND NOT deleted;
  75.     IF FOUND THEN
  76.         UPDATE asset.copy SET call_number = existing_cn.id
  77.         WHERE call_number = callnumber.id AND NOT deleted;
  78.         UPDATE action.hold_request SET target = existing_cn.id
  79.         WHERE taget = callnumber.id AND hold_type = 'V';
  80.         DELETE FROM asset.call_number WHERE id = callnumber.id;
  81.         RETURN existing_cn.id;
  82.     ELSE
  83.         UPDATE asset.call_number SET label = new_label WHERE id = callnumber.id;
  84.         RETURN callnumber.id;
  85.     END IF;
  86. END;
  87. $BODY$
  88.   LANGUAGE plpgsql VOLATILE
  89.   COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement