-my($total, $tot_taxable, $owed, $tax) = ( 0, 0, 0, 0, 0 );
-my( $exempt_cust, $exempt_pkg, $exempt_monthly ) = ( 0, 0 );
-my $out = 'Out of taxable region(s)';
-my %regions = ();
-foreach my $r (qsearch('cust_main_county', {}, '', $gotcust) ) {
- #warn $r->county. ' '. $r->state. ' '. $r->country. "\n";
-
- my $label = getlabel($r);
- $regions{$label}->{'label'} = $label;
- $regions{$label}->{'url_param'} = join(';', map "$_=".$r->$_(), qw( county state country ) );
-
- my @param = @base_param;
- my $mywhere = $where;
-
- if ( $r->taxclass ) {
-
- $mywhere .= " AND taxclass = ? ";
- push @param, 'taxclass';
- $regions{$label}->{'url_param'} .= ';taxclass='. $r->taxclass
- if $cgi->param('show_taxclasses');
-
- } else {
-
- $regions{$label}->{'url_param'} .= ';taxclassNULL=1'
- if $cgi->param('show_taxclasses');
-
- my $same_sql = $r->sql_taxclass_sameregion;
- $mywhere .= " AND $same_sql" if $same_sql;
-
- }
-
- my $fromwhere = $from_join_cust. $join_pkg. $mywhere. " AND payby != 'COMP' ";
-
-# my $label = getlabel($r);
-# $regions{$label}->{'label'} = $label;
-
- my $nottax = 'pkgnum != 0';
-
- ## calculate total for this region
-
- my $t = scalar_sql($r, \@param,
- "SELECT SUM(cust_bill_pkg.setup+cust_bill_pkg.recur) $fromwhere AND $nottax"
- );
- $total += $t;
- $regions{$label}->{'total'} += $t;
-
- ## calculate customer-exemption for this region
-
-## my $taxable = $t;
-
-# my($taxable, $x_cust) = (0, 0);
-# foreach my $e ( grep { $r->get($_.'tax') !~ /^Y/i }
-# qw( cust_bill_pkg.setup cust_bill_pkg.recur ) ) {
-# $taxable += scalar_sql($r, \@param,
-# "SELECT SUM($e) $fromwhere AND $nottax AND ( tax != 'Y' OR tax IS NULL )"
-# );
-#
-# $x_cust += scalar_sql($r, \@param,
-# "SELECT SUM($e) $fromwhere AND $nottax AND tax = 'Y'"
-# );
-# }
-
- my $x_cust = scalar_sql($r, \@param,
- "SELECT SUM(cust_bill_pkg.setup+cust_bill_pkg.recur)
- $fromwhere AND $nottax AND tax = 'Y' "
- );
-
- $exempt_cust += $x_cust;
- $regions{$label}->{'exempt_cust'} += $x_cust;
-
- ## calculate package-exemption for this region
-
- my $x_pkg = scalar_sql($r, \@param,
- "SELECT SUM(
- ( CASE WHEN part_pkg.setuptax = 'Y'
- THEN cust_bill_pkg.setup
- ELSE 0
- END
- )
- +
- ( CASE WHEN part_pkg.recurtax = 'Y'
- THEN cust_bill_pkg.recur
- ELSE 0
- END
- )
- )
- $fromwhere
- AND $nottax
- AND (
- ( part_pkg.setuptax = 'Y' AND cust_bill_pkg.setup > 0 )
- OR ( part_pkg.recurtax = 'Y' AND cust_bill_pkg.recur > 0 )
- )
- AND ( tax != 'Y' OR tax IS NULL )
- "
- );
- $exempt_pkg += $x_pkg;
- $regions{$label}->{'exempt_pkg'} += $x_pkg;
-
- ## calculate monthly exemption (texas tax) for this region
-
- # count up all the cust_tax_exempt_pkg records associated with
- # the actual line items.
-
- my $x_monthly = scalar_sql($r, \@param,
- "SELECT SUM(amount)
- FROM cust_tax_exempt_pkg
- JOIN cust_bill_pkg USING ( billpkgnum )
- $join_cust $join_pkg
- $mywhere"
- );
-# if ( $x_monthly ) {
-# #warn $r->taxnum(). ": $x_monthly\n";
-# $taxable -= $x_monthly;
-# }
-
- $exempt_monthly += $x_monthly;
- $regions{$label}->{'exempt_monthly'} += $x_monthly;
-
- my $taxable = $t - $x_cust - $x_pkg - $x_monthly;
-
- $tot_taxable += $taxable;
- $regions{$label}->{'taxable'} += $taxable;
-
- $owed += $taxable * ($r->tax/100);
- $regions{$label}->{'owed'} += $taxable * ($r->tax/100);
-
- if ( defined($regions{$label}->{'rate'})
- && $regions{$label}->{'rate'} != $r->tax.'%' ) {
- $regions{$label}->{'rate'} = 'variable';
- } else {
- $regions{$label}->{'rate'} = $r->tax.'%';
- }
-
+my $istax = "cust_bill_pkg.pkgnum = 0";
+
+$sql{tax} = "$select SUM(cust_bill_pkg_tax_location.amount)
+ $taxfrom
+ $where AND $istax
+ $group";
+
+$all_sql{tax} = "$select_all SUM(cust_bill_pkg_tax_location.amount)
+ $taxfrom
+ $where AND $istax
+ $group_all";
+
+# sum of credits applied against billed tax
+# ($creditfrom includes join of taxable item to part_pkg if with_pkgclass
+# is on)
+my $creditfrom = $taxfrom .
+ ' JOIN cust_credit_bill_pkg USING (billpkgtaxlocationnum)';
+my $creditwhere = $where .
+ ' AND billpkgtaxratelocationnum IS NULL';
+
+$sql{credit} = "$select SUM(cust_credit_bill_pkg.amount)
+ $creditfrom
+ $creditwhere AND $istax
+ $group";
+
+$all_sql{credit} = "$select_all SUM(cust_credit_bill_pkg.amount)
+ $creditfrom
+ $creditwhere AND $istax
+ $group_all";
+
+my %data;
+my %total;
+my %taxclass_name = { '' => '' };
+if ( $breakdown{taxclass} ) {
+ $taxclass_name{$_->taxclassnum} = $_->taxclass
+ foreach qsearch('tax_class');
+ $taxclass_name{''} = 'Unclassified';