[open-ils-commits] r16425 - in trunk/Open-ILS/src: perlmods/OpenILS/Application/Acq perlmods/OpenILS/Application/Trigger/Reactor perlmods/OpenILS/Application/Trigger/Validator/Acq sql/Pg sql/Pg/upgrade support-scripts (erickson)

svn at svn.open-ils.org svn at svn.open-ils.org
Thu May 13 10:23:17 EDT 2010


Author: erickson
Date: 2010-05-13 10:23:14 -0400 (Thu, 13 May 2010)
New Revision: 16425

Added:
   trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Reactor/GeneratePurchaseOrderJEDI.pm
   trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm
   trunk/Open-ILS/src/sql/Pg/upgrade/0260.data.acq.po_activate_and_jedi.sql
Modified:
   trunk/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm
   trunk/Open-ILS/src/sql/Pg/002.schema.config.sql
   trunk/Open-ILS/src/sql/Pg/400.schema.action_trigger.sql
   trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql
   trunk/Open-ILS/src/support-scripts/edi_pusher.pl
Log:
moved to generic acqpo.activate hook instead of the format.po.jedi hook
added validator to determine of a PO should create JEDI
added JEDI creation reactor.  it behaves like ProcessTemplate, but gives
us something more specific to filter acqpo.activate events on
update PO JEDI reactor to use new hook and reactor
update the edi_pusher to filter out events for PO's that have already
been processed

Modified: trunk/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm	2010-05-12 22:14:49 UTC (rev 16424)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Application/Acq/Order.pm	2010-05-13 14:23:14 UTC (rev 16425)
@@ -2214,6 +2214,9 @@
         $mgr->respond;
     }
 
+    # tell the world we activated a PO
+    $U->create_events_for_hook('acqpo.activate', $po, $po->ordering_agency);
+
     return undef;
 }
 

Added: trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Reactor/GeneratePurchaseOrderJEDI.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Reactor/GeneratePurchaseOrderJEDI.pm	                        (rev 0)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Reactor/GeneratePurchaseOrderJEDI.pm	2010-05-13 14:23:14 UTC (rev 16425)
@@ -0,0 +1,22 @@
+package OpenILS::Application::Trigger::Reactor::GeneratePurchaseOrderJEDI;
+use base 'OpenILS::Application::Trigger::Reactor';
+use strict; use warnings;
+use OpenSRF::Utils::Logger qw/:logger/;
+
+sub ABOUT {
+    return <<ABOUT;
+
+Generates PO JEDI (JSON EDI) output for subsequent processing and EDI delivery
+
+ABOUT
+}
+
+sub handler {
+    my $self = shift;
+    my $env = shift;
+    return 1 if $self->run_TT($env);
+    return 0;
+}
+
+1;
+

Added: trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm	                        (rev 0)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator/Acq/PurchaseOrderEDIRequired.pm	2010-05-13 14:23:14 UTC (rev 16425)
@@ -0,0 +1,25 @@
+package OpenILS::Application::Trigger::Validator::Acq::PurchaseOrderEDIRequired;
+use strict; use warnings;
+use OpenSRF::Utils::Logger qw/:logger/;
+use OpenILS::Application::AppUtils;
+my $U = 'OpenILS::Application::AppUtils';
+
+sub handler {
+    my $self = shift;
+    my $env = shift;
+    my $po = $env->{target};
+
+    my $provider = 
+        ref($po->provider) ? 
+            $po->provider : 
+            $self->editor->retrieve_acq_provider($po->provider);
+
+    return 1 if 
+        $po->state eq 'on-order' and 
+        $provider->edi_default and 
+        $U->is_true($provider->active);
+
+    return 0;
+}
+
+1;

Modified: trunk/Open-ILS/src/sql/Pg/002.schema.config.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-05-12 22:14:49 UTC (rev 16424)
+++ trunk/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-05-13 14:23:14 UTC (rev 16425)
@@ -65,7 +65,7 @@
     install_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
 );
 
-INSERT INTO config.upgrade_log (version) VALUES ('0259'); -- Scott McKellar
+INSERT INTO config.upgrade_log (version) VALUES ('0260'); -- berick
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,

