293da338fc0af898c7beb2a2e2bb517e0b17e634
[freeside.git] / httemplate / search / elements / grouped-search / html
1 <%shared>
2 my $conf = FS::Conf->new;
3 </%shared>
4 <%init>
5 my %opt = @_;
6 $opt{'name'} ||= PL($opt{'name_singular'});
7
8 my $group_info = $m->comp('core', %opt);
9
10 my $redirect;
11
12 if ( $group_info->{num} == 0 ) {
13   $redirect = $opt{'redirect_empty'};
14   if ($redirect) {
15     $redirect = &$redirect($cgi) if ref($redirect) eq 'CODE';
16     redirect( $redirect );
17   } else { # just print this stuff and exit
18     $m->comp('/elements/header.html', $opt{'title'});
19     $m->print('<BR><BR>No matching ' . $opt{'name'} . ' found.<BR>');
20     $m->comp('/elements/footer.html');
21     $m->abort;
22   }
23 }
24
25 # this mode has a concept of "current group"
26 my $curr_group = 0;
27 if ($cgi->param('group') =~ /^(\d+)$/) {
28   $curr_group = $1;
29 }
30
31 my $group = $group_info->{groups}[$curr_group];
32 my $query = $group_info->{queries}[$curr_group];
33 my $footer = $group_info->{group_footers}[$curr_group];
34 my $total_footer =  $group_info->{total_footer} || [];
35 # pagination
36 my ($limit, $offset);
37 my $maxrecords = $conf->config('maxsearchrecordsperpage') || 50;
38 if ( $cgi->param('maxrecords') =~ /^(\d+)$/ ) {
39   $maxrecords = $1;
40 }
41 if ( $maxrecords ) {
42   $limit = "LIMIT $maxrecords";
43   if ( $cgi->param('offset') =~ /^(\d+)$/ ) {
44     $offset = $1;
45     $limit .= " OFFSET $offset";
46   }
47 }
48 $query->{order_by} .= $limit if $limit;
49
50 #warn Dumper($query); #DEBUG
51
52 # run the query
53 my @rows = $query->qsearch;
54
55 #warn Dumper(\@rows); #DEBUG
56
57 my $pager = '';
58 # show pager if needed
59 if ( $group->num_rows > scalar(@rows) ) {
60   $pager = include( '/elements/pager.html',
61     'offset'      => $offset,
62     'num_rows'    => scalar(@rows),
63     'total'       => $group->num_rows,
64     'maxrecords'  => $maxrecords,
65   );
66 }
67
68 # set up tab bar
69 my @menubar;
70 if ($group_info->{num} > 1) {
71   for (my $i = 0; $i < $group_info->{num}; $i++) {
72     push @menubar, $group_info->{group_labels}[$i], ";group=$i";
73   }
74 }
75
76 # not enabled yet; if we need this at some point, enable it on a per-report
77 # basis and then disable it for search/cust_pay.html, because it's redundant
78 # to see "Check   Check #130108", "Credit card   Card #401...", etc.
79
80 ## if this is the combined view, add a column for the group key
81 #if ( $curr_group == 0 and $opt{'show_combined'} ) {
82 #  unshift @{$opt{'header'}}, '';
83 #  unshift @{$opt{'fields'}}, $opt{group_label};
84 #  unshift @{$opt{'sort_fields'}}, $opt{group_column} if $opt{'sort_fields'};
85 #  $opt{'align'} = 'c'.$opt{'align'};
86 #  foreach (qw(header2 links link_onclicks color size style cell_style xls_format)) {
87 #    if ( $opt{$_} ) {
88 #      unshift @{$opt{$_}}, '';
89 #    }
90 #  }
91 #}
92
93 </%init>
94
95 <& /elements/header.html, $opt{title} &>
96
97 %# tab bar
98 % $cgi->delete('group');
99 % $cgi->delete('offset');
100 % $cgi->delete('type');
101 <& /elements/menubar.html,
102   { newstyle => 1,
103     url_base => $cgi->self_url,
104     selected => $group_info->{group_labels}[$curr_group] },
105   @menubar
106 &>
107
108 <DIV CLASS="fstabcontainer">
109 %# download links
110 <P><% emt('Download full results') %><BR>
111 % $cgi->param('type', 'xls');
112 <A HREF="<% $cgi->self_url %>"><% emt('as Excel spreadsheet') %></A><BR>
113 % $cgi->param('type', 'html-print');
114 <A HREF="<% $cgi->self_url %>"><% emt('as printable copy') %></A><BR>
115 % $cgi->delete('type');
116 </P>
117
118 <% $pager %>
119
120 <STYLE>
121   table.grid {
122     border-spacing: 0;
123   }
124 </STYLE>
125 <table class="grid">
126   <thead>
127   <& /search/elements/search-html.html:header_row,
128     'header'      => $opt{'header'},
129     'header2'     => $opt{'header2'},
130     'sort_fields' => ($opt{'sort_fields'} || $opt{'fields'}),
131   &>
132   </thead>
133   <tbody>
134   <& /search/elements/search-html.html:data_rows,
135     'rows' => \@rows,
136     'opt'  => \%opt,
137   &>
138   </tbody>
139   <tfoot>
140   <& /search/elements/search-html.html:footer_row, row => $footer, opt => \%opt &>
141 %   if ( scalar @$total_footer ) {
142   <& /search/elements/search-html.html:footer_row, row => $total_footer, opt => \%opt &>
143 %   }
144   </tfoot>
145 </table>
146
147 <% $pager %>
148 </DIV>
149
150 <& /elements/footer.html &>
151