From 3f27b7ce7c72b0ff7061baf3586e130b1c9a1569 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Mon, 2 Mar 2015 17:53:51 -0600 Subject: [PATCH] RT#30825: Modernize Bulk payment importing [error handling for mismatched agentnum] --- FS/FS/cust_pay.pm | 43 +++++++++++++++++++++-------------- httemplate/elements/select-payby.html | 2 +- httemplate/misc/cust_pay-import.cgi | 2 +- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 0a36aca5d..ce8a3552f 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -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; diff --git a/httemplate/elements/select-payby.html b/httemplate/elements/select-payby.html index 2018874e7..a976b77cf 100644 --- a/httemplate/elements/select-payby.html +++ b/httemplate/elements/select-payby.html @@ -3,7 +3,7 @@ <% $onchange %> > -% unless ( $opt{'multiple'} || $opt{'no_all'} ) { +% unless ( $opt{'multiple'} || $opt{'disable_empty'} ) {