X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FSignup.pm;h=a4032f3b1f00f9caa05820d65acc965824fcde21;hp=02aa5800bd4d8fb77b7f6ab30cbf06f097000544;hb=3706609762d9cec964f337e74829031b895ddbac;hpb=32db3ad86bcf04e4f34705a396b718061d333f20 diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index 02aa5800b..a4032f3b1 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -1,7 +1,7 @@ package FS::ClientAPI::Signup; use strict; -use vars qw($DEBUG $me); +use vars qw( $DEBUG $me ); use Data::Dumper; use Tie::RefHash; use FS::Conf; @@ -61,7 +61,9 @@ sub signup_info { } } grep { $_->svcpart($svc_x) && ( $href->{ $_->pkgpart } - || $_->agentnum == $agent->agentnum + || ( $_->agentnum + && $_->agentnum == $agent->agentnum + ) ) } qsearch( 'part_pkg', { 'disabled' => '' } ) @@ -88,7 +90,7 @@ sub signup_info { ], 'agent' => [ map { my $agent = $_; - map { $_ => $agent->get($_) } @agent_fields; + +{ map { $_ => $agent->get($_) } @agent_fields } } qsearch('agent', { 'disabled' => '' } ) ], @@ -105,8 +107,13 @@ sub signup_info { 'security_phrase' => $conf->exists('security_phrase'), + 'nomadix' => $conf->exists('signup_server-nomadix'), + 'payby' => [ $conf->config('signup_server-payby') ], + 'payby_longname' => [ map { FS::payby->longname($_) } + $conf->config('signup_server-payby') ], + 'card_types' => card_types(), 'paytypes' => [ @FS::cust_main::paytypes ], @@ -286,11 +293,14 @@ sub signup_info { foreach my $payby (@{$signup_info->{payby}}) { warn "$me checking $payby payment fields\n" if $DEBUG > 1; my $hide = 0; - if (FS::payby->realtime($payby)) { + if ( FS::payby->realtime($payby) ) { my $payment_gateway = - $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby) ); - if ($payment_gateway->gateway_namespace eq - 'Business::OnlineThirdPartyPayment' + $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; @@ -331,6 +341,36 @@ sub signup_info { foreach qw( address1 city county state zip country ); } + #some of the above could probably be cached, too + + my $signup_info_cache_agent = $cache->get("signup_info_cache_agent$agentnum"); + + if ( $signup_info_cache_agent ) { + + warn "$me loading cached signup info for agentnum $agentnum\n" + if $DEBUG > 1; + + } else { + + warn "$me populating signup info cache for agentnum $agentnum\n" + if $DEBUG > 1; + + $signup_info_cache_agent = { + #( map { $_ => scalar( $conf->config($_, $agentnum) ) } + # qw( company_name ) ), + ( map { $_ => scalar( $conf->config("selfservice-$_", $agentnum ) ) } + qw( body_bgcolor box_bgcolor) ), + ( map { $_ => join("\n", $conf->config("selfservice-$_", $agentnum ) ) } + qw( head body_header body_footer ) ), + }; + + $cache->set("signup_info_cache_agent$agentnum", $signup_info_cache_agent); + + } + + $signup_info->{$_} = $signup_info_cache_agent->{$_} + foreach keys %$signup_info_cache_agent; + } # else { # delete $signup_info->{'part_pkg'}; @@ -466,14 +506,12 @@ sub new_customer { return { 'error' => "Unknown reseller" } unless $agent; - my $payment_gateway = - $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby) ); + my $gw = $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby), + 'nofatal' => 1, + ); - if ($payment_gateway->gateway_namespace eq - 'Business::OnlineThirdPartyPayment' - ) { - $cust_main->payby('BILL'); # MCRD better? - } + $cust_main->payby('BILL') # MCRD better? + if $gw && $gw->gateway_namespace eq 'Business::OnlineThirdPartyPayment'; } $cust_main->payinfo($cust_main->daytime) @@ -509,14 +547,14 @@ sub new_customer { #return { 'error' => $error } if $error; #should be all auto-magic and shit - my $svc; + my @svc = (); if ( $svc_x eq 'svc_acct' ) { - $svc = new FS::svc_acct ( { + my $svc = new FS::svc_acct { 'svcpart' => $svcpart, map { $_ => $packet->{$_} } qw( username _password sec_phrase popnum ), - } ); + }; my @acct_snarf; my $snarfnum = 1; @@ -533,21 +571,48 @@ sub new_customer { } $svc->child_objects( \@acct_snarf ); + push @svc, $svc; + } elsif ( $svc_x eq 'svc_phone' ) { - $svc = new FS::svc_phone ( { + my $svc = new FS::svc_phone ( { 'svcpart' => $svcpart, map { $_ => $packet->{$_} } qw( countrycode phonenum sip_password pin ), } ); + push @svc, $svc; + } else { die "unknown signup service $svc_x"; } - - my $y = $svc->setdefault; # arguably should be in new method + 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')) + { + + my %mac_addr_svcparts = map { $_ => 1 } + $conf->config('signup_server-mac_addr_svcparts'); + my @pkg_svc = grep { $_->quantity && $mac_addr_svcparts{$_->svcpart} } + $cust_pkg->part_pkg->pkg_svc; + + return { 'error' => 'No service defined to assign mac address' } + unless @pkg_svc; + + my $svc = new FS::svc_acct { + 'svcpart' => $pkg_svc[0]->svcpart, #multiple matches? alas.. + 'username' => $packet->{'mac_addr'}, + '_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; @@ -561,7 +626,7 @@ sub new_customer { use Tie::RefHash; tie my %hash, 'Tie::RefHash'; - %hash = ( $cust_pkg => [ $svc ] ); + %hash = ( $cust_pkg => \@svc ); #msgcat $error = $cust_main->insert( \%hash, @@ -587,14 +652,10 @@ sub new_customer { # " new customer: $bill_error" # if $bill_error; - if ($cust_main->_new_bop_required()) { - $bill_error = $cust_main->realtime_collect( - method => FS::payby->payby2bop( $packet->{payby} ), - depend_jobnum => $placeholder->jobnum, - ); - } else { - $bill_error = $cust_main->collect('realtime' => 1); - } + $bill_error = $cust_main->realtime_collect( + method => FS::payby->payby2bop( $packet->{payby} ), + depend_jobnum => $placeholder->jobnum, + ); #warn "[fs_signup_server] error collecting from new customer: $bill_error" # if $bill_error; @@ -645,9 +706,9 @@ sub new_customer { ); if ( $svc_x eq 'svc_acct' ) { - $return{$_} = $svc->$_() for qw( username _password ); + $return{$_} = $svc[0]->$_() for qw( username _password ); } elsif ( $svc_x eq 'svc_phone' ) { - $return{$_} = $svc->$_() for qw( countrycode phonenum sip_password pin ); + $return{$_} = $svc[0]->$_() for qw( countrycode phonenum sip_password pin ); } else { die "unknown signup service $svc_x"; }