Hold notification creation A/T cleanup module
authorBill Erickson <berick@esilibrary.com>
Thu, 9 Jun 2011 19:21:39 +0000 (15:21 -0400)
committerMike Rylander <mrylander@gmail.com>
Tue, 15 Nov 2011 17:15:19 +0000 (12:15 -0500)
New CreateHoldNotification Action/Trigger cleanup module that, when
linked to a hold-based event_definition, adds an entry into
action.hold_notification for each hold processed.  The main user-facing
change from this will be that the hold notification time / count in the
staff client will now take A/T notices into effect in addition to
manually created hold notifications.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Cleanup.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.data.hold-notification-cleanup-mod.sql [new file with mode: 0644]

index 495a60a..67e2daf 100644 (file)
@@ -2,6 +2,7 @@ package OpenILS::Application::Trigger::Cleanup;
 use strict; use warnings;
 use OpenILS::Utils::CStoreEditor q/:funcs/;
 use OpenSRF::Utils::Logger qw/:logger/;
+use OpenILS::Utils::Fieldmapper;
 
 sub fourty_two { return 42 }
 sub NOOP_True { return 1 }
@@ -26,4 +27,31 @@ sub DeleteTempBiblioBucket {
     return 1;
 }
 
+# This is really more of an auxillary reactor
+sub CreateHoldNotification {
+    my ($self, $env) = @_;
+    my $e = new_editor(xact => 1);
+    my $holds = $env->{target};
+
+    my $event_def = (ref $env->{event} eq 'ARRAY') ?
+        $env->{event}->[0]->event_def : # event_def is grouped
+        $env->{event}->event_def;
+
+    for my $hold (@$holds) {
+
+        my $notify = Fieldmapper::action::hold_notification->new;
+        $notify->hold($hold->id);
+        $notify->method($event_def->reactor);
+
+        unless($e->create_action_hold_notification($notify)) {
+            $e->rollback;
+            return 0;
+        }
+    }
+
+    return 1 if $e->commit;
+    $e->rollback;
+    return 0;
+}
+
 1;
index 686471e..e317202 100644 (file)
@@ -6341,9 +6341,18 @@ INSERT INTO action_trigger.environment (event_def, path) VALUES
     (4, 'lineitems.lineitem_notes'),
     (4, 'notes');
 
+INSERT INTO action_trigger.cleanup ( module, description ) VALUES (
+    'CreateHoldNotification',
+    oils_i18n_gettext(
+        'CreateHoldNotification',
+        'Creates a hold_notification record for each notified hold',
+        'atclean',
+        'description'
+    )
+);
 
-INSERT INTO action_trigger.event_definition (id, active, owner, name, hook, validator, reactor, delay, delay_field, group_field, template)
-    VALUES (5, 'f', 1, 'Hold Ready for Pickup Email Notification', 'hold.available', 'HoldIsAvailable', 'SendEmail', '30 minutes', 'shelf_time', 'usr',
+INSERT INTO action_trigger.event_definition (id, active, owner, name, hook, validator, reactor, delay, delay_field, group_field, cleanup_success, template)
+    VALUES (5, 'f', 1, 'Hold Ready for Pickup Email Notification', 'hold.available', 'HoldIsAvailable', 'SendEmail', '30 minutes', 'shelf_time', 'usr', 'CreateHoldNotification',
 $$
 [%- USE date -%]
 [%- user = target.0.usr -%]
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.hold-notification-cleanup-mod.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.hold-notification-cleanup-mod.sql
new file mode 100644 (file)
index 0000000..40da866
--- /dev/null
@@ -0,0 +1,24 @@
+-- Evergreen DB patch XXXX.data.hold-notification-cleanup-mod.sql
+BEGIN;
+
+-- check whether patch can be applied
+SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+INSERT INTO action_trigger.cleanup ( module, description ) VALUES (
+    'CreateHoldNotification',
+    oils_i18n_gettext(
+        'CreateHoldNotification',
+        'Creates a hold_notification record for each notified hold',
+        'atclean',
+        'description'
+    )
+);
+
+UPDATE action_trigger.event_definition 
+    SET 
+        cleanup_success = 'CreateHoldNotification' 
+    WHERE 
+        id = 5 -- stock hold-ready email event_def
+        AND cleanup_success IS NULL; -- don't clobber any existing cleanup mod
+
+COMMIT;