Lp 1803734: Only push on-order purchase orders in edi_order_pusher.pl.
[Evergreen.git] / Open-ILS / src / support-scripts / edi_order_pusher.pl
index 380ed49..4aaa965 100755 (executable)
@@ -49,7 +49,8 @@ sub help {
         1. PO must be activated.
         2. PO provider must be active.
         3. PO must use a provider that supports EDI delivery (via edi_default)
-        4. PO must have no EDI ORDERS messages attached or, if it does, 
+        4. EDI account linked to provider must have 'use_attrs' set to true.
+        5. PO must have no EDI ORDERS messages attached or, if it does, 
            the message has a status of "retry".
 
     Usage:
@@ -118,17 +119,26 @@ if ($po_id) {
                     type => 'left',
                     filter => {message_type => 'ORDERS'}
                 },
-                acqpro => {}
+                acqpro => {
+                    join => {
+                        acqedi => {
+                        }
+                    }
+                }
             }
         },
         where => {
             '+acqpo' => {
+                state => 'on-order', # on-order only
                 order_date => {'!=' => undef} # activated
             },
             '+acqpro' => {
                 active => 't', 
                 edi_default => {'!=' => undef}
             },
+            '+acqedi' => {
+                use_attrs => 't'
+            },
             '+acqedim' => {
                 '-or' => [
                     {id => undef}, # no ORDERS message exists
@@ -174,6 +184,22 @@ for $po_id (@$po_ids) {
         $message->purchase_order($po_id);
         $message->message_type('ORDERS');
         $message->isnew(1);
+
+        my $po = $e->retrieve_acq_purchase_order([$po_id, {
+            flesh => 2,
+            flesh_fields => {
+                acqpo  => ['provider'],
+                acqpro => ['edi_default'],
+            }
+        }]);
+
+        if (!$po->provider->edi_default) {
+            announce('error', "Provider for PO $po_id has no default EDI ".
+                "account, EDI message will not be sent.");
+            next;
+        }
+
+        $message->account($po->provider->edi_default->id);
     }
 
     $message->edi($edi);