diff options
author | Mark Wells <mark@freeside.biz> | 2016-01-29 17:12:07 -0800 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2016-01-30 20:12:01 -0800 |
commit | 981723fc428056c4b64bc9bb44f5e13d304c4b5c (patch) | |
tree | 4293ee2b178dd8f8afc82c28aa8bfa4dd5848f75 /FS/FS/TaxEngine/internal.pm | |
parent | 0ef2dee417147582084f925bc5d62cf13d41801d (diff) |
fix internal handling of monthly tax exemptions, from #34223
Diffstat (limited to 'FS/FS/TaxEngine/internal.pm')
-rw-r--r-- | FS/FS/TaxEngine/internal.pm | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/FS/FS/TaxEngine/internal.pm b/FS/FS/TaxEngine/internal.pm index 4ca1ea8..91b547c 100644 --- a/FS/FS/TaxEngine/internal.pm +++ b/FS/FS/TaxEngine/internal.pm @@ -243,7 +243,9 @@ sub taxline { exempt_monthly => 'Y', year => $year, month => $mon, + taxnum => $tax_object->taxnum, }); + $taxable_charged -= $addl; } # if they're using multiple months of exemption for a multi-month @@ -257,10 +259,23 @@ sub taxline { } } # if exempt_amount - $_->taxnum($tax_object->taxnum) foreach @new_exemptions; - # attach them to the line item - push @{ $cust_bill_pkg->cust_tax_exempt_pkg }, @new_exemptions; + foreach my $ex (@new_exemptions) { + + if ( $cust_bill_pkg->billpkgnum ) { + # the exempted item is already inserted (it should be, these days) so + # insert the exemption record now: + $ex->set('billpkgnum', $cust_bill_pkg->billpkgnum); + my $error = $ex->insert; + return "inserting tax exemption record: $error" if $error; + + } else { + # defer it until the item is inserted + push @{ $cust_bill_pkg->cust_tax_exempt_pkg }, $ex; + } + } + + # and remember we've used the exemption push @existing_exemptions, @new_exemptions; $taxable_charged = sprintf( "%.2f", $taxable_charged); |