Enable notify checking for holds in A/T Validators
authorThomas Berezansky <tsbere@mvlc.org>
Mon, 6 Feb 2012 22:19:14 +0000 (17:19 -0500)
committerBill Erickson <berick@esilibrary.com>
Thu, 15 Mar 2012 15:49:45 +0000 (11:49 -0400)
HoldIsAvailable and HoldIsCanceled get new checks, plus add HoldNotifyCheck
validator.

All three check for "check_$type_notify" parameters evaling to true, where
$type is email, sms, or phone. If true the hold's appropriate value is
checked and, if not suitable, the validator returns false.

For email the email_notify value must pass the is_true test.

For sms/phone the appropriate notify value must pass perl's truth test.

Upgrade script modifies default event definitions, with the exception of
the sms hold available event definition. That has no static id in the seed
values.

Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Bill Erickson <berick@esilibrary.com>

Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Validator.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.hold_available_email_notify.sql [new file with mode: 0644]

index 55c5742..f3a701a 100644 (file)
@@ -5,10 +5,13 @@ use DateTime::Format::ISO8601;
 use OpenSRF::Utils qw/:datetime/;
 use OpenSRF::Utils::Logger qw/:logger/;
 use OpenILS::Const qw/:const/;
+use OpenILS::Application::AppUtils;
 sub fourty_two { return 42 }
 sub NOOP_True { return 1 }
 sub NOOP_False { return 0 }
 
+my $U = 'OpenILS::Application::AppUtils';
+
 sub CircIsOpen {
     my $self = shift;
     my $env = shift;
@@ -73,6 +76,16 @@ sub HoldIsAvailable {
 
     my $hold = $env->{target};
 
+    if ($env->{params}->{check_email_notify}) {
+        return 0 unless $U->is_true($hold->email_notify);
+    }
+    if ($env->{params}->{check_sms_notify}) {
+        return 0 unless $hold->sms_notify;
+    }
+    if ($env->{params}->{check_phone_notify}) {
+        return 0 unless $hold->phone_notify;
+    }
+
     return 1 if 
         !$hold->cancel_time and
         !$hold->fulfillment_time and
@@ -106,7 +119,36 @@ sub HoldIsCancelled {
 
     my $hold = $env->{target};
 
+    if ($env->{params}->{check_email_notify}) {
+        return 0 unless $U->is_true($hold->email_notify);
+    }
+    if ($env->{params}->{check_sms_notify}) {
+        return 0 unless $hold->sms_notify;
+    }
+    if ($env->{params}->{check_phone_notify}) {
+        return 0 unless $hold->phone_notify;
+    }
+
     return ($hold->cancel_time) ? 1 : 0;
 }
 
+sub HoldNotifyCheck {
+    my $self = shift;
+    my $env = shift;
+
+    my $hold = $env->{target};
+
+    if ($env->{params}->{check_email_notify}) {
+        return 0 unless $U->is_true($hold->email_notify);
+    }
+    if ($env->{params}->{check_sms_notify}) {
+        return 0 unless $hold->sms_notify;
+    }
+    if ($env->{params}->{check_phone_notify}) {
+        return 0 unless $hold->phone_notify;
+    }
+
+    return 1;
+}
+
 1;
index 94e7626..86ad4f6 100644 (file)
@@ -6522,6 +6522,8 @@ The item(s) you requested are available for pickup from the Library.
 
 $$);
 
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (5, 'check_email_notify', 1);
 
 INSERT INTO action_trigger.hook (
         key,
@@ -6584,6 +6586,8 @@ pickup, but these holds will soon expire.
 $$
 );
 
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (7, 'check_email_notify', 1);
 
 INSERT INTO action_trigger.environment (
         event_def,
@@ -6607,6 +6611,15 @@ INSERT INTO action_trigger.hook (
         TRUE
     );
 
+INSERT INTO action_trigger.validator (module,description) VALUES
+    ('HoldNotifyCheck',
+    oils_i18n_gettext(
+        'HoldNotifyCheck',
+        'Check Hold notification flag(s)',
+        'atval',
+        'description'
+    ));
+
 INSERT INTO action_trigger.event_definition (
         id,
         active,
@@ -6625,7 +6638,7 @@ INSERT INTO action_trigger.event_definition (
         1,
         'Hold waiting for pickup for long time',
         'hold_request.long_wait',
-        'NOOP_True',
+        'HoldNotifyCheck',
         'SendEmail',
         '6 MONTHS',
         'request_time',
@@ -6658,6 +6671,9 @@ INSERT INTO action_trigger.environment (event_def, path)
     (9, 'usr'),
     (9, 'current_copy.call_number');
 
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (9, 'check_email_notify', 1);
+
 -- trigger data related to acq user requests
 
 INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES (
@@ -9192,6 +9208,9 @@ INSERT INTO action_trigger.environment (event_def, path) VALUES
     (38, 'pickup_lib'),
     (38, 'bib_rec.bib_record.simple_record');
 
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (currval('action_trigger.event_definition_id_seq'), 'check_email_notify', 1);
+
 ----------------------------------------------------------------
 -- Seed data for queued record/item exports
 ----------------------------------------------------------------
@@ -11238,6 +11257,9 @@ INSERT INTO action_trigger.environment (
     'pickup_lib.billing_address'
 );
 
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (currval('action_trigger.event_definition_id_seq'), 'check_sms_notify', 1);
+
 INSERT INTO action_trigger.hook(
     key,
     core_type,
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.hold_available_email_notify.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.hold_available_email_notify.sql
new file mode 100644 (file)
index 0000000..a0ab077
--- /dev/null
@@ -0,0 +1,22 @@
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (5, 'check_email_notify', 1);
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (7, 'check_email_notify', 1);
+INSERT INTO action_trigger.event_params (event_def, param, value)
+    VALUES (9, 'check_email_notify', 1);
+INSERT INTO action_trigger.validator (module,description) VALUES
+    ('HoldNotifyCheck',
+    oils_i18n_gettext(
+        'HoldNotifyCheck',
+        'Check Hold notification flag(s)',
+        'atval',
+        'description'
+    ));
+UPDATE action_trigger.event_definition SET validator = 'HoldNotifyCheck' WHERE id = 9;
+
+-- NOT COVERED: Adding check_sms_notify to the proper trigger. It doesn't have a static id.
+
+--UNDO
+--UPDATE action_trigger.event_definition SET validator = 'NOOP_True' WHERE id = 9;
+--DELETE FROM action_trigger.event_params WHERE param = 'check_email_notify';
+--DELETE FROM action_trigger.validator WHERE module = 'HoldNotifyCheck';