prepaid download/upload tracking
[freeside.git] / FS / FS / ClientAPI / MyAccount.pm
index aa8ff9e..eb49a6d 100644 (file)
@@ -8,9 +8,11 @@ use Date::Format;
 use Business::CreditCard;
 use Time::Duration;
 use FS::CGI qw(small_custview); #doh
+use FS::UI::Web;
 use FS::Conf;
 use FS::Record qw(qsearch qsearchs);
 use FS::Msgcat qw(gettext);
+use FS::Misc qw(card_types);
 use FS::ClientAPI_SessionCache;
 use FS::svc_acct;
 use FS::svc_domain;
@@ -204,33 +206,30 @@ sub payment_info {
   #generic
   ##
 
-  my $conf = new FS::Conf;
-  my %states = map { $_->state => 1 }
-                 qsearch('cust_main_county', {
-                   'country' => $conf->config('countrydefault') || 'US'
-                 } );
-
   use vars qw($payment_info); #cache for performance
-  $payment_info ||= {
+  unless ( $payment_info ) {
 
-    #list all counties/states/countries
-    'cust_main_county' => 
-      [ map { $_->hashref } qsearch('cust_main_county', {}) ],
+    my $conf = new FS::Conf;
+    my %states = map { $_->state => 1 }
+                   qsearch('cust_main_county', {
+                     'country' => $conf->config('countrydefault') || 'US'
+                   } );
 
-    #shortcut for one-country folks
-    'states' =>
-      [ sort { $a cmp $b } keys %states ],
+    $payment_info = {
 
-    'card_types' => {
-      'VISA' => 'VISA card',
-      'MasterCard' => 'MasterCard',
-      'Discover' => 'Discover card',
-      'American Express' => 'American Express card',
-      'Switch' => 'Switch',
-      'Solo' => 'Solo',
-    },
+      #list all counties/states/countries
+      'cust_main_county' => 
+        [ map { $_->hashref } qsearch('cust_main_county', {}) ],
 
-  };
+      #shortcut for one-country folks
+      'states' =>
+        [ sort { $a cmp $b } keys %states ],
+
+      'card_types' => card_types(),
+
+    };
+
+  }
 
   ##
   #customer-specific
@@ -380,10 +379,12 @@ sub process_prepay {
   my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
     or return { 'error' => "unknown custnum $custnum" };
 
-  my( $amount, $seconds ) = ( 0, 0 );
+  my( $amount, $seconds, $upbytes, $downbytes ) = ( 0, 0, 0, 0 );
   my $error = $cust_main->recharge_prepay( $p->{'prepaid_cardnum'},
                                            \$amount,
-                                           \$seconds
+                                           \$seconds,
+                                           \$upbytes,
+                                           \$downbytes
                                          );
 
   return { 'error' => $error } if $error;
@@ -392,6 +393,10 @@ sub process_prepay {
            'amount'   => $amount,
            'seconds'  => $seconds,
            'duration' => duration_exact($seconds),
+           'upbytes'  => $upbytes,
+           'upload'   => FS::UI::Web::bytecount_unexact($upbytes),
+           'downbytes'=> $downbytes,
+           'download' => FS::UI::Web::bytecount_unexact($downbytes),
          };
 
 }
@@ -541,7 +546,9 @@ sub list_svcs {
 
   my @cust_svc = ();
   #foreach my $cust_pkg ( $cust_main->ncancelled_pkgs ) {
-  foreach my $cust_pkg ( $cust_main->unsuspended_pkgs ) {
+  foreach my $cust_pkg ( $p->{'ncancelled'} 
+                         ? $cust_main->ncancelled_pkgs
+                         : $cust_main->unsuspended_pkgs ) {
     push @cust_svc, @{[ $cust_pkg->cust_svc ]}; #@{[ ]} to force array context
   }
   @cust_svc = grep { $_->part_svc->svcdb eq $p->{'svcdb'} } @cust_svc
@@ -562,6 +569,9 @@ sub list_svcs {
                             'value'    => $value,
                             'username' => $svc_x->username,
                             'email'    => $svc_x->email,
+                            'seconds'  => $svc_x->seconds,
+                            'upbytes'  => $svc_x->upbytes,
+                            'downbytes'=> $svc_x->downbytes,
                             # more...
                           };
                         }