Modified: trunk/Open-ILS/src/sql/Pg/400.schema.action_trigger.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/400.schema.action_trigger.sql	2010-05-12 22:14:49 UTC (rev 16424)
+++ trunk/Open-ILS/src/sql/Pg/400.schema.action_trigger.sql	2010-05-13 14:23:14 UTC (rev 16425)
@@ -48,7 +48,7 @@
 INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES ('penalty.PATRON_EXCEEDS_OVERDUE_COUNT','ausp','Patron has exceeded allowed overdue count',TRUE);
 INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES ('penalty.PATRON_EXCEEDS_CHECKOUT_COUNT','ausp','Patron has exceeded allowed checkout count',TRUE);
 INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES ('penalty.PATRON_EXCEEDS_COLLECTIONS_WARNING','ausp','Patron has exceeded maximum fine amount for collections department warning',TRUE);
-INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES ('format.po.jedi','acqpo','Formats a Purchase Order as a JEDI document',TRUE);
+INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES ('acqpo.activated','acqpo','Purchase order was activated',FALSE);
 INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES ('format.po.html','acqpo','Formats a Purchase Order as an HTML document',TRUE);
 INSERT INTO action_trigger.hook (key,core_type,description,passive) VALUES ('format.po.pdf','acqpo','Formats a Purchase Order as a PDF document',TRUE);
 INSERT INTO action_trigger.hook (key,core_type,description) VALUES ('damaged','acp','Item marked damaged');

Modified: trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql	2010-05-12 22:14:49 UTC (rev 16424)
+++ trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql	2010-05-13 14:23:14 UTC (rev 16425)
@@ -4689,7 +4689,32 @@
 INSERT INTO action_trigger.environment ( event_def, path) VALUES
     ( 13, 'open_billable_transactions_summary.circulation' );
 
