Seed data for CSV notification export
authorBill Erickson <berick@esilibrary.com>
Tue, 11 Dec 2012 16:59:50 +0000 (11:59 -0500)
committerMike Rylander <mrylander@gmail.com>
Wed, 13 Mar 2013 17:03:34 +0000 (13:03 -0400)
Full set of seed data for CSV action/trigger notification batch exports.
The seed data is added to its own file and not automatically loaded into
new installs (or via upgrade script) since it adds a significant number
of new event definitions, probably more than most installs need by
default.

Review the event defs. and their parameters prior to loading this seed
data, as it only represents one possible set of CSV notification
options.  For example, it assumes one type of "notify media" for all
created notices.  It may necessary to add additional event defs to cover
additional media, etc.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/sql/Pg/notify-csv-action-trigger.sql [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/notify-csv-action-trigger.sql b/Open-ILS/src/sql/Pg/notify-csv-action-trigger.sql
new file mode 100644 (file)
index 0000000..a656ad0
--- /dev/null
@@ -0,0 +1,342 @@
+BEGIN;
+
+-- Build the event defintions, environment, and params, then apply the same 
+-- template to all CSV definitions.
+
+-- All definitions assume a notify media of "V" (voice).
+
+---------------------------------------------------
+-- 1st overdue 
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', '1st Overdue CSV', 1, 'checkout.due','CircIsOverdue', 
+    'ProcessTemplate', '7 days', 'due_date', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'circ_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'target_copy'), 
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''OVERDUE''')
+;
+
+---------------------------------------------------
+-- 2nd overdue 
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', '2nd Overdue CSV', 1, 'checkout.due','CircIsOverdue', 
+    'ProcessTemplate', '14 days', 'due_date', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'circ_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'target_copy'), 
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '2'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''OVERDUE''')
+;
+
+---------------------------------------------------
+-- 3rd overdue 
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', '3rd Overdue CSV', 1, 'checkout.due','CircIsOverdue', 
+    'ProcessTemplate', '28 days', 'due_date', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'circ_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'target_copy'), 
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '3'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''OVERDUE''')
+;
+
+---------------------------------------------------
+-- predue 
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', '3-Day Predue CSV', 1, 'checkout.due','CircIsOpen', 
+    'ProcessTemplate', '-3 days', 'due_date', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'circ_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'target_copy'), 
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''PREOVERDUE''')
+;
+
+---------------------------------------------------
+-- hold ready for pickup 
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', 'Hold Ready CSV', 1, 'hold.available','HoldIsAvailable', 
+    'ProcessTemplate', '30 minutes', 'shelf_time', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'pickup_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'current_copy'), 
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''RESERVE''')
+;
+
+---------------------------------------------------
+-- hold expires on shelf soon
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', 'Hold Expires On Shelf Soon CSV', 1, 
+    'hold_request.shelf_expires_soon',
+    'HoldIsAvailable', 'ProcessTemplate', '-1 days', 
+    'shelf_expire_time', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'pickup_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'current_copy'), 
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '2'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''PRERESERVE''')
+;
+
+---------------------------------------------------
+-- hold expired on shelf
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', 'Hold Expired On Shelf CSV', 1, 
+    'hold_request.cancel.expire_holds_shelf',
+    'HoldIsCancelled', 'ProcessTemplate', '30 minutes', 
+    'cancel_time', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'pickup_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'current_copy'),
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''RESERVEEXPIRE''')
+;
+
+---------------------------------------------------
+-- hold cancelled
+-- see also hooks hold_request.cancel.staff and
+-- hold_request.cancel.patron
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', 'Hold Cancelled (no target) CSV', 1, 
+    'hold_request.cancel.expire_no_target',
+    'HoldIsCancelled', 'ProcessTemplate', '30 minutes', 
+    'cancel_time', 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'pickup_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'current_copy'),
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''RESERVECANCEL''')
+;
+
+---------------------------------------------------
+-- recall
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', 'Copy Recall CSV', 1, 
+    'circ.recall.target',
+    'NOOP_True', 'ProcessTemplate', DEFAULT,
+    NULL, 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'circ_lib'), 
+(currval('action_trigger.event_definition_id_seq'), 'target_copy'), 
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''RECALL''')
+;
+
+---------------------------------------------------
+-- patron exceeds fines threshold
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', 'Patron Exceeds Fines CSV', 1, 
+    'penalty.PATRON_EXCEEDS_FINES',
+    'NOOP_True', 'ProcessTemplate', DEFAULT,
+    NULL, 'usr', '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'org_unit'),
+(currval('action_trigger.event_definition_id_seq'), 'usr.card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''FINES''')
+;
+
+---------------------------------------------------
+-- patron barred
+INSERT INTO action_trigger.event_definition (active, name, owner, hook, 
+    validator, reactor, delay, delay_field, group_field, template, granularity)
+VALUES (
+    'f', 'Patron Barred CSV', 1, 
+    'au.barred',
+    'PatronBarred', 'ProcessTemplate', DEFAULT,
+    NULL, NULL, '', 'notify-csv'
+);
+
+INSERT INTO action_trigger.environment (event_def, path) VALUES 
+(currval('action_trigger.event_definition_id_seq'), 'home_ou'),
+(currval('action_trigger.event_definition_id_seq'), 'card')
+;
+
+INSERT INTO action_trigger.event_params (event_def, param, value) VALUES
+(currval('action_trigger.event_definition_id_seq'), 'notify_media', '''V'''),
+(currval('action_trigger.event_definition_id_seq'), 'notify_level', '1'),
+(currval('action_trigger.event_definition_id_seq'), 'notify_type', '''SUSPEND''')
+;
+
+
+
+---------------------------------------------------
+-- apply the generic CVS template to all event defs
+UPDATE action_trigger.event_definition SET template = $$
+[%-
+    USE date;
+
+    # accommodate grouped events
+    SET event = event.0 UNLESS event.id;
+    SET target = [target] UNLESS event.event_def.group_field;
+
+    core_type = event.event_def.hook.core_type;
+    notice_org_unit = helpers.get_org_unit(event.event_def.owner);
+
+    FOR target_obj IN target;
+
+        # Mangle the data into a consistent shape
+        circ = '';
+        hold = '';
+        copy = '';
+        user = '';
+        title = '';
+        org_unit = '';
+        date_info = '';
+
+        IF core_type == 'circ';
+            # e.g. overdue circ
+            circ = target_obj;
+            user = circ.usr;
+            copy = circ.target_copy;
+            org_unit = circ.circ_lib;
+            date_info = circ.due_date;
+
+        ELSIF core_type == 'ahr';
+            # e.g. hold ready for pickup
+            hold = target_obj;
+            user = hold.usr;
+            copy = hold.current_copy;
+            org_unit = hold.pickup_lib;
+            date_info = hold.shelf_expire_time;
+
+        ELSIF core_type == 'ausp';
+            # e.g. max fines
+            user = target_obj.usr;
+            org_unit = target_obj.org_unit;
+
+        ELSIF core_type == 'au';
+            # e.g. barred
+            user = target_obj;
+            org_unit = user.home_ou;
+        END;
+
+        user_locale = helpers.get_user_locale(user.id);
+        user_lang = user_locale | replace('-.*', ''); # ISO 639-1 language
+        user_phone = helpers.get_user_setting(
+            user.id, 'opac.default_phone') || user.day_phone;
+
+        IF copy;
+            bib_data = helpers.get_copy_bib_basics(copy.id);
+            title = bib_data.title;
+        END;
+
+        IF date_info;
+            date_info = date.format(
+                helpers.format_date(date_info), '%d/%m/%Y');
+        END;
+
+        # Print the data for each target object as CSV
+-%]
+[%- '"' _ helpers.escape_csv(params.notify_media) _ '",' -%]
+[%- '"' _ helpers.escape_csv(user_lang) _ '",' -%]
+[%- '"' _ helpers.escape_csv(params.notify_type) _ '",' -%]
+[%- '"' _ helpers.escape_csv(params.notify_level) _ '",' -%]
+[%- '"' _ helpers.escape_csv(user.card.barcode) _ '",' -%]
+[%- '"' _ helpers.escape_csv(user.prefix) _ '",' -%]
+[%- '"' _ helpers.escape_csv(user.first_given_name) _ '",' -%]
+[%- '"' _ helpers.escape_csv(user.family_name) _ '",' -%]
+[%- '"' _ helpers.escape_csv(user_phone) _ '",' -%]
+[%- '"' _ helpers.escape_csv(user.email) _ '",' -%]
+[%- '"' _ helpers.escape_csv(notice_org_unit.shortname) _ '",' -%]
+[%- '"' _ helpers.escape_csv(org_unit.shortname) _ '",' -%]
+[%- '"' _ helpers.escape_csv(org_unit.name) _ '",' -%]
+[%- '"' _ helpers.escape_csv(copy.barcode) _ '",' -%]
+[%- '"' _ helpers.escape_csv(date_info) _ '",' -%]
+[%- '"' _ helpers.escape_csv(title) _ '",' -%]
+[%- '"' _ helpers.escape_csv(event.id) _ '"'  %]
+[% END -%]
+$$
+WHERE granularity = 'notify-csv';
+
+COMMIT;