when using pkg-balances, limit self-service access when a customer with multiple...
authorivan <ivan>
Mon, 10 Aug 2009 11:50:04 +0000 (11:50 +0000)
committerivan <ivan>
Mon, 10 Aug 2009 11:50:04 +0000 (11:50 +0000)
FS/FS/ClientAPI/MyAccount.pm
fs_selfservice/FS-SelfService/SelfService.pm
fs_selfservice/FS-SelfService/cgi/login.html
fs_selfservice/FS-SelfService/cgi/logout.html
fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html
fs_selfservice/FS-SelfService/cgi/myaccount.html
fs_selfservice/FS-SelfService/cgi/myaccount_menu.html
fs_selfservice/FS-SelfService/cgi/selfservice.cgi

index 9d031be..b6934f8 100644 (file)
@@ -60,17 +60,20 @@ sub skin_info {
 
   my $conf = new FS::Conf;
 
 
   my $conf = new FS::Conf;
 
-  my %skin = (
-    'head'         => join("\n", $conf->config('selfservice-head') ),
-    'body_header'  => join("\n", $conf->config('selfservice-body_header') ),
-    'body_footer'  => join("\n", $conf->config('selfservice-body_footer') ),
-    'body_bgcolor' => scalar( $conf->config('selfservice-body_bgcolor') ),
-    'box_bgcolor'  => scalar( $conf->config('selfservice-box_bgcolor')  ),
+  use vars qw($skin_info); #cache for performance.
+  #agentnum eventually...?  but if they're not logged in yet.. ?
+
+  $skin_info ||= {
+    'head'           => join("\n", $conf->config('selfservice-head') ),
+    'body_header'    => join("\n", $conf->config('selfservice-body_header') ),
+    'body_footer'    => join("\n", $conf->config('selfservice-body_footer') ),
+    'body_bgcolor'   => scalar( $conf->config('selfservice-body_bgcolor') ),
+    'box_bgcolor'    => scalar( $conf->config('selfservice-box_bgcolor')  ),
 
     'company_name'   => scalar($conf->config('company_name')),
 
     'company_name'   => scalar($conf->config('company_name')),
-  );
+  };
 
 
-  \%skin;
+  $skin_info;
 
 }
 
 
 }
 
@@ -80,6 +83,7 @@ sub login_info {
   my $conf = new FS::Conf;
 
   my %info = (
   my $conf = new FS::Conf;
 
   my %info = (
+    %{ skin_info() },
     'phone_login'  => $conf->exists('selfservice_server-phone_login'),
     'single_domain'=> scalar($conf->config('selfservice_server-single_domain')),
   );
     'phone_login'  => $conf->exists('selfservice_server-phone_login'),
     'single_domain'=> scalar($conf->config('selfservice_server-single_domain')),
   );
@@ -122,16 +126,6 @@ sub login {
                            );
     return { error => 'User not found.' } unless $svc_acct;
 
                            );
     return { error => 'User not found.' } unless $svc_acct;
 
-    #my $pkg_svc = $svc_acct->cust_svc->pkg_svc;
-    #return { error => 'Only primary user may log in.' } 
-    #  if $conf->exists('selfservice_server-primary_only')
-    #    && ( ! $pkg_svc || $pkg_svc->primary_svc ne 'Y' );
-    my $cust_svc = $svc_acct->cust_svc;
-    my $part_pkg = $cust_svc->cust_pkg->part_pkg;
-    return { error => 'Only primary user may log in.' } 
-      if $conf->exists('selfservice_server-primary_only')
-         && $cust_svc->svcpart != $part_pkg->svcpart('svc_acct');
-
     return { error => 'Incorrect password.' }
       unless $svc_acct->check_password($p->{'password'});
 
     return { error => 'Incorrect password.' }
       unless $svc_acct->check_password($p->{'password'});
 
@@ -143,14 +137,28 @@ sub login {
     'svcnum' => $svc_x->svcnum,
   };
 
     'svcnum' => $svc_x->svcnum,
   };
 
