diff options
author | jeff <jeff> | 2007-04-29 22:55:14 +0000 |
---|---|---|
committer | jeff <jeff> | 2007-04-29 22:55:14 +0000 |
commit | 7cdcb8d249f66efdbd5eb4efdd6e07f0f7948b49 (patch) | |
tree | 4b5cf5789e1f37d143490293f84c4651d7b0024b /FS | |
parent | ca87d33422b2d19d28773b6f2937cdb84863b124 (diff) |
ticket 1568 config options for new echeck fields and addition to selfservice interface
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/ClientAPI/MyAccount.pm | 77 | ||||
-rw-r--r-- | FS/FS/ClientAPI/Signup.pm | 14 | ||||
-rw-r--r-- | FS/FS/Conf.pm | 7 |
3 files changed, 75 insertions, 23 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index c24917749..9ee770b20 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -23,6 +23,7 @@ use FS::cust_main; use FS::cust_bill; use FS::cust_main_county; use FS::cust_pkg; +use FS::payby; use HTML::Entities; #false laziness with FS::cust_main @@ -237,6 +238,14 @@ sub payment_info { 'card_types' => card_types(), + 'paytypes' => [ @FS::cust_main::paytypes ], + + 'stateid_label' => FS::Msgcat::_gettext('stateid'), + 'stateid_state_label' => FS::Msgcat::_gettext('stateid_state'), + + 'show_ss' => $conf->exists('show_ss'), + 'show_stateid' => $conf->exists('show_stateid'), + 'show_paystate' => $conf->exists('show_bankstate'), }; } @@ -260,6 +269,7 @@ sub payment_info { $return{$_} = $cust_main->get($_) for qw(address1 address2 city state zip); $return{payby} = $cust_main->payby; + $return{stateid_state} = $cust_main->stateid_state; if ( $cust_main->payby =~ /^(CARD|DCRD)$/ ) { $return{card_type} = cardtype($cust_main->payinfo); @@ -269,6 +279,15 @@ sub payment_info { } + if ( $cust_main->payby =~ /^(CHEK|DCHK)$/ ) { + my ($payinfo1, $payinfo2) = split '@', $cust_main->payinfo; + $return{payinfo1} = $payinfo1; + $return{payinfo2} = $payinfo2; + $return{paytype} = $cust_main->paytype; + $return{paystate} = $cust_main->paystate; + + } + #doubleclick protection my $_date = time; $return{paybatch} = "webui-MyAccount-$_date-$$-". rand() * 2**32; @@ -303,19 +322,23 @@ sub process_payment { or return { 'error' => gettext('illegal_text'). " paybatch: ". $p->{'paybatch'} }; my $paybatch = $1; + $p->{'payby'} =~ /^([A-Z]{4})$/ + or return { 'error' => "illegal_payby " . $p->{'payby'} }; + my $payby = $1; + my $payinfo; my $paycvv = ''; - #if ( $payby eq 'CHEK' ) { - # - # $p->{'payinfo1'} =~ /^(\d+)$/ - # or return { 'error' => "illegal account number ". $p->{'payinfo1'} }; - # my $payinfo1 = $1; - # $p->{'payinfo2'} =~ /^(\d+)$/ - # or return { 'error' => "illegal ABA/routing number ". $p->{'payinfo2'} }; - # my $payinfo2 = $1; - # $payinfo = $payinfo1. '@'. $payinfo2; - # - #} elsif ( $payby eq 'CARD' ) { + if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { + + $p->{'payinfo1'} =~ /^(\d+)$/ + or return { 'error' => "illegal account number ". $p->{'payinfo1'} }; + my $payinfo1 = $1; + $p->{'payinfo2'} =~ /^(\d+)$/ + or return { 'error' => "illegal ABA/routing number ". $p->{'payinfo2'} }; + my $payinfo2 = $1; + $payinfo = $payinfo1. '@'. $payinfo2; + + } elsif ( $payby eq 'CARD' || $payby eq 'DCRD' ) { $payinfo = $p->{'payinfo'}; $payinfo =~ s/\D//g; @@ -339,19 +362,23 @@ sub process_payment { } } - #} else { - # die "unknown payby $payby"; - #} + } else { + die "unknown payby $payby"; + } - my $error = $cust_main->realtime_bop( 'CC', $p->{'amount'}, + my %payby2fields = ( + 'CARD' => [ qw( paystart_month paystart_year payissue address1 address2 city state zip payip ) ], + 'CHEK' => [ qw( ss paytype paystate stateid stateid_state payip ) ], + ); + + my $error = $cust_main->realtime_bop( $FS::payby::payby2bop{$payby}, $p->{'amount'}, 'quiet' => 1, 'payinfo' => $payinfo, 'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01', 'payname' => $payname, 'paybatch' => $paybatch, 'paycvv' => $paycvv, - map { $_ => $p->{$_} } qw( paystart_month paystart_year payissue payip - address1 address2 city state zip ) + map { $_ => $p->{$_} } @{ $payby2fields{$payby} } ); return { 'error' => $error } if $error; @@ -359,11 +386,19 @@ sub process_payment { if ( $p->{'save'} ) { my $new = new FS::cust_main { $cust_main->hash }; - $new->set( $_ => $p->{$_} ) - foreach qw( payname paystart_month paystart_year payissue payip - address1 address2 city state zip payinfo ); + if ($payby eq 'CARD' || $payby eq 'DCRD') { + $new->set( $_ => $p->{$_} ) + foreach qw( payname paystart_month paystart_year payissue payip + address1 address2 city state zip payinfo ); + $new->set( 'payby' => $p->{'auto'} ? 'CARD' : 'DCRD' ); + } elsif ($payby eq 'CHEK' || $payby eq 'DCHK') { + $new->set( $_ => $p->{$_} ) + foreach qw( payname payip paytype paystate + stateid stateid_state ); + $new->set( 'payinfo' => $payinfo ); + $new->set( 'payby' => $p->{'auto'} ? 'CHEK' : 'DCHK' ); + } $new->set( 'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01' ); - $new->set( 'payby' => $p->{'auto'} ? 'CARD' : 'DCRD' ); my $error = $new->replace($cust_main); return { 'error' => $error } if $error; $cust_main = $new; diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index 1f5a2ec1c..6dded4ccf 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -67,14 +67,24 @@ sub signup_info { 'card_types' => card_types(), + 'paytypes' => [ @FS::cust_main::paytypes ], + 'cvv_enabled' => defined dbdef->table('cust_main')->column('paycvv'), # 1, + 'stateid_enabled' => $conf->exists('show_stateid'), + + 'paystate_enabled' => $conf->exists('show_bankstate'), + 'ship_enabled' => defined dbdef->table('cust_main')->column('ship_last'),#1, 'msgcat' => { map { $_=>gettext($_) } qw( passwords_dont_match invalid_card unknown_card_type not_a empty_password illegal_or_empty_text ) }, + 'label' => { map { $_ => FS::Msgcat::_gettext($_) } qw( + stateid stateid_state + ) }, + 'statedefault' => $conf->config('statedefault') || 'CA', 'countrydefault' => $conf->config('countrydefault') || 'US', @@ -259,14 +269,14 @@ sub new_customer { last first ss company address1 address2 city county state zip country - daytime night fax + daytime night fax stateid stateid_state ship_last ship_first ship_ss ship_company ship_address1 ship_address2 ship_city ship_county ship_state ship_zip ship_country ship_daytime ship_night ship_fax payby - payinfo paycvv paydate payname + payinfo paycvv paydate payname paystate paytype paystart_month paystart_year payissue payip diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index b54d6f54f..a86764846 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -925,6 +925,13 @@ httemplate/docs/config.html 'type' => 'checkbox', }, + { + 'key' => 'show_bankstate', + 'section' => 'UI', + 'description' => "Turns on display/collection of state for bank accounts in the web interface. Sometimes required by electronic check (ACH) processors.", + 'type' => 'checkbox', + }, + { 'key' => 'agent_defaultpkg', 'section' => 'UI', |