add forward and spam setting to inter.net portal, RT#13656
[freeside.git] / FS / FS / ClientAPI / MyAccount.pm
index 71e47b5..ac3ebdf 100644 (file)
@@ -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;
@@ -1248,16 +1249,7 @@ sub list_invoices {
 
   my @legacy_cust_bill = $cust_main->legacy_cust_bill;
 
-  my @cust_bill = $cust_main->cust_bill;
-
-  my $hide_taxclass = $conf->config('selfservice-hide_invoices-taxclass');
-  if ( $hide_taxclass ) {
-    @cust_bill = grep { my @cust_bill_pkg = $_->cust_bill_pkg;
-                        my @part_pkg= grep $_, map $_->part_pkg, @cust_bill_pkg;
-                        grep { $_->taxclass ne $hide_taxclass } @part_pkg;
-                      }
-                   @cust_bill;
-  }
+  my @cust_bill = grep ! $_->hide, $cust_main->cust_bill;
 
   my $balance = 0;
 
@@ -1512,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";
@@ -1523,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
   } );
 
@@ -1545,6 +1538,70 @@ 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;
+  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',
+                           );
+
+  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);
+    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;