-  my $cust_pkg = $svc_x->cust_svc->cust_pkg;
+  my $cust_svc = $svc_x->cust_svc;
+  my $cust_pkg = $cust_svc->cust_pkg;
   if ( $cust_pkg ) {
     my $cust_main = $cust_pkg->cust_main;
     $session->{'custnum'} = $cust_main->custnum;
   if ( $cust_pkg ) {
     my $cust_main = $cust_pkg->cust_main;
     $session->{'custnum'} = $cust_main->custnum;
-    $session->{'pkgnum'} = $cust_pkg->pkgnum
-      if $conf->exists('pkg-balances');
+    if ( $conf->exists('pkg-balances') ) {
+      my @cust_pkg = grep { $_->part_pkg->freq !~ /^(0|$)/ }
+                          $cust_main->ncancelled_pkgs;
+      $session->{'pkgnum'} = $cust_pkg->pkgnum
+        if scalar(@cust_pkg) > 1;
+    }
   }
 
   }
 
+  #my $pkg_svc = $svc_acct->cust_svc->pkg_svc;
+  #return { error => 'Only primary user may log in.' } 
+  #  if $conf->exists('selfservice_server-primary_only')
+  #    && ( ! $pkg_svc || $pkg_svc->primary_svc ne 'Y' );
+  my $part_pkg = $cust_pkg->part_pkg;
+  return { error => 'Only primary user may log in.' }
+    if $conf->exists('selfservice_server-primary_only')
+       && $cust_svc->svcpart != $part_pkg->svcpart([qw( svc_acct svc_phone )]);
+
   my $session_id;
   do {
     $session_id = md5_hex(md5_hex(time(). {}. rand(). $$))
   my $session_id;
   do {
     $session_id = md5_hex(md5_hex(time(). {}. rand(). $$))
@@ -168,12 +176,57 @@ sub logout {
   my $p = shift;
   if ( $p->{'session_id'} ) {
     _cache->remove($p->{'session_id'});
   my $p = shift;
   if ( $p->{'session_id'} ) {
     _cache->remove($p->{'session_id'});
-    return { 'error' => '' };
+    return { %{ skin_info() }, 'error' => '' };
   } else {
   } else {
-    return { 'error' => "Can't resume session" }; #better error message
+    return { %{ skin_info() }, 'error' => "Can't resume session" }; #better error message
   }
 }
 
   }
 }
 
+sub access_info {
+  my $p = shift;
+
+  my $conf = new FS::Conf;
+
+  my $info = skin_info($p);
+
+  use vars qw( $cust_paybys ); #cache for performance
+  unless ( $cust_paybys ) {
+
+    my %cust_paybys = map { $_ => 1 }
+                      map { FS::payby->payby2payment($_) }
+                          $conf->config('signup_server-payby');
+
+    $cust_paybys = [ keys %cust_paybys ];
+
+  }
+  $info->{'cust_paybys'} = $cust_paybys;
+
+  my($context, $session, $custnum) = _custoragent_session_custnum($p);
+  return { 'error' => $session } if $context eq 'error';
+
+  my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
+    or return { 'error' => "unknown custnum $custnum" };
+
+  $info->{hide_payment_fields} =
+  [
+    map { FS::payby->realtime($_) &&
+          $cust_main
+            ->agent
+            ->payment_gateway( 'method' => FS::payby->payby2bop($_) )
+            ->gateway_namespace
+            eq 'Business::OnlineThirdPartyPayment'
+        }
+    @{ $info->{cust_paybys} }
+  ];
+
+  return { %$info,
+           'custnum'    => $custnum,
+           'pkgnum'     => $session->{'pkgnum'},
+           'svcnum'     => $session->{'svcnum'},
+           'nonprimary' => $session->{'nonprimary'},
+         };
+}
+
 sub customer_info {
   my $p = shift;
 
 sub customer_info {
   my $p = shift;
 
@@ -196,21 +249,32 @@ sub customer_info {
     my $cust_main = qsearchs('cust_main', $search )
       or return { 'error' => "unknown custnum $custnum" };
 
     my $cust_main = qsearchs('cust_main', $search )
       or return { 'error' => "unknown custnum $custnum" };
 
-    $return{balance} = $cust_main->balance;
+    if ( $session->{'pkgnum'} ) { 
+      $return{balance} = $cust_main->balance_pkgnum( $session->{'pkgnum'} );
+    } else {
+      $return{balance} = $cust_main->balance;
+    }
 
     $return{tickets} = [ ($cust_main->tickets) ];
 
 
     $return{tickets} = [ ($cust_main->tickets) ];
 
-    my @open = map {
-                     {
-                       invnum => $_->invnum,
-                       date   => time2str("%b %o, %Y", $_->_date),
-                       owed   => $_->owed,
-                     };
-                   } $cust_main->open_cust_bill;
-    $return{open_invoices} = \@open;
+    unless ( $session->{'pkgnum'} ) {
+      my @open = map {
+                       {
+                         invnum => $_->invnum,
+                         date   => time2str("%b %o, %Y", $_->_date),
+                         owed   => $_->owed,
+                       };
+                     } $cust_main->open_cust_bill;
+      $return{open_invoices} = \@open;
+    }
 
     $return{small_custview} =
 
     $return{small_custview} =
-      small_custview( $cust_main, $conf->config('countrydefault') );
+      small_custview( $cust_main,
+                      scalar($conf->config('countrydefault')),
+                      ( $session->{'pkgnum'} ? 1 : 0 ), #nobalance
+                    );
+
+    warn $return{small_custview};
 
     $return{name} = $cust_main->first. ' '. $cust_main->get('last');
 
 
     $return{name} = $cust_main->first. ' '. $cust_main->get('last');
 
@@ -359,6 +423,12 @@ sub payment_info {
                      'country' => $conf->config('countrydefault') || 'US'
                    } );
 
                      'country' => $conf->config('countrydefault') || 'US'
                    } );
 
+    my %cust_paybys = map { $_ => 1 }
+                      map { FS::payby->payby2payment($_) }
+                          $conf->config('signup_server-payby');
+
+    my @cust_paybys = keys %cust_paybys;
+
     $payment_info = {
 
       #list all counties/states/countries
     $payment_info = {
 
       #list all counties/states/countries
@@ -374,9 +444,7 @@ sub payment_info {
       'paytypes' => [ @FS::cust_main::paytypes ],
 
       'paybys' => [ $conf->config('signup_server-payby') ],
       'paytypes' => [ @FS::cust_main::paytypes ],
 
       'paybys' => [ $conf->config('signup_server-payby') ],
-      'cust_paybys' => [ map { FS::payby->payby2payment($_) }
-                                 $conf->config('signup_server-payby')
-                       ],
+      'cust_paybys' => \@cust_paybys,
 
       'stateid_label' => FS::Msgcat::_gettext('stateid'),
       'stateid_state_label' => FS::Msgcat::_gettext('stateid_state'),
 
       'stateid_label' => FS::Msgcat::_gettext('stateid'),
       'stateid_state_label' => FS::Msgcat::_gettext('stateid_state'),
@@ -411,7 +479,7 @@ sub payment_info {
     @{ $return{cust_paybys} }
   ];
 
     @{ $return{cust_paybys} }
   ];
 
-  $return{balance} = $cust_main->balance;
+  $return{balance} = $cust_main->balance; #XXX pkg-balances?
 
   $return{payname} = $cust_main->payname
                      || ( $cust_main->first. ' '. $cust_main->get('last') );
 
   $return{payname} = $cust_main->payname
                      || ( $cust_main->first. ' '. $cust_main->get('last') );
@@ -589,7 +657,11 @@ sub realtime_collect {
   );
   return { 'error' => $error } unless ref( $error );
 
   );
   return { 'error' => $error } unless ref( $error );
 
-  return { 'error' => '', amount => $cust_main->balance, %$error };
+  my $amount = $session->{'pkgnum'}
+                 ? $cust_main->balance_pkgnum( $session->{'pkgnum'} )
+                 : $cust_main->balance;
+
+  return { 'error' => '', amount => $amount, %$error };
 }
 
 sub process_payment_order_pkg {
 }
 
 sub process_payment_order_pkg {
@@ -802,6 +874,7 @@ sub list_svcs {
   foreach my $cust_pkg ( $p->{'ncancelled'} 
                          ? $cust_main->ncancelled_pkgs
                          : $cust_main->unsuspended_pkgs ) {
   foreach my $cust_pkg ( $p->{'ncancelled'} 
                          ? $cust_main->ncancelled_pkgs
                          : $cust_main->unsuspended_pkgs ) {
+    next if $session->{'pkgnum'} && $cust_pkg->pkgnum != $session->{'pkgnum'};
     push @cust_svc, @{[ $cust_pkg->cust_svc ]}; #@{[ ]} to force array context
   }
   if ( $p->{'svcdb'} ) {
     push @cust_svc, @{[ $cust_pkg->cust_svc ]}; #@{[ ]} to force array context
   }
   if ( $p->{'svcdb'} ) {
index d275fa8..743057d 100644 (file)
@@ -61,6 +61,7 @@ $socket .= '.'.$tag if defined $tag && length($tag);
   'myaccount_passwd'          => 'MyAccount/myaccount_passwd',
   'signup_info'               => 'Signup/signup_info',
   'skin_info'                 => 'MyAccount/skin_info',
   'myaccount_passwd'          => 'MyAccount/myaccount_passwd',
   'signup_info'               => 'Signup/signup_info',
   'skin_info'                 => 'MyAccount/skin_info',
+  'access_info'               => 'MyAccount/access_info',
   'domain_select_hash'        => 'Signup/domain_select_hash',  # expose?
   'new_customer'              => 'Signup/new_customer',
   'capture_payment'           => 'Signup/capture_payment',
   'domain_select_hash'        => 'Signup/domain_select_hash',  # expose?
   'new_customer'              => 'Signup/new_customer',
   'capture_payment'           => 'Signup/capture_payment',
index 760f579..eef412d 100644 (file)
@@ -3,7 +3,7 @@
     <TITLE>Login</TITLE>
     <%= $head %>
   </HEAD>
     <TITLE>Login</TITLE>
     <%= $head %>
   </HEAD>
-  <BODY BGCOLOR="<%= $body_bgcolor || '#e8e8e8' %>">
+  <BODY BGCOLOR="<%= $body_bgcolor || '#eeeeee' %>">
   <%= $body_header %>
 
 <FONT SIZE=5>Login</FONT><BR><BR>
   <%= $body_header %>
 
 <FONT SIZE=5>Login</FONT><BR><BR>
index e2de648..5e22ad8 100644 (file)
@@ -3,7 +3,7 @@
     <TITLE>MyAccount</TITLE>
     <%= $head %>
   </HEAD>
     <TITLE>MyAccount</TITLE>
     <%= $head %>
   </HEAD>
-  <BODY BGCOLOR="<%= $body_bgcolor || '#e8e8e8' %>">
+  <BODY BGCOLOR="<%= $body_bgcolor || '#eeeeee' %>">
   <%= $body_header %>
 
   <FONT SIZE=5>MyAccount</FONT><BR><BR>
   <%= $body_header %>
 
   <FONT SIZE=5>MyAccount</FONT><BR><BR>
index 042b8b3..b2900b1 100755 (executable)
@@ -1,5 +1,6 @@
-<HTML><HEAD><TITLE>My Account</TITLE></HEAD>
-<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR>
+<%= $url = "$selfurl?session=$session_id;action="; ''; %>
+<%= include('header') %>
+
 <SCRIPT TYPE="text/javascript">
   function popcollect() {
     overlib( OLiframeContent('<%= $popup_url %>', 336, 550, 'Secure Payment Area', 0, 'auto' ), CAPTION, 'Pay now', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', CLOSETEXT, 'Close' );
 <SCRIPT TYPE="text/javascript">
   function popcollect() {
     overlib( OLiframeContent('<%= $popup_url %>', 336, 550, 'Secure Payment Area', 0, 'auto' ), CAPTION, 'Pay now', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '#333399', CGCOLOR, '#333399', CLOSETEXT, 'Close' );
@@ -11,9 +12,7 @@
 <SCRIPT TYPE="text/javascript" SRC="overlibmws_draggable.js"></SCRIPT>
 <SCRIPT TYPE="text/javascript" SRC="overlibmws_crossframe.js"></SCRIPT>
 <SCRIPT TYPE="text/javascript" SRC="iframecontentmws.js"></SCRIPT>
 <SCRIPT TYPE="text/javascript" SRC="overlibmws_draggable.js"></SCRIPT>
 <SCRIPT TYPE="text/javascript" SRC="overlibmws_crossframe.js"></SCRIPT>
 <SCRIPT TYPE="text/javascript" SRC="iframecontentmws.js"></SCRIPT>
-<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('myaccount_menu') %>
-<TD VALIGN="top">
+
 <FONT SIZE=4>Pay now</FONT><BR><BR>
 
 <%= if ( $error ) {
 <FONT SIZE=4>Pay now</FONT><BR><BR>
 
 <%= if ( $error ) {
@@ -34,5 +33,5 @@ EOF
   $OUT .= qq!</FORM>!;
 }
 %>
   $OUT .= qq!</FORM>!;
 }
 %>
-</TD></TR></TABLE>
-</BODY></HTML>
+
+<%= include('footer') %>
index bcfcf95..d6527fe 100644 (file)
@@ -4,11 +4,17 @@
 Hello <%= $name %>!<BR><BR>
 <%= $small_custview %>
 <BR>
 Hello <%= $name %>!<BR><BR>
 <%= $small_custview %>
 <BR>
+<%= if ( $pkgnum ) {
+      $OUT .= qq!Balance: <B>\$$balance</B><BR><BR>!;
+    }
+    '';
+%>
+
 <%= if ( $balance > 0 ) {
 <%= if ( $balance > 0 ) {
-  if (scalar(grep $_, @hide_payment_field)) {
-    $OUT .= qq! <B><A HREF="${url}make_payment">Make a payment</A></B><BR><BR>!;
-  } else {
+  if (scalar(grep $_, @hide_payment_fields)) {
     $OUT .= qq! <B><A HREF="${url}make_thirdparty_payment&payby_method=CC">Make a payment</A></B><BR><BR>!;
     $OUT .= qq! <B><A HREF="${url}make_thirdparty_payment&payby_method=CC">Make a payment</A></B><BR><BR>!;
+  } else {
+    $OUT .= qq! <B><A HREF="${url}make_payment">Make a payment</A></B><BR><BR>!;
   }
 } %>
 <%=
   }
 } %>
 <%=
index 5cf4fe2..617ae3e 100644 (file)
@@ -7,15 +7,18 @@
 <%= 
 
 my @menu = (
 <%= 
 
 my @menu = (
-{ title=>' ' },
-{ title=>'Overview', url=>'myaccount', size=>'+1', },
-{ title=>' ' },
-
-{ title=>'Purchase', size=>'+1', },
-  { title=>'Purchase additional package',
-    url=>'customer_order_pkg', 'indent'=>2 },
+  { title=>' ' },
+  { title=>'Overview', url=>'myaccount', size=>'+1', },
+  { title=>' ' },
+  { title=>'Purchase', size=>'+1', },
 );
 
 );
 
+unless ( $pkgnum ) {
+  push @menu,
+    { title=>'Purchase additional package',
+      url=>'customer_order_pkg', 'indent'=>2 };
+}
+
 if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eventually per-pkg or something really fancy
 
   #XXXFIXME still a bit sloppy for multi-gateway of differing namespace
 if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eventually per-pkg or something really fancy
 
   #XXXFIXME still a bit sloppy for multi-gateway of differing namespace
@@ -34,7 +37,7 @@ if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eve
   while($i < scalar(@cust_paybys)) { last if $cust_paybys[$i] =~ /^CHEK/; $i++ }
   if ( $cust_paybys[$i] =~ /^CHEK/ ) {
     push @menu, { title  => 'Recharge my account with a check',
   while($i < scalar(@cust_paybys)) { last if $cust_paybys[$i] =~ /^CHEK/; $i++ }
   if ( $cust_paybys[$i] =~ /^CHEK/ ) {
     push @menu, { title  => 'Recharge my account with a check',
-                  url    => $hide_payment_field[$i]
+                  url    => $hide_payment_fields[$i]
                               ? 'make_thirdparty_payment&payby_method=ECHECK'
                               : 'make_ach_payment',
                   indent => 2,
                               ? 'make_thirdparty_payment&payby_method=ECHECK'
                               : 'make_ach_payment',
                   indent => 2,
@@ -49,26 +52,36 @@ if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eve
 
 }
 
 
 }
 
-push @menu, (
-
-{ title=>' ' },
+push @menu,
+  { title=>' ' },
+  { title=>'View my usage', url=>'view_usage', size=>'+1', },
+;
 
 
-{ title=>'View my usage', url=>'view_usage', size=>'+1', },
-{ title=>'Setup my services', url=>'provision', size=>'+1', },
-
-{ title=>' ' },
+unless ( $pkgnum ) {
+  push @menu,
+    { title=>'Setup my services', url=>'provision', size=>'+1', },
+  ;
+}
 
 
-{ title=>'Change my information', size=>'+1', },
-  { title=>'Change billing address',      url=>'change_bill',     indent=>2 },
-  { title=>'Change service address',      url=>'change_ship',     indent=>2 },
-  { title=>'Change payment information',  url=>'change_pay',      indent=>2 },
-  { title=>'Change password(s)',          url=>'change_password', indent=>2 },
+push @menu,
+  { title=>' ' };
 
 
-{ title=>' ' },
+push @menu,
+  { title=>'Change my information', size=>'+1', };
 
 
-{ title=>'Logout',   url=>'logout', size=>'+1', },
+unless ( $pkgnum ) {
+  push @menu,
+    { title=>'Change billing address',      url=>'change_bill',     indent=>2 },
+    { title=>'Change service address',      url=>'change_ship',     indent=>2 },
+    { title=>'Change payment information',  url=>'change_pay',      indent=>2 },
+  ;
+}
 
 
-);
+push @menu,
+  { title=>'Change password(s)',          url=>'change_password', indent=>2 },
+  { title=>' ' },
+  { title=>'Logout',   url=>'logout', size=>'+1', },
+;
 
 foreach my $item ( @menu ) {
 
 
 foreach my $item ( @menu ) {
 
@@ -83,15 +96,15 @@ foreach my $item ( @menu ) {
   }
   $OUT.='>';
 
   }
   $OUT.='>';
 
-  $OUT .= '<FONT SIZE="'. $item->{'size'}. '">'
-    if exists $item->{'size'};
-
   $OUT .= '&nbsp;' x $item->{'indent'}
     if exists $item->{'indent'};
 
   $OUT .= '<A HREF="'. $url. $item->{'url'}. '">'
     if exists $item->{'url'} && $action ne $item->{'url'};
 
   $OUT .= '&nbsp;' x $item->{'indent'}
     if exists $item->{'indent'};
 
   $OUT .= '<A HREF="'. $url. $item->{'url'}. '">'
     if exists $item->{'url'} && $action ne $item->{'url'};
 
+  $OUT .= '<FONT SIZE="'. $item->{'size'}. '">'
+    if exists $item->{'size'};
+
   $item->{'title'} =~ s/ /&nbsp;/g;
   $OUT .= $item->{'title'};
 
   $item->{'title'} =~ s/ /&nbsp;/g;
   $OUT .= $item->{'title'};
 
index 09cfe60..a5a7d18 100644 (file)
@@ -10,7 +10,7 @@ use HTML::Entities;
 use Date::Format;
 use Number::Format 1.50;
 use FS::SelfService qw(
 use Date::Format;
 use Number::Format 1.50;
 use FS::SelfService qw(
-  skin_info login_info login customer_info edit_info invoice
+  access_info login_info login customer_info edit_info invoice
   payment_info process_payment realtime_collect process_prepay
   list_pkgs order_pkg signup_info order_recharge
   part_svc_info provision_acct provision_external
   payment_info process_payment realtime_collect process_prepay
   list_pkgs order_pkg signup_info order_recharge
   part_svc_info provision_acct provision_external
@@ -98,7 +98,7 @@ warn "processing template $action\n"
 do_template($action, {
   'session_id' => $session_id,
   'action'     => $action, #so the menu knows what tab we're on...
 do_template($action, {
   'session_id' => $session_id,
   'action'     => $action, #so the menu knows what tab we're on...
-  %{ payment_info( 'session_id' => $session_id ) },  # cust_paybys for the menu
+  #%{ payment_info( 'session_id' => $session_id ) },  # cust_paybys for the menu
   %{$result}
 });
 
   %{$result}
 });
 
@@ -645,8 +645,10 @@ sub do_template {
   $fill_in->{'selfurl'} = $cgi->self_url;
   $fill_in->{'cgi'} = \$cgi;
 
   $fill_in->{'selfurl'} = $cgi->self_url;
   $fill_in->{'cgi'} = \$cgi;
 
-  my $skin_info = skin_info();
-  $fill_in->{$_} = $skin_info->{$_} foreach keys %$skin_info;
+  my $access_info = $session_id
+                      ? access_info( 'session_id' => $session_id )
+                      : {};
+  $fill_in->{$_} = $access_info->{$_} foreach keys %$access_info;
 
   my $source = "$template_dir/$name.html";
   #warn "creating template for $source\n";
 
   my $source = "$template_dir/$name.html";
   #warn "creating template for $source\n";