X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FSignup.pm;h=488692f9f0bc1c9457bfcbc286df3e85ce83e788;hp=d6f5f1418a4e5242f4f6322c06d2eae8161cb7b9;hb=90393980e5f2859ee1e186fa461f48f5129e803e;hpb=e478bc4589a34d49ec01cfbc9a3be4d972d3c849 diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index d6f5f1418..488692f9f 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -93,7 +93,31 @@ sub signup_info { my @agent_fields = qw( agentnum agent ); + my @bools = qw( emailinvoiceonly security_phrase ); + + my @signup_bools = qw( no_company recommend_daytime recommend_email ); + + my @signup_server_scalars = qw( default_pkgpart default_svcpart ); + + my @selfservice_textareas = qw( head body_header body_footer ); + + my @selfservice_scalars = qw( + body_bgcolor box_bgcolor + text_color link_color vlink_color hlink_color alink_color + font title_color title_align title_size menu_bgcolor menu_fontsize + ); + + #XXX my @selfservice_bools = qw( + # menu_skipblanks menu_skipheadings menu_nounderline + #); + + #my $selfservice_binaries = qw( + # title_left_image title_right_image + # menu_top_image menu_body_image menu_bottom_image + #); + $signup_info_cache = { + 'cust_main_county' => [ map $_->hashref, qsearch('cust_main_county', {} ) ], @@ -125,46 +149,44 @@ sub signup_info { 'card_types' => card_types(), - 'paytypes' => [ @FS::cust_main::paytypes ], - - 'cvv_enabled' => 1, - - 'stateid_enabled' => $conf->exists('show_stateid'), - - 'paystate_enabled' => $conf->exists('show_bankstate'), - - 'ship_enabled' => 1, - - 'msgcat' => $msgcat, - - 'label' => $label, - - 'statedefault' => scalar($conf->config('statedefault')) || 'CA', - - 'countrydefault' => scalar($conf->config('countrydefault')) || 'US', - - 'refnum' => scalar($conf->config('signup_server-default_refnum')), - - 'default_pkgpart' => scalar($conf->config('signup_server-default_pkgpart')), - - 'signup_service' => $svc_x, - 'default_svcpart' => scalar($conf->config('signup_server-default_svcpart')), - - 'head' => join("\n", $conf->config('selfservice-head') ), - 'body_header' => join("\n", $conf->config('selfservice-body_header') ), - 'body_footer' => join("\n", $conf->config('selfservice-body_footer') ), - 'body_bgcolor' => scalar( $conf->config('selfservice-body_bgcolor') ), - 'box_bgcolor' => scalar( $conf->config('selfservice-box_bgcolor') ), - - 'company_name' => scalar($conf->config('company_name')), - + ( map { $_ => $conf->exists("signup-$_") } @signup_bools ), + + ( map { $_ => scalar($conf->config("signup_server-$_")) } + @signup_server_scalars + ), + + ( map { $_ => join("\n", $conf->config("selfservice-$_")) } + @selfservice_textareas + ), + ( map { $_ => scalar($conf->config("selfservice-$_")) } + @selfservice_scalars + ), + + #( map { $_ => scalar($conf->config_binary("selfservice-$_")) } + # @selfservice_binaries + #), + + 'agentnum2part_pkg' => $agentnum2part_pkg, + 'svc_acct_pop' => [ map $_->hashref, qsearch('svc_acct_pop',{} ) ], + 'nomadix' => $conf->exists('signup_server-nomadix'), + 'payby' => [ $conf->config('signup_server-payby') ], + 'card_types' => card_types(), + 'paytypes' => [ @FS::cust_main::paytypes ], + 'cvv_enabled' => 1, + 'stateid_enabled' => $conf->exists('show_stateid'), + 'paystate_enabled' => $conf->exists('show_bankstate'), + 'ship_enabled' => 1, + 'msgcat' => $msgcat, + 'label' => $label, + 'statedefault' => scalar($conf->config('statedefault')) || 'CA', + 'countrydefault' => scalar($conf->config('countrydefault')) || 'US', + 'refnum' => scalar($conf->config('signup_server-default_refnum')), + 'signup_service' => $svc_x, + 'company_name' => scalar($conf->config('company_name')), #per-agent? 'agent_ship_address' => scalar($conf->exists('agent-ship_address')), - - 'no_company' => scalar($conf->exists('signup-no_company')), - 'require_phone' => scalar($conf->exists('cust_main-require_phone')), - 'recommend_daytime' => scalar($conf->exists('signup-recommend_daytime')), - 'recommend_email' => scalar($conf->exists('signup-recommend_email')), + 'require_phone' => scalar($conf->exists('cust_main-require_phone')), + 'logo' => scalar($conf->config_binary('logo.png')), }; @@ -299,23 +321,34 @@ sub signup_info { warn "$me has agent $agent\n" if $DEBUG > 1; if ( $agent ) { #else complain loudly? $signup_info->{'hide_payment_fields'} = []; - foreach my $payby (@{$signup_info->{payby}}) { - warn "$me checking $payby payment fields\n" if $DEBUG > 1; - my $hide = 0; - if ( FS::payby->realtime($payby) ) { - my $payment_gateway = - $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby), - 'nofatal' => 1, - ); - if ( $payment_gateway - && $payment_gateway->gateway_namespace - eq 'Business::OnlineThirdPartyPayment' - ) { - warn "$me hiding $payby payment fields\n" if $DEBUG > 1; - $hide = 1; + my $gatewaynum = $conf->config('selfservice-payment_gateway'); + if ( $gatewaynum ) { + my $pg = qsearchs('payment_gateway', { gatewaynum => $gatewaynum }); + die "configured gatewaynum $gatewaynum not found!" if !$pg; + my $hide = $pg->gateway_namespace eq 'Business::OnlineThirdPartyPayment'; + $signup_info->{'hide_payment_fields'} = [ + map { $hide } @{$signup_info->{'payby'}} + ]; + } + else { + foreach my $payby (@{$signup_info->{payby}}) { + warn "$me checking $payby payment fields\n" if $DEBUG > 1; + my $hide = 0; + if ( FS::payby->realtime($payby) ) { + my $payment_gateway = + $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby), + 'nofatal' => 1, + ); + if ( $payment_gateway + && $payment_gateway->gateway_namespace + eq 'Business::OnlineThirdPartyPayment' + ) { + warn "$me hiding $payby payment fields\n" if $DEBUG > 1; + $hide = 1; + } } - } - push @{$signup_info->{'hide_payment_fields'}}, $hide; + push @{$signup_info->{'hide_payment_fields'}}, $hide; + } # foreach $payby } } warn "$me done setting agent-specific payment flag\n" if $DEBUG > 1; @@ -368,7 +401,7 @@ sub signup_info { #( map { $_ => scalar( $conf->config($_, $agentnum) ) } # qw( company_name ) ), ( map { $_ => scalar( $conf->config("selfservice-$_", $agentnum ) ) } - qw( body_bgcolor box_bgcolor) ), + qw( body_bgcolor box_bgcolor menu_bgcolor ) ), ( map { $_ => join("\n", $conf->config("selfservice-$_", $agentnum ) ) } qw( head body_header body_footer ) ), }; @@ -451,6 +484,9 @@ sub new_customer { unless $packet->{'popnum'} || !scalar(qsearch('svc_acct_pop',{} )); } + elsif ( $svc_x eq 'svc_pbx' ) { + #possibly some validation will be needed + } my $agentnum; if ( exists $packet->{'session_id'} ) { @@ -520,9 +556,17 @@ sub new_customer { return { 'error' => "Unknown reseller" } unless $agent; - my $gw = $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby), - 'nofatal' => 1, + my $gw; + my $gatewaynum = $conf->config('selfservice-payment_gateway'); + if ( $gatewaynum ) { + $gw = qsearchs('payment_gateway', { gatewaynum => $gatewaynum }); + die "configured gatewaynum $gatewaynum not found!" if !$gw; + } + else { + $gw = $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby), + 'nofatal' => 1, ); + } $cust_main->payby('BILL') # MCRD better? if $gw && $gw->gateway_namespace eq 'Business::OnlineThirdPartyPayment'; @@ -584,24 +628,27 @@ sub new_customer { push @acct_snarf, $acct_snarf; } $svc->child_objects( \@acct_snarf ); - push @svc, $svc; } elsif ( $svc_x eq 'svc_phone' ) { - my $svc = new FS::svc_phone ( { + push @svc, new FS::svc_phone ( { 'svcpart' => $svcpart, map { $_ => $packet->{$_} } qw( countrycode phonenum sip_password pin ), } ); - push @svc, $svc; + } elsif ( $svc_x eq 'svc_pbx' ) { + push @svc, new FS::svc_pbx ( { + 'svcpart' => $svcpart, + map { $_ => $packet->{$_} } + qw( id title ), + } ); + } else { die "unknown signup service $svc_x"; } - my $y = $svc[0]->setdefault; # arguably should be in new method - return { 'error' => $y } if $y && !ref($y); if ($packet->{'mac_addr'} && $conf->exists('signup_server-mac_addr_svcparts')) { @@ -620,15 +667,16 @@ sub new_customer { '_password' => '', #blank as requested (set passwordmin to 0) }; - my $y = $svc->setdefault; # arguably should be in new method - return { 'error' => $y } if $y && !ref($y); - push @svc, $svc; } - #$error = $svc->check; - #return { 'error' => $error } if $error; + foreach my $svc ( @svc ) { + my $y = $svc->setdefault; # arguably should be in new method + return { 'error' => $y } if $y && !ref($y); + #$error = $svc->check; + #return { 'error' => $error } if $error; + } #setup a job dependancy to delay provisioning my $placeholder = new FS::queue ( { @@ -669,6 +717,7 @@ sub new_customer { $bill_error = $cust_main->realtime_collect( method => FS::payby->payby2bop( $packet->{payby} ), depend_jobnum => $placeholder->jobnum, + selfservice => 1, ); #warn "$me error collecting from new customer: $bill_error" # if $bill_error; @@ -722,14 +771,25 @@ sub new_customer { my %return = ( 'error' => '', 'signup_service' => $svc_x, + 'custnum' => $cust_main->custnum, ); - if ( $svc_x eq 'svc_acct' ) { - $return{$_} = $svc[0]->$_() for qw( username _password ); - } elsif ( $svc_x eq 'svc_phone' ) { - $return{$_} = $svc[0]->$_() for qw( countrycode phonenum sip_password pin ); - } else { - die "unknown signup service $svc_x"; + if ( $svc[0] ) { + + $return{'svcnum'} = $svc[0]->svcnum; + + if ( $svc_x eq 'svc_acct' ) { + $return{$_} = $svc[0]->$_() for qw( username _password ); + } elsif ( $svc_x eq 'svc_phone' ) { + $return{$_} = $svc[0]->$_() for qw(countrycode phonenum sip_password pin); + } elsif ( $svc_x eq 'svc_pbx' ) { + #$return{$_} = $svc[0]->$_() for qw( ) #nothing yet + } else { + return {'error' => "configuration error: unknown signup service $svc_x"}; + #die "unknown signup service $svc_x"; + # return an error that's visible to someone somewhere + } + } return \%return; @@ -747,29 +807,36 @@ sub capture_payment { my $conf = new FS::Conf; - my $url = $packet->{url}; - my $payment_gateway = - qsearchs('payment_gateway', { 'gateway_callback_url' => popurl(0, $url) } ); - - unless ($payment_gateway) { - - my ( $processor, $login, $password, $action, @bop_options ) = - $conf->config('business-onlinepayment'); - $action ||= 'normal authorization'; - pop @bop_options if scalar(@bop_options) % 2 && $bop_options[-1] =~ /^\s*$/; - die "No real-time processor is enabled - ". - "did you set the business-onlinepayment configuration value?\n" - unless $processor; - - $payment_gateway = new FS::payment_gateway( { - gateway_namespace => $conf->config('business-onlinepayment-namespace'), - gateway_module => $processor, - gateway_username => $login, - gateway_password => $password, - gateway_action => $action, - options => [ ( @bop_options ) ], - }); - + my $payment_gateway; + if ( my $gwnum = $conf->config('selfservice-payment_gateway') ) { + $payment_gateway = qsearchs('payment_gateway', { 'gatewaynum' => $gwnum }) + or die "configured gatewaynum $gwnum not found!"; + } + else { + my $url = $packet->{url}; + + $payment_gateway = qsearchs('payment_gateway', + { 'gateway_callback_url' => popurl(0, $url) } + ); + if (!$payment_gateway) { + + my ( $processor, $login, $password, $action, @bop_options ) = + $conf->config('business-onlinepayment'); + $action ||= 'normal authorization'; + pop @bop_options if scalar(@bop_options) % 2 && $bop_options[-1] =~ /^\s*$/; + die "No real-time processor is enabled - ". + "did you set the business-onlinepayment configuration value?\n" + unless $processor; + + $payment_gateway = new FS::payment_gateway( { + gateway_namespace => $conf->config('business-onlinepayment-namespace'), + gateway_module => $processor, + gateway_username => $login, + gateway_password => $password, + gateway_action => $action, + options => [ ( @bop_options ) ], + }); + } } die "No real-time third party processor is enabled - ". @@ -807,7 +874,10 @@ sub capture_payment { my $cust_main = $cust_pay_pending->cust_main; my $bill_error = - $cust_main->realtime_botpp_capture( $cust_pay_pending, %{$packet->{data}} ); + $cust_main->realtime_botpp_capture( $cust_pay_pending, + %{$packet->{data}}, + apply => 1, + ); return { 'error' => ( $bill_error->{bill_error} ? '_decline' : '' ), %$bill_error,