%doc>
#Example:
  include( 'elements/svc_Common.html, 
             'table' => 'svc_something'
             'labels' => {
                           'column' => 'Label',
                         },
             #listref - each item is a literal column name (or method) or
             # (notyet) coderef.  if not specified all columns (except for the
             #primary key) will be viewable
             'fields' => [
                         ]
             # defaults to "edit/$table.cgi?", will have svcnum appended
             'edit_url' => 
         )
%doc>
% if ( $custnum ) { 
  <% include("/elements/header.html","View $label: $value") %>
  <% include( '/elements/small_custview.html', $custnum, '', 1,
     "${p}view/cust_main.cgi") %>
  
% } else { 
  <% include("/elements/header.html","View $label: $value", menubar(
      "Cancel this (unaudited) $label" =>
            "javascript:areyousure(\'${p}misc/cancel-unaudited.cgi?$svcnum\')"
  )) %>
  
% } 
Service #<% $svcnum %>
% my $url = $opt{'edit_url'} || $p. 'edit/'. $opt{'table'}. '.cgi?';
| Edit this <% $label %>
<% ntable("#cccccc") %>
| <% ntable("#cccccc",2) %>
% foreach my $f ( @$fields ) {
%
%   my($field, $type);
%   if ( ref($f) ) {
%     $field = $f->{'field'},
%     $type  = $f->{'type'} || 'text',
%   } else {
%     $field = $f;
%     $type = 'text';
%   }
%
%   my $columndef = $part_svc->part_svc_column($field);
%   unless ($columndef->columnflag eq 'F' && !length($columndef->columnvalue)) { | 
        | <% ( $opt{labels} && exists $opt{labels}->{$field} )
                  ? $opt{labels}->{$field}
                  : $field
          %>%       #eventually more options for | 
%   }
%
% } 
% foreach (sort { $a cmp $b } $svc_x->virtual_fields) { 
  <% $svc_x->pvf($_)->widget('HTML', 'view', $svc_x->getfield($_)) %>
% } 
% if ( defined($opt{'html_foot'}) ) {
  <% ref($opt{'html_foot'})
       ? &{ $opt{'html_foot'} }($svc_x)
       : $opt{'html_foot'}
  %>
  
% }
<% joblisting({'svcnum'=>$svcnum}, 1) %>
<% include('/elements/footer.html') %>
<%init>
die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('View customer services');
my(%opt) = @_;
my $table = $opt{'table'};
my $fields = $opt{'fields'}
             #|| [ grep { $_ ne 'svcnum' } dbdef->table($table)->columns ];
             || [ grep { $_ ne 'svcnum' } fields($table) ];
my $svcnum;
if ( $cgi->param('svcnum') ) {
  $cgi->param('svcnum') =~ /^(\d+)$/ or die "unparsable svcnum";
  $svcnum = $1;
} else {
  my($query) = $cgi->keywords;
  $query =~ /^(\d+)$/ or die "no svcnum";
  $svcnum = $1;
}
my $svc_x = qsearchs({
  'select'    => $opt{'table'}.'.*',
  'table'     => $opt{'table'},
  'addl_from' => ' LEFT JOIN cust_svc  USING ( svcnum  ) '.
                 ' LEFT JOIN cust_pkg  USING ( pkgnum  ) '.
                 ' LEFT JOIN cust_main USING ( custnum ) ',
  'hashref'   => { 'svcnum' => $svcnum },
  'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql(
                            'null_right' => 'View/link unlinked services'
                          ),
}) or die "Unknown svcnum $svcnum in ". $opt{'table'}. " table\n";
my $cust_svc = $svc_x->cust_svc;
my($label, $value, $svcdb) = $cust_svc->label;
my $part_svc = $cust_svc->part_svc;
  #false laziness w/edit/svc_Common.html
  #override default labels with service-definition labels if applicable
  my $labels = $opt{labels}; #not -> here
  foreach my $field ( keys %$labels ) {
    my $col = $part_svc->part_svc_column($field);
    $labels->{$field} = $col->columnlabel if $col->columnlabel !~ /^\S*$/;
  }
my $pkgnum = $cust_svc->pkgnum;
my($cust_pkg, $custnum);
if ($pkgnum) {
  $cust_pkg = $cust_svc->cust_pkg;
  $custnum = $cust_pkg->custnum;
} else {
  $cust_pkg = '';
  $custnum = '';
}
%init>