summaryrefslogtreecommitdiff
path: root/FS/FS/TaxEngine
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2015-04-20 00:48:29 -0700
committerMark Wells <mark@freeside.biz>2015-04-20 09:43:00 -0700
commitf2cf5c2843dcef5db0941a1673538eb922fd5a5a (patch)
treeff0e5589d123c9d2dbea27da31f4f3475a7e1d83 /FS/FS/TaxEngine
parent94f12d554f6f1038d63283a0962d726e2725773a (diff)
add Avalara tax status field to prospects, #25718
Diffstat (limited to 'FS/FS/TaxEngine')
-rw-r--r--FS/FS/TaxEngine/avalara.pm18
1 files changed, 11 insertions, 7 deletions
diff --git a/FS/FS/TaxEngine/avalara.pm b/FS/FS/TaxEngine/avalara.pm
index 183555d..d4a2360 100644
--- a/FS/FS/TaxEngine/avalara.pm
+++ b/FS/FS/TaxEngine/avalara.pm
@@ -11,7 +11,7 @@ use FS::tax_rate;
use JSON;
use Geo::StreetAddress::US;
-our $DEBUG = 2;
+our $DEBUG = 0;
our $json = JSON->new->pretty(1);
our $conf;
@@ -29,10 +29,6 @@ FS::UID->install_callback( sub {
#}
# Avalara address standardization would be nice but isn't necessary
-# XXX this is just here to avoid reworking the framework right now. By the
-# 4.0 release, ALL tax calculations should be done after the invoice has
-# been inserted into the database.
-
# nothing to do here
sub add_sale {}
@@ -85,6 +81,8 @@ sub build_request {
};
push @lines, $line;
}
+ # don't make the request unless there are some eligible line items
+ return '' if !@lines;
# assemble address records for any cust_locations we used here, plus
# the company address
@@ -141,6 +139,7 @@ sub build_request {
# create the top level object
my $date = DateTime->from_epoch(epoch => $self->{invoice_time});
+ my $doctype = $self->{estimate} ? 'SalesOrder' : 'SalesInvoice';
return {
'CustomerCode' => $cust_main->custnum,
'DocDate' => $date->strftime('%Y-%m-%d'),
@@ -149,7 +148,7 @@ sub build_request {
'DocCode' => $cust_bill->invnum,
'DetailLevel' => 'Tax',
'Commit' => 'false',
- 'DocType' => 'SalesInvoice', # ???
+ 'DocType' => $doctype,
'CustomerUsageType' => $cust_main->taxstatus,
# ExemptionNo, Discount, TaxOverride, PurchaseOrderNo,
'Addresses' => \@addrs,
@@ -196,6 +195,10 @@ account number, and license key.
# assemble the request hash
my $request = $self->build_request;
+ if (!$request) {
+ warn "no tax-eligible items on this invoice\n" if $DEBUG;
+ return [];
+ }
warn "sending Avalara tax request\n" if $DEBUG;
my $request_json = $json->encode($request);
@@ -247,6 +250,7 @@ account number, and license key.
my $error = $tax_rate->find_or_insert;
return "error inserting tax_rate record for '$taxname': $error\n"
if $error;
+ $tax_rate = $tax_rate->replace_old; # get its taxnum if there wasn't one
# create a tax_rate_location record
my $tax_rate_location = FS::tax_rate_location->new({
@@ -266,7 +270,7 @@ account number, and license key.
# create a link record
my $tax_link = FS::cust_bill_pkg_tax_rate_location->new({
- cust_bill_pkg => $tax_item,
+ tax_cust_bill_pkg => $tax_item,
taxtype => 'FS::tax_rate',
taxnum => $tax_rate->taxnum,
taxratelocationnum => $tax_rate_location->taxratelocationnum,