diff options
author | Mark Wells <mark@freeside.biz> | 2015-04-01 13:07:01 -0500 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2015-04-01 13:07:01 -0500 |
commit | 7badb86e945f91ea4e18c8f52054d30404a43f86 (patch) | |
tree | ed2df4fdb3ebdbe722fe5cf84b697d3117c315f3 /FS/FS/TaxEngine.pm | |
parent | 76d6fe17d02b77301619065ad43d7300432e977c (diff) |
fix post-consolidation linking of tax on tax records, should be the last piece of #34223
Diffstat (limited to 'FS/FS/TaxEngine.pm')
-rw-r--r-- | FS/FS/TaxEngine.pm | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/FS/FS/TaxEngine.pm b/FS/FS/TaxEngine.pm index 0972fb7..54e305f 100644 --- a/FS/FS/TaxEngine.pm +++ b/FS/FS/TaxEngine.pm @@ -160,19 +160,27 @@ sub consolidate_taxlines { my %tax_amount; my $link_table = $self->info->{link_table}; + + # Preconstruct cust_bill_pkg objects that will become the "final" + # taxlines for each name, so that we can reference them. + # (keys are taxnames) + my %real_taxline_named = map { + $_ => FS::cust_bill_pkg->new({ + 'pkgnum' => 0, + 'recur' => 0, + 'sdate' => '', + 'edate' => '', + 'itemdesc' => $_ + }) + } keys %taxname; + # For each distinct tax name (the values set as $taxline->itemdesc), # create a consolidated tax item with the total amount and all the links # of all tax items that share that name. foreach my $taxname ( keys %taxname ) { my @tax_links; - my $tax_cust_bill_pkg = FS::cust_bill_pkg->new({ - 'pkgnum' => 0, - 'recur' => 0, - 'sdate' => '', - 'edate' => '', - 'itemdesc' => $taxname, - $link_table => \@tax_links, - }); + my $tax_cust_bill_pkg = $real_taxline_named{$taxname}; + $tax_cust_bill_pkg->set( $link_table => \@tax_links ); my $tax_total = 0; warn "adding $taxname\n" if $DEBUG > 1; @@ -183,6 +191,16 @@ sub consolidate_taxlines { $tax_total += $taxitem->setup; foreach my $link ( @{ $taxitem->get($link_table) } ) { $link->set('tax_cust_bill_pkg', $tax_cust_bill_pkg); + + # if the link represents tax on tax, also fix its taxable pointer + # to point to the "final" taxline + my $taxable_cust_bill_pkg = $link->get('taxable_cust_bill_pkg'); + if (my $other_taxname = $taxable_cust_bill_pkg->itemdesc) { + $link->set('taxable_cust_bill_pkg', + $real_taxline_named{$other_taxname} + ); + } + push @tax_links, $link; } } # foreach $taxitem |