From: Ivan Kohler Date: Thu, 11 Dec 2014 04:58:54 +0000 (-0800) Subject: tax-exempt numbers during signup, RT#32299 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=b0dcfb17045dca111b177084ecb857ae2ee6c670 tax-exempt numbers during signup, RT#32299 --- diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index 5407a8fa6..ebf569363 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -178,6 +178,7 @@ sub signup_info { 'require_cvv' => $conf->exists('signup-require_cvv'), 'stateid_enabled' => $conf->exists('show_stateid'), 'paystate_enabled' => $conf->exists('show_bankstate'), + 'exempt_groups' => [ grep /\S/, $conf->config('tax-cust_exempt-groups') ], 'ship_enabled' => 1, 'msgcat' => $msgcat, 'label' => $label, @@ -475,6 +476,7 @@ sub domain_select_hash { sub new_customer { my $packet = shift; +warn Dumper($packet); my $conf = new FS::Conf; my $svc_x = $conf->config('signup_server-service') || 'svc_acct'; @@ -646,6 +648,14 @@ 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'} = { + map { $_ => $packet->{"tax_$_".'_num'} } @tax_exempt + }; + $packet->{'pkgpart'} =~ /^(\d+)$/ or '' =~ /^()$/; my $pkgpart = $1; return { 'error' => 'Please select a package' } unless $pkgpart; #msgcat @@ -761,6 +771,7 @@ sub new_customer { \%hash, \@invoicing_list, 'depend_jobnum' => $placeholder->jobnum, + %insert_options, ); if ( $error ) { my $perror = $placeholder->delete; diff --git a/fs_selfservice/FS-SelfService/cgi/signup.cgi b/fs_selfservice/FS-SelfService/cgi/signup.cgi index acd7a62db..817fdd310 100755 --- a/fs_selfservice/FS-SelfService/cgi/signup.cgi +++ b/fs_selfservice/FS-SelfService/cgi/signup.cgi @@ -160,31 +160,31 @@ if ( $magic eq 'process' || $action eq 'process_signup' ) { my $payby = $cgi->param('payby'); if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) ); - $cgi->param('payinfo' => $cgi->param($payby. '_payinfo1'). '@'. - $cgi->param($payby. '_payinfo2') + $cgi->param('payinfo' => scalar($cgi->param($payby. '_payinfo1')). '@'. + scalar($cgi->param($payby. '_payinfo2')) ); } else { - $cgi->param('payinfo' => $cgi->param( $payby. '_payinfo' ) ); + $cgi->param('payinfo' => scalar($cgi->param( $payby. '_payinfo' ) ) ); } - $cgi->param('paydate' => $cgi->param( $payby. '_month' ). '-'. - $cgi->param( $payby. '_year' ) + $cgi->param('paydate' => scalar($cgi->param( $payby. '_month' )). '-'. + scalar($cgi->param( $payby. '_year' )) ); - $cgi->param('payname' => $cgi->param( $payby. '_payname' ) ); + $cgi->param('payname' => scalar($cgi->param( $payby. '_payname' ) ) ); $cgi->param('paycvv' => defined $cgi->param( $payby. '_paycvv' ) - ? $cgi->param( $payby. '_paycvv' ) + ? scalar($cgi->param( $payby. '_paycvv' )) : '' ); $cgi->param('paytype' => defined $cgi->param( $payby. '_paytype' ) - ? $cgi->param( $payby. '_paytype' ) + ? scalar($cgi->param( $payby. '_paytype' )) : '' ); $cgi->param('paystate' => defined $cgi->param( $payby. '_paystate' ) - ? $cgi->param( $payby. '_paystate' ) + ? scalar($cgi->param( $payby. '_paystate' )) : '' ); if ( $cgi->param('invoicing_list') ) { - $cgi->param('invoicing_list' => $cgi->param('invoicing_list'). ', POST') + $cgi->param('invoicing_list' => scalar($cgi->param('invoicing_list')). ', POST') if $cgi->param('invoicing_list_POST'); } else { $cgi->param('invoicing_list' => 'POST' ); @@ -240,7 +240,7 @@ if ( $magic eq 'process' || $action eq 'process_signup' ) { mac_addr countrycode phonenum sip_password pin prepaid_shortform ), - grep { /^snarf_/ } $cgi->param + grep { /^(snarf_|tax_)/ } $cgi->param ), 'payip' => $cgi->remote_host(), } ); @@ -255,10 +255,9 @@ if ( $magic eq 'process' || $action eq 'process_signup' ) { qw( popup_url reference amount ); print_collect($rv); } elsif ( $error ) { - - #fudge the snarf info + #fudge the snarf and tax info no strict 'refs'; - ${$_} = $cgi->param($_) foreach grep { /^snarf_/ } $cgi->param; + ${$_} = $cgi->param($_) foreach grep { /^(snarf_|tax_)/ } $cgi->param; if ( $error =~ /^_duplicate_(card|ach)/ ) { my $what = ($1 eq 'card') ? 'Credit card' : 'Electronic check'; diff --git a/fs_selfservice/FS-SelfService/cgi/signup.html b/fs_selfservice/FS-SelfService/cgi/signup.html index 003632a6a..2bc59ca5d 100755 --- a/fs_selfservice/FS-SelfService/cgi/signup.html +++ b/fs_selfservice/FS-SelfService/cgi/signup.html @@ -30,9 +30,13 @@ ' Signup form

