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