<%doc> Example: include( '/elements/customer-table.html', ### # required ### #listrefs... 'header' => [ '#', 'Item' ], 'fields' => [ 'column', sub { my ($row,$param) = @_; $param->{"column$row"}; }, ], ### # optional ### 'name_singular' => 'customer', #label 'custnum_update_callback' => 'name_of_js_callback' #passed a rownum #listrefs 'types' => ['immutable', ''], # immutable or ''/text 'align' => [ 'c', 'l', 'r', '' ], 'size' => [], # sizes ignored for immutable 'color' => [], 'footer' => ['string', '_TOTAL'], # strings or the special #value _TOTAL 'footer_align' => [ 'c', 'l', 'r', '' ], 'param' => { column0 => 1 }, # preset column of row 0 to 1 ) % foreach my $header ( @{$opt{header}} ) { % } % my @rownums = sort { $a <=> $b } map /^custnum(\d+)$/, keys %$param; % my $col = 0; % foreach my $footer ( @{$opt{footer}} ) { % my $align = $align{ $opt{'footer_align'}->[$col] || 'c' }; % if ($footer eq '_TOTAL' ) { % my $id = $opt{'fields'}->[$col]; % $id = ref($id) ? "column${col}_TOTAL" : "${id}_TOTAL"; % } else { % } % $col++; % }
Inv # Cust # Status Customer Balance<% $header %>
Total <% @rownums || 0 %> <% PL($opt{name_singular} || 'customer', ( @rownums || 0 ) ) %>  <% sprintf('%.2f', $total[$col] ) %><% $footer %>
<% include('/elements/xmlhttp.html', 'url' => $p. 'misc/xmlhttp-cust_main-search.cgi', 'subs' => [qw( custnum_search smart_search invnum_search )], ) %> <%init> my(%opt) = @_; my $conf = new FS::Conf; ## caution when using prefix, it isn't consistently applied to tag id/name $opt{prefix} = '' unless defined $opt{prefix}; $opt{prefix} .= '_' if $opt{prefix}; my $types = $opt{'type'} ? [ @{$opt{'type'}} ] : []; my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : []; my $param = $opt{param}; $param = $cgi->Vars if $cgi->param('error'); $opt{$_} ||= [] foreach qw(align color footer footer_align); my @total = map 0, @{$opt{footer}}; my %align = ( 'l' => 'left', 'r' => 'right', 'c' => 'center', ); my $money_char = $conf->config('money_char') || '$';