summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm61
-rw-r--r--FS/FS/ClientAPI_XMLRPC.pm1
-rw-r--r--fs_selfservice/FS-SelfService/SelfService.pm1
3 files changed, 61 insertions, 2 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm
index 2530725..6e56d78 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;
@@ -1503,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";
@@ -1514,7 +1516,7 @@ 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
} );
@@ -1536,6 +1538,61 @@ sub svc_status_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;
+
+ 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',
+ );
+
+ 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'},
+ };
+
+ my $error;
+ if ( $old ) {
+ $new->svcnum($old->svcnum);
+ $error = $new->replace($old);
+ } else {
+ $error = $new->insert;
+ }
+
+ return { 'error' => $error };
+
+}
+
sub list_dsl_devices {
my $p = shift;
diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm
index d7528df..3adff2f 100644
--- a/FS/FS/ClientAPI_XMLRPC.pm
+++ b/FS/FS/ClientAPI_XMLRPC.pm
@@ -121,6 +121,7 @@ sub ss2clientapi {
'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?)
'list_svc_usage' => 'MyAccount/list_svc_usage',
'svc_status_html' => 'MyAccount/svc_status_html',
+ 'acct_forward_info' => 'MyAccount/acct_forward_info',
'list_dsl_devices' => 'MyAccount/list_dsl_devices',
'add_dsl_device' => 'MyAccount/add_dsl_device',
'delete_dsl_device' => 'MyAccount/delete_dsl_device',
diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm
index 02e068c..95487d9 100644
--- a/fs_selfservice/FS-SelfService/SelfService.pm
+++ b/fs_selfservice/FS-SelfService/SelfService.pm
@@ -53,6 +53,7 @@ $socket .= '.'.$tag if defined $tag && length($tag);
'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?)
'list_svc_usage' => 'MyAccount/list_svc_usage',
'svc_status_html' => 'MyAccount/svc_status_html',
+ 'acct_forward_info' => 'MyAccount/acct_forward_info',
'list_dsl_devices' => 'MyAccount/list_dsl_devices',
'add_dsl_device' => 'MyAccount/add_dsl_device',
'delete_dsl_device' => 'MyAccount/delete_dsl_device',