X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2FFS%2FTaxEngine%2Finternal.pm;h=a9b32d13332042098fff89ff52791690fba2fcc1;hb=c5dd9bdf09dff2b5cc6d9a9681894664fe5147ef;hp=4ca1ea8b68fc79f41a1d38db7059c3c7a70b939b;hpb=72b59219418476ef2fa42dac5456d736b76f5810;p=freeside.git diff --git a/FS/FS/TaxEngine/internal.pm b/FS/FS/TaxEngine/internal.pm index 4ca1ea8b6..a9b32d133 100644 --- a/FS/FS/TaxEngine/internal.pm +++ b/FS/FS/TaxEngine/internal.pm @@ -244,6 +244,7 @@ sub taxline { year => $year, month => $mon, }); + $taxable_charged -= $addl; } # if they're using multiple months of exemption for a multi-month @@ -257,10 +258,25 @@ 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) { + + $ex->set('taxnum', $taxnum); + + 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);