support part_pkg option input validation, check bytecounts and allow commas (closes...
[freeside.git] / FS / FS / cust_main.pm
index bb3dcdb..7ac8c62 100644 (file)
@@ -1439,10 +1439,11 @@ sub check {
     $payinfo =~ s/[^\d\@]//g;
     if ( $conf->exists('echeck-nonus') ) {
       $payinfo =~ /^(\d+)\@(\d+)$/ or return 'invalid echeck account@aba';
+      $payinfo = "$1\@$2";
     } else {
       $payinfo =~ /^(\d+)\@(\d{9})$/ or return 'invalid echeck account@aba';
+      $payinfo = "$1\@$2";
     }
-    $payinfo = "$1\@$2";
     $self->payinfo($payinfo);
     $self->paycvv('');
 
@@ -2730,6 +2731,13 @@ sub retry_realtime {
 
   my $join = FS::part_event_condition->join_conditions_sql;
   my $order = FS::part_event_condition->order_conditions_sql;
+  my $mine = 
+  '( '
+   . join ( ' OR ' , map { 
+    "( part_event.eventtable = " . dbh->quote($_) 
+    . " AND tablenum IN( SELECT " . dbdef->table($_)->primary_key . " from $_ where custnum = " . dbh->quote( $self->custnum ) . "))" ;
+   } FS::part_event->eventtables)
+   . ') ';
 
   #here is the agent virtualization
   my $agent_virt = " (    part_event.agentnum IS NULL
@@ -2753,7 +2761,7 @@ sub retry_realtime {
     'addl_from' => "LEFT JOIN part_event USING ( eventpart ) $join",
     'hashref'   => { 'status' => 'done' },
     'extra_sql' => " AND statustext IS NOT NULL AND statustext != '' ".
-                   " AND $is_realtime_event AND $agent_virt $order" # LIMIT 1"
+                   " AND $mine AND $is_realtime_event AND $agent_virt $order" # LIMIT 1"
   });
 
   my %seen_invnum = ();
@@ -5785,7 +5793,7 @@ sub _agent_plandata {
         LEFT JOIN part_event_option AS peo_agentnum
           ON ( part_event.eventpart = peo_agentnum.eventpart
                AND peo_agentnum.optionname = 'agentnum'
-               AND peo_agentnum.optionvalue ~ '(^|,)agentnum(,|$)'
+               AND peo_agentnum.optionvalue ~ '(^|,)}. $agentnum. q{agentnum(,|$)'
              )
         LEFT JOIN part_event_option AS peo_cust_bill_age
           ON ( part_event.eventpart = peo_cust_bill_age.eventpart
@@ -5795,6 +5803,7 @@ sub _agent_plandata {
       #'hashref'   => { 'optionname' => $option },
       'hashref'   => { 'part_event_option.optionname' => $option },
       'extra_sql' => " AND event = 'cust_bill_send_agent' ".
+                     " AND disabled != 'Y' ".
                      " AND peo_agentnum.optionname = 'agentnum' ".
                      " AND agentnum IS NULL OR agentnum = $agentnum ".
                      " ORDER BY
@@ -5821,6 +5830,16 @@ sub _agent_plandata {
 
 }
 
+sub queued_bill {
+  ## actual sub, not a method, designed to be called from the queue.
+  ## sets up the customer, and calls the bill_and_collect
+  my (%args) = @_; #, ($time, $invoice_time, $check_freq, $resetup) = @_;
+  my $cust_main = qsearchs( 'cust_main', { custnum => $args{'custnum'} } );
+      $cust_main->bill_and_collect(
+        %args,
+      );
+}
+
 =back
 
 =head1 BUGS