summaryrefslogtreecommitdiff
path: root/FS/FS/TaxEngine.pm
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2015-04-01 13:07:01 -0500
committerMark Wells <mark@freeside.biz>2015-04-01 13:07:01 -0500
commit7badb86e945f91ea4e18c8f52054d30404a43f86 (patch)
treeed2df4fdb3ebdbe722fe5cf84b697d3117c315f3 /FS/FS/TaxEngine.pm
parent76d6fe17d02b77301619065ad43d7300432e977c (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.pm34
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