fix svc_pbx selfservice title?
[freeside.git] / FS / FS / ClientAPI / MyAccount.pm
index dc89382..4994a39 100644 (file)
@@ -638,6 +638,7 @@ sub process_payment {
   #false laziness w/process/payment.cgi
   my $payinfo;
   my $paycvv = '';
+  my $paynum = '';
   if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) {
   
     $p->{'payinfo1'} =~ /^([\dx]+)$/
@@ -699,6 +700,7 @@ sub process_payment {
     'payname'  => $payname,
     'paybatch' => $paybatch, #this doesn't actually do anything
     'paycvv'   => $paycvv,
+    'paynum_ref' => \$paynum,
     'pkgnum'   => $session->{'pkgnum'},
     'discount_term' => $discount_term,
     'selfservice' => 1,
@@ -741,7 +743,46 @@ sub process_payment {
     }
   }
 
-  return { 'error' => '' };
+  my $receipt_html = '';
+  if($paynum) { 
+      # currently supported for realtime CC only; send receipt data to SS
+      my $cust_pay = qsearchs('cust_pay', { 'paynum' => $paynum } );
+      if($cust_pay) {
+       $receipt_html = qq!
+<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=2>
+
+<TR>
+  <TD ALIGN="right">Payment#</TD>
+  <TD BGCOLOR="#FFFFFF"><B>! . $cust_pay->paynum . qq!</B></TD>
+</TR>
+
+<TR>
+  <TD ALIGN="right">Date</TD>
+
+  <TD BGCOLOR="#FFFFFF"><B>! . 
+       time2str("%a&nbsp;%b&nbsp;%o,&nbsp;%Y&nbsp;%r", $cust_pay->_date)
+                                                           . qq!</B></TD>
+</TR>
+
+
+<TR>
+  <TD ALIGN="right">Amount</TD>
+  <TD BGCOLOR="#FFFFFF"><B>! . $cust_pay->paid . qq!</B></TD>
+
+</TR>
+
+<TR>
+  <TD ALIGN="right">Payment method</TD>
+  <TD BGCOLOR="#FFFFFF"><B>! . $cust_pay->payby_name .' #'. $cust_pay->paymask
+                                                               . qq!</B></TD>
+</TR>
+
+</TABLE>
+!;
+      }
+  }
+
+  return { 'error' => '', 'receipt_html' => $receipt_html, };
 
 }
 
@@ -998,6 +1039,10 @@ sub list_pkgs {
                                         if $context eq 'agent'
                                         && $conf->exists('agent-showpasswords')
                                         && $_->part_svc->svcdb eq 'svc_acct';
+                                      $ref->{svchash} = { $_->svc_x->hash } if 
+                                        $_->part_svc->svcdb eq 'svc_phone';
+                                      $ref->{svchash}->{svcpart} =  $_->part_svc->svcpart
+                                        if $_->part_svc->svcdb eq 'svc_phone'; # hack
                                       $ref;
                                     } $_->cust_svc
                               ],
@@ -1013,6 +1058,8 @@ sub list_pkgs {
 sub list_svcs {
   my $p = shift;
 
+  my $conf = new FS::Conf;
+
   my($context, $session, $custnum) = _custoragent_session_custnum($p);
   return { 'error' => $session } if $context eq 'error';
 
@@ -1044,6 +1091,7 @@ sub list_svcs {
   { 
     'svcnum'   => $session->{'svcnum'},
     'custnum'  => $custnum,
+    'view_usage_nodomain' => $conf->exists('selfservice-view_usage_nodomain'),
     'svcs'     => [
       map { 
             my $svc_x = $_->svc_x;
@@ -1134,8 +1182,8 @@ sub list_support_usage {
 
 sub _list_cdr_usage {
   my($svc_phone, $begin, $end) = @_;
-  map [ $_->downstream_csv('format' => 'default') ], #XXX config for format
-      $svc_phone->get_cdrs( 'begin'=>$begin, 'end'=>$end, );
+  map [ $_->downstream_csv('format' => 'default', 'keeparray' => 1) ], #XXX config for format
+                       $svc_phone->get_cdrs( 'begin'=>$begin, 'end'=>$end, );
 }
 
 sub list_cdr_usage {
@@ -1264,7 +1312,7 @@ sub order_pkg {
       'svc_domain'   => [ qw( domain ) ],
       'svc_phone'    => [ qw( phonenum pin sip_password phone_name ) ],
       'svc_external' => [ qw( id title ) ],
-      'svc_pbx'      => [ qw( id name ) ],
+      'svc_pbx'      => [ qw( id title ) ],
     );
   
     my $svc_x = "FS::$svcdb"->new( {
@@ -1557,6 +1605,23 @@ sub provision_phone {
  my @bulkdid;
  @bulkdid = @{$p->{'bulkdid'}} if $p->{'bulkdid'};
 
+ if($p->{'svcnum'} && $p->{'svcnum'} =~ /^\d+$/){
+      my($context, $session, $custnum) = _custoragent_session_custnum($p);
+      return { 'error' => $session } if $context eq 'error';
+    
+      my $svc_phone = qsearchs('svc_phone', { svcnum => $p->{'svcnum'} });
+      return { 'error' => 'service not found' } unless $svc_phone;
+      return { 'error' => 'invalid svcnum' } 
+        if $svc_phone && $svc_phone->cust_svc->cust_pkg->custnum != $custnum;
+
+      $svc_phone->email($p->{'email'}) 
+        if $svc_phone->email ne $p->{'email'} && $p->{'email'} =~ /^([\w\.\d@]+|)$/;
+      $svc_phone->forwarddst($p->{'forwarddst'}) 
+        if $svc_phone->forwarddst ne $p->{'forwarddst'} 
+            && $p->{'forwarddst'} =~ /^(\d+|)$/;
+      return { 'error' => $svc_phone->replace };
+ }
+
 # single DID LNP
  unless($p->{'lnp'}) {
     $p->{'lnp_desired_due_date'} = parse_datetime($p->{'lnp_desired_due_date'});
@@ -1719,7 +1784,7 @@ sub part_svc_info {
 
   my $conf = new FS::Conf;
 
-  return {
+  my $ret = {
     'svc'     => $part_svc->svc,
     'svcdb'   => $part_svc->svcdb,
     'pkgnum'  => $pkgnum,
@@ -1738,6 +1803,17 @@ sub part_svc_info {
 
   };
 
+  if ($p->{'svcnum'} && $p->{'svcnum'} =~ /^\d+$/ 
+                     && $ret->{'svcdb'} eq 'svc_phone') {
+        $ret->{'svcnum'} = $p->{'svcnum'};
+        my $svc_phone = qsearchs('svc_phone', { svcnum => $p->{'svcnum'} });
+        if ( $svc_phone && $svc_phone->cust_svc->cust_pkg->custnum == $custnum ) {
+            $ret->{'email'} = $svc_phone->email;
+            $ret->{'forwarddst'} = $svc_phone->forwarddst;
+        }
+  }
+
+  $ret;
 }
 
 sub unprovision_svc {