Merge branch 'master' of git.freeside.biz:/home/git/freeside
authorIvan Kohler <ivan@freeside.biz>
Mon, 9 Dec 2013 22:43:43 +0000 (14:43 -0800)
committerIvan Kohler <ivan@freeside.biz>
Mon, 9 Dec 2013 22:43:43 +0000 (14:43 -0800)
FS/FS/cust_main/Search.pm
httemplate/search/cust_main.html
httemplate/search/report_cust_main.html

index b143861..b52b359 100644 (file)
@@ -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
index 66a3a98..b97a4ef 100755 (executable)
@@ -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) ];
 }
 
index 1ceb48e..4309fbb 100755 (executable)
         </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,