- sub { $_[0]->pkgnum > 0
- # possibly use override.pkg but i think this correct
- ? $_[0]->get('pkg')
- : $_[0]->get('itemdesc')
- },
+ 'itemdesc', # is part_pkg.pkg if applicable
- use_override: Apply "classnum" and "taxclass" filtering based on the
override (bundle) pkgpart, rather than always using the true pkgpart.
- use_override: Apply "classnum" and "taxclass" filtering based on the
override (bundle) pkgpart, rather than always using the true pkgpart.
- taxnum: Limit to items whose tax definition matches this taxnum.
With "nottax" that means items that are subject to that tax;
- taxnum: Limit to items whose tax definition matches this taxnum.
With "nottax" that means items that are subject to that tax;
push @post_desc, 'taxclass';
push @post_desc_null, '';
$post_desc_align .= 'l';
push @post_desc, 'taxclass';
push @post_desc_null, '';
$post_desc_align .= 'l';
# valid in both the tax and non-tax cases
my $join_cust =
" LEFT JOIN cust_bill ON (cust_bill_pkg.invnum = cust_bill.invnum)".
# valid in both the tax and non-tax cases
my $join_cust =
" LEFT JOIN cust_bill ON (cust_bill_pkg.invnum = cust_bill.invnum)".
push @where, "cust_bill._date >= $beginning",
"cust_bill._date <= $ending";
}
push @where, "cust_bill._date >= $beginning",
"cust_bill._date <= $ending";
}
-push @select, 'part_pkg.pkgpart', 'part_pkg.pkg'; # or should this use override?
+push @select, "$part_pkg.pkgpart", "$part_pkg.pkg";
+push @select, "COALESCE($part_pkg.taxclass, part_fee.taxclass) AS taxclass"
+ if $conf->exists('enable_taxclasses');
# N: classnum
if ( grep { $_ eq 'classnum' } $cgi->param ) {
my @classnums = grep /^\d*$/, $cgi->param('classnum');
# N: classnum
if ( grep { $_ eq 'classnum' } $cgi->param ) {
my @classnums = grep /^\d*$/, $cgi->param('classnum');
- push @where, "COALESCE($part_pkg.classnum, 0) IN ( ".
+ push @where, "COALESCE(part_fee.classnum, $part_pkg.classnum, 0) IN ( ".
# effective taxclass, not the real one
push @tax_where, 'cust_main_county.taxclass IS NULL'
} elsif ( $cgi->param('taxclass') ) {
# effective taxclass, not the real one
push @tax_where, 'cust_main_county.taxclass IS NULL'
} elsif ( $cgi->param('taxclass') ) {
- # process tax restrictions
- unshift @tax_where,
- 'cust_bill_pkg_tax_location.taxable_billpkgnum = cust_bill_pkg.billpkgnum',
- 'cust_main_county.tax > 0';
+ # process tax restrictions
+ unshift @tax_where,
+ 'cust_bill_pkg_tax_location.taxable_billpkgnum = cust_bill_pkg.billpkgnum',
+ 'cust_main_county.tax > 0';
+ }
push @where, 'cust_bill_pkg.pkgnum = 0';
# tax location when using tax_rate_location
push @where, 'cust_bill_pkg.pkgnum = 0';
# tax location when using tax_rate_location
$join_pkg .= ' LEFT JOIN cust_bill_pkg_tax_rate_location USING ( billpkgnum ) '.
' LEFT JOIN tax_rate_location USING ( taxratelocationnum )';
$join_pkg .= ' LEFT JOIN cust_bill_pkg_tax_rate_location USING ( billpkgnum ) '.
' LEFT JOIN tax_rate_location USING ( taxratelocationnum )';
- push @where, FS::tax_rate_location->location_sql(
- map { $_ => (scalar($cgi->param($_)) || '') }
- qw( district city county state locationtaxid )
- );
+ foreach (qw( state county city locationtaxid)) {
+ if ( scalar($cgi->param($_)) ) {
+ my $place = dbh->quote( $cgi->param($_) );
+ push @where, "tax_rate_location.$_ = $place";
+ }
+ }
- # taxclass
- if ( $cgi->param('taxclassNULL') ) {
- push @where, 'cust_main_county.taxclass IS NULL';
- }
+ # taxclass
+ if ( $cgi->param('taxclassNULL') ) {
+ push @where, 'cust_main_county.taxclass IS NULL';
+ }
- # taxname
- if ( $cgi->param('taxnameNULL') ) {
- push @where, 'cust_main_county.taxname IS NULL OR '.
- 'cust_main_county.taxname = \'Tax\'';
- } elsif ( $cgi->param('taxname') ) {
- push @where, 'cust_main_county.taxname = '.
- dbh->quote($cgi->param('taxname'));
- }
+ # taxname
+ if ( $cgi->param('taxnameNULL') ) {
+ push @where, 'cust_main_county.taxname IS NULL OR '.
+ 'cust_main_county.taxname = \'Tax\'';
+ } elsif ( $cgi->param('taxname') ) {
+ push @where, 'cust_main_county.taxname = '.
+ dbh->quote($cgi->param('taxname'));
+ }
- # specific taxnums
- if ( $cgi->param('taxnum') =~ /^([\d,]+)$/) {
- push @where, "cust_main_county.taxnum IN ($1)";
- }
+ # itemdesc, for breakdown from the vendor tax report
+ if ( $cgi->param('itemdesc') ) {
+ if ( $cgi->param('itemdesc') eq 'Tax' ) {
+ push @where, "($itemdesc = 'Tax' OR $itemdesc is null)";
+ } else {
+ push @where, "$itemdesc = ". dbh->quote($cgi->param('itemdesc'));
+ }
+ }
- # itemdesc, for some reason
- if ( $cgi->param('itemdesc') ) {
- if ( $cgi->param('itemdesc') eq 'Tax' ) {
- push @where, "(itemdesc='Tax' OR itemdesc is null)";
- } else {
- push @where, 'itemdesc='. dbh->quote($cgi->param('itemdesc'));
+ # specific taxnums
+ if ( $cgi->param('taxnum') =~ /^([\d,]+)$/) {
+ push @where, "cust_main_county.taxnum IN ($1)";
JOIN cust_credit USING (crednum)
LEFT JOIN reason USING (reasonnum)
LEFT JOIN access_user USING (usernum)
JOIN cust_credit USING (crednum)
LEFT JOIN reason USING (reasonnum)
LEFT JOIN access_user USING (usernum)
GROUP BY billpkgnum, billpkgtaxlocationnum, reason.reason,
access_user.username";
GROUP BY billpkgnum, billpkgtaxlocationnum, reason.reason,
access_user.username";
JOIN cust_credit USING (crednum)
LEFT JOIN reason USING (reasonnum)
LEFT JOIN access_user USING (usernum)
JOIN cust_credit USING (crednum)
LEFT JOIN reason USING (reasonnum)
LEFT JOIN access_user USING (usernum)
GROUP BY billpkgnum, reason.reason, access_user.username";
$join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit USING (billpkgnum)";
}
GROUP BY billpkgnum, reason.reason, access_user.username";
$join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit USING (billpkgnum)";
}
'paid' => ($cgi->param('paid') ? 1 : 0),
'classnum' => scalar($cgi->param('classnum'))
);
'paid' => ($cgi->param('paid') ? 1 : 0),
'classnum' => scalar($cgi->param('classnum'))
);
- $join_pkg .= " JOIN sales_pkg_class ON ( COALESCE(sales_pkg_class.classnum, 0) = COALESCE( part_pkg.classnum, 0) )";
+ $join_pkg .= " JOIN sales_pkg_class ON ( COALESCE(sales_pkg_class.classnum, 0) = COALESCE( part_fee.classnum, part_pkg.classnum, 0) )";