%
my $conf = new FS::Conf;
my @shells = $conf->config('shells');
my($svcnum, $pkgnum, $svcpart, $part_svc, $svc_acct, @groups);
if ( $cgi->param('error') ) {
  $svc_acct = new FS::svc_acct ( {
    map { $_, scalar($cgi->param($_)) } fields('svc_acct')
  } );
  $svcnum = $svc_acct->svcnum;
  $pkgnum = $cgi->param('pkgnum');
  $svcpart = $cgi->param('svcpart');
  $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
  die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
  @groups = $cgi->param('radius_usergroup');
} else {
  my($query) = $cgi->keywords;
  if ( $query =~ /^(\d+)$/ ) { #editing
    $svcnum=$1;
    $svc_acct=qsearchs('svc_acct',{'svcnum'=>$svcnum})
      or die "Unknown (svc_acct) svcnum!";
    my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
      or die "Unknown (cust_svc) svcnum!";
    $pkgnum=$cust_svc->pkgnum;
    $svcpart=$cust_svc->svcpart;
    $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
    die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
    @groups = $svc_acct->radius_groups;
  } else { #adding
    foreach $_ (split(/-/,$query)) {
      $pkgnum=$1 if /^pkgnum(\d+)$/;
      $svcpart=$1 if /^svcpart(\d+)$/;
    }
    $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
    die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
    $svc_acct = new FS::svc_acct({svcpart => $svcpart}); 
    $svcnum='';
  }
}
my( $cust_pkg, $cust_main ) = ( '', '' );
if ( $pkgnum ) {
  $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $pkgnum } );
  $cust_main = $cust_pkg->cust_main;
}
unless ( $svcnum || $cgi->param('error') ) { #adding
  #set gecos
  if ($cust_main) {
    unless ( $part_svc->part_svc_column('uid')->columnflag eq 'F' ) {
      $svc_acct->setfield('finger',
        $cust_main->getfield('first') . " " . $cust_main->getfield('last')
      );
    }
  }
  #set fixed and default fields from part_svc
  foreach my $part_svc_column (
    grep { $_->columnflag } $part_svc->all_part_svc_column
  ) {
    if ( $part_svc_column->columnname eq 'usergroup' ) {
      @groups = split(',', $part_svc_column->columnvalue);
    } else {
      $svc_acct->setfield( $part_svc_column->columnname,
                           $part_svc_column->columnvalue,
                         );
    }
  }
}
#fixed radius groups always override & display
if ( $part_svc->part_svc_column('usergroup')->columnflag eq 'F' ) {
  @groups = split(',', $part_svc->part_svc_column('usergroup')->columnvalue);
}
my $action = $svcnum ? 'Edit' : 'Add';
my $svc = $part_svc->getfield('svc');
my $otaker = getotaker;
my $username = $svc_acct->username;
my $password;
if ( $svc_acct->_password ) {
  if ( $conf->exists('showpasswords') || ! $svcnum ) {
    $password = $svc_acct->_password;
  } else {
    $password = "*HIDDEN*";
  }
} else {
  $password = '';
}
my $ulen = 
  $conf->exists('usernamemax')
  ? $conf->config('usernamemax')
  : dbdef->table('svc_acct')->column('username')->length;
my $ulen2 = $ulen+2;
my $pmax = $conf->config('passwordmax') || 8;
my $pmax2 = $pmax+2;
my $p1 = popurl(1);
%>
<%= include("/elements/header.html","$action $svc account") %>
<% if ( $cgi->param('error') ) { %>
  Error: <%= $cgi->param('error') %>
  
<% } %>
<% if ( $cust_main ) { %>
  <%= include( '/elements/small_custview.html', $cust_main, '', 1 ) %>
  
<% } %>