- my $class = shift;
- my $part_pkg_taxproduct = $self->taxproduct($class);
-
- my ($a,$b,$c,$d) = ( $part_pkg_taxproduct
- ? ( split ':', $part_pkg_taxproduct->taxproduct )
- : ()
- );
- $a = '' unless $a; $b = '' unless $b; $c = '' unless $c; $d = '' unless $d;
- my $extra_sql = "AND ( taxproduct = '$a:$b:$c:$d'
- OR taxproduct = '$a:$b:$c:'
- OR taxproduct = '$a:$b:".":$d'
- OR taxproduct = '$a:$b:".":' )";
- map { $_->taxproductnum } qsearch( { 'table' => 'part_pkg_taxproduct',
- 'hashref' => { 'data_vendor'=>'cch' },
- 'extra_sql' => $extra_sql,
- } );
-
-}
-
-sub part_pkg_taxrate {
- my $self = shift;
- my ($data_vendor, $geocode, $class) = @_;
-
- my $dbh = dbh;
- my $extra_sql = 'WHERE part_pkg_taxproduct.data_vendor = '.
- dbh->quote($data_vendor);
-
- # CCH oddness in m2m
- $extra_sql .= ' AND ('.
- join(' OR ', map{ 'geocode = '. $dbh->quote(substr($geocode, 0, $_)) }
- qw(10 5 2)
- ).
- ')';
- # much more CCH oddness in m2m -- this is kludgy
- my @tpnums = $self->_expand_cch_taxproductnum($class);
- if (scalar(@tpnums)) {
- $extra_sql .= ' AND ('.
- join(' OR ', map{ "taxproductnum = $_" } @tpnums ).
- ')';
- } else {
- $extra_sql .= ' AND ( 0 = 1 )';
+ my ($vendor, $geocode, $class) = @_;
+ # if this part_pkg is overridden into a specific taxclass, get that class
+ my @taxclassnums = map { $_->taxclassnum }
+ $self->part_pkg_taxoverride($class);
+ # otherwise, get its tax product category
+ if (!@taxclassnums) {
+ my $part_pkg_taxproduct = $self->taxproduct($class);
+ # If this isn't defined, then the class has no taxproduct designation,
+ # so return no tax rates.
+ return () if !$part_pkg_taxproduct;
+
+ # convert the taxproduct to the tax classes that might apply to it in
+ # $geocode
+ @taxclassnums = map { $_->taxclassnum }
+ grep { $_->taxable eq 'Y' } # why do we need this?
+ $part_pkg_taxproduct->part_pkg_taxrate($geocode);