self-service improvements, RT10883
[freeside.git] / FS / FS / ClientAPI / MyAccount.pm
index dbcef7d..a46e7ec 100644 (file)
@@ -266,6 +266,9 @@ sub access_info {
     @{ $info->{cust_paybys} }
   ];
 
+  $info->{'self_suspend_reason'} = 
+      $conf->config('selfservice-self_suspend_reason');
+
   return { %$info,
            'custnum'       => $custnum,
            'access_pkgnum' => $session->{'pkgnum'},
@@ -596,7 +599,7 @@ sub process_payment {
   my $amount = $1;
   return { error => 'Amount must be greater than 0' } unless $amount > 0;
 
-  $p->{'discount_term'} =~ /^\s*(\d+)\s*$/
+  $p->{'discount_term'} =~ /^\s*(\d*)\s*$/
     or return { 'error' => gettext('illegal_discount_term'). ': '. $p->{'discount_term'} };
   my $discount_term = $1;
 
@@ -876,6 +879,7 @@ sub list_invoices {
   return  { 'error'       => '',
             'invoices'    =>  [ map { { 'invnum' => $_->invnum,
                                         '_date'  => $_->_date,
+                                       'date'   => time2str("%b %o, %Y", $_->_date),
                                       }
                                     } @cust_bill
                               ]
@@ -1453,8 +1457,18 @@ sub order_renew {
 
 }
 
-sub cancel_pkg {
+# these are basically the same
+sub cancel_pkg    { alter_pkg(shift, 'cancel', 'quiet' => 1) }
+sub suspend_pkg   { 
+  my $conf = new FS::Conf;
+  my $reasonnum = $conf->config('selfservice-self_suspend_reason')
+    or return { 'error' => "Permission denied" };
+  alter_pkg(shift, 'suspend', 'reason' => $reasonnum) 
+}
+
+sub alter_pkg {
   my $p = shift;
+  my $method = shift;
   my $session = _cache->get($p->{'session_id'})
     or return { 'error' => "Can't resume session" }; #better error message
 
@@ -1469,7 +1483,7 @@ sub cancel_pkg {
                                         'pkgnum'  => $pkgnum,   } )
     or return { 'error' => "unknown pkgnum $pkgnum" };
 
-  my $error = $cust_pkg->cancel( 'quiet'=>1 );
+  my $error = $cust_pkg->$method(@_);
   return { 'error' => $error };
 
 }