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;
'security_phrase' => $conf->exists('security_phrase'),
+ 'nomadix' => $conf->exists('signup_server-nomadix'),
+
'payby' => [ $conf->config('signup_server-payby') ],
'card_types' => card_types(),
my $hide = 0;
if ( FS::payby->realtime($payby) ) {
my $payment_gateway =
- $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby) );
+ $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby),
+ 'nofatal' => 1,
+ );
if ( $payment_gateway
&& $payment_gateway->gateway_namespace
eq 'Business::OnlineThirdPartyPayment'
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'};
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)
#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;
}
$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;
use Tie::RefHash;
tie my %hash, 'Tie::RefHash';
- %hash = ( $cust_pkg => [ $svc ] );
+ %hash = ( $cust_pkg => \@svc );
#msgcat
$error = $cust_main->insert(
\%hash,
);
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";
}