<% mt('#') |h %> |
<% mt('Status') |h %> |
- <% mt('(bill) name') |h %> |
- <% mt('company') |h %> |
-
-%if ( defined dbdef->table('cust_main')->column('ship_last') ) {
- <% mt('(service) name') |h %> |
- <% mt('company') |h %> |
-%}
+ <% mt('Name') |h %> |
+ <% mt('Company') |h %> |
%foreach my $addl_header ( @addl_headers ) {
<% $addl_header %> |
@@ -124,9 +119,12 @@
% foreach my $cust_pkg ( @{$all_pkgs{$custnum}} ) {
% my %cust_svc_by_svcpart;
% my $rows = 0;
-% foreach my $part_svc ( $cust_pkg->part_svc ) {
+% local($FS::part_pkg::cache_enabled) = 1; #for $cust_pkg->part_svc
+% foreach my $part_svc (
+% $cust_pkg->part_svc( summarize_size=>$large_pkg_size )
+% ) {
% my $svcpart = $part_svc->svcpart;
-% my $num_cust_svc = $cust_pkg->num_cust_svc($svcpart);
+% my $num_cust_svc = $part_svc->num_cust_svc;
% if ( $large_pkg_size > 0 and $num_cust_svc >= $large_pkg_size ) {
% # don't retrieve the cust_svc records, just stash the
% # part_svc and num_cust_svc for later
@@ -135,7 +133,7 @@
% $rows += 2;
% }
% elsif ( $num_cust_svc ) {
-% $cust_svc_by_svcpart{$svcpart} = [ $cust_pkg->cust_svc($svcpart) ];
+% $cust_svc_by_svcpart{$svcpart} = $part_svc->cust_pkg_svc;
% $rows += $num_cust_svc;
% } #if summarize
% } #foreach $part_svc
@@ -152,7 +150,7 @@
% $view = $p. 'view/cust_main.cgi?'. $custnum;
% }
% my $pcompany = $company
-% ? qq!$company!
+% ? qq!!. encode_entities($company). ''
% : ' ';
%
% my $status = $cust_main->status;
@@ -166,31 +164,12 @@
<% ucfirst($status) %>
>
- <% "$last, $first" %>
+ <% "$last, $first" |h %>
|
>
<% $pcompany %>
|
-% if ( defined dbdef->table('cust_main')->column('ship_last') ) {
-% my($ship_last,$ship_first,$ship_company)=(
-% $cust_main->ship_last || $cust_main->getfield('last'),
-% $cust_main->ship_last ? $cust_main->ship_first : $cust_main->first,
-% $cust_main->ship_last ? $cust_main->ship_company : $cust_main->company,
-% );
-% my $pship_company = $ship_company
-% ? qq!$ship_company!
-% : ' ';
-%
-
- >
- <% "$ship_last, $ship_first" %>
- |
- >
- <% $pship_company %>
- |
-% }
-%
% foreach my $addl_col ( @addl_cols ) {
% if ( $addl_col eq 'tickets' ) {
% if ( @custom_priorities ) {
@@ -258,7 +237,7 @@
% my $part_pkg = $_->part_pkg;
%
% my $pkg_comment = $part_pkg->pkg_comment(nopkgpart => 1);
-% my $show = $curuser->default_customer_view =~ /^(jumbo|packages)$/
+% my $show = $default_customer_view =~ /^(jumbo|packages)$/
% ? ''
% : ';show=packages';
% my $frag = "cust_pkg$pkgnum"; #hack for IE ignoring real #fragment
@@ -268,7 +247,7 @@
% my $pkg_rowspan = shift @pkg_rowspans;
<% $n1 %>
- <% $pkg_comment %>
+ <% $pkg_comment |h %>
|
% my $n2 = '';
@@ -334,13 +313,15 @@
my $curuser = $FS::CurrentUser::CurrentUser;
die "access denied"
- unless $curuser->access_right('List customers');
+ unless $curuser->access_right('List all customers');
my $conf = new FS::Conf;
my $maxrecords = $conf->config('maxsearchrecordsperpage');
# summarize more than this many services of the same svcpart
my $large_pkg_size = $conf->config('cust_pkg-large_pkg_size') || 0;
+my $default_customer_view = $curuser->default_customer_view;
+
my $limit = '';
$limit .= "LIMIT $maxrecords" if $maxrecords;
@@ -365,7 +346,12 @@ if ( $cgi->param('browse')
if ( $query eq 'custnum' ) {
if ( $conf->exists('cust_main-default_agent_custid') ) {
$sortby=\*display_custnum_sort;
- $orderby = "ORDER BY CASE WHEN agent_custid IS NOT NULL AND agent_custid != '' THEN CAST(agent_custid AS BIGINT) ELSE custnum END";
+ $orderby = "ORDER BY CASE WHEN agent_custid IS NOT NULL
+ AND agent_custid != ''
+ AND agent_custid ". regexp_sql. " '^[0-9]+\$'
+ THEN CAST(agent_custid AS BIGINT)
+ ELSE custnum
+ END";
} else {
$sortby=\*custnum_sort;
$orderby = "ORDER BY custnum";
@@ -417,6 +403,7 @@ if ( $cgi->param('browse')
push @qual, FS::cust_main->cancel_sql if $cgi->param('cancelled');
push @qual, FS::cust_main->prospect_sql if $cgi->param('prospect');
+ push @qual, FS::cust_main->ordered_sql if $cgi->param('ordered');
push @qual, FS::cust_main->active_sql if $cgi->param('active');
push @qual, FS::cust_main->inactive_sql if $cgi->param('inactive');
push @qual, FS::cust_main->susp_sql if $cgi->param('suspended');
@@ -492,12 +479,15 @@ if ( $cgi->param('browse')
if ( $cgi->param('search_cust') ) {
$sortby = \*company_sort;
$orderby = "ORDER BY LOWER(company || ' ' || last || ' ' || first )";
- push @cust_main, smart_search( 'search' => scalar($cgi->param('search_cust')),
- 'no_fuzzy_on_exact' => 1, #pref?
- );
+ push @cust_main, smart_search(
+ 'search' => scalar($cgi->param('search_cust')),
+ 'no_fuzzy_on_exact' => ! ( $curuser->option('enable_fuzzy_on_exact')
+ || $conf->exists('enable_fuzzy_on_exact')
+ ),
+ );
}
- @cust_main = grep { $_->ncancelled_pkgs || ! $_->all_pkgs } @cust_main
+ @cust_main = grep { $_->num_ncancelled_pkgs || ! $_->num_pkgs } @cust_main
if ! $cgi->param('cancelled')
&& (
$cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
@@ -509,12 +499,35 @@ if ( $cgi->param('browse')
@cust_main = grep { !$saw{$_->custnum}++ } @cust_main;
}
-my %all_pkgs;
-if ( $conf->exists('hidecancelledpackages' ) ) {
- %all_pkgs = map { $_->custnum => [ $_->ncancelled_pkgs ] } @cust_main;
-} else {
- %all_pkgs = map { $_->custnum => [ $_->all_pkgs ] } @cust_main;
-}
+my $pkgs_method = $conf->exists('hidecancelledpackages')
+ ? 'ncancelled_pkgs'
+ : 'all_pkgs';
+
+#false laziness w/httemplate/view/cust_main/packages.html
+my $select = join(',',
+ 'cust_pkg.*',
+ 'part_pkg.*',
+ 'setup_option.optionvalue AS _opt_setup_fee',
+ 'recur_option.optionvalue AS _opt_recur_fee',
+ );
+
+my $addl_from = qq{
+ LEFT JOIN part_pkg USING ( pkgpart )
+ LEFT JOIN part_pkg_option AS setup_option
+ ON ( cust_pkg.pkgpart = setup_option.pkgpart
+ AND setup_option.optionname = 'setup_fee' )
+ LEFT JOIN part_pkg_option AS recur_option
+ ON ( cust_pkg.pkgpart = recur_option.pkgpart
+ AND recur_option.optionname = 'recur_fee' )
+};
+
+my %all_pkgs = map { $_->custnum =>
+ [ $_->$pkgs_method({ select => $select,
+ addl_from => $addl_from,
+ })
+ ];
+ }
+ @cust_main;
sub last_sort {
lc($a->getfield('last')) cmp lc($b->getfield('last'))