fix tax reports for taxclass+non-taxclass cases, RT#13160
[freeside.git] / httemplate / search / cust_bill_pkg.cgi
index b974304..58856f3 100644 (file)
@@ -75,6 +75,7 @@
                    \&FS::UI::Web::cust_fields,
                  ],
                  'sort_fields' => [
+                   '',
                    'setup', #broken in $unearned case i guess
                    ( $unearned ? ('', '') : () ),
                    ( $use_usage eq 'recurring' ? 'recur - usage' :
@@ -204,12 +205,9 @@ if ( $cgi->param('taxclass')
   #
   #} else {
 
-    push @where,
-      ' ( '. join(' OR ',
-                    map ' part_pkg.taxclass = '.dbh->quote($_),
-                        $cgi->param('taxclass')
-                 ).
-      ' ) ';
+    push @where, ' part_pkg.taxclass IN ( '.
+                   join(', ', map dbh->quote($_), $cgi->param('taxclass') ).
+                 ' ) ';
 
   #}
 
@@ -315,6 +313,7 @@ if ( $cgi->param('out') ) {
     die "unknown base region for empty taxclass" unless $cust_main_county;
 
     my $same_sql = $cust_main_county->sql_taxclass_sameregion;
+    $same_sql =~ s/taxclass/part_pkg.taxclass/g;
     push @where, $same_sql if $same_sql;
 
   }
@@ -463,8 +462,11 @@ if ( $cgi->param('pkg_tax') ) {
 
 } else {
 
-  #$count_query = "SELECT COUNT(*), ";
-  $count_query = "SELECT COUNT(DISTINCT billpkgnum), ";
+  if ( $use_usage ) {
+    $count_query = "SELECT COUNT(*), ";
+  } else {
+    $count_query = "SELECT COUNT(DISTINCT billpkgnum), ";
+  }
 
   if ( $use_usage eq 'recurring' ) {
     $count_query .= "SUM(setup + recur - usage)";
@@ -472,13 +474,12 @@ if ( $cgi->param('pkg_tax') ) {
     $count_query .= "SUM(usage)";
   } elsif ( $unearned ) {
     $count_query .= "SUM(cust_bill_pkg.recur)";
+  } elsif ( scalar( grep( /locationtaxid/, $cgi->param ) ) ) {
+    $count_query .= "SUM( COALESCE(cust_bill_pkg_tax_rate_location.amount, cust_bill_pkg.setup + cust_bill_pkg.recur))";
+  } elsif ( $cgi->param('iscredit') eq 'rate') {
+    $count_query .= "SUM( cust_credit_bill_pkg.amount )";
   } else {
-    if ( scalar( grep( /locationtaxid/, $cgi->param ) ) ||
-              $cgi->param('iscredit') eq 'rate') {
-      $count_query .= "SUM( COALESCE(amount, cust_bill_pkg.setup + cust_bill_pkg.recur))";
-    } else {
-      $count_query .= "SUM(cust_bill_pkg.setup + cust_bill_pkg.recur)";
-    }
+    $count_query .= "SUM(cust_bill_pkg.setup + cust_bill_pkg.recur)";
   }
 
   if ( $unearned ) {