RT# 77193 - fixed error when inserting new ach payby thru selfservice on V4. Now...
authorChristopher Burger <burgerc@freeside.biz>
Mon, 9 Oct 2017 18:36:07 +0000 (14:36 -0400)
committerChristopher Burger <burgerc@freeside.biz>
Mon, 9 Oct 2017 18:36:07 +0000 (14:36 -0400)
FS/FS/ClientAPI/MyAccount.pm
FS/FS/cust_payby.pm
fs_selfservice/FS-SelfService/cgi/selfservice.cgi

index 30ab96b..e28aa18 100644 (file)
@@ -1675,14 +1675,15 @@ sub insert_payby {
 
   #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,
index fd90597..704741f 100644 (file)
@@ -159,8 +159,9 @@ sub insert {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  my $error =  $self->check_payinfo_cardtype
-            || $self->SUPER::insert;
+  my $error =  $self->check_payinfo_cardtype if $self->payby =~/^(CARD|DCRD)$/;
+  $self->SUPER::insert unless $error;
+
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
index f194746..6cf264c 100755 (executable)
@@ -337,6 +337,32 @@ sub _process_change_payby {
   }
 }
 
+sub _process_insert_payby {
+  my ($erroraction, @fields) = @_;
+
+  my $results = '';
+
+  $results ||= insert_payby (
+    'session_id' => $session_id,
+    map { ($_ => $cgi->param($_)) } grep { defined($cgi->param($_)) } @fields,
+  );
+
+  ## check error
+
+
+  if ( $results->{'error'} ) {
+    no strict 'refs';
+    $action = $erroraction;
+    return {
+      $cgi->Vars,
+      %{&$action()},
+      'error' => '<FONT COLOR="#FF0000">'. $results->{'error'}. '</FONT>',
+    };
+  } else {
+    return $results;
+  }
+}
+
 sub process_change_bill {
         _process_change_info( 'change_bill', 
           qw( first last company address1 address2 city state
@@ -389,20 +415,20 @@ sub process_change_creditcard_pay {
               address1 address2 city county state zip country auto paytype
               paystate ss stateid stateid_state invoicing_list
             );
-
-        _process_change_payby( 'change_creditcard_pay', @list );
+        if ($cgi->param( 'custpaybynum' )) { _process_change_payby( 'change_creditcard_pay', @list ); }
+        else { _process_insert_payby( 'change_creditcard_pay', @list ); }
 }
 
 sub process_change_check_pay {
         my $payby  = $cgi->param( 'payby' );
-        $cgi->param('paydate', $cgi->param('year') . '-' . $cgi->param('month') . '-01');
+        #$cgi->param('paydate', '2039-12-01');
         my @list =
           qw( payby payinfo payinfo1 payinfo2 paydate payname custpaybynum 
               address1 address2 city county state zip country auto paytype
               paystate ss stateid stateid_state invoicing_list
             );
-
-        _process_change_payby( 'change_check_pay', @list );
+        if ($cgi->param( 'custpaybynum' )) { _process_change_payby( 'change_check_pay', @list ); }
+        else { _process_insert_payby( 'change_check_pay', @list ); }
 }
 
 sub view_invoice {