'; %> -<%= encode_entities($error) %> +<%= if ( $error ) { + $OUT .= ''. encode_entities($error). + '

'; + } +%> -
+ @@ -41,11 +45,24 @@ <%= - $OUT = join("\n",map { my $method = $_ ; map { qq|| } qw / payinfo payinfo1 payinfo2 payname paystate paytype paycvv month year type / } @payby); + $OUT = join("\n", + map { + my $method = $_ ; + map { qq|| } + qw( payinfo payinfo1 payinfo2 payname paystate paytype paycvv + month year type ) + } @payby + ); %> <%= - $OUT = join("\n", map { qq|| } qw / promo_code reg_code pkgpart username _password _password2 sec_phrase popnum domsvc mac_addr countrycode phonenum sip_password pin / ); + $OUT = join("\n", + map { qq|| } + qw( promo_code reg_code pkgpart username _password _password2 + sec_phrase popnum domsvc mac_addr countrycode phonenum + sip_password pin ), + map { ( "tax_$_", "tax_${_}_num" ) } @exempt_groups + ); %> <%= @@ -71,7 +88,7 @@ Where did you hear about our service? '; + + my $table = ''; my %payby = ( - 'CARD' => qq!Credit card
*$cardselect
*Exp !. expselect("CARD"). qq!
*Name on card
!, - 'DCRD' => qq!Credit card
*$cardselect
*Exp !. expselect("DCRD"). qq!
*Name on card
!, + 'CARD' => qq!$table!, + 'DCRD' => qq!$table!, 'CHEK' => qq!Electronic check
${r}Account number
${r}ABA/Routing code Type
{$r}Bank State
${r}Bank name !, 'DCHK' => qq!Electronic check
${r}Account number Type
${r}ABA/Routing code
{$r}Bank State
${r}Bank name !, 'LECB' => qq!Phone bill billing
${r}Phone number !, @@ -215,8 +235,8 @@ else { my( $account, $aba ) = split('@', $payinfo); my %paybychecked = ( - 'CARD' => '
* Card type$cardselect
* Card number
* Expiration!. expselect("CARD"). qq!
* Name on card
* Card type$cardselect
* Card number
* Expiration!. expselect("DCRD"). qq!
* Name on card
!, - 'DCRD' => qq!Credit card
*$cardselect
*Exp !. expselect("DCRD", $paydate). qq!
*Name on card
!, + 'CARD' => qq!$table!, + 'DCRD' => qq!$table!, 'CHEK' => qq!Electronic check
${r}Account number Type
${r}ABA/Routing code
${r}Bank name !, 'DCHK' => qq!Electronic check
${r}Account number Type
${r}ABA/Routing code
${r}Bank name !, 'LECB' => qq!Phone bill billing
${r}Phone number !, @@ -248,9 +268,9 @@ else { } my %payby_index = ( 'CARD' => qq/Credit Card/, - 'DCRD' => qq/Credit Card/, + 'DCRD' => qq/Credit Card (no auto-charge)/, 'CHEK' => qq/Check/, - 'DCHK' => qq/Check/, + 'DCHK' => qq/Check (no auto-charge)/, 'LECB' => qq/Phone Bill Billing/, 'BILL' => qq/Billing/, 'COMP' => qq/Complimentary/, @@ -270,7 +290,7 @@ HTML::Widgets::SelectLayers->new( options => \%options, selected_layer => $selected_layer, form_name => 'dummy', - html_between => '
* Card type$cardselect
* Card number
* Expiration!. expselect("CARD", $paydate). qq!
* Name on card
* Card type$cardselect
* Card number
* Expiration!. expselect("CARD", $paydate). qq!
* Name on card
* Card type$cardselect
* Card number
* Expiration!. expselect("DCRD", $paydate). qq!
* Name on card
', + html_between => '', form_action => 'dummy.cgi', layer_callback => sub { my $layer = shift; return ( shift @hide_payment_fields ? '' : $paybychecked{$layer} ) . ''; }, )->html; @@ -278,8 +298,42 @@ HTML::Widgets::SelectLayers->new( %> -* required fields -

First package + + + + + + + +<%= + foreach my $exempt_group ( @exempt_groups ) { + no strict 'refs'; + my $checked = ${"tax_$exempt_group"} ? 'CHECKED' : ''; + my $disabled = $checked ? '' : 'DISABLED'; + + $OUT .= qq! + + + !; + } +%> + + +
Tax Exempt ($exempt_group taxes) + - Exemption number
* required fields + +
+ +

First package @@ -429,10 +483,11 @@ I agree to the Terms of Se <%= length($terms_of_service) ? 'agree_to_terms(false)' : '' %> function fixup_form() { - + // copy payment method data up to OneTrueForm - var payment_method_elements = new Array( 'payinfo', 'payinfo1', 'payinfo2', 'payname', 'paycvv' , 'paystate', 'paytype', 'month', 'year','type' ); + var payment_method_elements = new Array( 'payinfo', 'payinfo1', 'payinfo2', 'payname', 'paycvv' , 'paystate', 'paytype', 'month', 'year', 'type' ); + var payment_method_form_name = document.OneTrueForm.select.options[document.OneTrueForm.select.selectedIndex].value; document.OneTrueForm.elements['payby'].value = payment_method_form_name; var payment_method_form = document.forms[payment_method_form_name]; @@ -442,7 +497,20 @@ function fixup_form() { copyelement ( payment_method_form.elements[true_element_name], document.OneTrueForm.elements[true_element_name] ); } - + + + // copy tax exempt data up to OneTrueForm + + var tax_elements = new Array( + <%= join(', ', map "'tax_$_', 'tax_${_}_num'", @exempt_groups ) %> + ); + + for ( ii = 0 ; ii < tax_elements.length ; ii++ ) { + copyelement ( document.TaxForm.elements[tax_elements[ii]], + document.OneTrueForm.elements[tax_elements[ii]] ); + } + + // Copy signup details to OneTrueForm var signup_elements = new Array ( @@ -462,7 +530,6 @@ function fixup_form() { } function copyelement(from, to) { -// alert ( from + ' ' + to ); if ( from == undefined ) { to.value = ''; @@ -482,7 +549,7 @@ function copyelement(from, to) { to.value = from.value; } } -// alert(from.name + " (" + from.type + "): " + to.name + " => " + to.value); + //alert(from.name + " (" + from.type + "): " + to.name + " => " + to.value); } }