X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FMyAccount.pm;h=97e4e22bf3ea65f92e8f854bb556947b84069476;hb=eafc4c26bea9da23b653adb361a05d49324081de;hp=784a33f616171ce8f0ebbc08e7d5bdea2ac8bf16;hpb=6e8323cf946ef3684a6846aa6afde7fe3692994e;p=freeside.git diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 784a33f61..97e4e22bf 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -27,6 +27,7 @@ use FS::TicketSystem; use FS::ClientAPI_SessionCache; use FS::cust_svc; use FS::svc_acct; +use FS::svc_forward; use FS::svc_domain; use FS::svc_phone; use FS::svc_external; @@ -1140,7 +1141,10 @@ sub invoice_pdf { return { 'error' => '', 'invnum' => $invnum, - 'invoice_pdf' => $cust_bill->print_pdf( { unsquelch_cdr => 1 } ), + 'invoice_pdf' => $cust_bill->print_pdf({ + 'unsquelch_cdr' => 1, + 'locale' => $p->{'locale'}, + }), }; } @@ -1154,10 +1158,15 @@ sub legacy_invoice { my $legacyinvnum = $p->{'legacyinvnum'}; - my $legacy_cust_bill = qsearchs('legacy_cust_bill', { + my %hash = ( 'legacyinvnum' => $legacyinvnum, 'custnum' => $custnum, - }) or return { 'error' => "Can't find legacyinvnum" }; + ); + + my $legacy_cust_bill = + qsearchs('legacy_cust_bill', { %hash, 'locale' => $p->{'locale'} } ) + || qsearchs('legacy_cust_bill', \%hash ) + or return { 'error' => "Can't find legacyinvnum" }; #my %return; @@ -1236,9 +1245,12 @@ sub list_invoices { my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) or return { 'error' => "unknown custnum $custnum" }; - my @cust_bill = $cust_main->cust_bill; + my $conf = new FS::Conf; + my @legacy_cust_bill = $cust_main->legacy_cust_bill; + my @cust_bill = grep ! $_->hide, $cust_main->cust_bill; + my $balance = 0; return { 'error' => '', @@ -1434,13 +1446,15 @@ sub list_svcs { my $svc_x = $_->svc_x; my($label, $value) = $_->label; my $svcdb = $_->part_svc->svcdb; - my $part_pkg = $_->cust_pkg->part_pkg; + my $cust_pkg = $_->cust_pkg; + my $part_pkg = $cust_pkg->part_pkg; my %hash = ( - 'svcnum' => $_->svcnum, - 'svcdb' => $svcdb, - 'label' => $label, - 'value' => $value, + 'svcnum' => $_->svcnum, + 'svcdb' => $svcdb, + 'label' => $label, + 'value' => $value, + 'pkg_status' => $cust_pkg->status, ); if ( $svcdb eq 'svc_acct' ) { @@ -1490,7 +1504,8 @@ sub list_svcs { } sub _customer_svc_x { - my($custnum, $svcnum, $table) = @_; + my($custnum, $svcnum, $table) = (shift, shift, shift); + my $hashref = ref($svcnum) ? $svcnum : { 'svcnum' => $svcnum }; $custnum =~ /^(\d+)$/ or die "illegal custnum"; my $search = " AND custnum = $1"; @@ -1501,12 +1516,96 @@ sub _customer_svc_x { 'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum ) '. 'LEFT JOIN cust_pkg USING ( pkgnum ) ',#. #'LEFT JOIN cust_main USING ( custnum ) ', - 'hashref' => { 'svcnum' => $svcnum, }, + 'hashref' => $hashref, 'extra_sql' => $search, #important } ); } +sub svc_status_html { + my $p = shift; + + my($context, $session, $custnum) = _custoragent_session_custnum($p); + return { 'error' => $session } if $context eq 'error'; + + #XXX only svc_dsl for now + my $svc_x = _customer_svc_x( $custnum, $p->{'svcnum'}, 'svc_dsl') + or return { 'error' => "Service not found" }; + + my $html = $svc_x->getstatus_html; + + return { 'html' => $html }; + +} + +sub acct_forward_info { + my $p = shift; + + my($context, $session, $custnum) = _custoragent_session_custnum($p); + return { 'error' => $session } if $context eq 'error'; + + my $svc_forward = _customer_svc_x( $custnum, + { 'srcsvc' => $p->{'svcnum'} }, + 'svc_forward', + ) + or return { 'error' => '', + 'dst' => '', + }; + + return { 'error' => '', + 'dst' => $svc_forward->dst || $svc_forward->dstsvc_acct->email, + }; + +} + +sub process_acct_forward { + my $p = shift; + warn Dumper($p); + + my($context, $session, $custnum) = _custoragent_session_custnum($p); + return { 'error' => $session } if $context eq 'error'; + + my $old = _customer_svc_x( $custnum, + { 'srcsvc' => $p->{'svcnum'} }, + 'svc_forward', + ); + warn $old; + + if ( $p->{'dst'} eq '' ) { + if ( $old ) { + my $error = $old->delete; + return { 'error' => $error }; + } + return { 'error' => '' }; + } + + my $new = new FS::svc_forward { 'srcsvc' => $p->{'svcnum'}, + 'dst' => $p->{'dst'}, + }; + + warn $new; + + my $error; + if ( $old ) { + warn "old: $old\n"; + $new->svcnum($old->svcnum); + my $cust_svc = $old->cust_svc; + $new->svcpart($old->svcpart); + $new->pkgnuym($old->pkgnum); + $error = $new->replace($old); + } else { + my $conf = new FS::Conf; + $new->svcpart($conf->config('selfservice-svc_forward_svcpart')); + $new->pkgnum($old->cust_svc->pkgnum); + warn Dumper($new); + $error = $new->insert; + warn $error; + } + + return { 'error' => $error }; + +} + sub list_dsl_devices { my $p = shift;