package FS::ClientAPI::MyAccount;
use strict;
-use vars qw($cache);
-use subs qw(_cache);
+use vars qw( $cache $DEBUG );
+use subs qw( _cache _provision );
+use Data::Dumper;
use Digest::MD5 qw(md5_hex);
use Date::Format;
use Business::CreditCard;
use FS::acct_rt_transaction;
use HTML::Entities;
+$DEBUG = 0;
+
#false laziness with FS::cust_main
BEGIN {
eval "use Time::Local;";
ss paytype paystate stateid stateid_state
);
-use subs qw(_provision);
-
sub _cache {
$cache ||= new FS::ClientAPI_SessionCache( {
'namespace' => 'FS::ClientAPI::MyAccount',
} );
}
+sub login_info {
+ my $p = shift;
+
+ my $conf = new FS::Conf;
+
+ my %info = (
+ 'phone_login' => $conf->exists('selfservice_server-phone_login'),
+ 'single_domain'=> scalar($conf->config('selfservice_server-single_domain')),
+ );
+
+ return \%info;
+
+}
+
#false laziness w/FS::ClientAPI::passwd::passwd
sub login {
my $p = shift;
);
return { error => 'User not found.' } unless $svc_acct;
- my $pkg_svc = $svc_acct->cust_svc->pkg_svc;
+ #my $pkg_svc = $svc_acct->cust_svc->pkg_svc;
+ #return { error => 'Only primary user may log in.' }
+ # if $conf->exists('selfservice_server-primary_only')
+ # && ( ! $pkg_svc || $pkg_svc->primary_svc ne 'Y' );
+ my $cust_svc = $svc_acct->cust_svc;
+ my $part_pkg = $cust_svc->cust_pkg->part_pkg;
return { error => 'Only primary user may log in.' }
if $conf->exists('selfservice_server-primary_only')
- && ( ! $pkg_svc || $pkg_svc->primary_svc ne 'Y' );
-
+ && $cust_svc->svcpart != $part_pkg->svcpart('svc_acct');
+
return { error => 'Incorrect password.' }
unless $svc_acct->check_password($p->{'password'});
or return { 'error' => "illegal_payby " . $p->{'payby'} };
my $payby = $1;
+ #false laziness w/process/payment.cgi
my $payinfo;
my $paycvv = '';
if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) {
} elsif ( $payby eq 'CARD' || $payby eq 'DCRD' ) {
$payinfo = $p->{'payinfo'};
- $payinfo =~ s/[^\dx]//g;
- $payinfo =~ /^(\d{13,16})$/
- or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo
- $payinfo = $1;
$payinfo = $cust_main->payinfo
if $cust_main->paymask eq $payinfo;
+ $payinfo =~ s/\D//g;
+ $payinfo =~ /^(\d{13,16})$/
+ or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo
+ $payinfo = $1;
+
validate($payinfo)
or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo
return { 'error' => gettext('unknown_card_type') }
order_pkg($p);
}
+sub process_payment_order_renew {
+ my $p = shift;
+
+ my $hr = process_payment($p);
+ return $hr if $hr->{'error'};
+
+ order_renew($p);
+}
+
sub process_prepay {
my $p = shift;
return { 'error' => '',
'invnum' => $invnum,
'invoice_text' => join('', $cust_bill->print_text ),
- 'invoice_html' => $cust_bill->print_html,
+ 'invoice_html' => $cust_bill->print_html( { unsquelch_cdr => 1 } ),
};
}
'';
}
+sub renew_info {
+ my $p = shift;
+
+ my($context, $session, $custnum) = _custoragent_session_custnum($p);
+ return { 'error' => $session } if $context eq 'error';
+
+ my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
+ or return { 'error' => "unknown custnum $custnum" };
+
+ my @cust_pkg = sort { $a->bill <=> $b->bill }
+ grep { $_->part_pkg->freq ne '0' }
+ $cust_main->ncancelled_pkgs;
+
+ #return { 'error' => 'No active packages to renew.' } unless @cust_pkg;
+
+ my $total = 0;
+
+ my @array = map {
+ $total += $_->part_pkg->base_recur;
+ my $renew_date = $_->part_pkg->add_freq($_->bill);
+ {
+ 'bill_date' => $_->bill,
+ 'bill_date_pretty' => time2str('%x', $_->bill),
+ 'renew_date' => $renew_date,
+ 'renew_date_pretty' => time2str('%x', $renew_date),
+ 'amount' => sprintf('.%2f', $total),
+ };
+ }
+ @cust_pkg;
+
+ return { 'dates' => \@array };
+
+}
+
+sub order_renew {
+ my $p = shift;
+
+ my($context, $session, $custnum) = _custoragent_session_custnum($p);
+ return { 'error' => $session } if $context eq 'error';
+
+ my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
+ or return { 'error' => "unknown custnum $custnum" };
+
+ my $date = $p->{'date'};
+
+ my $now = time;
+
+ #freeside-daily -n -d $date fs_daily $custnum
+ $cust_main->bill_and_collect( 'time' => $date,
+ 'invoice_time' => $now,
+ 'actual_time' => $now,
+ 'check_freq' => '1d',
+ );
+
+ return { 'error' => '' };
+
+}
+
sub cancel_pkg {
my $p = shift;
my $session = _cache->get($p->{'session_id'})
sub provision_acct {
my $p = shift;
+ warn "provision_acct called\n"
+ if $DEBUG;
return { 'error' => gettext('passwords_dont_match') }
if $p->{'_password'} ne $p->{'_password2'};
unless ($domains{$p->{'domsvc'}});
}
+ warn "provision_acct calling _provision\n"
+ if $DEBUG;
_provision( 'FS::svc_acct',
[qw(username _password domsvc)],
[qw(username _password domsvc)],
sub _provision {
my( $class, $fields, $return_fields, $p ) = splice(@_, 0, 4);
+ warn "_provision called for $class\n"
+ if $DEBUG;
my($context, $session, $custnum) = _custoragent_session_custnum($p);
return { 'error' => $session } if $context eq 'error';
my $pkgnum = $p->{'pkgnum'};
+ warn "searching for custnum $custnum pkgnum $pkgnum\n"
+ if $DEBUG;
my $cust_pkg = qsearchs('cust_pkg', { 'custnum' => $custnum,
'pkgnum' => $pkgnum,
} )
or return { 'error' => "unknown pkgnum $pkgnum" };
+ warn "searching for svcpart ". $p->{'svcpart'}. "\n"
+ if $DEBUG;
my $part_svc = qsearchs('part_svc', { 'svcpart' => $p->{'svcpart'} } )
or return { 'error' => "unknown svcpart $p->{'svcpart'}" };
+ warn "creating $class record\n"
+ if $DEBUG;
my $svc_x = $class->new( {
'pkgnum' => $p->{'pkgnum'},
'svcpart' => $p->{'svcpart'},
map { $_ => $p->{$_} } @$fields
} );
+ warn "inserting $class record\n"
+ if $DEBUG;
my $error = $svc_x->insert;
- $svc_x = qsearchs($svc_x->table, { 'svcnum' => $svc_x->svcnum })
- unless $error;
- return { 'svc' => $part_svc->svc,
- 'error' => $error,
- map { $_ => $svc_x->get($_) } @$return_fields
- };
+ unless ( $error ) {
+ warn "finding inserted record for svcnum ". $svc_x->svcnum. "\n"
+ if $DEBUG;
+ $svc_x = qsearchs($svc_x->table, { 'svcnum' => $svc_x->svcnum })
+ }
+
+ my $return = { 'svc' => $part_svc->svc,
+ 'error' => $error,
+ map { $_ => $svc_x->get($_) } @$return_fields
+ };
+ warn "_provision returning ". Dumper($return). "\n"
+ if $DEBUG;
+ return $return;
}