package FS::ClientAPI::Signup;
use strict;
+use vars qw($DEBUG $me);
+use Data::Dumper;
use Tie::RefHash;
use FS::Conf;
use FS::Record qw(qsearch qsearchs dbdef);
use FS::queue;
use FS::reg_code;
+$DEBUG = 0;
+$me = '[FS::ClientAPI::Signup]';
+
sub signup_info {
my $packet = shift;
+ warn "$me signup_info called on $packet\n" if $DEBUG;
+
my $conf = new FS::Conf;
- use vars qw($signup_info_cache); #cache for performance;
- $signup_info_cache ||= {
- 'cust_main_county' =>
- [ map { $_->hashref } qsearch('cust_main_county', {}) ],
+ my $cache = new FS::ClientAPI_SessionCache( {
+ 'namespace' => 'FS::ClientAPI::Signup',
+ } );
+ my $signup_info_cache = $cache->get('signup_info_cache');
- 'agent' =>
- [
- map { $_->hashref }
- qsearch('agent', { 'disabled' => '' } )
- ],
+ if ( $signup_info_cache ) {
- 'part_referral' =>
- [
- map { $_->hashref }
- qsearch('part_referral', { 'disabled' => '' })
- ],
+ warn "$me loading cached signup info\n" if $DEBUG > 1;
- 'agentnum2part_pkg' =>
+ } else {
+
+ warn "$me populating signup info cache\n" if $DEBUG > 1;
+
+ my $agentnum2part_pkg =
{
map {
my $href = $_->pkgpart_hashref;
qsearch( 'part_pkg', { 'disabled' => '' } )
];
} qsearch('agent', { 'disabled' => '' })
- },
+ };
+
+ my $msgcat = { map { $_=>gettext($_) }
+ qw( passwords_dont_match invalid_card unknown_card_type
+ not_a empty_password illegal_or_empty_text )
+ };
+ warn "msgcat: ". Dumper($msgcat). "\n" if $DEBUG > 2;
+
+ my $label = { map { $_ => FS::Msgcat::_gettext($_) }
+ qw( stateid stateid_state )
+ };
+ warn "label: ". Dumper($label). "\n" if $DEBUG > 2;
+
+ $signup_info_cache = {
+ 'cust_main_county' => [ map $_->hashref,
+ qsearch('cust_main_county', {} )
+ ],
- 'svc_acct_pop' => [ map { $_->hashref } qsearch('svc_acct_pop',{} ) ],
+ 'agent' => [ map $_->hashref,
+ qsearch('agent', { 'disabled' => '' } )
+ ],
- 'emailinvoiceonly' => $conf->exists('emailinvoiceonly'),
+ 'part_referral' => [ map $_->hashref,
+ qsearch('part_referral', { 'disabled' => '' } )
+ ],
- 'security_phrase' => $conf->exists('security_phrase'),
+ 'agentnum2part_pkg' => $agentnum2part_pkg,
- 'payby' => [ $conf->config('signup_server-payby') ],
+ 'svc_acct_pop' => [ map $_->hashref, qsearch('svc_acct_pop',{} ) ],
- 'card_types' => card_types(),
+ 'emailinvoiceonly' => $conf->exists('emailinvoiceonly'),
- 'cvv_enabled' => defined dbdef->table('cust_main')->column('paycvv'), # 1,
+ 'security_phrase' => $conf->exists('security_phrase'),
- 'ship_enabled' => defined dbdef->table('cust_main')->column('ship_last'),#1,
+ 'payby' => [ $conf->config('signup_server-payby') ],
- 'msgcat' => { map { $_=>gettext($_) } qw(
- passwords_dont_match invalid_card unknown_card_type not_a empty_password illegal_or_empty_text
- ) },
+ 'card_types' => card_types(),
- 'statedefault' => $conf->config('statedefault') || 'CA',
+ 'paytypes' => [ @FS::cust_main::paytypes ],
- 'countrydefault' => $conf->config('countrydefault') || 'US',
+ 'cvv_enabled' => 1,
- 'refnum' => $conf->config('signup_server-default_refnum'),
+ 'stateid_enabled' => $conf->exists('show_stateid'),
- 'default_pkgpart' => $conf->config('signup_server-default_pkgpart'),
+ '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')),
+
+ };
+
+ $cache->set('signup_info_cache', $signup_info_cache);
+
+ }
my $signup_info = { %$signup_info_cache };
+ warn "$me signup info loaded\n" if $DEBUG > 1;
+ warn Dumper($signup_info). "\n" if $DEBUG > 2;
my @addl = qw( signup_server-classnum2 signup_server-classnum3 );
$signup_info->{optional_packages} = [];
foreach my $addl ( @addl ) {
+
+ warn "$me adding optional package info\n" if $DEBUG > 1;
+
my $classnum = $conf->config($addl) or next;
my @pkgs = map { {
push @{$signup_info->{optional_packages}}, \@pkgs;
+ warn "$me done adding opt. package info for $classnum\n" if $DEBUG > 1;
+
}
}
my $session = '';
if ( exists $packet->{'session_id'} ) {
+
+ warn "$me loading agent session\n" if $DEBUG > 1;
my $cache = new FS::ClientAPI_SessionCache( {
'namespace' => 'FS::ClientAPI::Agent',
} );
} else {
return { 'error' => "Can't resume session" }; #better error message
}
- }elsif( exists $packet->{'customer_session_id'} ) {
+ warn "$me done loading agent session\n" if $DEBUG > 1;
+
+ } elsif ( exists $packet->{'customer_session_id'} ) {
+
+ warn "$me loading customer session\n" if $DEBUG > 1;
my $cache = new FS::ClientAPI_SessionCache( {
'namespace' => 'FS::ClientAPI::MyAccount',
} );
} else {
return { 'error' => "Can't resume session" }; #better error message
}
+ warn "$me done loading customer session\n" if $DEBUG > 1;
+
}
$signup_info->{'part_pkg'} = [];
if ( $packet->{'reg_code'} ) {
+
+ warn "$me setting package list via reg_code\n" if $DEBUG > 1;
+
$signup_info->{'part_pkg'} =
[ map { { 'payby' => [ $_->payby ],
'freq_pretty' => $_->freq_pretty,
$signup_info->{'error'} = 'Unknown registration code'
unless @{ $signup_info->{'part_pkg'} };
+ warn "$me done setting package list via reg_code\n" if $DEBUG > 1;
+
} elsif ( $packet->{'promo_code'} ) {
+ warn "$me setting package list via promo_code\n" if $DEBUG > 1;
+
$signup_info->{'part_pkg'} =
[ map { { 'payby' => [ $_->payby ],
'freq_pretty' => $_->freq_pretty,
$signup_info->{'error'} = 'Unknown promotional code'
unless @{ $signup_info->{'part_pkg'} };
+
+ warn "$me done setting package list via promo_code\n" if $DEBUG > 1;
}
- if ( $agentnum && ! @{ $signup_info->{'part_pkg'} } ) {
- $signup_info->{'part_pkg'} = $signup_info->{'agentnum2part_pkg'}{$agentnum};
+ if ( $agentnum ) {
+
+ warn "$me setting agent-specific package list\n" if $DEBUG > 1;
+ $signup_info->{'part_pkg'} = $signup_info->{'agentnum2part_pkg'}{$agentnum}
+ unless @{ $signup_info->{'part_pkg'} };
+ warn "$me done setting agent-specific package list\n" if $DEBUG > 1;
+ warn "$me setting agent-specific adv. source list\n" if $DEBUG > 1;
$signup_info->{'part_referral'} =
[
map { $_->hashref }
},
)
];
+ warn "$me done setting agent-specific adv. source list\n" if $DEBUG > 1;
}
# else {
# delete $signup_info->{'part_pkg'};
#}
+ warn "$me sorting package list\n" if $DEBUG > 1;
+ $signup_info->{'part_pkg'} = [ sort { $a->{pkg} cmp $b->{pkg} } # case?
+ @{ $signup_info->{'part_pkg'} }
+ ];
+ warn "$me done sorting package list\n" if $DEBUG > 1;
+
if ( exists $packet->{'session_id'} ) {
my $agent_signup_info = { %$signup_info };
delete $agent_signup_info->{agentnum2part_pkg};
}
+sub domain_select_hash {
+ my $packet = shift;
+
+ my $response = {};
+
+ if ($packet->{pkgpart}) {
+ my $part_pkg = qsearchs('part_pkg' => { 'pkgpart' => $packet->{pkgpart} } );
+ #$packet->{svcpart} = $part_pkg->svcpart('svc_acct')
+ $packet->{svcpart} = $part_pkg->svcpart
+ if $part_pkg;
+ }
+
+ if ($packet->{svcpart}) {
+ my $part_svc = qsearchs('part_svc' => { 'svcpart' => $packet->{svcpart} } );
+ $response->{'domsvc'} = $part_svc->part_svc_column('domsvc')->columnvalue
+ if ($part_svc && $part_svc->part_svc_column('domsvc')->columnflag eq 'D');
+ }
+
+ $response->{'domains'}
+ = { domain_select_hash FS::svc_acct( map { $_ => $packet->{$_} }
+ qw(svcpart pkgnum)
+ ) };
+
+ $response;
+}
+
sub new_customer {
my $packet = shift;
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
$cust_main->payinfo($cust_main->daytime)
if $cust_main->payby eq 'LECB' && ! $cust_main->payinfo;
- my @invoicing_list = split( /\s*\,\s*/, $packet->{'invoicing_list'} );
+ my @invoicing_list = $packet->{'invoicing_list'}
+ ? split( /\s*\,\s*/, $packet->{'invoicing_list'} )
+ : ();
$packet->{'pkgpart'} =~ /^(\d+)$/ or '' =~ /^()$/;
my $pkgpart = $1;
#warn "[fs_signup_server] error billing new customer: $bill_error"
# if $bill_error;
- $cust_main->apply_payments_and_credits;
+ $bill_error = $cust_main->apply_payments_and_credits;
+ #warn "[fs_signup_server] error applying payments and credits for".
+ # " new customer: $bill_error"
+ # if $bill_error;
$bill_error = $cust_main->collect('realtime' => 1);
#warn "[fs_signup_server] error collecting from new customer: $bill_error"
if ( $cust_main->balance > 0 ) {
#this makes sense. credit is "un-doing" the invoice
- $cust_main->credit( $cust_main->balance, 'signup server decline' );
+ $cust_main->credit( $cust_main->balance, 'signup server decline',
+ 'reason_type' => $conf->config('signup_credit_type'),
+ );
$cust_main->apply_credits;
#should check list for errors...