$svc_x = $svc_phone;
+ } elsif ( $p->{'domain'} eq 'ip_mac' ) {
+
+ my $svc_broadband = qsearchs( 'svc_broadband', { 'mac_addr' => $p->{'username'} } );
+ return { error => 'IP address not found' }
+ unless $svc_broadband;
+ $svc_x = $svc_broadband;
+
} elsif ( $p->{email}
&& (my $contact = FS::contact->by_selfservice_email($p->{email}))
)
if ($cust_payby) {
$return{payname} = $cust_payby->payname
|| ( $cust_main->first. ' '. $cust_main->get('last') );
+ $return{custpaybynum} = $cust_payby->custpaybynum;
if ( $cust_payby->payby =~ /^(CARD|DCRD)$/ ) {
$return{card_type} = cardtype($cust_payby->payinfo);
#false laziness w/process/payment.cgi
my $payinfo;
my $paycvv = '';
+ my $replace_cust_payby;
if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) {
$p->{'payinfo1'} =~ /^([\dx]+)$/
foreach my $cust_payby ($cust_main->cust_payby('CHEK','DCHK')) {
if ( $cust_payby->paymask eq $payinfo ) {
$payinfo = $cust_payby->payinfo;
+ $replace_cust_payby = $cust_payby;
$achonfile = 1;
last;
}
foreach my $cust_payby ($cust_main->cust_payby('CARD','DCRD')) {
if ( $cust_payby->paymask eq $payinfo ) {
$payinfo = $cust_payby->payinfo;
+ $replace_cust_payby = $cust_payby;
$onfile = 1;
last;
}
'CHEK' => [ qw( ss paytype paystate stateid stateid_state payip ) ],
);
+ my %replace = ( 'replace' => $replace_cust_payby, );
+
my $card_type = '';
$card_type = cardtype($payinfo) if $payby eq 'CARD';
'amount' => sprintf('%.2f', $amount),
'payby' => $payby,
'payinfo' => $payinfo,
- 'paymask' => $cust_main->mask_payinfo( $payby, $payinfo ),
+ 'paymask' => FS::payinfo_Mixin->mask_payinfo( $payby, $payinfo ),
'card_type' => $card_type,
'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01',
'paydate_pretty' => $p->{'month'}. ' / '. $p->{'year'},
'payname' => $payname,
'discount_term' => $discount_term,
'pkgnum' => $session->{'pkgnum'},
+ %replace,
map { $_ => $p->{$_} } ( @{ $payby2fields{$payby} },
qw( save auto ),
)
my $error = $cust_main->save_cust_payby(
'payment_payby' => $payby,
+ 'replace' => $validate->{'replace'}, # cust_payby object to replace
%saveopt
);
#XXX payinfo1 + payinfo2 for CHEK?
#or take the opportunity to use separate, more well- named fields?
- # my $payinfo;
- # $p->{'payinfo1'} =~ /^([\dx]+)$/
- # or return { 'error' => "illegal account number ". $p->{'payinfo1'} };
- # my $payinfo1 = $1;
- # $p->{'payinfo2'} =~ /^([\dx\.]+)$/ # . turned on by echeck-country CA ?
- # or return { 'error' => "illegal ABA/routing number ". $p->{'payinfo2'} };
- # my $payinfo2 = $1;
- # $payinfo = $payinfo1. '@'. $payinfo2;
+ if ($p->{'payby'} eq 'CHEK') {
+ $p->{'payinfo1'} =~ /^([\dx]+)$/
+ or return { 'error' => "illegal account number ". $p->{'payinfo1'} };
+ my $payinfo1 = $1;
+ $p->{'payinfo2'} =~ /^([\dx\.]+)$/ # . turned on by echeck-country CA ?
+ or return { 'error' => "illegal ABA/routing number ". $p->{'payinfo2'} };
+ my $payinfo2 = $1;
+ $p->{'payinfo'} = $payinfo1. '@'. $payinfo2;
+ }
my $cust_payby = new FS::cust_payby {
'custnum' => $custnum,
my($context, $session, $custnum) = _custoragent_session_custnum($p);
return { 'error' => $session } if $context eq 'error';
+ if ($p->{'payby'} eq 'CHEK') {
+ $p->{'payinfo1'} =~ /^([\dx]+)$/
+ or return { 'error' => "illegal account number ". $p->{'payinfo1'} };
+ my $payinfo1 = $1;
+ $p->{'payinfo2'} =~ /^([\dx\.]+)$/ # . turned on by echeck-country CA ?
+ or return { 'error' => "illegal ABA/routing number ". $p->{'payinfo2'} };
+ my $payinfo2 = $1;
+ $p->{'payinfo'} = $payinfo1. '@'. $payinfo2;
+ }
+
my $cust_payby = qsearchs('cust_payby', {
'custnum' => $custnum,
'custpaybynum' => $p->{'custpaybynum'},