X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fsearch%2Fcust_main.cgi;h=d9d4e657c67a3fcb2bb45f999a6ec1fe92afde0b;hp=f153f02d4d4657c157ec9973604fd2454974ec16;hb=c9b608b9c0df8921d30055f18c23fd2d030afb25;hpb=903b22b3da3e3ee493bb322854c6bc0b0085e0dd
diff --git a/httemplate/search/cust_main.cgi b/httemplate/search/cust_main.cgi
index f153f02d4..d9d4e657c 100755
--- a/httemplate/search/cust_main.cgi
+++ b/httemplate/search/cust_main.cgi
@@ -48,53 +48,129 @@ $limit .= " OFFSET $offset" if $offset;
my $total = 0;
my(@cust_main, $sortby, $orderby);
-if ( $cgi->param('browse') ) {
- my $query = $cgi->param('browse');
- if ( $query eq 'custnum' ) {
- $sortby=\*custnum_sort;
- $orderby = 'ORDER BY custnum';
- } elsif ( $query eq 'last' ) {
- $sortby=\*last_sort;
- $orderby = 'ORDER BY last';
- } elsif ( $query eq 'company' ) {
- $sortby=\*company_sort;
- $orderby = 'ORDER BY company';
+if ( $cgi->param('browse')
+ || $cgi->param('otaker_on')
+) {
+
+ my %search = ();
+ if ( $cgi->param('browse') ) {
+ my $query = $cgi->param('browse');
+ if ( $query eq 'custnum' ) {
+ $sortby=\*custnum_sort;
+ $orderby = "ORDER BY custnum";
+ } elsif ( $query eq 'last' ) {
+ $sortby=\*last_sort;
+ $orderby = "ORDER BY LOWER(last || ' ' || first)";
+ } elsif ( $query eq 'company' ) {
+ $sortby=\*company_sort;
+ $orderby = "ORDER BY LOWER(company || ' ' || last || ' ' || first )";
+ } else {
+ die "unknown browse field $query";
+ }
} else {
- die "unknown browse field $query";
+ $sortby = \*last_sort; #??
+ $orderby = "ORDER BY LOWER(last || ' ' || first)"; #??
+ if ( $cgi->param('otaker_on') ) {
+ $cgi->param('otaker') =~ /^(\w{1,32})$/ or eidiot "Illegal otaker\n";
+ $search{otaker} = $1;
+ } else {
+ die "unknown query...";
+ }
}
my $ncancelled = '';
+ if ( driver_name eq 'mysql' ) {
+
+ my $query = "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($query) or die dbh->errstr. " preparing $query";
+ $sth->execute or die "Error executing \"$query\": ". $sth->errstr;
+ $query = "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";
+ my $sth = dbh->prepare($query) or die dbh->errstr. " preparing $query";
+ $sth->execute or die "Error executing \"$query\": ". $sth->errstr;
+ }
+
if ( $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
|| ( $conf->exists('hidecancelledcustomers')
&& ! $cgi->param('showcancelledcustomers') )
) {
#grep { $_->ncancelled_pkgs || ! $_->all_pkgs }
- #needed for MySQL??? OR cust_pkg.cancel = \"\"
- $ncancelled = "
- WHERE 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
- )
- ";
+ 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
+ )
+ ";
+ }
+
}
- my $statement = "SELECT COUNT(*) FROM cust_main $ncancelled";
- my $sth = dbh->prepare($statement)
- or die dbh->errstr. " doing $statement";
+ #EWWWWWW
+ my $qual = join(' AND ',
+ map { "$_ = ". dbh->quote($search{$_}) } keys %search );
+
+ if ( $ncancelled ) {
+ $qual .= ' AND ' if $qual;
+ $qual .= $ncancelled;
+ }
+
+ $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 $sth = dbh->prepare($statement) or die dbh->errstr." preparing $statement";
$sth->execute or die "Error executing \"$statement\": ". $sth->errstr;
$total = $sth->fetchrow_arrayref->[0];
- my @just_cust_main = qsearch('cust_main',{}, '',
- "$ncancelled $orderby $limit"
- );
+ if ( $ncancelled ) {
+ if ( %search ) {
+ $ncancelled = " AND $ncancelled";
+ } else {
+ $ncancelled = " WHERE $ncancelled";
+ }
+ }
+ my @just_cust_main;
+ if ( driver_name eq 'mysql' ) {
+ @just_cust_main = qsearch('cust_main', \%search, 'cust_main.*',
+ ",temp1_$$,temp2_$$ $ncancelled $orderby $limit");
+ } else {
+ @just_cust_main = qsearch('cust_main', \%search, '',
+ "$ncancelled $orderby $limit" );
+ }
+ if ( driver_name eq 'mysql' ) {
+ $query = "DROP TABLE temp1_$$,temp2_$$;";
+ my $sth = dbh->prepare($query) or die dbh->errstr. " preparing $query";
+ $sth->execute or die "Error executing \"$query\": ". $sth->errstr;
+ }
@cust_main = @just_cust_main;
# foreach my $cust_main ( @just_cust_main ) {
@@ -292,11 +368,14 @@ END
} else {
$view = $p. 'view/cust_main.cgi?'. $custnum;
}
+ my $pcompany = $company
+ ? qq!$company!
+ : ' ';
print <
$custnum |
$last, $first |
- $company |
+ $pcompany |
END
if ( defined dbdef->table('cust_main')->column('ship_last') ) {
my($ship_last,$ship_first,$ship_company)=(
@@ -304,9 +383,12 @@ END
$cust_main->ship_last ? $cust_main->ship_first : $cust_main->first,
$cust_main->ship_last ? $cust_main->ship_company : $cust_main->company,
);
-print <$ship_company!
+ : ' ';
+ print <$ship_last, $ship_first
- $ship_company |
+ $pship_company |
END
}
@@ -348,13 +430,16 @@ END
#
sub last_sort {
- $a->getfield('last') cmp $b->getfield('last');
+ lc($a->getfield('last')) cmp lc($b->getfield('last'))
+ || lc($a->first) cmp lc($b->first);
}
sub company_sort {
return -1 if $a->company && ! $b->company;
return 1 if ! $a->company && $b->company;
- $a->getfield('company') cmp $b->getfield('company');
+ lc($a->company) cmp lc($b->company)
+ || lc($a->getfield('last')) cmp lc($b->getfield('last'))
+ || lc($a->first) cmp lc($b->first);;
}
sub custnum_sort {