<%shared> my $conf = FS::Conf->new; <%init> my %opt = @_; $opt{'name'} ||= PL($opt{'name_singular'}); my $group_info = $m->comp('core', %opt); my $redirect; if ( $group_info->{num} == 0 ) { $redirect = $opt{'redirect_empty'}; $redirect = &$redirect($cgi) if $redirect && ref($redirect) eq 'CODE'; if ($redirect) { redirect( $redirect ); } else { # just print this stuff and exit $m->comp('/elements/header.html', $opt{'title'}); $m->print('

No matching ' . $opt{'name'} . ' found.
'); $m->comp('/elements/footer.html'); $m->abort; } } # this mode has a concept of "current group" my $curr_group = 0; if ($cgi->param('group') =~ /^(\d+)$/) { $curr_group = $1; } my $group = $group_info->{groups}[$curr_group]; my $query = $group_info->{queries}[$curr_group]; my $footer = $group_info->{group_footers}[$curr_group]; my $total_footer = $group_info->{total_footer} || []; # pagination my ($limit, $offset); my $maxrecords = $conf->config('maxsearchrecordsperpage') || 50; if ( $cgi->param('maxrecords') =~ /^(\d+)$/ ) { $maxrecords = $1; } if ( $maxrecords ) { $limit = "LIMIT $maxrecords"; if ( $cgi->param('offset') =~ /^(\d+)$/ ) { $offset = $1; $limit .= " OFFSET $offset"; } } $query->{order_by} .= $limit if $limit; #warn Dumper($query); #DEBUG # run the query my @rows = $query->qsearch; #warn Dumper(\@rows); #DEBUG my $pager = ''; # show pager if needed if ( $group->num_rows > scalar(@rows) ) { $pager = include( '/elements/pager.html', 'offset' => $offset, 'num_rows' => scalar(@rows), 'total' => $group->num_rows, 'maxrecords' => $maxrecords, ); } # set up tab bar my @menubar; if ($group_info->{num} > 1) { for (my $i = 0; $i < $group_info->{num}; $i++) { push @menubar, $group_info->{group_labels}[$i], ";group=$i"; } } # not enabled yet; if we need this at some point, enable it on a per-report # basis and then disable it for search/cust_pay.html, because it's redundant # to see "Check Check #130108", "Credit card Card #401...", etc. ## if this is the combined view, add a column for the group key #if ( $curr_group == 0 and $opt{'show_combined'} ) { # unshift @{$opt{'header'}}, ''; # unshift @{$opt{'fields'}}, $opt{group_label}; # unshift @{$opt{'sort_fields'}}, $opt{group_column} if $opt{'sort_fields'}; # $opt{'align'} = 'c'.$opt{'align'}; # foreach (qw(header2 links link_onclicks color size style cell_style xls_format)) { # if ( $opt{$_} ) { # unshift @{$opt{$_}}, ''; # } # } #} <& /elements/header.html, $opt{title} &> %# tab bar % $cgi->delete('group'); % $cgi->delete('offset'); % $cgi->delete('type'); <& /elements/menubar.html, { newstyle => 1, url_base => $cgi->self_url, selected => $group_info->{group_labels}[$curr_group] }, @menubar &>
%# download links

<% emt('Download full results') %>
% $cgi->param('type', 'xls'); <% emt('as Excel spreadsheet') %>
% $cgi->param('type', 'html-print'); <% emt('as printable copy') %>
% $cgi->delete('type');

<% $pager %> <& /search/elements/search-html.html:header_row, 'header' => $opt{'header'}, 'header2' => $opt{'header2'}, 'sort_fields' => ($opt{'sort_fields'} || $opt{'fields'}), &> <& /search/elements/search-html.html:data_rows, 'rows' => \@rows, 'opt' => \%opt, &> <& /search/elements/search-html.html:footer_row, row => $footer, opt => \%opt &> % if ( scalar @$total_footer ) { <& /search/elements/search-html.html:footer_row, row => $total_footer, opt => \%opt &> % }
<% $pager %>
<& /elements/footer.html &>