my $total = 0;
my(@cust_main, $sortby, $orderby);
+my @select = ();
+my @addl_headers = ();
+my @addl_cols = ();
if ( $cgi->param('browse')
|| $cgi->param('otaker_on')
+ || $cgi->param('agentnum_on')
) {
my %search = ();
} elsif ( $query eq 'company' ) {
$sortby=\*company_sort;
$orderby = "ORDER BY LOWER(company || ' ' || last || ' ' || first )";
+ } elsif ( $query eq 'tickets' ) {
+ $sortby = \*tickets_sort;
+ $orderby = "ORDER BY tickets DESC";
+ push @select, FS::TicketSystem->sql_customer_tickets. " as tickets";
+ push @addl_headers, 'Tickets';
+ push @addl_cols, 'tickets';
} else {
die "unknown browse field $query";
}
if ( $cgi->param('otaker_on') ) {
$cgi->param('otaker') =~ /^(\w{1,32})$/ or eidiot "Illegal otaker\n";
$search{otaker} = $1;
+ } elsif ( $cgi->param('agentnum_on') ) {
+ $cgi->param('agentnum') =~ /^(\d+)$/ or eidiot "Illegal agentnum\n";
+ $search{agentnum} = $1;
} else {
die "unknown query...";
}
}
- my $ncancelled = '';
+ my @qual = ();
- if ( driver_name eq 'mysql' ) {
-
- my $sql = "CREATE TEMPORARY TABLE temp1_$$ TYPE=MYISAM
- SELECT cust_pkg.custnum,COUNT(*) as count
- FROM cust_pkg,cust_main
- WHERE cust_pkg.custnum = cust_main.custnum
- AND ( cust_pkg.cancel IS NULL
- OR cust_pkg.cancel = 0 )
- GROUP BY cust_pkg.custnum";
- my $sth = dbh->prepare($sql) or die dbh->errstr. " preparing $sql";
- $sth->execute or die "Error executing \"$sql\": ". $sth->errstr;
- $sql = "CREATE TEMPORARY TABLE temp2_$$ TYPE=MYISAM
- SELECT cust_pkg.custnum,COUNT(*) as count
- FROM cust_pkg,cust_main
- WHERE cust_pkg.custnum = cust_main.custnum
- GROUP BY cust_pkg.custnum";
- $sth = dbh->prepare($sql) or die dbh->errstr. " preparing $sql";
- $sth->execute or die "Error executing \"$sql\": ". $sth->errstr;
- }
+ my $ncancelled = '';
if ( $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
|| ( $conf->exists('hidecancelledcustomers')
&& ! $cgi->param('showcancelledcustomers') )
) {
#grep { $_->ncancelled_pkgs || ! $_->all_pkgs }
- if ( driver_name eq 'mysql' ) {
- $ncancelled = "
- temp1_$$.custnum = cust_main.custnum
- AND temp2_$$.custnum = cust_main.custnum
- AND (temp1_$$.count > 0
- OR temp2_$$.count = 0 )
- ";
- } else {
- $ncancelled = "
- 0 < ( SELECT COUNT(*) FROM cust_pkg
- WHERE cust_pkg.custnum = cust_main.custnum
- AND ( cust_pkg.cancel IS NULL
- OR cust_pkg.cancel = 0
- )
- )
- OR 0 = ( SELECT COUNT(*) FROM cust_pkg
- WHERE cust_pkg.custnum = cust_main.custnum
- )
- ";
- }
-
- }
+ push @qual, "
+ ( 0 < ( SELECT COUNT(*) FROM cust_pkg
+ WHERE cust_pkg.custnum = cust_main.custnum
+ AND ( cust_pkg.cancel IS NULL
+ OR cust_pkg.cancel = 0
+ )
+ )
+ OR 0 = ( SELECT COUNT(*) FROM cust_pkg
+ WHERE cust_pkg.custnum = cust_main.custnum
+ )
+ )
+ ";
+ }
+
+ 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->active_sql if $cgi->param('active');
+ push @qual, FS::cust_main->susp_sql if $cgi->param('suspended');
#EWWWWWW
my $qual = join(' AND ',
map { "$_ = ". dbh->quote($search{$_}) } keys %search );
- if ( $ncancelled ) {
+ my $addl_qual = join(' AND ', @qual);
+
+ if ( $addl_qual ) {
$qual .= ' AND ' if $qual;
- $qual .= $ncancelled;
+ $qual .= $addl_qual;
}
$qual = " WHERE $qual" if $qual;
- my $statement;
- if ( driver_name eq 'mysql' ) {
- $statement = "SELECT COUNT(*) FROM cust_main";
- $statement .= ", temp1_$$, temp2_$$ $qual" if $qual;
- } else {
- $statement = "SELECT COUNT(*) FROM cust_main $qual";
- }
+ my $statement = "SELECT COUNT(*) FROM cust_main $qual";
my $sth = dbh->prepare($statement) or die dbh->errstr." preparing $statement";
$sth->execute or die "Error executing \"$statement\": ". $sth->errstr;
$total = $sth->fetchrow_arrayref->[0];
- if ( $ncancelled ) {
+ if ( $addl_qual ) {
if ( %search ) {
- $ncancelled = " AND $ncancelled";
+ $addl_qual = " AND $addl_qual";
} else {
- $ncancelled = " WHERE $ncancelled";
+ $addl_qual = " WHERE $addl_qual";
}
}
- my @just_cust_main;
- if ( driver_name eq 'mysql' ) {
- @just_cust_main = qsearch('cust_main', \%search, 'cust_main.*',
- ",temp1_$$,temp2_$$ $ncancelled $orderby $limit");
+ my $select;
+ if ( @select ) {
+ $select = 'cust_main.*, '. join (', ', @select);
} else {
- @just_cust_main = qsearch('cust_main', \%search, '',
- "$ncancelled $orderby $limit" );
- }
- if ( driver_name eq 'mysql' ) {
- my $sql = "DROP TABLE temp1_$$,temp2_$$;";
- my $sth = dbh->prepare($sql) or die dbh->errstr. " preparing $sql";
- $sth->execute or die "Error executing \"$sql\": ". $sth->errstr;
+ $select = '*';
}
- @cust_main = @just_cust_main;
+
+ @cust_main = qsearch('cust_main', \%search, $select,
+ "$addl_qual $orderby $limit" );
# foreach my $cust_main ( @just_cust_main ) {
#
}
@cust_main = grep { $_->ncancelled_pkgs || ! $_->all_pkgs } @cust_main
- if $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
- || ( $conf->exists('hidecancelledcustomers')
- && ! $cgi->param('showcancelledcustomers') );
+ if ! $cgi->param('cancelled')
+ && (
+ $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
+ || ( $conf->exists('hidecancelledcustomers')
+ && ! $cgi->param('showcancelledcustomers') )
+ );
my %saw = ();
@cust_main = grep { !$saw{$_->custnum}++ } @cust_main;
}
}
#end pager
-
- if ( $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
- || ( $conf->exists('hidecancelledcustomers')
- && ! $cgi->param('showcancelledcustomers')
- )
- ) {
- $cgi->param('showcancelledcustomers', 1);
- $cgi->param('offset', 0);
- print qq!( <a href="!. $cgi->self_url. qq!">show cancelled customers</a> )!;
- } else {
- $cgi->param('showcancelledcustomers', 0);
- $cgi->param('offset', 0);
- print qq!( <a href="!. $cgi->self_url. qq!">hide cancelled customers</a> )!;
+
+ unless ( $cgi->param('cancelled') ) {
+ if ( $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
+ || ( $conf->exists('hidecancelledcustomers')
+ && ! $cgi->param('showcancelledcustomers')
+ )
+ ) {
+ $cgi->param('showcancelledcustomers', 1);
+ $cgi->param('offset', 0);
+ print qq!( <a href="!. $cgi->self_url. qq!">show!;
+ } else {
+ $cgi->param('showcancelledcustomers', 0);
+ $cgi->param('offset', 0);
+ print qq!( <a href="!. $cgi->self_url. qq!">hide!;
+ }
+ print ' cancelled customers</a> )';
}
if ( $cgi->param('referral_custnum') ) {
$cgi->param('referral_custnum') =~ /^(\d+)$/
END
}
+foreach my $addl_header ( @addl_headers ) {
+ print "<TH>$addl_header</TH>";
+}
+
print <<END;
<TH>Packages</TH>
<TH COLSPAN=2>Services</TH>
END
my(%saw,$cust_main);
- my $p = popurl(2);
foreach $cust_main (
sort $sortby grep(!$saw{$_->custnum}++, @cust_main)
) {
END
}
+ foreach my $addl_col ( @addl_cols ) {
+ print "<TD ROWSPAN=$rowspan>".
+ qq!<A HREF="${p}rt/Search/Results.html?Order=ASC&Query=%20MemberOf%20%3D%20%27freeside%3A%2F%2Ffreeside%2Fcust_main%2F!.
+ $cust_main->custnum.
+ qq!%27%20%20AND%20%28%20Status%20%3D%20%27open%27%20%20OR%20Status%20%3D%20%27new%27%20%20OR%20Status%20%3D%20%27stalled%27%20%29%20&Rows=50&OrderBy=id&Page=1&Format=%27%20%20%20%3Cb%3E%3Ca%20href%3D%22%2Ffreeside%2Frt%2FTicket%2FDisplay.html%3Fid%3D__id__%22%3E__id__%3C%2Fa%3E%3C%2Fb%3E%2FTITLE%3A%23%27%2C%20%0A%27%3Cb%3E%3Ca%20href%3D%22%2Ffreeside%2Frt%2FTicket%2FDisplay.html%3Fid%3D__id__%22%3E__Subject__%3C%2Fa%3E%3C%2Fb%3E%2FTITLE%3ASubject%27%2C%20%0A%27__Status__%27%2C%20%0A%27__QueueName__%27%2C%20%0A%27__OwnerName__%27%2C%20%0A%27__Priority__%27%2C%20%0A%27__NEWLINE__%27%2C%20%0A%27%27%2C%20%0A%27%3Csmall%3E__Requestors__%3C%2Fsmall%3E%27%2C%20%0A%27%3Csmall%3E__CreatedRelative__%3C%2Fsmall%3E%27%2C%20%0A%27%3Csmall%3E__ToldRelative__%3C%2Fsmall%3E%27%2C%20%0A%27%3Csmall%3E__LastUpdatedRelative__%3C%2Fsmall%3E%27%2C%20%0A%27%3Csmall%3E__TimeLeft__%3C%2Fsmall%3E%27">!.
+ $cust_main->get($addl_col).
+ "</A></TD>";
+ }
+
my($n1)='';
foreach ( @{$all_pkgs{$custnum}} ) {
my $pkgnum = $_->pkgnum;
my $pkg = $part_pkg->pkg;
my $comment = $part_pkg->comment;
- my $pkgview = $p. 'view/cust_pkg.cgi?'. $pkgnum;
+ my $pkgview = "${p}view/cust_main.cgi?$custnum#cust_pkg$pkgnum";
my @cust_svc = @{shift @lol_cust_svc};
#my(@cust_svc) = qsearch( 'cust_svc', { 'pkgnum' => $_->pkgnum } );
my $rowspan = scalar(@cust_svc) || 1;
$a->getfield('custnum') <=> $b->getfield('custnum');
}
+sub tickets_sort {
+ $b->getfield('tickets') <=> $a->getfield('tickets');
+}
+
sub custnumsearch {
my $custnum = $cgi->param('custnum_text');
}
if ( $last_type{'Fuzzy'} || $last_type{'All'} ) {
-
- &FS::cust_main::check_and_rebuild_fuzzyfiles;
- my $all_last = &FS::cust_main::all_last;
-
- my %last;
- if ( $last_type{'Fuzzy'} || $last_type{'All'} ) {
- foreach ( amatch($last, [ qw(i) ], @$all_last) ) {
- $last{$_}++;
- }
- }
-
- #if ($last_type{'Sound-alike'}) {
- #}
-
- foreach ( keys %last ) {
- push @cust_main, qsearch('cust_main',{'last'=>$_});
- push @cust_main, qsearch('cust_main',{'ship_last'=>$_})
- if defined dbdef->table('cust_main')->column('ship_last');
- }
-
+ push @cust_main, FS::cust_main->fuzzy_search( { 'last' => $last } );
}
+ #if ($last_type{'Sound-alike'}) {
+ #}
+
\@cust_main;
}
}
if ( $company_type{'Fuzzy'} || $company_type{'All'} ) {
+ push @cust_main, FS::cust_main->fuzzy_search( { 'company' => $company } );
+ }
- &FS::cust_main::check_and_rebuild_fuzzyfiles;
- my $all_company = &FS::cust_main::all_company;
-
- my %company;
- if ( $company_type{'Fuzzy'} || $company_type{'All'} ) {
- foreach ( amatch($company, [ qw(i) ], @$all_company ) ) {
- $company{$_}++;
- }
- }
-
- #if ($company_type{'Sound-alike'}) {
- #}
-
- foreach ( keys %company ) {
- push @cust_main, qsearch('cust_main',{'company'=>$_});
- push @cust_main, qsearch('cust_main',{'ship_company'=>$_})
- if defined dbdef->table('cust_main')->column('ship_last');
- }
-
+ if ($company_type{'Sound-alike'}) {
}
\@cust_main;