1 <& /elements/header.html, mt('Customer Report') &>
3 <FORM ACTION="cust_main.html" METHOD="GET">
4 <INPUT TYPE="hidden" NAME="magic" VALUE="bill">
6 <TABLE BGCOLOR="#cccccc" CELLSPACING=0>
9 <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Basic search options') |h %></FONT></TH>
12 <& /elements/tr-select-agent.html,
13 'curr_value' => scalar($cgi->param('agentnum')),
17 <& /elements/tr-select-sales.html,
18 'curr_value' => scalar($cgi->param('salesnum')),
19 'pre_options' => [ '' => 'all',
24 <& /elements/tr-select-cust_main-status.html,
25 'label' => emt('Status'),
28 <& /elements/tr-select-cust_class.html,
29 'label' => emt('Class'),
31 'pre_options' => [ '' => emt('(none)') ],
35 <& /elements/tr-select-part_referral.html,
36 'label' => emt('Advertising Source'),
38 #no, causes customers with disabled ones to disappear
43 <TD ALIGN="right" VALIGN="center"><% mt('Signup date') |h %></TD>
46 <& /elements/tr-input-beginning_ending.html,
47 prefix => 'signupdate',
54 % if ( $conf->exists('cust_main-enable_birthdate') ) {
56 <TD ALIGN="right" VALIGN="center"><% mt('Date of Birth') |h %></TD>
59 <& /elements/tr-input-beginning_ending.html,
60 prefix => 'birthdate',
68 % if ( $conf->exists('cust_main-enable_spouse_birthdate') ) {
70 <TD ALIGN="right" VALIGN="center"><% mt('Spouse Date of Birth') |h %></TD>
73 <& /elements/tr-input-beginning_ending.html,
74 prefix => 'spouse_birthdate',
82 % if ( $conf->exists('cust_main-enable_anniversary_date') ) {
84 <TD ALIGN="right" VALIGN="center"><% mt('Anniversary Date') |h %></TD>
87 <& /elements/tr-input-beginning_ending.html,
88 prefix => 'anniversary_date',
97 <TD ALIGN="right">Tags</TD>
99 <& /elements/select-cust_tag.html,
104 <DIV STYLE="display:inline-block; vertical-align:baseline">
105 <INPUT TYPE="radio" NAME="all_tags" VALUE="0" CHECKED> Any of these
107 <INPUT TYPE="radio" NAME="all_tags" VALUE="all"> All of these
109 <INPUT TYPE="radio" NAME="all_tags" VALUE="none"> None of these
115 <TH CLASS="background" COLSPAN=2> </TH>
118 <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Referral search options') |h %></FONT></TH>
121 <& /elements/tr-input-text.html,
122 label => emt('At least this many'),
123 field => 'with_referrals',
128 <& /elements/tr-select-cust_main-status.html,
129 label => emt('Referral status'),
130 field => 'referral_status',
134 <TH CLASS="background" COLSPAN=2> </TH>
137 <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Package search options') |h %></FONT></TH>
141 <TD ALIGN="right">With</TD>
142 <TD><SELECT NAME="any_pkg_status">
143 <OPTION VALUE="0">active packages
144 <OPTION VALUE="1">any status packages
150 <TD ALIGN="right">of class</TD>
152 <& /elements/select-pkg_class.html,
153 'field' => 'pkg_classnum',
156 <DIV STYLE="display:inline-block; vertical-align:baseline">
157 <INPUT TYPE="radio" NAME="all_pkg_classnums" VALUE="0" CHECKED>
160 <INPUT TYPE="radio" NAME="all_pkg_classnums" VALUE="1">
167 <TH CLASS="background" COLSPAN=2> </TH>
171 <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Location search options') |h %></FONT></TH>
175 <TD ALIGN="right" VALIGN="center"><% mt('Address') |h %></TD>
176 <TD><INPUT TYPE="text" NAME="address" SIZE=54></TD>
180 <TD ALIGN="right" VALIGN="center"><% mt('City') |h %></TD>
182 <& /elements/city.html,
184 empty_label => '(all)',
191 <TD ALIGN="right" VALIGN="center"><% mt('County') |h %></TD>
193 <& /elements/select-county.html,
195 empty_label => '(all)',
201 <TD ALIGN="right" VALIGN="center"><% mt('State') |h %></TD>
203 <& /elements/select-state.html,
205 empty_label => '(all)',
211 <TD ALIGN="right" VALIGN="center"><% mt('Zip') |h %></TD>
212 <TD><INPUT TYPE="text" NAME="zip" SIZE=12></TD>
216 <TD ALIGN="right" VALIGN="center"><% mt('Country') |h %></TD>
218 <& /elements/select-country.html,
220 state_disable_empty => 0,
221 state_empty_label => '(all)',
227 <TH CLASS="background" COLSPAN=2> </TH>
231 <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% emt('Contacts search options') %></FONT></TH>
234 <& elements/options_cust_contacts.html,
235 'pre_fix' => 'contacts_',
239 <TH CLASS="background" COLSPAN=2> </TH>
243 <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Billing search options') |h %></FONT></TH>
246 <& /elements/tr-select-payby.html,
247 'payby_type' => 'cust',
253 <TD ALIGN="right"><% mt('Payment expiration before') |h %></TD>
255 <SELECT NAME="paydate_month" DISABLED>
256 % foreach my $month ( 1 .. 12 ) {
257 <OPTION VALUE="<% $month %>"><% $month %></OPTION>
261 <SELECT NAME="paydate_year" onChange="paydate_year_changed(this);">
262 <OPTION VALUE=""></OPTION>
263 % my $lastyear = (localtime(time))[5] + 1899;
264 % foreach my $year ( $lastyear .. $lastyear+12 ) {
265 <OPTION VALUE="<% $year %>"><% $year %></OPTION>
271 <SCRIPT TYPE="text/javascript">
272 function paydate_year_changed(what) {
273 var value = what.options[what.selectedIndex].value;
274 var month_select = what.form.paydate_month;
276 month_select.disabled = true;
278 month_select.disabled = false;
283 % my @exempt_groups = grep /\S/, $conf->config('tax-cust_exempt-groups');
284 % unless ( @exempt_groups ) {
286 % #falze laziness with With/Without postal mail invoices
288 <TD ALIGN="right" VALIGN="center"><% mt('Tax exempt') |h %></TD>
289 <TD><INPUT TYPE="checkbox" NAME="tax" ID="tax" onClick="tax_changed();"></TD>
293 <TD ALIGN="right" VALIGN="center"><% mt('Not tax exempt') |h %></TD>
294 <TD><INPUT TYPE="checkbox" NAME="no_tax" ID="no_tax" onClick="no_tax_changed();"></TD>
297 <SCRIPT TYPE="text/javascript">
298 function tax_changed() {
299 if ( document.getElementById('tax').checked == true ) {
300 document.getElementById('no_tax').checked = false;
303 function no_tax_changed() {
304 if ( document.getElementById('no_tax').checked == true ) {
305 document.getElementById('tax').checked = false;
312 <TD ALIGN="right"><% mt('Invoice terms') |h %></TD>
314 % my @agentnums = $FS::CurrentUser::CurrentUser->agentnums;
315 % my $agentnum = scalar(@agentnums) == 1 ? $agentnums[0] : '';
316 <& /elements/select-terms.html,
317 'pre_options' => [ '' => emt('all') ],
318 'empty_value' => 'NULL',
319 'agentnum' => $agentnum,
324 <& /elements/tr-input-lessthan_greaterthan.html,
325 label => emt('Current balance'),
326 field => 'current_balance',
330 <TD ALIGN="right" VALIGN="center"><% mt('With invoicing email address(es)') |h %></TD>
331 <TD><INPUT TYPE="checkbox" NAME="with_email"></TD>
335 <TD ALIGN="right" VALIGN="center"><% mt('With postal mail invoices') |h %></TD>
336 <TD><INPUT TYPE="checkbox" NAME="POST" ID="POST" onClick="POST_changed();"></TD>
340 <TD ALIGN="right" VALIGN="center"><% mt('Without postal mail invoices') |h %></TD>
341 <TD><INPUT TYPE="checkbox" NAME="no_POST" ID="no_POST" onClick="no_POST_changed();"></TD>
344 <SCRIPT TYPE="text/javascript">
345 function POST_changed() {
346 if ( document.getElementById('POST').checked == true ) {
347 document.getElementById('no_POST').checked = false;
350 function no_POST_changed() {
351 if ( document.getElementById('no_POST').checked == true ) {
352 document.getElementById('POST').checked = false;
358 <TH CLASS="background" COLSPAN=2> </TH>
362 <TH CLASS="background" COLSPAN=2 ALIGN="left"><FONT SIZE="+1"><% mt('Display options') |h %></FONT></TH>
364 <& /elements/tr-select-cust-fields.html &>
367 <TD ALIGN="right" VALIGN="center"><% mt('Add package columns') |h %></TD>
368 <TD><INPUT TYPE="checkbox" NAME="flattened_pkgs"></TD>
372 <TD ALIGN="right" VALIGN="center"><% mt('Include cancelled packages') |h %></TD>
373 <TD><INPUT TYPE="checkbox" NAME="cancelled_pkgs"></TD>
377 <TH ALIGN="right" VALIGN="center"><% mt('Search historical addresses') %></TH>
378 <TD><INPUT TYPE="checkbox" NAME="location_history" VALUE="1"></TD>
383 <INPUT TYPE="submit" VALUE="<% mt('Get Report') |h %>">
387 <& /elements/footer.html &>
391 unless $FS::CurrentUser::CurrentUser->access_right('Advanced customer search');
393 my $conf = new FS::Conf;