RT#30825: Modernize Bulk payment importing [error handling for mismatched agentnum]
authorJonathan Prykop <jonathan@freeside.biz>
Mon, 2 Mar 2015 23:53:51 +0000 (17:53 -0600)
committerJonathan Prykop <jonathan@freeside.biz>
Mon, 2 Mar 2015 23:53:51 +0000 (17:53 -0600)
FS/FS/cust_pay.pm
httemplate/elements/select-payby.html
httemplate/misc/cust_pay-import.cgi

index 0a36aca..ce8a355 100644 (file)
@@ -1175,40 +1175,49 @@ sub process_batch_import {
   my $hashcb = sub {
     my %hash = @_;
     my $custnum = $hash{'custnum'};
+    my $agentnum = $hash{'agentnum'};
     my $agent_custid = $hash{'agent_custid'};
     #standardize date
     $hash{'_date'} = parse_datetime($hash{'_date'})
       if $hash{'_date'} && $hash{'_date'} =~ /\D/;
+    #remove custnum_prefix
+    my $custnum_prefix = $conf->config('cust_main-custnum-display_prefix');
+    my $custnum_length = $conf->config('cust_main-custnum-display_length') || 8;
+    if (
+      $custnum_prefix 
+      && $custnum =~ /^$custnum_prefix(0*([1-9]\d*))$/
+      && length($1) == $custnum_length 
+    ) {
+      $custnum = $2;
+    }
+    # check agentnum against custnum and
     # translate agent_custid into regular custnum
     if ($custnum && $agent_custid) {
       die "can't specify both custnum and agent_custid\n";
-    } elsif ($agent_custid) {
+    } elsif ($agentnum || $agent_custid) {
       # here is the agent virtualization
       my $extra_sql = ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql;
-      my $agentnum = $hash{'agentnum'};
-      my %search = (
-        'agent_custid' => $agent_custid,
-        'agentnum'     => $agentnum,
-      );
+      my %search;
+      $search{'agentnum'} = $agentnum
+        if $agentnum;
+      $search{'agent_custid'} = $agent_custid
+        if $agent_custid;
+      $search{'custnum'} = $custnum
+        if $custnum;
       my $cust_main = qsearchs({
         'table'     => 'cust_main',
         'hashref'   => \%search,
         'extra_sql' => $extra_sql,
       });
-      die "can't find customer with agent_custid $agent_custid\n"
+      die "can't find customer with" .
+        ($agentnum ? " agentnum $agentnum" : '') .
+        ($custnum  ? " custnum $custnum" : '') .
+        ($agent_custid ? " agent_custid $agent_custid" : '') . "\n"
         unless $cust_main;
+      die "mismatched customer number\n"
+        if $custnum && ($custnum ne $cust_main->custnum);
       $custnum = $cust_main->custnum;
     }
-    #remove custnum_prefix
-    my $custnum_prefix = $conf->config('cust_main-custnum-display_prefix');
-    my $custnum_length = $conf->config('cust_main-custnum-display_length') || 8;
-    if (
-      $custnum_prefix 
-      && $custnum =~ /^$custnum_prefix(0*([1-9]\d*))$/
-      && length($1) == $custnum_length 
-    ) {
-      $custnum = $2;
-    }
     $hash{'custnum'} = $custnum;
     delete($hash{'agent_custid'});
     return %hash;
index 2018874..a976b77 100644 (file)
@@ -3,7 +3,7 @@
         <% $onchange %>
 >
 
-% unless ( $opt{'multiple'} || $opt{'no_all'} ) {
+% unless ( $opt{'multiple'} || $opt{'disable_empty'} ) {
     <OPTION VALUE="" <% '' eq $value ? 'SELECTED' : '' %> ><% mt('all') |h %> 
 % }
 
index ee0154d..102f842 100644 (file)
@@ -41,7 +41,7 @@ Import a file containing customer payments.
 
 <% include( '/elements/tr-select-payby.html',
      'paybys' => \%paybys,
-     'no_all' => 1,
+     'disable_empty' => 1,
      'label'  => '<B>Payment type</B>',
    )
 %>