X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FTaxEngine%2Finternal.pm;h=f45bc08016924985f8742969b5dce2ad207d6c82;hb=32eacfe9022ab9edb6fd986618ac2d3949fc7dcd;hp=60f7aad27fe09c7692e4086b6d0710c76befd65a;hpb=7516e3da0f17eeecba27219ef96a8b5f46af2083;p=freeside.git diff --git a/FS/FS/TaxEngine/internal.pm b/FS/FS/TaxEngine/internal.pm index 60f7aad27..f45bc0801 100644 --- a/FS/FS/TaxEngine/internal.pm +++ b/FS/FS/TaxEngine/internal.pm @@ -15,18 +15,17 @@ my %part_pkg_cache; sub add_sale { my ($self, $cust_bill_pkg) = @_; - my $cust_pkg = $cust_bill_pkg->cust_pkg; - my $pkgpart = $cust_bill_pkg->pkgpart_override || $cust_pkg->pkgpart; - my $part_pkg = $part_pkg_cache{$pkgpart} ||= FS::part_pkg->by_key($pkgpart) - or die "pkgpart $pkgpart not found"; - push @{ $self->{items} }, $cust_bill_pkg; - my $location = $cust_pkg->tax_location; # cacheable? + my $part_item = $cust_bill_pkg->part_X; + my $location = $cust_bill_pkg->tax_location; + my $custnum = $self->{cust_main}->custnum; + + push @{ $self->{items} }, $cust_bill_pkg; my @loc_keys = qw( district city county state country ); my %taxhash = map { $_ => $location->get($_) } @loc_keys; - $taxhash{'taxclass'} = $part_pkg->taxclass; + $taxhash{'taxclass'} = $part_item->taxclass; my @taxes = (); # entries are cust_main_county objects my %taxhash_elim = %taxhash; @@ -46,9 +45,10 @@ sub add_sale { $taxhash_elim{ shift(@elim) } = ''; } while ( !scalar(@taxes) && scalar(@elim) ); - foreach (@taxes) { - my $taxnum = $_->taxnum; - $self->{taxes}->{$taxnum} ||= [ $_ ]; + foreach my $tax (@taxes) { + my $taxnum = $tax->taxnum; + $self->{taxes}->{$taxnum} ||= [ $tax ]; + $cust_bill_pkg->set_exemptions( $tax, 'custnum' => $custnum ); push @{ $self->{taxes}->{$taxnum} }, $cust_bill_pkg; } } @@ -60,7 +60,6 @@ sub taxline { my $taxnum = $tax_object->taxnum; my $exemptions = $self->{exemptions}->{$taxnum} ||= []; - my $name = $tax_object->taxname || 'Tax'; my $taxable_cents = 0; my $tax_cents = 0; @@ -87,14 +86,7 @@ sub taxline { push @existing_exemptions, @{ $_->cust_tax_exempt_pkg } foreach @$taxables; - my $tax_item = FS::cust_bill_pkg->new({ - 'pkgnum' => 0, - 'recur' => 0, - 'sdate' => '', - 'edate' => '', - 'itemdesc' => $name, - }); - my @tax_location; + my @tax_links; foreach my $cust_bill_pkg (@$taxables) { @@ -274,9 +266,8 @@ sub taxline { 'pkgnum' => $cust_bill_pkg->pkgnum, 'locationnum' => $cust_bill_pkg->cust_pkg->tax_locationnum, 'taxable_cust_bill_pkg' => $cust_bill_pkg, - 'tax_cust_bill_pkg' => $tax_item, }); - push @tax_location, $location; + push @tax_links, $location; $taxable_cents += $taxable_charged; $tax_cents += $this_tax_cents; @@ -292,7 +283,7 @@ sub taxline { } $tax_cents += $extra_cents; my $i = 0; - foreach (@tax_location) { # can never require more than a single pass, yes? + foreach (@tax_links) { # can never require more than a single pass, yes? my $cents = $_->get('cents'); if ( $extra_cents > 0 ) { $cents++; @@ -300,10 +291,8 @@ sub taxline { } $_->set('amount', sprintf('%.2f', $cents/100)); } - $tax_item->set('setup' => sprintf('%.2f', $tax_cents / 100)); - $tax_item->set('cust_bill_pkg_tax_location', \@tax_location); - return $tax_item; + return @tax_links; } sub info {