summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-12-06 14:41:35 -0800
committerMark Wells <mark@freeside.biz>2013-12-06 14:41:35 -0800
commit39bd5b53c899df1f543ef85dac206cdc135e9f3f (patch)
tree775ec0bcb772813653a0f4d8c177e743472496c8
parent721542615319024c253affa3d7f177b7ca7e53cc (diff)
advanced customer report: search by package class, #25531
-rw-r--r--FS/FS/cust_main/Search.pm25
-rwxr-xr-xhttemplate/search/cust_main.html3
-rwxr-xr-xhttemplate/search/report_cust_main.html17
3 files changed, 44 insertions, 1 deletions
diff --git a/FS/FS/cust_main/Search.pm b/FS/FS/cust_main/Search.pm
index b1438619b..b52b3596a 100644
--- a/FS/FS/cust_main/Search.pm
+++ b/FS/FS/cust_main/Search.pm
@@ -949,6 +949,31 @@ sub search {
}
}
+ # pkg_classnum
+ if ( $params->{'pkg_classnum'} ) {
+ my @pkg_classnums = ref( $params->{'pkg_classnum'} ) ?
+ @{ $params->{'pkg_classnum'} } :
+ $params->{'pkg_classnum'};
+ @pkg_classnums = grep /^(\d+)$/, @pkg_classnums;
+
+ if ( @pkg_classnums ) {
+
+ my @pkg_where;
+ if ( $params->{'all_pkg_classnums'} ) {
+ push @pkg_where, "part_pkg.classnum = $_" foreach @pkg_classnums;
+ } else {
+ push @pkg_where,
+ 'part_pkg.classnum IN('. join(',', @pkg_classnums).')';
+ }
+ foreach (@pkg_where) {
+ push @where, "EXISTS(".
+ "SELECT 1 FROM cust_pkg JOIN part_pkg USING (pkgpart) WHERE ".
+ "cust_pkg.custnum = cust_main.custnum AND ".
+ $_ . ' AND ' . FS::cust_pkg->active_sql .
+ ')';
+ }
+ }
+ }
##
# setup queries, subs, etc. for the search
diff --git a/httemplate/search/cust_main.html b/httemplate/search/cust_main.html
index 66a3a9825..b97a4ef60 100755
--- a/httemplate/search/cust_main.html
+++ b/httemplate/search/cust_main.html
@@ -47,6 +47,7 @@ my @scalars = qw (
cancelled_pkgs
cust_fields flattened_pkgs
all_tags
+ all_pkg_classnums
);
for my $param ( @scalars ) {
@@ -55,7 +56,7 @@ for my $param ( @scalars ) {
}
#lists
-for my $param (qw( classnum refnum payby tagnum )) {
+for my $param (qw( classnum refnum payby tagnum pkg_classnum )) {
$search_hash{$param} = [ $cgi->param($param) ];
}
diff --git a/httemplate/search/report_cust_main.html b/httemplate/search/report_cust_main.html
index 1ceb48e1e..4309fbb7f 100755
--- a/httemplate/search/report_cust_main.html
+++ b/httemplate/search/report_cust_main.html
@@ -119,6 +119,23 @@
</TD>
</TR>
+ <TR>
+ <TD ALIGN="right">With package of class</TD>
+ <TD>
+ <& /elements/select-pkg_class.html,
+ 'field' => 'pkg_classnum',
+ 'multiple' => 1,
+ &>
+ <DIV STYLE="display:inline-block; vertical-align:baseline">
+ <INPUT TYPE="radio" NAME="all_pkg_classnums" VALUE="0" CHECKED>
+ Any of these
+ <BR>
+ <INPUT TYPE="radio" NAME="all_pkg_classnums" VALUE="1">
+ All of these
+ </DIV>
+ </TD>
+ </TR>
+
<& /elements/tr-select-payby.html,
'payby_type' => 'cust',
'multiple' => 1,