%shared>
my $conf = FS::Conf->new;
%shared>
<%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'};
if ($redirect) {
$redirect = &$redirect($cgi) if ref($redirect) eq 'CODE';
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{$_}}, '';
# }
# }
#}
%init>
<& /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
&>
<% emt('Download full results') %>
% $cgi->param('type', 'xls');
<% emt('as Excel spreadsheet') %>
% $cgi->param('type', 'html-print');
<% emt('as printable copy') %>
% $cgi->delete('type');