From 4fdc6b443f4f9f51f0879cc19b2fe8c5ef1dac14 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 3 Nov 2015 09:00:17 -0800 Subject: [PATCH] fix self-service signup with payment information in 4.x, RT#38881 --- FS/FS/ClientAPI/Signup.pm | 46 ++++++++++++++++++++++++++++++---------------- FS/FS/cust_main.pm | 13 ++++++++++++- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index a4ea21b8f..bc69a5f79 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -26,6 +26,7 @@ use FS::reg_code; use FS::payby; use FS::banned_pay; use FS::part_tag; +use FS::cust_payby; $DEBUG = 1; $me = '[FS::ClientAPI::Signup]'; @@ -175,7 +176,7 @@ sub signup_info { 'nomadix' => $conf->exists('signup_server-nomadix'), 'payby' => [ $conf->config('signup_server-payby') ], 'card_types' => card_types(), - 'paytypes' => [ @FS::cust_main::paytypes ], + 'paytypes' => [ FS::cust_payby->paytypes ], 'cvv_enabled' => 1, 'require_cvv' => $conf->exists('signup-require_cvv'), 'stateid_enabled' => $conf->exists('show_stateid'), @@ -533,20 +534,27 @@ sub new_customer { ( map { $_ => $packet->{$_} } qw( salesnum ss stateid stateid_state - - payby - payinfo paycvv paydate payname paystate paytype - paystart_month paystart_year payissue - payip - locale - referral_custnum comments ) ), ); + my %insert_options = (); + if ( $packet->{payby} =~ /^(CARD|DCRD|CHEK|DCHK)$/ ) { + $insert_options{cust_payby} = [ + new FS::cust_payby { + map { $_ => $packet->{$_} } qw( + payby + payinfo paycvv paydate payname paystate paytype + paystart_month paystart_year payissue + payip + ), + } + ]; + } + my $template_custnum = $conf->config('signup_server-prepaid-template-custnum'); my $cust_main; if ( $template_custnum && $packet->{prepaid_shortform} ) { @@ -644,8 +652,6 @@ sub new_customer { ? split( /\s*\,\s*/, $packet->{'invoicing_list'} ) : (); - my %insert_options = (); - my @exempt_groups = grep /\S/, $conf->config('tax-cust_exempt-groups'); my @tax_exempt = grep { $packet->{"tax_$_"} eq 'Y' } @exempt_groups; $insert_options{'tax_exemption'} = { @@ -948,16 +954,25 @@ sub new_customer_minimal { last first company daytime night fax mobile ss stateid stateid_state - payby - payinfo paycvv paydate payname paystate paytype - paystart_month paystart_year payissue - payip - locale ), } ); + my %opt = (); + if ( $packet->{payby} =~ /^(CARD|DCRD|CHEK|DCHK)$/ ) { + $opt{cust_payby} = [ + new FS::cust_payby { + map { $_ => $packet->{$_} } qw( + payby + payinfo paycvv paydate payname paystate paytype + paystart_month paystart_year payissue + payip + ), + } + ]; + } + if ( grep length($packet->{$_}), FS::cust_main->location_fields ) { my $bill_hash; foreach my $f (FS::cust_main->location_fields) { @@ -1041,7 +1056,6 @@ sub new_customer_minimal { } - my %opt = (); if ( $invoicing_list[0] && $packet->{'_password'} ) { $opt{'contact'} = [ new FS::contact { 'first' => $cust_main->first, diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 2d6d45907..1f64b9ec1 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -599,7 +599,18 @@ sub insert { warn " setting cust_payby\n" if $DEBUG > 1; - if ( my $cust_payby_params = delete $options{'cust_payby_params'} ) { + if ( $options{cust_payby} ) { + + foreach my $cust_payby ( @{ $options{cust_payby} } ) { + $cust_payby->custnum($self->custnum); + my $error = $cust_payby->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + + } elsif ( my $cust_payby_params = delete $options{'cust_payby_params'} ) { my $error = $self->process_o2m( 'table' => 'cust_payby', -- 2.11.0