-INSERT INTO action_trigger.event_definition (id, active, owner, name, hook, validator, reactor, cleanup_success, cleanup_failure, delay, delay_field, group_field, template) VALUES (23, true, 1, 'PO JEDI', 'format.po.jedi', 'NOOP_True', 'ProcessTemplate', NULL, NULL, '00:05:00', NULL, NULL,
+
+INSERT INTO action_trigger.validator (module, description) 
+    VALUES (
+        'Acq::PurchaseOrderEDIRequired',
+        oils_i18n_gettext(
+            'Acq::PurchaseOrderEDIRequired',
+            'Purchase order is delivered via EDI',
+            'atval',
+            'description'
+        )
+    );
+
+INSERT INTO action_trigger.reactor (module, description)
+    VALUES (
+        'GeneratePurchaseOrderJEDI',
+        oils_i18n_gettext(
+            'GeneratePurchaseOrderJEDI',
+            'Creates purchase order JEDI (JSON EDI) for subsequent EDI processing',
+            'atreact',
+            'description'
+        )
+    );
+
+
+INSERT INTO action_trigger.event_definition (id, active, owner, name, hook, validator, reactor, cleanup_success, cleanup_failure, delay, delay_field, group_field, template) 
+    VALUES (23, true, 1, 'PO JEDI', 'acqpo.activated', 'Acq::PurchaseOrderEDIRequired', 'GeneratePurchaseOrderJEDI', NULL, NULL, '00:05:00', NULL, NULL,
 $$[%- USE date -%]
 [%# start JEDI document -%]
 [%- BLOCK big_block -%]

Added: trunk/Open-ILS/src/sql/Pg/upgrade/0260.data.acq.po_activate_and_jedi.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/upgrade/0260.data.acq.po_activate_and_jedi.sql	                        (rev 0)
+++ trunk/Open-ILS/src/sql/Pg/upgrade/0260.data.acq.po_activate_and_jedi.sql	2010-05-13 14:23:14 UTC (rev 16425)
@@ -0,0 +1,47 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('0260');
+
+INSERT INTO action_trigger.validator (module, description) 
+    VALUES (
+        'Acq::PurchaseOrderEDIRequired',
+        oils_i18n_gettext(
+            'Acq::PurchaseOrderEDIRequired',
+            'Purchase order is delivered via EDI',
+            'atval',
+            'description'
+        )
+    );
+
+INSERT INTO action_trigger.reactor (module, description)
+    VALUES (
+        'GeneratePurchaseOrderJEDI',
+        oils_i18n_gettext(
+            'GeneratePurchaseOrderJEDI',
+            'Creates purchase order JEDI (JSON EDI) for subsequent EDI processing',
+            'atreact',
+            'description'
+        )
+    );
+
+UPDATE action_trigger.hook 
+    SET 
+        key = 'acqpo.activated', 
+        passive = FALSE,
+        description = oils_i18n_gettext(
+            'acqpo.activated',
+            'Purchase order was activated',
+            'ath',
+            'description'
+        )
+    WHERE key = 'format.po.jedi';
+
+UPDATE action_trigger.event_definition 
+    SET 
+        hook = 'acqpo.activated', 
+        validator = 'Acq::PurchaseOrderEDIRequired',
+        reactor = 'GeneratePurchaseOrderJEDI'
+    WHERE id = 23; 
+
+COMMIT;
+

Modified: trunk/Open-ILS/src/support-scripts/edi_pusher.pl
===================================================================
--- trunk/Open-ILS/src/support-scripts/edi_pusher.pl	2010-05-12 22:14:49 UTC (rev 16424)
+++ trunk/Open-ILS/src/support-scripts/edi_pusher.pl	2010-05-13 14:23:14 UTC (rev 16425)
@@ -32,9 +32,12 @@
 
 my %opts = (
     'quiet' => 0,
+    'max-batch-size=i' => -1
 );
 
-OpenILS::Utils::Cronscript->new()->session('open-ils.acq') or die "No session created";
+my $cs = OpenILS::Utils::Cronscript->new(\%opts);
+$cs->session('open-ils.acq') or die "No session created";
+
 OpenILS::Utils::CStoreEditor::init();
 
 sub editor {
@@ -43,26 +46,63 @@
 }
 
 my $e = editor();
-my $hook = 'format.po.jedi';
-my $defs = $e->search_action_trigger_event_definition({hook => $hook});
+my $hook = 'acqpo.activated';
+my $defs = $e->search_action_trigger_event_definition({
+    hook => $hook, 
+    reactor => 'GeneratePurchaseOrderJEDI',
+    active => 't'
+});
+
 # print Dumper($defs);
 print "\nHook '$hook' is used in ", scalar(@$defs), " event definition(s):\n";
 
 $Data::Dumper::Indent = 1;
+my $remaining = $cs->first_defined('max-batch-size');
 foreach my $def (@$defs) {
+    last if $remaining == 0;
     printf "%3s - '%s'\n", $def->id, $def->name;
-    my $events = $e->search_action_trigger_event([
-        {event_def => $def->id},
-        {flesh => 1, flesh_fields => { atev => ['template_output'] }}
-    ]);
+
+    # give me all completed JEDI events that link to purchase_orders 
+    # that have not already been delivered to the vendor
+    my $query = {
+        select => {atev => ['id']},
+        from => 'atev',
+        where => {
+            event_def => $def->id,
+            state => 'complete',
+            target => {
+                in => {
+                    select => {acqpo => ['id']},
+                    from => 'acqpo',
+                    where => {
+                        id => {
+                            'not in' => {
+                                select => {acqedim => ['purchase_order']},
+                                from => 'acqedim',
+                                where => {purchase_order => {'!=' => undef}}
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        order_by => {atev => 'add_time'}
+    };
+
+    $query->{limit} = $remaining if $remaining > 0;
+
+    my $events = $e->json_query($query);
+    $remaining -= scalar(@$events);
+
     print "Event definition ", $def->id, " has ", scalar(@$events), " event(s)\n";
     foreach (@$events) {
+        my $event = $e->retrieve_action_trigger_event($_);
         my $message = Fieldmapper::acq::edi_message->new;
         $message->create_time('NOW');   # will need this later when we try to update from the object
-        print "Event ", $_->id, " targets PO ", $_->target, ":\n";  # target is an opaque identifier, so we cannot flesh it
-        print Dumper($_), "\n";
+        print "Event ", $event->id, " targets PO ", $event->target, ":\n";  # target is an opaque identifier, so we cannot flesh it
+        print Dumper($event), "\n";
         my $target = $e->retrieve_acq_purchase_order([              # instead we retrieve it separately
-            $_->target, {
+            $event->target, {
                 flesh => 2,
                 flesh_fields => {
                     acqpo  => ['provider'],
@@ -71,12 +111,14 @@
             }
         ]);
 
+        $message->purchase_order($target->id);
+
         $debug and print "Target: ", Dumper($target), "\n";
         my $logstr = sprintf "provider %s (%s)", $target->provider->id, $target->provider->name;
         unless ($target->provider->edi_default and $message->account($target->provider->edi_default->id)) {
             printf STDERR "ERROR: No edi_default account found for $logstr.  File will not be sent!\n";
         }
-        $message->jedi($_->template_output()->data);
+        $message->jedi($event->template_output()->data);
         print "\ntarget->provider->edi_default->id: ", $target->provider->edi_default->id, "\n";
         print "\nNow calling attempt_translation\n\n";
         unless (OpenILS::Application::Acq::EDI->attempt_translation($message, 1)) {



More information about the open-ils-commits mailing list